آموزش Espآموزش ESP32آموزش اینترنت اشیاپروژه های Esp

اتصال ماژول NEO-6M GPS به ESP32 (آموزش جامع)

اگر یک مهندس الکترونیک یا سیستم های امبدد هستید و در صنعت الکترونیک کار میکنید، ممکن است گاهی اوقات نیاز داشته باشید که موقعیت یک جسم در حال حرکت یا ارتفاع و سرعت یک موقعیت خاص را تعیین کنید. در این مواقع، ماژول GPS خیلی به کار می آید. پس تصمیم گرفتیم که در این مطلب، ماژولGSM  NEO-6M GPS را به ESP32 متصل کنیم. همچنین در طی این آموزش شما را با معایب و مزایای این ماژول آشنا خواهیم کرد. پس بدون هیچ اتلاف وقتی سراغ پروژه خود میرویم.

پین اوت ماژول NEO-6M GPS

ماژول NEO-6M GPS چهار پایه دارد : GND، TxD، RxD و VCC.

TxD و RxD پایه های این ماژول برای برقراری ارتباط با میکروکنترلر هستند.

پین اوت ماژول NEO-6M GPS

  • GND : این پایه، پایه زمین ماژول GPS بوده و باید به پایه زمین ESP32 متصل شود.
  • TxD : این پایه، پایه ارسال ماژول GPS بوده و باید به پایه Rx  میکروکنترلر برد ESP32 متصل شود.
  • RxD : این پایه، پایه دریافت ماژول GPS بوده و باید به پایه Tx میکروکنترلر وصل شود.
  • VCC : این پایه، پایه تغذیه ماژول GPS بوده و باید به پایه 3.3 ولت میکروکنترلر متصل شود.

اجزا ماژول NEO-6M GPS

ماژول NEO-6M GPS یک ماژول آماده به کار GSM است و میتواند کاربردها و مصارف گوناگونی داشته باشد. اجزا ماژول NEO-6M GPS در تصویر زیر نشان داده شده اند.

اجزا ماژول NEO-6M GPS

ماژول NEO-6M GPS پنچ جز اصلی روی بورد خود دارد. اولین جز اصلی و مهم آن، تراشه NEO-6M GPS است که در قلب PCB قرار گرفته است. سپس یک باتری قابل شارژ و یک ماژول حافظه سریال EEPROM داریم. ماژول EEPROM در کنار باتری به حفظ داده کلاک، داده آخرین موقعیت ( داده اوربیتی  یا مداری GNSS) و پیکربندی ماژول کمک میکند. اما این قطعات برای ذخیره دائمی داده ها استفاده نمیشوند.

بدون باتری، GPS همیشه از ابتدا روشن شده و در واقع دچار cold-start میشود. درنتیجه زمان بیشتری طول میکشد تا راه اندازی شود. هنگامی که تغذیه به ماژول متصل است، باتری به صورت اتوماتیک شارژ شده و میتواند داده را بدون تغذیه جدید تا 2 هفته نگاه دارد. سپس یک رگولاتور کاهنده ولتاژ داریم. به دلیل وجود این رگولاتور روی بورد، میتوانید ماژول را با ولتاژ 5 ولت هم تغذیه کنید. در نهایت به کانکتور UFL میرسیم. برای اینکه این ماژول به درستی کار کند، باید یک آنتن خارجی به آن متصل کنیم.

نگاهی اجمالی بر ماژول NEO-6M GPS

نگاهی اجمالی بر ماژول NEO-6M GPS

