موقعیت یاب GPS

طراحی و توسعه کتابخانه جهت راه اندازی و کار با ماژول های GPS سری NEOxx

create-arduino-library-for-gps-neo-series-digispark
نوشته شده توسط معین صابری

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

یکی از ماژول های بسیار کاربردی در زمینه موقعیت یابی، ماژول NEO8MN ساخت شرکت U-BLOX است. این ماژول که از فناوری GNSS بهره می برد، از دقت و پایداری بسیار بالاتری نسبت به ماژول NEO6 برخوردار است. این ماژول تحت استاندارد NMEA، داده های خود را در خروجی سریال قرار می دهد. در این آموزش، به طراحی و توسعه یک کتابخانه کلیدی و کاربردی می پردازیم. به کمک این کتابخانه شما به سادگی می توانید طول، عرض و سرعت متحرک را بدست آورید. بدین ترتیب بدون نیاز به برنامه نویسی مجدد، این ماژول به شکلی ساده در دسترس قرار می گیرد. بنابراین، در ادامه آموزش کتابخانه gps_lib با مرجع تخصصی ماژول GPS به زبان فارسی، دیجی اسپارک همراه باشید.

 


ماژول موقعیت یاب NEO8MN


موقعیت یابی از دیرباز یکی از مهم ترین دغدغه های بشر بوده است. این موضوع به قدر حائز اهمیت بود که در ابتدا نیروی های نظامی به فکر ابداع و توسعه آن افتادند. سیستم موقعیت یابی جهانی یا به اختصار GPS،  اولین بار توسط نیروی دریایی ایالات متحده آمریکا اختراع شد. این سیستم که توسط نیروی دریایی این کشور ابداع شد، در ابتدا تنها کاربرد نظامی داشت. در دوران جنگ سرد بین دو ابر قدرت غرب و شرق، ایالات متحده آمریکا و اتحاد جماهیر شوروری، فدارسیون روسیه فعلی یا همان اتحاد جماهیر، اقدام به ایجاد و توسعه سیستم موقعیت یاب جهانی روسی یا به اختصار گلوناس(глонасс) نمود. بعدها پس از فروپاشی اتحاد جماهیر شوروی، سیستم موقعیت یاب جهانی از موضع نظامی خارج شد و در کابردهای تجاری مورد استفاده قرار گرفت.

ماژول موقعیت یاب NEO8MN - دیجی اسپارک

 

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

شناخت ماژول موقعیت یاب NEO8MN - دیجی اسپارک

 

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

ارتباط سریال مانیتور آردوینو در ماژول موقعیت یاب NEO8MN - دیجی اسپارک

 

در این آموزش اما ما قصد داریم تا راه اندازی و کار با این ماژول را تسهیل بخشیم. به همین منظور، اقدام به طراحی و توسعه کتابخانه تحت آردوینو برای این ماژول می نماییم. به کمک این کتابخانه که آن را gps_lib نام گذاری کرده ایم، در شکلی آسان و سریع قادر به دریافت طول و عرض جغرافیایی و همچنین سرعت متحرک خواهیم بود.  قسمت های بعد این آموزش را به این موضوعات اختصاص می دهیم.

 


دانلود و نصب کتابخانه gps_lib


پیش از بررسی توابع کلیدی و کاربردی، می بایست ابتدا کتابخانه را نصب کنیم. به همین منظور، ابتدا روی این لینک جهت دانلود فایل فشرده کتابخانه کلید کنید. پس از دانلود کتابخانه، می بایست آن را به نرم افزار آردوینو اضافه کنیم. برای این مورد، در نرم افزار آردوینو روی منوی sketch->include library->add zip file مطابق نصویر زیر کلیک کرده و کتابخانه را به نرم افزار اضافه کنید.

دانلود و نصب کتابخانه EasySevenSeg - دیجی اسپارک

 


الزامات و نکات فنی کتابخانه gps_lib


