موقعیت یاب GPS

راه اندازی و کار با ماژول GPS مدل NEO6M: بخش چهارم GPGSV

gps-neo6m-tutorial-step-four-gpgsv
نوشته شده توسط معین صابری

در قسمت چهارم از سلسله آموزش های ماژول GPS، به دیگر پکت مهم و کاربردی ماژول GPS، GPGSV می پردازیم. به کمک این پکت می توانیم اطلاعات جغرافیایی بسیار مهم و اطلاعات ارزشمندی در رابطه با ماهواره ها به دست آوریم. این پکت اطلاعاتی مثل ارتفاع(به صورت زاویه)، آزیموت، تعداد ماهواره های در دسترس، نام ID ماهواره متصل به آن و… را در اختیار قرار می دهد. در این آموزش به شرح پکت دریافتی و نحوه استخراج این پکت در برنامه های عملی می پردازیم. در ادامه با مرجع تخصصی ماژول GPS به زبان فارسی، دیجی اسپارک همراه باشید.

 


GPGSV و فیلدهای اطلاعاتی


همانطور که در قسمت های پیشین مشاهده کردید، ماژول GPS مدل NEO6M داده های خود را در استاندارد آمریکایی NMEA روی پورت سریال قرار می دهد. در قسمت پیشین به پکت GPRMC پرداختیم. همانطور که مشاهده شد، پکت GPRMC اطلاعات جغرافیایی نظیر طول، عرض و سرعت متغیر را در اختیار کاربر قرار می دهد. پکت GPGSV ارتفاع و اطلاعات مربوط به ماهواره را در خروجی قرار می دهد. به عنوان یک نمونه، این پکت به صورت زیر در خروجی دریافت می گردد.

$GPGSV,3,1,10,23,38,230,44,29,71,156,47,07,29,116,41,08,09,081,36*7F
توضیح مقدار فیلد
هدر(پیشوند) پکت GPGSV
این عدد بیان می کند که در خروجی چند پکت NMEA قرار می گیرد. ۳
این عدد بیان می کند که این پیام شماره چند بین پیام هاست. ۱
این عدد تعداد ماهواره در دسترس(قابل مشاهده توسط گیرنده) را نمایش می دهد. ۱۰
این عدد شماره ID ماهواره متصل را نمایش می دهد. ۲۳
این عدد ارتفاع را به صورت درجه نمایش می دهد. رنج این متغیر بین ۰ الی ۹۰ درجه است. ۳۸
این متغیر آزیموت را به درجه نمایش می دهد. رنج قابل قبول برای این متغیر ۰ الی ۳۵۹ درجه است. ۲۳۰
این مقدار میزان SNR(نسبت سیگنال به نویز) را بر حسب  dBHنمایش می دهد. این فیلد مقدار بین ۰  الی ۹۹ مقدار معتبر داشته و در غیر اینصورت NULL(خالی) خواهد بود. ۴۴
این عدد شماره ID ماهواره دوم که ماژول به آن  متصل است را نمایش می دهد. ۲۹
این عدد ارتفاع را از دید ماهواره دوم به صورت درجه نمایش می دهد. رنج این متغیر بین ۰ الی ۹۰ درجه است. ۷۱
این متغیر آزیموت را از دید ماهواره دوم به درجه نمایش می دهد. رنج قابل قبول برای این متغیر ۰ الی ۳۵۹ درجه است. ۱۵۶
این مقدار میزان SNR(نسبت سیگنال به نویز) را بر حسب  dBH نسبت به ماهواره دوم نمایش می دهد. این فیلد مقدار بین ۰  الی ۹۹ مقدار معتبر داشته و در غیر اینصورت NULL(خالی) خواهد بود. ۴۷
این عدد شماره ID ماهواره سوم که ماژول به آن  متصل است را نمایش می دهد. ۰۷
این عدد ارتفاع را از دید ماهواره سوم به صورت درجه نمایش می دهد. رنج این متغیر بین ۰ الی ۹۰ درجه است. ۲۹
این متغیر آزیموت را از دید ماهواره سوم به درجه نمایش می دهد. رنج قابل قبول برای این متغیر ۰ الی ۳۵۹ درجه است. ۱۱۶
این مقدار میزان SNR(نسبت سیگنال به نویز) را بر حسب  dBH نسبت به ماهواره سوم نمایش می دهد. این فیلد مقدار بین ۰  الی ۹۹ مقدار معتبر داشته و در غیر اینصورت NULL(خالی) خواهد بود. ۴۱
این عدد شماره ID ماهواره چهارم که ماژول به آن  متصل است را نمایش می دهد. ۰۸
این عدد ارتفاع را از دید ماهواره چهارم به صورت درجه نمایش می دهد. رنج این متغیر بین ۰ الی ۹۰ درجه است. ۰۹
این متغیر آزیموت را از دید ماهواره چهارم به درجه نمایش می دهد. رنج قابل قبول برای این متغیر ۰ الی ۳۵۹ درجه است. ۰۸۱
این مقدار میزان SNR(نسبت سیگنال به نویز) را بر حسب  dBH نسبت به ماهواره چهارم نمایش می دهد. این فیلد مقدار بین ۰  الی ۹۹ مقدار معتبر داشته و در غیر اینصورت NULL(خالی) خواهد بود. ۳۶
فیلد کنترل خطا(Chek Sum) ۷F

