پروژه مکان یاب GPS با برد STM32 (نمایش مختصات در LCD)
محتویات
- راه اندازی ماژول GPS با میکروکنترلر STM32
- ماژول مکان یاب GPS Neo-6M
- فرمت NMEA چیست ؟
- پین های سریال STM32
- مدار مکان یاب GPS با برد STM32
- اتصالات مدار بین ماژول GPS و STM32F103C8
- اتصالات بین LCD 16×2 و STM32F103C8
- قطعات مورد نیاز
- برنامه نویسی STM32F103C8 برای راه اندازی GPS
- فیلم عملکرد طول و عرض جغرافیایی GPS با STM32
سلام. پروژه مکان یاب GPS با برد STM32 + آموزش کامل و فیلم را آماده کردیم.
راه اندازی ماژول GPS با میکروکنترلر STM32
GPS مخفف سیستم موقعیت یابی جهانی است و برای تشخیص طول و عرض جغرافیایی هر مکان بر روی زمین ، با زمان دقیق UTC (هماهنگ جهانی) استفاده می شود. این دستگاه هر ثانیه مختصات و زمان و تاریخ را از ماهواره دریافت می کند. GPS دقت بالایی را ارائه می دهد و علاوه بر مختصات موقعیت ، داده های دیگری نیز ارائه می دهد.
فیلم زیر به شما در درک نحوه کار این پروژه کمک میکند.
همه ما می دانیم که GPS وسیله ای بسیار مفید و متداول است و در تلفن های همراه و سایر دستگاه های قابل حمل برای ردیابی مکان مورد استفاده قرار می گیرد. در این پروژه STM32، ما یک ماژول GPS را به میکروکنترلر STM32 متصل میکنیم تا مختصات را بیابیم و آن ها را روی ال سی دی کاراکتری نمایش بدهیم. فیلم عملکرد پروژه در انتهای صفحه قرار داده شده است. در اینجا چند پروژه مفید مرتبط با GPS وجود دارد که قبلاً ساختیم :
- راه اندازی ماژول GPS Neo 6m با رزبری پای
- پروژه امنیت زنان با ارسال پیامک و مکان GPS آردوینو
- ساخت ردیاب GPS ماشین با آردوینو + هشدار تصادف SMS با Sim900 و SIM28
- و …
ماژول مکان یاب GPS Neo-6M
Neo 6M یک ماژول GPS سریال است که جزئیات مکان را از طریق ارتباط سریال ارائه می دهد. این ماژول جی پی اس دارای چهار پین است. توضیحات پین های این ماژول را در جدول زیر مشاهده میکنید.
پین | توضیح |
Vcc | منبع تغذیه 2.7 تا 5 ولت |
Gnd | GND |
TXD | ارسال اطلاعات |
RXD | دریافت اطلاعات |
ماژول GPS داده ها را در چند رشته با نرخ 9600 Baud Rate منتقل می کند. اگر از ترمینال UART با نرخ 9600 Baud استفاده کنیم ، می توانیم داده های دریافت شده توسط GPS را ببینیم.
ماژول GPS داده های موقعیت ردیابی را با فرمت NMEA ارسال می کند. فرمت NMEA شامل چند جمله است که در زیر چهار جمله مهم آن آورده شده است.
- $ GPGGA : داده های ثابت سیستم موقعیت یابی جهانی
- $ GPGSV : ماهواره های GPS در نمای
- $ GPGSA : ماهواره های فعال و GPS DOP
- $ GPRMC : حداقل داده های خاص GPS / Transit ویژه توصیه شده
ماژول GPS داده های مربوط به موقعیت را در به صورت لحظه ای می فرستد، و داده های زیادی را با فرمت NMEA می فرستد (تصویر زیر). فرمت NMEA شامل چند جمله است که ما در آن فقط به یک جمله نیاز داریم. این جمله از $ GPGGA شروع می شود و حاوی مختصات ، زمان و سایر اطلاعات مفید است.
می توانیم با شمارش کاما (,) در رشته ، مختصات را از رشته $ GPGGA استخراج کنیم.
فرمت NMEA چیست ؟
در زیر یک رشته GPGGA $ به همراه توضیحات آن آورده شده است :
$GPGGA,104534.000,7791.0381,N,06727.4434,E,1,08,0.9,510.4,M,43.9,M,,*47 $GPGGA,HHMMSS.SSS,latitude,N,longitude,E,FQ,NOS,HDP,altitude,M,height,M,,checksum data
واحد | توضیح |
$GPGGA | فرمت اطلاعات موقعیت جهانی |
HHMMSS.SSS | زمان بر حسب ساعت ، دقیقه ، ثانیه و میلی ثانیه |
Latitude | عرض جغرافیایی |
N | جهت N= شمال و S= جنوب |
Longitude | عرض جغرافیایی |
E | جهت E= شرق و W= غرب |
FQ | کیفیت اطلاعات |
NOS | شماره ماهواره های استفاده شده |
HDP | دقت افقی |
Altitude | ارتفاع بر حسب متر از سطح دریا |
M | متر |
Height | ارتفاع |
Checksum | چک کردن اطلاعات |
پین های سریال STM32
درگاه های ارتباط سریال STM32 BLUE PILL در تصویر زیر در زیر نشان داده شده است. این پین ها دارای رنگ آبی (PA9-TX1 ، PA10- RX1 ، PA2-TX2 ، PA3- RX2 ، PB10-TX3 ، PB11- RX3) هستند.
مدار مکان یاب GPS با برد STM32
نحوه اتصال ماژول GPS Neo 6m به میکروکنترلر STM32 در تصویر زیر نشان داده شده است.
اتصالات مدار بین ماژول GPS و STM32F103C8
ماژول GPS | STM32 |
RXD | PA9 (TX1) |
TXD | PA10 (RX1) |
+5V | +5V |
GND | GND |
اتصالات بین LCD 16×2 و STM32F103C8
شماره پین LCD | نام پین LCD | نام پین STM32 |
1 | Ground (Gnd) | Ground (G) |
2 | VCC | 5V |
3 | VEE | پتانسیومتر |
4 | Register Select (RS) | PB11 |
5 | Read/Write (RW) | Ground (G) |
6 | Enable (EN) | PB10 |
7 | Data Bit 0 (DB0) | No Connection (NC) |
8 | Data Bit 1 (DB1) | No Connection (NC) |
9 | Data Bit 2 (DB2) | No Connection (NC) |
10 | Data Bit 3 (DB3) | No Connection (NC) |
11 | Data Bit 4 (DB4) | PB0 |
12 | Data Bit 5 (DB5) | PB1 |
13 | Data Bit 6 (DB6) | PC13 |
14 | Data Bit 7 (DB7) | PC14 |
15 | LED مثبت | 5V |
16 | LED منفی | Ground (G) |
قطعات مورد نیاز
- STM32 – برد توسعه (BluePill) (STM32F103C8T6)
- ماژول GPS Neo 6M
- ال سی دی کاراکتری 16*2
برنامه نویسی STM32F103C8 برای راه اندازی GPS
در آموزش قبلی ما درباره برنامه نویسی STM32 با استفاده از درگاه USB آموختیم. می توان با استفاده از درگاه USB بدون استفاده از پروگرامر FTDI برد STM32 را برنامه ریزی کرد : آموزش برنامه نویسی STM32 با پورت USB. برنامه ریزی را به راحتی با ARDUINO IDE شروع کنید. حین بارگذاری کد ، حتماً پین های TX و RX را برداشته و پس از بارگذاری ، وصل کنید. کد کامل در انتهای صفحه در فایل دانلودی قرار داده شده است. در اینجا بعضی از قسمت های کد را بررسی میکنیم.
در این آموزش ، ما از کتابخانه GPS TinyGPSPlus استفاده می کنیم که تمام اطلاعات مورد نیاز را از NMEA استخراج می کند و ما فقط برای بدست آوردن طول و عرض جغرافیایی ، باید یک خط ساده از کد بنویسیم.
برای اتصال ماژول GPS به STM32 ، ابتدا باید کتابخانه GitHub TinyGPSPlus نصب کنیم. کتابخانه مورد نظر را در فایل دانلودی انتهای صفحه قرار دادیم. آموزش کامل نصب کتابخانه در نرم افزار آردوینو ( آموزش تصویری Arduino)
در کد پروژه در ابتدا ما فایل های کتابخانه های مورد نیاز را فراخوانی میکنیم و سپس پین های ال سی دی 16*2 را تعریف میکنیم.
بنابراین ابتدا فایل های کتابخانه ای لازم را وارد کنید و پین های LCD 16×2 را تعریف کنید:
#include <LiquidCrystal.h> // کتابخانه مورد نیاز ال سی دی #include <TinyGPS++.h> // کتابخانه مورد نیاز ماژول GPS const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
سپس یک object با نام gps از کلاس TinyGPSPlus ایجاد میکنیم.
TinyGPSPlus gps;
در مرحله void setup ، ارتباط سریال را با ماژول GPS با استفاده از Serial1.begin (9600)
آغاز میکنیم. Serial1 به عنوان درگاه Serial 1 (Pins-PA9، PA10)
از STM32F103C8 استفاده می شود.
Serial1.begin(9600);
سپس پیام مقدمه را برای مدتی نمایش میدهیم.
lcd.begin(16,2); // تعریف ال سی دی 16*2 lcd.print("Irenx.ir"); // نمایش متن lcd.setCursor(0,1); // ستون اول ردیف دوم lcd.print("STM32 with GPS"); // نمایش متن delay(4000); // به مدت 4 ثانیه lcd.clear(); // پاکسازی ال سی دی
در حلقه void () ، از ماژول GPS طول و عرض جغرافیایی دریافت می کنیم و بررسی می کنیم که داده های دریافت شده معتبر هستند یا خیر و سپس اطلاعات را در سریال مانیتور و LCD نمایش می دهیم.
بررسی اینکه آیا موقعیت مکانی موجود صحت دارد یا خیر.
loc_valid = gps.location.isValid();
داده عرض را دریافت می کنیم.
lat_val = gps.location.lat();
داده طول را دریافت می کنیم.
lng_val = gps.location.lng();
در صورت دریافت داده های نامعتبر ، “*****” در مانیتور سریال نمایش داده می شود و ال سی دی “waiting” را در نمایش می دهد
if (!loc_valid) // اگر اطلاعات معتبر نباشد { lcd.print("Waiting"); // نمایش پیام Serial.print("Latitude : "); Serial.println("*****"); Serial.print("Longitude : "); Serial.println("*****"); delay(4000); // به مدت 4 ثانیه lcd.clear(); // پاکسازی ال سی دی }
در صورت دریافت داده های معتبر ، عرض و طول در مانیتور سریال و همچنین بر روی صفحه نمایش LCD نمایش داده می شود.
lcd.clear(); // پاکسازی ال سی دی Serial.println("GPS READING: "); // نمایش پیام Serial.print("Latitude : "); // عرض جغرافیایی Serial.println(lat_val, 6); // فراخوانی داده عرض جغرافیایی lcd.setCursor(0,0); // ستون اول ردیف اول lcd.print("LAT:"); // عرض lcd.print(lat_val,6); // فراخوانی داده عرض جغرافیایی Serial.print("Longitude : "); Serial.println(lng_val, 6); // فراخوانی داده طول جغرافیایی lcd.setCursor(0,1); // ستون اول ردیف دوم lcd.print("LONG:"); // طول lcd.print(lng_val,6); // فراخوانی داده طول جغرافیایی delay(4000); // به مدت 4 ثانیه
عملکرد زیر تأخیر خواندن داده را فراهم می کند. همچنان به دنبال یافتن اطلاعات در درگاه سریال است.
static void GPSDelay(unsigned long ms) { unsigned long start = millis(); do { while (Serial1.available()) gps.encode(Serial1.read()); } while (millis() - start < ms); }
فیلم عملکرد طول و عرض جغرافیایی GPS با STM32
پس از ساختن مدار و بارگذاری کد ، مطمئن شوید که ماژول GPS را در منطقه باز قرار میدهید تا سیگنال سریعا دریافت شود. گاهی اوقات برای دریافت سیگنال چند دقیقه طول می کشد ، بنابراین مدتی صبر کنید. هنگام چشمک زدن چراغ در ماژول GPS، یعنی ماژول در حال دریافت اطلاعات است و سپس اطلاعات جغرافیایی در سریال مانیتور و ال سی دی نمایش داده میشوند.
با استفاده از نقشه های Google می توانید طول و عرض جغرافیایی مکان را تأیید کنید. فقط با روشن بودن GPS به نقشه های Google بروید و طول و عرض جغرافیایی نمایش داده شده را وارد کنید.
موارد موجود در فایل : سورس کامل ، شماتیک
برای دانلود فایل ها باید حساب کاربری داشته باشید ثبت نام / ورود
سلام وقت بخیر
در کتابخانه ارسالی وقتی نصب می شود و وارد نثهم می شود یک ارور برای include “WProgram.h” می آید که نمی شود از کتابخانه استفاده کرد لطفا راهنمایی کنید
هر چی پروژه و آموزش دیدم همه به زبان آردوینو بودند
ولی طبقه بندی نوشتید STM32 و…
این در صورتیه که برای AVR با کد ویژن یا بسکام و برای STM از کیوب ام ایکس استفاده کنید
در حال حاضر همه آموزشها و پروژه های شما در دسته بندی آردوینو قرار میگیرند
سلام جناب. هر مجموعه با توجه به مطالب، دسته بندی خاص خودش رو داره. ممنونم که نظرتون رو به اشتراک گذاشتید.
سلام، من میخام NEO-6m رو مستقیم روی برد ARM قرار بدم و از ماژول استفاده نکنم. باز هم باید از eeprom روی ماژول استفاده کنم؟ نحوه اتصالاتش به چه شکله؟
سلام جناب. استفاده از ماژول بهینه تر و راحت تره اما اگر میخواهید باید دیتاشیت محصول رو بررسی کنید تا بتونید متصل کنید. من کمک زیادی نمیتونم کنم.