کتابخانه توسعه یافته در این آموزش که آن را gps_lib می نامیم، قادر به اجرای روی بردهای مبتنی بر میکروکنترلرهای ۸ بیتی AVR نظیر آردوینو UNO و بردهای ۳۲ بیتی مبتنی برا تراشه ESP است. این کتابخانه می تواند سه پارامتر را در خروجی به کاربر تحویل دهد.

  • طول جغرافیایی
  • عرض جغرافیایی
  • سرعت متحرک

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

 


توابع کلیدی و کاربردی کتابخانه gps_lib


پس از بررسی الزامات و نکات فنی کتابخانه، نوبت به بررسی توابع آن می رسد. در این کتابخانه، تابع begin نقش راه اندازی اولیه و ارتباط با ماژول گیرنده را بازی می کند.  پس از این مرحله، تابع parse_gprmc، وظیفه پردازش اطلاعات دریافتی از ماژول گیرنده را بر عهده دارد. این تابع سه ورودی از نوع float دریافت می کند. پس از پردازش، خروجی درون این ورودی ها قرار خواهد گرفت. جدول زیر این دو تابع را بهتر شرح می دهد.

راه اندازی ارتباط با ماژول گیرنده begin
ورودی ها از نوع اشاره گر

ورودی نخست: عرض جغرافیایی

ورودیم دوم: طول جغرافیایی

ورودی سوم: سرعت

void parse_gprmc(float *lat_lib, float *lon_lib, float *speed_lib)

 

در رابطه با تابع parse_gprmc دقت داشته باشید که طول و عرض جغرافیایی بر مبنای درجه و دقیقه و سرعت بر حسب واحد knot است. برای روشن تر شدن موضوع، در قسمت بعد اجرای یک برنامه را مشاهده خواهید نمود.

 


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


پس از بررسی توابع کتابخانه، نوبت به اجرای یک برنامه می رسد. کدهای زیر برای برد آردوینو uno و سایر بردهای تحت پلتفرم آردوینو، قابل اجراست.

#include "gps_lib.h"
gps_lib gps;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  delay(500);
  gps.begin();


}

void loop() {
  float lat, lon, speed_;
  gps.parse_gprmc(&lat, &lon, &speed_);
  Serial.print("lat:");
  Serial.flush();
  Serial.println(lat);
  Serial.flush();
  Serial.print("long:");
  Serial.flush();
  Serial.println(lon);
  Serial.flush();
  Serial.print("speed:");
  Serial.flush();
  Serial.println(speed_);
  Serial.flush();
  delay(1500);
}

 

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

خروجی کتابخانه gps_lib در نرم افزار آردوینو - دیجی اسپارک

 


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


لینک خرید انواع برد آردوینو، کلیک کنید

لینک خرید انواع برد ESP، کلیک کنید

لینک خرید ماژول NEO8MN، کلیک کنید

 


جمع بندی


ماژول های گیرنده موقعیت یاب یکی از مهم ترین و پرکاربردترین ماژول ها در زمینه تعیین موقعیت فیزیکی یک جسم به شمار می روند. به کمک این ماژول ها می توان موقعیت دقیق به همراه سایر اطلاعات مانند سرعت حرکت متحرک را تعیین نمود. یکی از کاربردی ترین ماژول های موقعیت یاب، ماژول NEO8MN است. این ماژول که از فناوری GNSS بهره می برد، قادر به کار با ماهواره های آمریکایی، روسی، چینی و اروپایی است. در این آموزش به طراحی و توسعه یک کتابخانه جهت کار با ماژول های موقعیت یاب پرداختیم. این کتابخانه که تحت پلتفرم آردوینو توسعه یافته، می تواند با ماژول GPS و GNSSS شرکت U-BLOX ارتباط برقرار نماید.  به کمک این کتابخانه، به سادگی و بدون درگیری با جزییات، می توان خروجی از کتابخانه دریافت نمود. البته امید است تا به مرور زمان، این کتابخانه تکمیل تر شده تا به یک کتابخانه جامع در سطح محتوی فارسی، تبدیل گردد.

 

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

 

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

معین صابری

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

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

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

۲ دیدگاه

  • سلام
    ی مشکل داشتم اونم اینکه وقتی دستی کتابخانه رو اضافه می کنم هیچ اتفاقی نمی افته و باز ارور نبودن کتابخانه رو میده