در نظر داشته باشید که ماژول GPS به چهار ماهواره جهت تبادل داده متصل می گردد. داده ها از دید ماهواره ها در جدول فوق لیست می شوند. پس از اینکه در این قسمت به معرفی پکت NMEA پرداختیم، در قسمت بعدی به اجرای یک نمونه برنامه می پردازیم. در اینجا مانند قسمت قبلی، کلیه پکت ها به غیر از GSV را فیلتر میکنیم تا بافر سبک گردد.

 


فیلتر کردن پکت های NMEA


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

$PUBX,40,GLL,0,0,0,0*5C
$PUBX,40,GSA,0,0,0,0*4E
$PUBX,40,RMC,0,0,0,0*47
$PUBX,40,VTG,0,0,0,0*5E
$PUBX,40,GGA,0,0,0,0*5A

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

 


نمونه برنامه جهت خواندن داده های GPGSV


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

#include <SoftwareSerial.h>
SoftwareSerial gps(8, 9);
void setup() {
  Serial.begin(115200);
  gps.begin(9600);
  Serial.println("PLEASE WAIT.....");
  delay(1000);
  //ارسال دستورات مربوط به غیر فعال سازی داده های GPS
  gps.print("$PUBX,40,GLL,0,0,0,0*5C\r\n");
  delay(1000);
  gps.print("$PUBX,40,GSA,0,0,0,0*4E\r\n");
  delay(1000);
  gps.print("$PUBX,40,RMC,0,0,0,0*47\r\n");
  delay(1000);
  gps.print("$PUBX,40,VTG,0,0,0,0*5E\r\n");
  delay(1000);
  gps.print("$PUBX,40,GGA,0,0,0,0*5A\r\n");
  delay(1000);
  gps.print("$PUBX,40,GSV,1,1,1,1*59\r\n");  //فعال سازی GSV، چراکه در مرحله قبل این پکت به خاطر RMC غیر فعال شده بود. تنظیمات در حافظه EEPROM ماژول قرار می گیرند.
  delay(1000);
  Serial.print("READY TO WORK");
  Serial.flush();

}

void loop() {
  String data = "";
  while (gps.available() > 0)   //تا زمیانیکه داده در بافر است، آن ها را به رشته اضافه کنیم.
    data.concat(char(gps.read()));
  Serial.print("DATA: ");
  Serial.flush();
  Serial.println(data);
  Serial.flush();
  delay(1000);
}

 

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

 


لوازم مورد نیاز


ماژول GPS مدل NEO6M

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

انواع برد ESP

میکروکنترلر ARM

میکروکنترلر AVR

 


جمع بندی


در سلسله آموزش های ماژول GPS قسمت چهارم به معرفی پکت GPGSV پرداختیم. پکت GPGSV یکی از پکت های بسیار مهم و کاربردی در استاندارد NMEA به شمار می رود. در این قسمت از سلسله آموزش، ضمن توضیح، تشریح و معرفی کاربردهای این پکت کلیدی، فیلدهای اطلاعاتی آن را که حاوی اطلاعات مهم و ارزشمند از ارتفاع، آزیموت و سایر اطلاعات در رابطه با ماهواره هاست، بررسی نمودیم. همچنین در ادامه، به طراحی یک برنامه تحت آردوینو جهت دریافت و مشاهده این پکت بر روی سریال مانیتور پرداختیم. با مطالعه این کدها و الگو برداری از آن، شما می تواند در پلتفرم های مختلف نظیر ARM و AVR نیز ارتباط با GPS را فراهم کرده و داده های آن را بخوانید.

 


دیگر آموزش‌های راه اندازی ماژول GPS


راه اندازی و کار با ماژول GPS مدل NEO6M: بخش اول معرفی

راه اندازی ماژول GPS مدل NEO6M: بخش دوم تغذیه و اتصال ماهواره

راه اندازی ماژول GPS مدل NEP6M: بخش سوم خواندن دیتای GPS GPRMC

راه اندازی و کار با ماژول GPS مدل NEO6M: قسمت پنجم پکت GPGGA

راه اندازی و کار با ماژول GPS مدل NEO6M: قسمت ششم پکت GSA

راه اندازی و کار با ماژول GPS مدل NEO6M: قسمت هفتم پکت GPVTG

راه اندازی ماژول GPS مدل NEO6M: قسمت هشتم نرم افزار UCENTER

راه اندازی و کار با ماژول GPS مدل NEO6M: قسمت نهم پروژه عملی

راه اندازی و کار با ماژول GPS شرکت U-BLOX: قسمت دهم مدل Neo8MN

کار با ماژول‌های GPS شرکت U-BLOX: قسمت یازدهم: راه اندازی Neo8MN

کار با ماژول‌های GPS شرکت U-BLOX: قسمت دوزادهم پروژه ردیاب با Neo8MN

 

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

 

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

معین صابری

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

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

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

۳ دیدگاه

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

    • سلام وقت بخیر
      دو سوال دارم
      ۱، برنامه ای که برای gps دادی برای arm چطور قابل اجرا است
      ۲، چطور کتابخانه ++tinyGPS را نصب کنیم که نیاز به کتابخانه های دیگر نداشته باشد و ارور ندهد