آموزش آردوینوپروژه های آردوینو

آموزش مکان یاب GPS NEO-6M با برد آردوینو

در این مقاله نحوه استفاده از ماژول GPS NEO-6M را با آردوینو برای دریافت داده های GPS یاد میگیرید. GPS مخفف سیستم موقعیت یاب جهانی است و می تواند برای تعیین موقعیت، زمان و سرعت استفاده شود.

شما یاد خواهید گرفت که چگونه:

  • ماژول GPS NEO-6M را به Arduino UNO متصل کنید
  • داده های خام GPS را دریافت کنید
  • تجزیه و تحلیل داده های GPS
  • پیدا کردن مکان

معرفی ماژول GPS NEO-6M

ماژول GPS NEO-6M در شکل زیر نشان داده شده است. دارای آنتن خارجی است و پین هدر ندارد. بنابراین، باید پین هدر را تهیه و لحیم کنید.

معرفی ماژول GPS NEO-6M

  • این ماژول دارای آنتن خارجی و EEPROM داخلی است.
  • رابط: RS232 TTL
  • منبع تغذیه: 3 تا 5 ولت
  • بادریت پیش فرض: 9600 bps
  • با جملات استاندارد NMEA کار می کند

ماژول GPS NEO-6M با سایر برد های میکروکنترلر نیز سازگار است. به عنوان مثال: اتصال ماژول NEO-6M GPS به ESP32

اتصالات

ماژول GPS NEO-6M دارای چهار پین است: VCC، RX، TX و GND. ماژول از طریق ارتباط سریال با استفاده از پین های TX و RX با آردوینو ارتباط برقرار می کند، بنابراین سیم کشی بسیار ساده است. از جدول زیر کمک بگیرید:

NEO-6M GPS برد آردوینو Uno
VCC 5V
RX پین TX تعریف شده
TX پین RX تعریف شده
GND GND

دریافت اطلاعات خام GPS NEO-6M

برای دریافت داده‌های خام جی‌پی‌اس، فقط باید یک ارتباط سریالی با ماژول GPS با استفاده از کتابخانه سریال شروع کنید. برای دیدن نحوه انجام این کار به خواندن ادامه دهید.

قطعات مورد نیاز

برای آزمایش این مثال به قطعه های زیر نیاز دارید:

  • آردوینو
  • ماژول GPS NEO-6M
  • سیم های جامپر
  • برد بورد
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

ماژول GPS NEO-6M را با دنبال کردن شماتیک زیر به آردوینو خود متصل کنید.

دریافت اطلاعات خام GPS NEO-6M

  • پایه GND به پین ​​GND آردوینو متصل است
    پایه RX به پایه 3 آردوینو متصل است
    پایه TX به پایه 4 آردوینو متصل است
    پایه VCC به پایه 5 ولت آردوینو متصل است

کد آردوینو دریافت داده های GPS خام

کد زیر را در آردوینو IDE خود کپی کرده و در برد آردوینو خود آپلود کنید.

#include <SoftwareSerial.h>

SoftwareSerial ss(4, 3);

void setup(){
  Serial.begin(9600);
  ss.begin(9600);
}

void loop(){
  while (ss.available() > 0){
    // get the byte data from the GPS
    byte gpsData = ss.read();
    Serial.write(gpsData);
  }
}

این کد فرض می کند که شما از پین 4 و پایه 3 به عنوان پین های سریال RX و TX برای برقراری ارتباط سریال با ماژول GPS استفاده می کنید. اگر از پین های دیگری استفاده می کنید، باید آن را در خط زیر ویرایش کنید:

SoftwareSerial ss(4, 3);

همچنین، اگر ماژول شما از نرخ باود پیش‌فرض متفاوت از 9600 bps استفاده می‌کند، باید کد را در خط زیر تغییر دهید:

ss.begin(9600);

این طرح به پورت سریال GPS گوش می دهد و هنگامی که داده ها از ماژول دریافت می شود، به مانیتور سریال ارسال می شود.

while (ss.available() > 0){
  // دریافت داده های GPS
  byte gpsData = ss.read();
  Serial.write(gpsData);
}

کد را در برد خود آپلود کننید و سپس مانیتور سریال را با نرخ باود 9600 باز کنید.

شما باید مجموعه ای از اطلاعات را به زبان استاندارد GPS، که NMEA است دریافت کنید. هر خطی که در مانیتور سریال دریافت می کنید یک جمله NMEA است.

دریافت جملات NMEA GPS

