آموزش STM32آموزش های ARMپروژه های ARMپروژه های STM32

پروژه مکان یاب GPS با برد STM32 (نمایش مختصات در LCD)

سلام. پروژه مکان یاب GPS با برد STM32 + آموزش کامل و فیلم را آماده کردیم.

راه اندازی ماژول GPS با میکروکنترلر STM32

GPS مخفف سیستم موقعیت یابی جهانی است و برای تشخیص طول و عرض جغرافیایی هر مکان بر روی زمین ، با زمان دقیق UTC (هماهنگ جهانی) استفاده می شود. این دستگاه هر ثانیه مختصات و زمان و تاریخ را از ماهواره دریافت می کند. GPS دقت بالایی را ارائه می دهد و علاوه بر مختصات موقعیت ، داده های دیگری نیز ارائه می دهد.

فیلم زیر به شما در درک نحوه کار این پروژه کمک میکند.

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

ماژول مکان یاب GPS Neo-6M

ماژول مکان یاب 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 شروع می شود و حاوی مختصات ، زمان و سایر اطلاعات مفید است.

فرمت NMEA

می توانیم با شمارش کاما (,) در رشته ، مختصات را از رشته $ 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) هستند.

جزئیات پین های STM32

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

مدار مکان یاب GPS با برد STM32

نحوه اتصال ماژول GPS Neo 6m به میکروکنترلر 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)

قطعات مورد نیاز

  1. STM32 – برد توسعه (BluePill) (STM32F103C8T6)
  2. ماژول GPS Neo 6M
  3. ال سی دی کاراکتری 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 بروید و طول و عرض جغرافیایی نمایش داده شده را وارد کنید.

طول و عرض جغرافیایی GPS با STM32

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

5 (5 نفر)

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

محمد رحیمی

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

5 نظر

  1. سلام وقت بخیر
    در کتابخانه ارسالی وقتی نصب می شود و وارد نثهم می شود یک ارور برای include “WProgram.h” می آید که نمی شود از کتابخانه استفاده کرد لطفا راهنمایی کنید

  2. هر چی پروژه و آموزش دیدم همه به زبان آردوینو بودند
    ولی طبقه بندی نوشتید STM32 و…
    این در صورتیه که برای AVR با کد ویژن یا بسکام و برای STM از کیوب ام ایکس استفاده کنید

    در حال حاضر همه آموزشها و پروژه های شما در دسته بندی آردوینو قرار میگیرند

    1. سلام جناب. هر مجموعه با توجه به مطالب، دسته بندی خاص خودش رو داره. ممنونم که نظرتون رو به اشتراک گذاشتید.

  3. سلام، من میخام NEO-6m رو مستقیم روی برد ARM قرار بدم و از ماژول استفاده نکنم. باز هم باید از eeprom روی ماژول استفاده کنم؟ نحوه اتصالاتش به چه شکله؟

    1. سلام جناب. استفاده از ماژول بهینه تر و راحت تره اما اگر میخواهید باید دیتاشیت محصول رو بررسی کنید تا بتونید متصل کنید. من کمک زیادی نمیتونم کنم.

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

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