- רכיבים נדרשים
- מודול GPS
- הצמד את STM32F103C8
- תרשים מעגלים וחיבורים
- תכנות STM32F103C8 לממשק מודול GPS
- איתור קו רוחב ואורך באמצעות GPS ו- STM32
GPS מייצג מערכת מיקום גלובלית ומשמשת לזיהוי קו רוחב ואורך של כל מקום על פני כדור הארץ, עם זמן UTC מדויק (זמן מתואם אוניברסלי). מכשיר זה מקבל את הקואורדינטות מהלוויין לכל שנייה ושנייה, עם זמן ותאריך. GPS מציע דיוק רב ומספק נתונים אחרים מלבד קואורדינטות המיקום.
כולנו יודעים ש- GPS הוא מכשיר שימושי מאוד ומשמש בדרך כלל בטלפונים ניידים ומכשירים ניידים אחרים למעקב אחר המיקום. יש לו מגוון רחב מאוד של יישומים בכל תחום החל מלהתקשר למונית בביתך כדי לעקוב אחר גובה המטוסים. להלן מספר פרויקטים שימושיים הקשורים ל- GPS, בנינו בעבר:
- מערכת מעקב אחר רכב
- שעון GPS
- מערכת התראות לגילוי תאונות
- מדריך לממשקי GPS של Raspberry Pi
- ממשק GPS מודול עם מיקרו-בקר PIC
כאן במדריך זה, נתממש מודול GPS עם מיקרו-בקר STM32F103C8 כדי למצוא את קואורדינטות המיקום ולהציג אותם בתצוגת LCD בגודל 16x2.
רכיבים נדרשים
- STM32F103C8 מיקרו-בקר
- מודול GPS
- תצוגת LCD 16x2
- קרש לחם
- חוטי חיבור
מודול GPS
זהו מודול GPS GY-NEO6MV2 XM37-1612. למודול GPS זה ארבעה פינים + 5 וולט, GND, TXD ו- RXD. הוא מתקשר באמצעות הפינים הסידוריים ויכול להתממשק בקלות ליציאה הסדרתית של STM32F103C8.
מודול GPS שולח את הנתונים בפורמט NMEA (ראה צילום המסך למטה). פורמט NMEA מורכב מכמה משפטים, בהם אנו זקוקים למשפט אחד בלבד. משפט זה מתחיל מ- $ GPGGA ומכיל את הקואורדינטות, הזמן ומידע שימושי אחר. זה GPGGA נקרא Data תקן מערכת מיקום גלובלית. למידע נוסף על קריאת נתוני GPS ומיתריו כאן.
להלן דוגמה אחת של מחרוזת $ GPGGA, יחד עם תיאור:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510.4, M, 43.9, M,, * 47
$ GPGGA, HHMMSS.SSS, קו רוחב, N, קו אורך, E, FQ, NOS, HDP, גובה, M, גובה, M,, נתוני בדיקה
אבל כאן במדריך זה אנו משתמשים בספריית GPS של TinyGPSPlus המוציאה את כל המידע הנדרש ממשפט ה- NMEA, ועלינו לכתוב שורת קוד פשוטה כדי לקבל את קו הרוחב והאורך, שנראה בהמשך המדריך..
הצמד את STM32F103C8
STM32F103C8 (גלולה כחולה) יציאות תקשורת סדרתיות של USART מוצגות בתמונה המוצמדת למטה. אלה הם בצבע כחול שיש (PA9-TX1, PA10- RX1, PA2-TX2, PA3- RX2, PB10-TX3, PB11- RX3). יש לו שלושה ערוצי תקשורת כאלה.
תרשים מעגלים וחיבורים
חיבורי מעגלים בין מודול GPS ל- STM32F103C8
מודול GPS |
STM32F103C8 |
RXD |
PA9 (TX1) |
TXD |
PA10 (RX1) |
+ 5 וולט |
+ 5 וולט |
GND |
GND |
חיבורים בין 16x2 LCD ו- STM32F103C8
פין LCD לא |
שם פין LCD |
שם פין STM32 |
1 |
קרקע (GND) |
קרקע (G) |
2 |
VCC |
5V |
3 |
VEE |
סיכה ממרכז הפוטנציומטר |
4 |
בחר הרשמה (RS) |
PB11 |
5 |
קריאה / כתיבה (RW) |
קרקע (G) |
6 |
הפעל (EN) |
PB10 |
7 |
נתונים נתונים 0 (DB0) |
אין חיבור (NC) |
8 |
נתונים ביט 1 (DB1) |
אין חיבור (NC) |
9 |
נתונים ביט 2 (DB2) |
אין חיבור (NC) |
10 |
נתונים ביט 3 (DB3) |
אין חיבור (NC) |
11 |
נתונים ביט 4 (DB4) |
PB0 |
12 |
נתונים ביט 5 (DB5) |
PB1 |
13 |
נתונים ביט 6 (DB6) |
PC13 |
14 |
נתונים ביט 7 (DB7) |
PC14 |
15 |
LED חיובי |
5V |
16 |
LED שלילי |
קרקע (G) |
כל ההתקנה תיראה להלן:
תכנות STM32F103C8 לממשק מודול GPS
תוכנית שלמה למציאת מיקום באמצעות מודול GPS באמצעות STM32 ניתנת בסוף פרויקט זה. ניתן לתכנת את STM32F103C8 באמצעות Arduino IDE פשוט על ידי חיבורו למחשב באמצעות יציאת USB. הקפד להסיר את הפינים TX ו- RX בזמן העלאת הקוד וחבר אותו לאחר ההעלאה.
כדי לממשק GPS עם STM32, ראשית עלינו להוריד ספרייה מקישור GitHub TinyGPSPlus. לאחר הורדת הספרייה, ניתן לכלול אותו ב- Arduino IDE על ידי סקיצה -> כלול ספרייה -> הוסף ספריית zip. באותה ספרייה ניתן להשתמש כדי לממשק GPS עם Arduino.
אז ראשית כללו את קבצי הספרייה הנחוצים והגדרו סיכות עבור 16x2 LCD:
#לִכלוֹל
ואז צור אובייקט בשם gps מהמחלקה TinyGPSPlus.
GPS של TinyGPSPlus;
לאחר מכן בהתקנת הריק , התחל את התקשורת הטורית עם מודול ה- GPS באמצעות Serial1.begin (9600). Serial1 משמש כיציאה טורית 1 (Pins-PA9, PA10) של STM32F103C8.
סדרה 1. התחיל (9600);
לאחר מכן הצג הודעת קבלת פנים למשך זמן מה.
lcd.begin (16,2); lcd.print ("מעגל עיכול"); lcd.setCursor (0,1); lcd.print ("STM32 עם GPS"); עיכוב (4000); lcd.clear ();
לאחר מכן בלולאת הריק (), אנו מקבלים קו רוחב ואורך מה- GPS ובודקים האם הנתונים שהתקבלו תקפים או לא ומציגים מידע בצג הטורי וב- LCD.
בודק אם נתוני המיקום הזמינים תקפים או לא
loc_valid = gps.location.isValid ();
מקבל את נתוני הרוחב
lat_val = gps.location.lat ();
מקבל את נתוני האורך
lng_val = gps.location.lng ();
אם מתקבלים נתונים לא חוקיים הוא מציג "*****" בצג הסדרתי ומציג "מחכה" ב- LCD.
אם (! loc_valid) { lcd.print ("מחכה"); Serial.print ("קו רוחב:"); Serial.println ("*****"); Serial.print ("קו אורך:"); Serial.println ("*****"); עיכוב (4000); lcd.clear (); }
אם מתקבלים נתונים תקפים קו הרוחב והאורך מוצגים על גבי צג סדרתי וכן על צג LCD.
lcd.clear (); Serial.println ("קריאת GPS:"); Serial.print ("קו רוחב:"); Serial.println (lat_val, 6); lcd.setCursor (0,0); lcd.print ("LAT:"); lcd.print (lat_val, 6); Serial.print ("קו אורך:"); Serial.println (lng_val, 6); lcd.setCursor (0,1); lcd.print ("LONG:"); lcd.print (lng_val, 6); עיכוב (4000);
הפונקציה הבאה מספקת את העיכוב לקריאת הנתונים. זה ממשיך לחפש את הנתונים ביציאה הטורית.
סטטי חלל GPSDelay (לא חתום זמן ארוך) { התחלה ארוכה לא חתומה = מילי (); לעשות { while (Serial1.available ()) gps.encode (Serial1.read ()); } בעוד (מיליס () - התחל <ms); }
איתור קו רוחב ואורך באמצעות GPS ו- STM32
לאחר בניית ההתקנה והעלאת הקוד, הקפד למקם את מודול ה- GPS בשטח פתוח כדי לקבל את האות במהירות. לפעמים לוקח כמה דקות לקבל אות, אז המתן זמן מה. נורית ה- LED תתחיל להבהב במודול ה- GPS כאשר הוא מתחיל לקבל אות וקואורדינטות המיקום יוצגו על צג ה- LCD.
תוכל לאמת את קו הרוחב והאורך של המיקום באמצעות מפות Google. פשוט היכנס למפות Google עם GPS מופעל ולחץ על הנקודה הכחולה. זה יראה את הכתובת עם קו רוחב ואורך כפי שמוצג בתמונה למטה
וידאו הקוד והדגמה המלא הוא כדלקמן.