NMEA مخفف National Marine Electronics Association است و در دنیای GPS، فرمت استاندارد داده ای است که توسط سازندگان GPS پشتیبانی می شود.

درک جملات NMEA

جملات NMEA با کاراکتر $ شروع می شوند و هر فیلد داده با کاما از هم جدا می شود.

$GPGGA,110617.00,41XX.XXXXX,N,00831.54761,W,1,05,2.68,129.0,M,50.1,M,,*42
$GPGSA,A,3,06,09,30,07,23,,,,,,,,4.43,2.68,3.53*02
$GPGSV,3,1,11,02,48,298,24,03,05,101,24,05,17,292,20,06,71,227,30*7C
$GPGSV,3,2,11,07,47,138,33,09,64,044,28,17,01,199,,19,13,214,*7C
$GPGSV,3,3,11,23,29,054,29,29,01,335,,30,29,167,33*4E
$GPGLL,41XX.XXXXX,N,00831.54761,W,110617.00,A,A*70
$GPRMC,110618.00,A,41XX.XXXXX,N,00831.54753,W,0.078,,030118,,,A*6A 
$GPVTG,,T,,M,0.043,N,0.080,K,A*2C

جملات NMEA انواع مختلفی دارند. نوع پیام با کاراکترهای قبل از اولین کاما نشان داده می شود.

GP بعد از $ نشان می دهد که موقعیت GPS است. $GPGGA پیام اصلی GPS NMEA است که داده های موقعیت و دقت سه بعدی را ارائه می دهد. در جمله زیر:

$GPGGA,110617.00,41XX.XXXXX,N,00831.54761,W,1,05,2.68,129.0,M,50.1,M,,*42
  • 110617 – نشان‌دهنده زمانی است که مکان ثابت گرفته شده است، 11:06:17 UTC
  • 41XX.XXXXX,N – عرض جغرافیایی 41 درجه XX.XXXXX’N
  • 00831.54761، ​​W – طول جغرافیایی 008 درجه 31.54761′ W
  • 1 – کیفیت تعمیر (0 = نامعتبر؛ 1 = رفع GPS؛ 2 = رفع DGPS؛ 3 = رفع PPS؛ 4 = سینماتیک زمان واقعی؛ 5 = شناور RTK و 6 = تخمین زده شده؛ 7 = حالت ورودی دستی؛ 8 = حالت شبیه سازی)
  • 05 – تعداد ماهواره ها
  • 2.68 – رقیق سازی افقی موقعیت
  • 129.0، M – ارتفاع، بر حسب متر از سطح دریا
  • 50.1، M – ارتفاع ژئوئید (میانگین سطح دریا) بالاتر از بیضی WGS84
  • فیلد خالی – زمان بر حسب ثانیه از آخرین به‌روزرسانی DGPS
  • فیلد خالی – شماره شناسه ایستگاه DGPS
  • *42 – داده‌های جمع‌بندی بررسی، همیشه با * شروع می‌شود

سایر جملات NMEA اطلاعات اضافی را ارائه می دهند:

  • $GPGSA – GPS DOP و ماهواره های فعال
  • $GPGSV – اطلاعات دقیق ماهواره GPS
  • $GPGLL – طول و عرض جغرافیایی
  • $GPRMC – داده های ضروری GPS Pvt (موقعیت، سرعت، زمان).
  • $GPVTG – سرعت

تجزیه جملات NMEA با کتابخانه TinyGPS++ آردوینو

می‌توانید با داده‌های خام GPS کار کنید، یا می‌توانید آن پیام‌های NMEA را با ذخیره کردن توالی کاراکترها در متغیرها به قالبی قابل خواندن و مفید تبدیل کنید. برای انجام این کار، ما از کتابخانه TinyGPS++ استفاده می کنیم.

این کتابخانه دریافت اطلاعات در مورد مکان را در قالبی که مفید و قابل درک است ساده می کند.

نصب کتابخانه TinyGPS++

در Arduino IDE، به Sketch > Include Library > Manage Libraries بروید یا روی نماد Libary Manager در نوار کناری سمت چپ کلیک کنید.

TinyGPSPlus را جستجو کنید و کتابخانه را توسط Mikal Hart نصب کنید.

این کتابخانه چندین مثال از نحوه استفاده از آن ارائه می دهد. در Arduino IDE خود، فقط باید به File > Examples > TinyGPS++ بروید و از نمونه های ارائه شده انتخاب کنید.

