تحلیل کتابخانه موقعیت یاب GPS

تحلیل و بررسی کتابخانه TinyGPS++.h

نوشته شده توسط معین صابری

ماژول های GPS یکی از ابزارهای کاربردی در تعیین موقعیت، سرعت، ساعت و تاریخ هستند. این ماژول ها با برقراری ارتباط با ماهواره ها، داده ها را دریافت میکنند. داده های دریافتی پس از پردازش، تحت استاندارد NMEA به کاربر ارسال می شوند. ماژول های GPS معمولا از پورت سریال UART جهت تبادل داده استفاده می کنند. همانطور که گفته شد، ماژول های GPS داده های خود را تحت استاندارد NMEA ارسال می کنند. این عبارت مخفف National Marine Electronic Association بوده و توسط نیروی دریایی ایالات متحده تعریف شده است.  برای راه اندازی و کار با این ماژول ها کتابخانه های مختلفی توسعه یافته اند. کتابخانه ++TinyGps یکی از کتابخانه های مفید و کاربردی جهت ارتباط با ماژول های GPS است. در این آموزش به بررسی تولبع کلیدی این کتابخانه و نحوه استفاده از آن می پردازیم. در ادامه با مرجع تخصصی آردوینو به زبان فارسی ، دیجی اسپارک همراه باشید.


نحوه نصب کتابخانه ++TinyGps


اولین قدم در استفاده از یک کتابخانه، نصب آن است. برای نصب یک کتابخانه در آردوینو، می توان به صورت دستی و خودکار(از مخازن آردوینو) اقدام نمود. ما در اینجا از روش خودکار و با استفاده از نرم افزار آردوینو، به نصب کتابخانه ++TnyGps می پردازیم. برای این مورد، ابتدا در محیط نرم افزار آردوینو، بر روی گزینه Tools و سپس Manage Libraries مطابق فلش های تصویر کلیک کنید.

 

پس از کلیک بر روی گزینه Manage Libraries، با تصویر زیر رو به رو می شوید. این منو کتابخانه های در دسترس را به شما نمایش می دهد.

 

در تصویر فوق کادر جستجوی کتابخانه ها با فلش قرمز رنگ مشخص شده است. در این کادر عبارت ++TnyGps را تایپ کنید. در مرحله بعدی، با تصویر زیر رو به رو خواهید شد. با کلیک بر روی گزینه install این کتابخانه را می توانید نصب کنید.

 


بردها و ماژول های سازگار با کتابخانه ++TinyGps


کتابخانه ++TinyGps از سریال نرم افزاری وسخت افزاری جهت ارتباط با ماژول های GPS استفاده می کند. این کتابخانه در بردهای آردوینو UNO و MEGA تست و اجرا شده است. بنابراین، انتظار می رود که این کتابخانه در سایر بردهای آردوینو و ماژول های ESP قابلیت راه اندازی داشته باشد.

gps neo6 module arduino tutorial-digispark

 

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

 


توابع کلیدی کتابخانه ++TnyGps


در این قسمت به بررسی توابع کلیدی و کاربردی کتابخانه ++TinyGps می پردازیم. ذکر این نکته ضروی است که در توابع، ورودی ها از چپ به راست، به ترتیب از عدد یک، شماره گذاری می شوند. به عنوان مثال، منظور از ورودی شماره یک، اولین ورودی در سمت چپ تابع است. به همین ترتیب، ورودی دوم از سمت چپ ورودی شماره دو و… خواهد بود. کتابخانه ++TinyGps از چندین قسمت تشکیل شده است. درون این کتابخانه، برای قسمت های مختلف نظیر موقعیت، زمان، تاریخ و ارتفاع یک ساختمان(struct) تعریف شده است. تصویر زیر، توابع مربوط به بخش موقعیت را نشان می دهد.

 

در ادامه، توابع مربوط به بخش(struct) سرعت را مشاهده می کنید.

 

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

 

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

 

در نهایت، به کمک توابع مربوط به بخش altitude، ارتفاع را محاسبه می کنیم.

 

در نهایت توابع زیر، توابع کلی این کتابخانه بوده و مستقل از هر بخش(struct) می توانند فراخوانی شوند.

 


اجرای یک برنامه نمونه