سامانه موقعیت یابی جهانی یا همان GPS یک سیستم متشکل از 31 ماهواره است که به دور زمین میگردند. از آنجایی که این ماهواره ها به صورت مداوم اطلاعات و داده موقعیت بر حسب زمان خود را از طریق سیگنال های رادیویی به ما ارسال میکنند، میتوانیم موقعیت دقیق آن ها را بدانیم. در قلب بورد بریک اوت، یک ماژول NEO-6M GPS وجود دارد که توسط u-blox طراحی و توسعه داده شده است. این ماژول بسیار کوچک بوده اما امکانات فراوانی دارد. این ماژول میتواند تا 22 ماهواره را از طریق 50 کانال ردیابی کند درحالیکه ولتاژ کاری آن 2.7 تا 3.6 ولت بوده و جریان مصرفی آن تنها 45 میلی آمپر است. یکی از جالب ترین امکانات این ماژول، مد ذخیره انرژی آن است که باعث کاهش توان مصرفی سیستم میشود. هنگامی که مد ذخیره انرژی فعال است، جریان مصرفی ماژول به 11 میلی آمپر کاهش میبابد. میتوانید جزئیات بیشتر درباره ماژول NEO-6M GPS را در دیتاشیت آن مطالعه کنید.

LED نشانگر position fix یا موقعیت فیکس

اگر به بورد ماژول NEO-6M GPS دقت کنید، میتوانید یک LED کوچک روی بورد آن ببینید. از این LED برای بیان کردن اینکه ماژول GPS میتواند با ماهواره ها ارتباط برقرار کند یا خیر استفاده میکنیم.

  1. زمانی که LED چشمک نمیزند، در حال جست و جوی ماهواره ها است.

LED نشانگر position fix یا موقعیت فیکس

  1. زمانی که LED هر یک ثانیه یک بار چشمک میزند، یعنی ماژول توانسته به تعداد کافی ماهواره شناسایی کند. ( position fix یافت شده است.)

LED نشانگر position fix یا موقعیت فیکس

آنتن : این ماژول دارای یک آنتن پچ با حساسیت 161- دسیبل متر است که میتواند سیگنال های رادیویی را از ماهواره های GPS دریافت کند. میتوانید این آنتن را به کانکتور UFL که در قسمت اجزا این ماژول به آن اشاره کردیم، متصل کنید.

LED نشانگر position fix یا موقعیت فیکس

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

در کاربرد های بیرون از خانه یا در فضای سرباز، آنتن پچ به خوبی کار خواهد کرد اما برای کاربردهای درونی و در فضاهای سرپوشیده، توصیه میشود که از یک آنتن اکتیو GPS 3 متری استفاده کنید.

سوالات متداول درباره ماژول NEO-6M GPS

1-دقت ماژول NEO-6M GPS چقدر است؟

براساس دیتاشیت، دستگاه NEO-6M GPS در حالت ایده آل، دارای دقت افقی 2.5 متر است.

2-چگونه از درست کارکردن ماژول GPS مطمئن شویم؟

تغذیه و مبدل UART را به ماژول NEO-6M GPS متصل کرده و نرخ باد را روی 9600 تنظیم کنید. اگر همه چیز به درستی کار کند، باید هر ثانیه یکبار از ماژول داده خروجی دریافت کنید

3-آنتن GPS چیست؟

آنتن GPS یا آنتن GNSS یک دستگاه طراحی شده برای دریافت و تقویت سیگنال های رادیویی ارسال شده از ماهواره های GNSS در یک فرکانس خاص است. این آنتن با استفاده از یک گیرنده GPS یا GNSS، سیگنال رادیویی را به سیگنال الکتریکی تبدیل میکند.

4-چرا 4 ماهواره برای GPS موردنیاز است؟

دلیل اینکه که GPS به چهار ماهواره نیاز دارد این است که GPS موقعیت دقیق را محاسبه میکند. هر ماهواره سیگنالی را ارسال کرده که شامل 1) زمان دقیق ارسال سیگنال 2)مکان دقیق ماهواره نسبت به مرکز کره زمین است.

5- GPS از چه فرکانس هایی استفاده میکند؟

تمامی ماهواره های برودکست GPS حداقل دو فرکانس حامل دارند. یکی L1 در 1575.42 مگاهرتز و دیگری L2 در1227.6 مگاهرتز. ( ماهواره های جدید روی فرکانس L5 در 1176 مگاهرتز هم پخش میشوند.)

مدار داخلی ماژول NEO-6M GPS

مدار ماژول NEO-6M GPS بسیار آسان و قابل درک است. در این ماژول، کار اصلی برعهده ماژول GPS بوده و ما برای به کار انداختن ماژول GPS، تنها به 2 یا 3 قطعه دیگر نیاز داریم. شماتیک کامل ماژول NEO-6M GPS در تصویر زیر نشان داده شده است.

مدار داخلی ماژول NEO-6M GPS

در شماتیک، یک رگولاتور ولتاژ 3.3 ولت داریم که مسئول تبدیل ورودی 5 ولت به 3.3 ولت است. همچنین یک AT24C33 EEPROM  و یک باتری داریم. EEPROM و باتری در کنار یکدیگر به حفظ رم باتری دار که میتواند داده کلاک و موقعیت را برای بازه زمانی محدودی در خود نگاه دارد، کمک میکنند. در کنار این قطعات، یک کانکتور UFL داریم که برای اتصال آنتن پچ خارجی به ماژول و درست کار کردن آن استفاده میشود.

مدار اتصال ماژول NEO-6M GPS و ESP32

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

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

مدار اتصال ماژول NEO-6M GPS به ESP32

قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

درک جملات NMEA

اگر ماژول را به مبدل USB به سریال متصل کرده و پنجره سریال مانیتور را باز کنیم، میتوانیم داده های خروجی از ماژول NEO-6M GPS را درآن ببینیم. این جملات، جملات NMEA نام دارند. NMEA در واقع اختصار یافته عبارت National Marine Electronics Association است. NMEA در تقریبا تمام گیرنده های GPS، یک قالب یا فرمت استاندارد پیام به شمار می آید. در تصویر زیر، عکسی از پنجره سریال مانیتور حاوی این پیام ها نشان داده شده است.

درک جملات NMEA

جملات NMEA، با کاراکتر $ آغاز شده و فیلدهای داده هم با یک ویرگول از هم جدا شده اند.

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

$GPGGA, 130113.00, 37XX.XXXX,N, 07XXX.XXXX, E,1,04,3.97,404.9,M,45.7,M,,*79
  • 130113- بیانگر زمانی است که داده گرفته و ثبت شده است. (13:01:13 UTC)
  • 37XX.XXXX,N – (عرض جغرافیایی) مدار 37 درجه شمالی
  • 07XXX.XXXX,E-  (طول جغرافیایی)- مدار 7 درجه شرقی
  • 1-Fix quality
  • 0 = نامعتبر
  • 1 = GPS  فیکس
  • 2 = DGPS  فیکس
  • 3 = PPS فیکس
  • 4 =  تعیین موقعیت آنی (RTK)
  • 5 = RTK شناور
  • 6 = dead reckoning  ( ناوبری کور، پروسه ای برای محاسبه موقعیت فعلی یک جسم در حال حرکت با استفاده از داده های از پیش تعیین شده و غیره) تخمین زده شده
  • 7 = مد ورودی دستی
  • 8 = مد شبیه سازی
  • 04 –  تعداد ماهواره های ردیابی شده
  • 3.94 – رقیق سازی افقی موقعیت
  • M،404.9 – ارتفاع از سطح دریا بر حسب متر
  • 45.7،M – ارتفاع ژئوئید (میانگین سطح دریا) بالای بیضوی مرجع WGS84
  • Empty – زمان به روز رسانی DGPS
  • Empty – ID ایستگاه DGPS
  • *79 – داده چکسام که همیشه با * شروع میشود.

کد اتصال ماژول NEO-6M GPS به ESP32

اگر ماژول را به سریال مانیتور وصل کنید، داده را همانطور که پیشتر اشاره کردیم، در پنجره سریال مانیتور خواهید دید. اگر مایل هستید میتوانید با همین داده هم کار کنید اما روش آسان تر این است که از یک کتابخانه برای پارس کردن تمام داده GPS (تبدیل نوع داده) و ذخیره آن در متغیرها برای استفاده بعدی کمک بگیرید.

در بخش کدنویسی هم دقیقا همین کار را انجام خواهیم داد. کتابخانه TinyGPSPlus  از Mike Hart را فراخوانی میکنیم. میتوانید این کتابخانه را از GitHub دانلود کرده یا از قسمت Library manager آردوینو برای نصب آن استفاده کنید.

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

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

#include <TinyGPSPlus.h>

سپس، یک شی از کتابخانه TinyGPSPlus به نام gps میسازیم تا بتوانیم با کتابخانه کار کنیم.

TinyGPSPlus gps;

در تابع ()setup، ارتباط سریال را با دو تابع ()Serial.begin و ()Serial2.begin و با نرخ باد 9600 آغاز کرده تا بتوانیم هم با کامپیوتر و هم با ماژول GPS ارتباط برقرار کنیم.

void setup() {
  Serial.begin(9600);
  Serial2.begin(9600);
  delay(3000);
}

سپس به تابع ()updateSerial میرسیم. این تابع در واقع یک لوپ بک بین UART1 و UART2 است تا بتوانیم بر داده دریافتی از پنجره سریال مانیتور، نظارت کنیم.

void updateSerial(){
  delay(500);
  while (Serial.available())  {
    Serial2.write(Serial.read());//Forward what Serial received to Software Serial Port
  }
  while (Serial2.available())  {
    Serial.write(Serial2.read());//Forward what Software Serial received to Serial Port
  }
}

در ادامه به تابع ()displayInfo میرسیم. در این تابع، طول و عرض GPS را به کمک دو تابع ()gps.location.lat و ()gps.location.lng که از متدهای کتابخانه TinyGPSPlus هستند، پارس کرده و آن ها را در پنجره سریال مانیتور چاپ کنیم.

void displayInfo()
{
  Serial.print(F("Location: "));
  if (gps.location.isValid()){
    Serial.print(gps.location.lat(), 6);
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 6);
  }
  else
  {
    Serial.print(F("INVALID"));
  }
}

نهایتا در تابع loop، ابتدا تابع ()updateSerial را فراخوانی کرده و با کامنت کردن آن، از اجرا شدنش جلوگیری میکنیم. اگر برای اولین بار است که از این دستگاه استفاده کرده یا درحال دیباگ کردن یا اشکال زدایی ماژول GPS هستید، میتوانید آن را از حالت کامنت خارج کنید. سپس در دسترس بودن یا نبودن Serial2 را بررسی میکنیم. اگر Serial2 در دسترس بود، تابع ()displayInfo را فراخوانی میکنیم. این تابع داده طول و عرض را به ما میدهد.

void loop() {
  //updateSerial();
  while (Serial2.available() > 0)
    if (gps.encode(Serial2.read()))
      displayInfo();
  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println(F("No GPS detected: check wiring."));
    while (true);
  }
}

در اینجا به انتهای بخش کدنویسی میرسیم و میتوانیم سراغ بخش بعدی پروژه خود برویم.

عملکرد ماژول NEO-6M GPS

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

در طی کار با این ماژول به چند مشکل برخوردیم. در این بخش از مطلب، درباره بعضی از این مشکلات بحث میکنیم.

هنگامی که در حال تلاش برای برقراری ارتباط بین ESP32 و ماژول GPS بودم، فکر میکردم که میتوانم این ماژول را با ریل 3.3 ولت میکروکنترلر تغذیه کنم، اما ماژول با این شیوه سیم کشی کار نکرد و نهایتا مجبور شدم از یک باتری خارجی برای کار با این ماژول استفاده کردم.

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

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

4 (4 نفر)

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

محمد رحیمی

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

3 نظر

    1. سلام عزیز
      ممنون از شما، اصلاح شد

  1. سلام وقت بخیر
    من تمامی مراحل رو انجام میدم ولی همش خطای No GPS detected: check wiring. میگیرم آنتن هم مشکلی نداره. حتما باید توی فضای باز باشم؟داخل خانه نمیتونه ارتباط بگیره؟با باتری هم تغذیه رو انجام میدم
    4 ولت و 5.5 آمپر.
    با 3.3 میکروکنترلر و هم کاهنده هم تست کردم.فکر نمیکنم مشکل از تغذیه باشه

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

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