- Szükséges alkatrészek
- GPS modul
- Tűz ki az STM32F103C8-ból
- Áramkör és kapcsolatok
- STM32F103C8 programozása a GPS modul interfészéhez
- Szélesség és hosszúság keresése GPS és STM32 segítségével
A GPS a globális helymeghatározó rendszert jelenti, és a Föld bármely pontjának szélességi és hosszúsági fokának érzékelésére szolgál, pontos UTC idővel (Universal Time Coordinated). Ez az eszköz másodpercenként megkapja a műhold koordinátáit, az idővel és a dátummal együtt. A GPS nagy pontosságot kínál, és a helyzetkoordinátákon kívül más adatokat is szolgáltat.
Mindannyian tudjuk, hogy a GPS nagyon hasznos eszköz, és nagyon gyakran használják mobiltelefonokban és más hordozható készülékekben a hely követésére. Nagyon széles körű alkalmazási területe van minden téren, kezdve az otthoni taxihívástól a repülőgépek magasságának nyomon követéséig. Íme néhány hasznos GPS-hez kapcsolódó projekt, amelyeket korábban építettünk:
- Járműkövető rendszer
- GPS óra
- Baleset-észlelő riasztórendszer
- Raspberry Pi GPS modul interfész bemutató
- Interfacing GPS modul és PIC mikrokontroller
Ebben az oktatóanyagban összekapcsolunk egy GPS-modult az STM32F103C8 mikrovezérlővel, hogy megtaláljuk a helykoordinátákat és megjelenítsük őket 16x2 LCD-kijelzőn.
Szükséges alkatrészek
- STM32F103C8 mikrovezérlő
- GPS modul
- 16x2 LCD kijelző
- Kenyérlemez
- Vezetékek csatlakoztatása
GPS modul
Ez egy GY-NEO6MV2 XM37-1612 GPS modul. Ennek a GPS modulnak négy tűs + 5 V, GND, TXD és RXD van. A soros csapok segítségével kommunikál, és könnyen összekapcsolható az STM32F103C8 soros portjával.
A GPS modul az adatokat NMEA formátumban küldi (lásd az alábbi képernyőképet). Az NMEA formátum több mondatból áll, amelyekben csak egy mondatra van szükségünk. Ez a mondat a $ GPGGA- tól kezdődik, és tartalmazza a koordinátákat, az időt és egyéb hasznos információkat. Ez a GPGGA a Globális Helymeghatározó Rendszer Javítási Adataira utal. Tudjon meg többet a GPS-adatok és azok húrjainak olvasásáról itt.
Az alábbiakban látható egy minta a $ GPGGA karakterláncról, annak leírásával együtt:
GPGGA, 104534.000.7791.0381, N, 06727.4434, E, 1.08,0.9.510.4, M, 43.9, M,, * 47
$ GPGGA, HHMMSS.SSS, szélesség, N, hosszúság, K, FQ, NOS, HDP, magasság, M, magasság, M,, ellenőrző összeg adatok
De ebben az oktatóanyagban egy TinyGPSPlus GPS könyvtárat használunk, amely kivonja az összes szükséges információt az NMEA mondatból, és csak be kell írnunk egy egyszerű kódsort, hogy megkapjuk a szélességet és hosszúságot, amelyet később az oktatóanyagban láthatunk..
Tűz ki az STM32F103C8-ból
Az STM32F103C8 (KÉK PILL) USART soros kommunikációs portok az alábbi pin out képen láthatók. Ezek kék színűek (PA9-TX1, PA10-RX1, PA2-TX2, PA3-RX2, PB10-TX3, PB11-RX3). Három ilyen kommunikációs csatornája van.
Áramkör és kapcsolatok
Áramköri kapcsolatok a GPS-modul és az STM32F103C8 között
GPS modul |
STM32F103C8 |
RXD |
PA9 (TX1) |
TXD |
PA10 (RX1) |
+ 5V |
+ 5V |
GND |
GND |
Csatlakozások 16x2 LCD és STM32F103C8 között
LCD tű sz |
LCD tű neve |
STM32 tű neve |
1 |
Föld (Gnd) |
Föld (G) |
2 |
VCC |
5V |
3 |
VEE |
Tű a potenciométer közepétől |
4 |
Register Select (RS) |
PB11 |
5. |
Olvasás / írás (RW) |
Föld (G) |
6. |
Engedélyezés (EN) |
PB10 |
7 |
0. adatbit (DB0) |
Nincs kapcsolat (NC) |
8. |
1. adatbit (DB1) |
Nincs kapcsolat (NC) |
9. |
2. adatbit (DB2) |
Nincs kapcsolat (NC) |
10. |
3. adatbit (DB3) |
Nincs kapcsolat (NC) |
11. |
4. adatbit (DB4) |
PB0 |
12. |
5. adatbit (DB5) |
PB1 |
13. |
6. adatbit (DB6) |
PC13 |
14 |
7. adatbit (DB7) |
PC14 |
15 |
LED pozitív |
5V |
16. |
LED negatív |
Föld (G) |
A teljes beállítás az alábbiak szerint fog kinézni:
STM32F103C8 programozása a GPS modul interfészéhez
A projekt végén megtalálható egy teljes program a hely megkereséséhez az STM32 segítségével GPS-modullal. Az STM32F103C8 programozható az Arduino IDE segítségével, egyszerűen USB porton keresztül csatlakoztatva a számítógéphez. Ügyeljen arra, hogy a kód feltöltése közben távolítsa el a TX és RX csapokat, majd feltöltés után csatlakoztassa azokat.
A GPS és az STM32 összekapcsolása érdekében először le kell töltenünk egy könyvtárat a TinyGPSPlus GitHub linkről. A könyvtár letöltése után beilleszthető az Arduino IDE-be a Sketch -> Könyvtár belefoglalása ->.zip könyvtár hozzáadása menüpontba. Ugyanaz a könyvtár használható a GPS és az Arduino összekapcsolására.
Tehát először csatolja a szükséges könyvtárfájlokat, és határozza meg a 16x2 LCD-t:
#include
Ezután hozzon létre a TinyGPSPlus osztály gps nevű objektumát.
TinyGPSPlus GPS;
Ezután a void beállításban kezdje meg a soros kommunikációt a GPS-modullal a Serial1.begin (9600) használatával. A Serial1-et használják az STM32F103C8 1. soros portjaként (Pins-PA9, PA10).
Serial1.begin (9600);
Ezután egy ideig üdvözlő üzenetet jelenítsen meg.
lcdbegin (16,2); lcd.print ("Circuit Digest"); lcd.setCursor (0,1); lcd.print ("STM32 GPS-szel"); késés (4000); lcd.clear ();
Ezután a void loop () mezőben megkapjuk a szélességi és hosszúsági adatokat a GPS-től, és ellenőrizzük, hogy a kapott adatok érvényesek-e vagy sem, és információkat jelenítünk meg a soros monitoron és az LCD-n.
Annak ellenőrzése, hogy a rendelkezésre álló helyadatok érvényesek-e vagy sem
loc_valid = gps.location.isValid ();
Megkapja a szélességi adatokat
lat_val = gps.location.lat ();
Megkapja a hosszúsági adatokat
lng_val = gps.location.lng ();
Ha érvénytelen adat érkezik, a soros monitoron a „*****” felirat jelenik meg, az LCD-n pedig a „várakozás” felirat jelenik meg.
if (! loc_valid) { lcd.print ("Várakozás"); Serial.print ("Szélesség:"); Soros.println ("*****"); Serial.print ("Hosszúság:"); Soros.println ("*****"); késés (4000); lcd.clear (); }
Érvényes adatok esetén a szélességi és hosszúsági értékek megjelennek a soros monitoron, valamint az LCD kijelzőn.
lcd.clear (); Serial.println ("GPS OLVASÁS:"); Serial.print ("Szélesség:"); Soros.println (lat_val, 6); lcd.setCursor (0,0); lcd.print ("LAT:"); lcd.print (lat_val, 6); Serial.print ("Hosszúság:"); Soros.println (lng_val, 6); lcd.setCursor (0,1); lcd.print ("HOSSZÚ:"); lcd.print (lng_val, 6); késés (4000);
A következő funkció biztosítja az adatok olvasásának késleltetését. Folyamatosan keresi az adatokat a soros porton.
static void GPSDelay (unsigned long ms) { unsigned long start = millis (); do { while (Serial1.available ()) gps.encode (Serial1.read ()); } while (millis () - start <ms); }
Szélesség és hosszúság keresése GPS és STM32 segítségével
A beállítás felépítése és a kód feltöltése után feltétlenül helyezze a GPS modult nyitott területre a jel gyors fogadása érdekében. Néha néhány percbe telik a jel vétele, ezért várjon egy ideig. A LED villogni kezd a GPS modulban, amikor elkezd jelet fogadni, és a hely koordinátái megjelennek az LCD kijelzőn.
A Google Maps segítségével ellenőrizheti a hely szélességi és hosszúsági fokát. Csak menjen a Google maps-be bekapcsolt GPS-sel, és kattintson a kék pontra. Megjeleníti a címet a szélességi és hosszúsági fokokkal, amint az az alábbi képen látható
A teljes kód és a bemutató videó az alábbiakban található.