توجه: نمونه های ارائه شده در کتابخانه نرخ باود 4800 را برای ماژول GPS در نظر گرفته اند. اگر از ماژول GPS NEO-6M استفاده می کنید، باید آن را به 9600 تغییر دهید.

دریافت موقعیت مکانی با GPS NEO-6M و TinyGPS++

با استفاده از کتابخانه TinyGPS++ می توانید مکان را در قالبی مناسب و مفید دریافت کنید. در زیر کدی برای دریافت موقعیت مکانی از GPS ارائه می دهیم. این یک نسخه ساده شده از یکی از نمونه های کتابخانه است.

static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;

// شیئ کتابخانه
TinyGPSPlus gps;

// ارتباط سریال با ماژول جی پی اس
SoftwareSerial ss(RXPin, TXPin);

void setup(){
  Serial.begin(9600);
  ss.begin(GPSBaud);
}

void loop(){
  // دریافت اطلاعات و نمایش آنها در سریال مانیتور
  while (ss.available() > 0){
    gps.encode(ss.read());
    if (gps.location.isUpdated()){
      Serial.print("Latitude= "); 
      Serial.print(gps.location.lat(), 6);
      Serial.print(" Longitude= "); 
      Serial.println(gps.location.lng(), 6);
    }
  }
}

کد بالا در زیر به صورت قسمت به قسمت توضیح داده شده است.

مطلب پیشنهادی:  ساخت دماسنج بدون تماس با آردوینو (مخصوص کرونا و ثبت در اکسل)

شما با وارد کردن کتابخانه های مورد نیاز شروع می کنید: TinyGPSPlus و SoftwareSerial

#include <TinyGPS++.h>
#include <SoftwareSerial.h>

سپس پین های سریال RX و TX نرم افزار و همچنین نرخ باود GPS را تعریف می کنید. اگر از پین های دیگری برای سریال نرم افزار استفاده می کنید، باید آن را در اینجا تغییر دهید. همچنین، اگر ماژول GPS شما از نرخ باود پیش‌فرض متفاوتی استفاده می‌کند، باید آن را نیز تغییر دهید.

static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;

سپس، یک شی TinyGPS++ ایجاد می کنید:

TinyGPSPlus gps;

و یک اتصال سریال را روی پین هایی که قبلاً تعریف کرده اید شروع کنید

SoftwareSerial ss(RXPin, TXPin);

در setup()، شما ارتباط سریال را راه اندازی می کنید، هم برای دیدن خوانش ها در مانیتور سریال و هم برای برقراری ارتباط با ماژول GPS.

void setup() { 
Serial.begin(9600); 
ss.begin(GPSBaud); 
}

در loop جایی است که شما اطلاعات را درخواست می کنید. برای اینکه TinyGPS++ کار کند، باید بارها و بارها با استفاده از روش ()encode کاراکترها را از ماژول GPS به آن منتقل کنید.

while (ss.available() > 0){ 
gps.encode(ss.read());

سپس، می توانید از شی gps استفاده کنید تا ببینید آیا فیلدهای داده به روز شده است یا خیر:

if (gps.location.isUpdated()){ 
Serial.print("Latitude="); 
Serial.print(gps.location.lat(), 6); 
Serial.print("Longitude="); 
Serial.println(gps.location.lng(), 6); 
}

گرفتن طول و عرض جغرافیایی به ترتیب با استفاده از gps.location.lat() و gps.location.lng() ساده است.

کد را در آردوینو خود آپلود کنید و باید مکان نمایش داده شده در مانیتور سریال را ببینید. پس از آپلود کد، چند دقیقه صبر کنید تا ماژول موقعیت را تنظیم کند تا داده های دقیق تری دریافت کنید.

دریافت اطلاعات GPS با کتابخانه TinyGPS++

کتابخانه TinyGPS++ به شما این امکان را می‌دهد که اطلاعات بیشتری نسبت به مکان و به روشی ساده دریافت کنید. علاوه بر موقعیت مکانی، می توانید موارد زیر را دریافت کنید:

  • تاریخ
  • زمان
  • سرعت
  • ارتفاع
  • ماهواره ها
  • و…

کد کامل برای دریافت تمامی اطلاعات GPS در فایل دانلودی قرار داده شده است. امیدواریم این راهنما برای شما مفید بوده باشد.

موارد موجود در فایل : سورس کامل

5 (3 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

برای ارسال تصاویر از انجمن سایت استفاده کنید.

سوالات فنی را در انجمن سایت مطرح کنید تا در مسابقه شرکت کنید. ورود به انجمن

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *