موقعیت یابی با ماژول ublox neo-6m (1)

سلام در این جلسه قصد داریم با استفاده از ماژول GPS مدل ublox neo-6m و برد NodeMCU موقعیت مکانی ماژول را دریافت کنیم و روی سریال مانتیور نمایش بدیم.
قبل از مطالعه این آموزش پشنهاد میدم مطالبی در مورد GPS رو باهم مطالعه کنیم و با این سیستم جهانی بیشتر آشنا بشیم.
GPS چیست ؟
سامانهٔ موقعیتیابی جهانی (به انگلیسی: Global Positioning System) با سرواژه جیپیاس (اختصاری GPS) سامانهای برای یافتن موقعیت جغرافیایی است. این سامانه از ۲۴ ماهواره است که زمین را دور میزنند و در هر مدار ۴ ماهواره قرار دارد. راکتهای کوچکی این ماهوارهها را در مسیر درست نگاه میدارد. به این ماهوارهها نوستار (NAVSTAR) گفته میشود. این ماهوارهها از محاسبات ریاضی سادهای برای پخش اطلاعات استفاده میکنند که به عنوان طول و عرض و بلندی جغرافیایی گیرندههای روی زمین نشان داده میشوند.
سامانه جیپیاس بدون وابستگی به گیرندههای تلفن یا اینترنت عمل میکند. با این فناوریها میتوان اطلاعات دریافتی از این سامانه موقعیتیاب را بهتر و کاربردیتر کرد. سامانه جیپیاس میتواند توانایی حیاتی در زمینه موقعیتیابی برای کاربری نظامی یا همگانی در سراسر جهان فراهم کند.
پروژه جیپیاس در سال ۱۹۷۳ و توسط ایالات متحده آمریکا برای غلبه بر محدودیتهای سامانههای موقعیتیابی پیشین، آغاز شد. وزارت دفاع ایالات متحده آمریکا سامانهای را توسعه داد که به شکل پیشفرض ۲۴ ماهواره را به کار میبرد. طراحی و توسعه و پشتیبانی این سامانه بر عهده وزارت دفاع ایالات متحده است.
جیپیاس در هر زمان و در همه جهان قابل استفادهاست و هیچ هزینهای برای این خدمات گرفته نمیشود. ماهوارههای جیپیاس، هر روز دو بار در یک مدار دقیق به دور زمین میچرخند و سیگنالهای اطلاعات را به زمین میفرستند.
ماژول GPS مدل ublox neo-6m:
مشخصات فنی :

توضیحات این ماژول :
این ماژول GPS یا موقعیت یاب یکی از قدرت مندترین ماژول های جی پی اس موجود در بازار می باشد و می تواند به راحتی به برد آردوینو متصل شود وپروژه شما را مجهز به یک سیستم موقعیت بابی یا رهگیری ماهواره ای نماید ، این ماژول در هر پروژه ای قابل استفاده می باشد ، اما با توجه به وزن سبک و نوع آنتن استفاده شده در آن ، در صورتی که برای هواپیمای مد و یا ربات پرنده خود نیاز به سیستم موقعیت یاب دارید ، این ماژول یکی بهترین گزینه های می باشد.
ماژول های سری NEO-6 از خانواده گیرنده های GPS شرکت U-blox هستند که بر پایه موتور مکانیابی پر قدرت ۶ U-blox طراحی و تولید شده اند. این گیرنده های GPS بسیار انعطاف پذیر و قدرتمند هستند، به گونه ای که امکانات بسیاری را در ابعاد کوچک به کاربر ارائه می کنند. معماری مداری این ماژول و ویژگی های آن در مصرف انرژی و حافظه داخلی، NEO-6M را برای استفاده در سیستم های دارای تغذیه باتری و تجهیزات قابل حمل مناسب می سازد. طراحی مدارات ماژول NEO-6M به گونه ای است که زمان راه اندازی ماژول برای دریافت اولین خروجی معتبر یا TTFF به زیر یک ثانیه کاهش یافته است. موتور جستجوی ماهواره ها در این ماژول با دو میلیون Correlator قادر است با جستجوی موازی زمان و فرکانس، ماهواره هایی با سطح سیگنال مناسب را به صورت آنی بیابد. طراحی و تکنولوژی ابداعی به کار رفته در این ماژول می تواند تاثیر منابع اختلال یا jamming سیگنال های GPS را حذف کند. به طور کلی سری NEO-6 از گیرنده های GPS در دریافت سیگنال های ناوبری حتی در محیط های پر نویز عملکرد خوبی دارند.
امکان ذخیره اطلاعات به صورت eeprom در این قطعه وجود دارد.
چند نکته :
زمانی که این برد رو میخرید ممکنه پین هدر نری روی برد نصب نشده باشه اگر نصب نشده بود باید روی برد لحیم کنید .
این برد با پروتکل سریال کار میکنه پس از پایه های RX و TX استفاده میکنیم .
و اما تغذیه ماژول همونطور که داخل مشخصات این ماژول ذکر شده ولتاژ مورد نیاز این ماژول ۳ تا ۵ ولت هستش اما ما برای اطمینان از ولتاژ ۳.۳ ولت استفاده میکنیم.
دقت کنید یکسری از ماژول های این مدل رگولاتور ندارند و حتما باید به ۳.۳. ولت زد و نمیشه به ۵ ولت زد.
یک نکته دیگه که باید بهش توجه کنیم اینه که کی متوجه بشیم ماژول GPS به ماهواره وصل شده و داره دیتا دریافت میکنه .
روی ماژول GPS یک LED وجود داره که داخل تصویر زیر محلی که LED نصب شده رو نمایش میده اگه LED پشت سر هم چشمک بزنه یعنی وصل شده و داره دیتا دریفات میکنه.
شماتیک و اتصالات :
پایه VCC ماژول GPS = پایه ۳.۳v برد NodeMCU
پایه GND ماژول GPS = پایه GND برد NodeMCU
پایه RX ماژول GPS = پایه D1 برد NodeMCU
پایه TX ماژول GPS = پایه D2 برد NodeMCU
برنامه نویسی نرم افزار آردوینو :
بعد از آپلود کد زیر وارد قسمت سریال مانیتور بشید و موقیت مکانی خودتون رو مشاهده کنید.
#include <TinyGPS++.h> #include <SoftwareSerial.h> int RX = 4; int TX = 5; TinyGPSPlus gps; SoftwareSerial gpsPort(RX, TX); void checkGPS() { if (gps.location.isValid()) { Serial.print("Latitude: "); Serial.println(gps.location.lat(), 6); Serial.print("Longitude: "); Serial.println(gps.location.lng(), 6); Serial.print("Altitude: "); Serial.println(gps.altitude.meters()); digitalWrite(LED_BUILTIN, HIGH); } else { Serial.println("Couldn't identify Location"); } Serial.print("Date: "); if (gps.date.isValid()) { Serial.print(gps.date.month()); Serial.print("/"); Serial.print(gps.date.day()); Serial.print("/"); Serial.println(gps.date.year()); } else { Serial.println("Couldn't identify Date"); } Serial.print("Time: "); if (gps.time.isValid()) { if (gps.time.hour() < 10) Serial.print(F("0")); Serial.print(gps.time.hour()); Serial.print(":"); if (gps.time.minute() < 10) Serial.print(F("0")); Serial.print(gps.time.minute()); Serial.print(":"); if (gps.time.second() < 10) Serial.print(F("0")); Serial.print(gps.time.second()); Serial.print("."); if (gps.time.centisecond() < 10) Serial.print(F("0")); Serial.println(gps.time.centisecond()); } else { Serial.println("Couldn't identify Time"); } Serial.println(); delay(1000); } void setup() { Serial.begin(9600); gpsPort.begin(9600); } void loop() { while (gpsPort.available() > 0) if (gps.encode(gpsPort.read())) checkGPS(); if (millis() > 5000 && gps.charsProcessed() < 10) { Serial.println("No GPS Device; Try Again Later."); while (true) ; } }