در این قسمت یک نمونه کد برنامه را مشاهده می کنید. در این برنامه از توابع کاربردی جهت دریافت اطلاعات مربوط به موقعیت جغرافیایی استفاده شده است. در نظر داشته باشید که ساختمان های مختلف نظیر موقعیت، ارتفاع و… با نام های زیر تعریف می شوند.

location: موقعیت

altitude: ارتفاع

time: زمان

date: تاریخ

speed: سرعت

در ادامه، یک برنامه نمونه را جهت دریافت و نمایش داده های GPS، مشاهده می کنید.

#include <TinyGPS++.h> //اضافه کردن کتابخانه GPS
#include <SoftwareSerial.h>  //اضافه کردن کتابخانه سریال نرم افزاری جهت ارتباط با ماژل GPS
static const int RXPin = 10, TXPin = 11;   //انتخاب پایه های RX و TX
static const uint32_t GPSBaud = 9600;   //باودریت ارتباط با ماژول GPS، توجه: در ماژول NEO6M، پیشفرض ۹۶۰۰ است.
TinyGPSPlus gps;  //ایجاد یک شی از کلاس GPS
SoftwareSerial ss(RXPin, TXPin);
//***************************************************************************
void setup() {
  Serial.begin(9600);
  ss.begin(GPSBaud);
}
//************************************************
void loop() {
  String data = "";
  data = String(gps.location.lat(), 6);  //دریافت عرض جغرافیایی با ۶ رقم دقت
  data = data + ",";
  data = data + String(gps.location.lng(), 6);  //دریافت طول جغرافیایی با ۶ رقم دقت
  data = data + ",";
  data = data + String(gps.altitude.meters());  //دریافت ارتفاع با ۶ رقم دقت
  data = data + ",";
  data = data + String(gps.speed.kmph());//دریافت سرعت
  data = data + ",";
  data = data + String(gps.date.year());  //دریافت سال
  data = data + ",";
  data = data + String(gps.date.month());  //دریافت ماه
  data = data + ",";
  data = data + String(gps.date.day());  //دریافت روز
  data = data + ",";
  data = data + String(gps.time.hour());  //دریافت ساعت
  data = data + ",";
  data = data + String(gps.time.minute());  //دریافت دقیقه
  data=data+",";
  data = data + String (gps.time.second());  //دریافت ثانیه
  smartDelay(500);  //ایجاد تاخیر جهت خواندن داده های دریافتی از ماژول GPS در بافر سریال این تاخیر را معمولا برای ۵۰۰ میلی ثانیه، بهینه و مناسب است.
  Serial.print(data);
  Serial.flush();

}
static void smartDelay(unsigned long ms)
{
  unsigned long start_ = millis();
  do
  {
    while (ss.available())
      gps.encode(ss.read());//خواندن و کدگشایی داده های دریافتی از GPS
  } while (millis() - start_ < ms);
}

 


قطعات سازگار با کتابخانه


انواع ماژول GPS 

انواع برد آردوینو


جمع بندی


در این آموزش به بررسی یکی از کتابخانه های کاربردی GPS پرداختیم. کتابخانه ++TinyGps، یک کتابخانه همه منظوره جهت راه اندازی و کار با ماژول های GPS به شمار می رود. این کتابخانه دارای توابع کامل و زیادی جهت دریافت آسان و سریع داده ها از ماژول های GPS است. به کمک این کتابخانه می توان انوع مختلفی از ماژول های GPS را راه اندازی نمود. به عبارت دیگر، این کتابخانه محدود به ماژول GPS خاصی نیست. از طرفی دیگر، از این کتابخانه به سادگی در بردهای آردوینو UNO و MEGA می توان استفاده کرد. در این آموزش به بررسی نحوه نصب این آموزش و شرح توابع کلیدی آن پرداخته می شود. در نهایت با ارائه یک مثال، چگونگی استفاده از توابع را در یک برنامه، مشاهده می کنیم.

 

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

 

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

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه

۲ دیدگاه

  • سلام مطالبتون کامل و بی نقص بود سپاس گزارم
    یک سوال داشتم ازتون ایا شتاب هم میتوانیم وارد کنیم

    • سلام و متشکرم از شما
      برای محاسبه شتاب کافیست از رابطه زیر برای شتاب متوسط استفاده کنید:
      a=(vf-vi)/t
      در رابطه فوق عبارت vf به عنوان سرعت ثانویه، عبارت vi به عنوان سرعت اولیه و t مدت زمانیست که متحرک از vi به vf رسیده است.