- Būtini komponentai
- GPS modulis
- Prisegti iš STM32F103C8
- Grandinės schema ir jungtys
- STM32F103C8 programavimas GPS modulių sąsajai
- Platumos ir ilgumos paieška naudojant GPS ir STM32
GPS reiškia pasaulinę padėties nustatymo sistemą ir naudojamas nustatyti bet kurios žemės vietos platumą ir ilgumą, nurodant tikslų UTC laiką (universalusis laikas koordinuojamas). Šis prietaisas gauna koordinates iš palydovo kiekvienai sekundei, nurodydamas laiką ir datą. GPS siūlo puikų tikslumą ir pateikia kitus duomenis, išskyrus padėties koordinates.
Mes visi žinome, kad GPS yra labai naudingas įrenginys ir labai dažnai naudojamas mobiliuosiuose telefonuose ir kituose nešiojamuosiuose įrenginiuose vietovės sekimui. Jis turi labai platų pritaikymo spektrą visose srityse, pradedant taksi iškvietimu namuose ir sekant lėktuvų aukštį. Štai keletas naudingų su GPS susijusių projektų, kuriuos mes sukūrėme anksčiau:
- Transporto priemonės sekimo sistema
- GPS laikrodis
- Avarijų aptikimo perspėjimo sistema
- „Raspberry Pi“ GPS modulio sąsajos pamoka
- Sąsajos GPS modulis su PIC mikrovaldikliu
Čia, šioje pamokoje, susiesime GPS modulį su STM32F103C8 mikrovaldikliu, kad rastume vietos koordinates ir parodytume jas 16x2 LCD ekrane.
Būtini komponentai
- STM32F103C8 mikrovaldiklis
- GPS modulis
- 16x2 LCD ekranas
- Bandomoji Lenta
- Laidų sujungimas
GPS modulis
Tai GY-NEO6MV2 XM37-1612 GPS modulis. Šis GPS modulis turi keturių kontaktų + 5 V, GND, TXD ir RXD. Jis palaiko ryšį naudodamas serijinius kaiščius ir gali būti lengvai suderinamas su STM32F103C8 nuosekliuoju prievadu.
GPS modulis duomenis siunčia NMEA formatu (žr. Toliau pateiktą ekrano kopiją). NMEA formatas susideda iš kelių sakinių, kuriuose mums reikia tik vieno sakinio. Šis sakinys prasideda nuo $ GPGGA ir jame yra koordinatės, laikas ir kita naudinga informacija. Ši GPGGA vadinama visuotinės padėties nustatymo sistemos taisymo duomenimis. Sužinokite daugiau apie GPS duomenų ir jų eilučių skaitymą čia.
Žemiau yra vienas pavyzdys $ GPGGA eilutės kartu su jos aprašymu:
GPGGA, 104534.000, 7791.0381, N, 06727.4434, E, 1,08,0.9,510,4, M, 43,9, M,, * 47
$ GPGGA, HHMMSS.SSS, platuma, N, ilguma, E, FQ, NOS, HDP, aukštis, M, aukštis, M, kontrolinės sumos duomenys
Bet čia, šioje pamokoje, mes naudojame „ TinyGPSPlus“ GPS biblioteką, kuri ištraukia visą reikiamą informaciją iš NMEA sakinio, ir mums tiesiog reikia parašyti paprastą kodo eilutę, kad gautume platumą ir ilgumą, kurią pamatysime vėliau pamokoje..
Prisegti iš STM32F103C8
STM32F103C8 (BLUE PILL) „USART“ nuosekliojo ryšio prievadai rodomi žemiau esančiame „pin out“ paveikslėlyje. Tai yra mėlynos spalvos (PA9-TX1, PA10-RX1, PA2-TX2, PA3-RX2, PB10-TX3, PB11-RX3). Ji turi tris tokius ryšio kanalus.
Grandinės schema ir jungtys
Grandinės jungtys tarp GPS modulio ir STM32F103C8
GPS modulis |
STM32F103C8 |
RXD |
PA9 (TX1) |
TXD |
PA10 (RX1) |
+ 5 V |
+ 5 V |
BND |
BND |
Jungtys tarp 16x2 LCD ir STM32F103C8
LCD kaiščio Nr |
LCD smeigtuko pavadinimas |
STM32 kaiščio pavadinimas |
1 |
Žemė (Gnd) |
Žemė (G) |
2 |
VCC |
5V |
3 |
VEE |
Kaištis iš potenciometro centro |
4 |
„Register Select“ (RS) |
PB11 |
5 |
Skaityti / rašyti (RW) |
Žemė (G) |
6 |
Įgalinti (EN) |
PB10 |
7 |
0 duomenų bitas (DB0) |
Nėra ryšio (NC) |
8 |
1 duomenų bitas (DB1) |
Nėra ryšio (NC) |
9 |
2 duomenų bitas (DB2) |
Nėra ryšio (NC) |
10 |
3 duomenų bitas (DB3) |
Nėra ryšio (NC) |
11 |
4 duomenų bitas (DB4) |
PB0 |
12 |
5 duomenų bitas (DB5) |
PB1 |
13 |
6 duomenų bitas (DB6) |
PC13 |
14 |
7 duomenų bitas (DB7) |
PC14 |
15 |
LED teigiamas |
5V |
16 |
LED neigiamas |
Žemė (G) |
Visa sąranka atrodys taip:
STM32F103C8 programavimas GPS modulių sąsajai
Užbaigta programa vietos nustatymui naudojant GPS modulį naudojant STM32 pateikiama šio projekto pabaigoje. STM32F103C8 galima užprogramuoti naudojant „Arduino IDE“, tiesiog prijungus jį prie kompiuterio per USB prievadą. Įkeldami kodą, būtinai nuimkite kaiščius „TX“ ir „RX“, o įkėlę juos prijunkite.
Norėdami susieti GPS su STM32, pirmiausia turime atsisiųsti biblioteką iš „GitHub“ nuorodos „TinyGPSPlus“. Atsisiųsdami biblioteką, ją galima įtraukti į „Arduino IDE“, eskizuojant -> Įtraukti biblioteką -> Pridėti.zip biblioteką. Ta pati biblioteka gali būti naudojama GPS sąsajai su „Arduino“.
Taigi pirmiausia įtraukite reikiamus bibliotekos failus ir apibrėžkite 16x2 LCD ekrano kaiščius:
# įtraukti
Tada sukurkite „ TinyGPSPlus“ klasės objektą, pavadintą „ GPS“ .
„TinyGPSPlus“ GPS;
Tada atlikdami tuščią sąranką pradėkite nuoseklų ryšį su GPS moduliu naudodami „ Serial1.begin“ (9600). „Serial1“ naudojamas kaip STM32F103C8 „Serial 1“ prievadas (kaiščiai-PA9, PA10).
Serial1.begin (9600);
Tada kurį laiką rodykite pasveikinimo pranešimą.
lcd.prade (16,2); lcd.print („Grandinės santrauka“); lcd.setCursor (0,1); lcd.print („STM32 su GPS“); vėlavimas (4000); lcd.clear ();
Toliau tuščioje kilpoje (), mes gauname platumą ir ilgumą iš GPS ir patikriname, ar gauti duomenys teisingi, ar ne, ir rodome informaciją serijiniame monitoriuje ir LCD.
Tikrinama, ar galimi vietos duomenys yra teisingi, ar ne
loc_valid = gps.location.isValid ();
Gauna platumos duomenis
lat_val = gps.location.lat ();
Gauna ilgumos duomenis
lng_val = gps.location.lng ();
Jei gaunami neteisingi duomenys, serijos monitoriuje rodoma „*****“, o LCD ekrane rodoma „laukiama“.
if (! loc_valid) { lcd.print ("Laukiu"); Serial.print („Platuma:“); Serial.println ("*****"); Serial.print („Ilguma:“); Serial.println ("*****"); vėlavimas (4000); lcd.clear (); }
Jei gaunami galiojantys duomenys, platuma ir ilguma rodomi serijiniame monitoriuje ir LCD ekrane.
lcd.clear (); Serial.println ("GPS SKAITYMAS:"); Serial.print („Platuma:“); Serial.println (lat_val, 6); lcd.setCursor (0,0); lcd.print ("LAT:"); lcd.print (lat_val, 6); Serial.print („Ilguma:“); Serial.println (lng_val, 6); lcd.setCursor (0,1); lcd.print ("ILGAI:"); lcd.print (lng_val, 6); vėlavimas (4000);
Ši funkcija suteikia uždelsimą skaityti duomenis. Jis vis ieško duomenų nuosekliajame prievade.
static void GPSDelay (nepasirašyta ilga ms) { nepasirašyta ilga pradžia = milis (); do { while (Serial1.available ()) gps.encode (Serial1.read ()); } while (milis () - pradžia <ms); }
Platumos ir ilgumos paieška naudojant GPS ir STM32
Sukūrę sąranką ir įkėlę kodą, būtinai padėkite GPS modulį atviroje vietoje, kad greitai gautumėte signalą. Kartais užtrunka kelias minutes, kol gaunamas signalas, todėl palaukite šiek tiek laiko. Šviesos diodas pradės mirksėti GPS modulyje, kai pradės priimti signalą, o LCD ekrane bus rodomos vietos koordinatės.
Vietos platumą ir ilgumą galite patikrinti naudodami „Google maps“. Tiesiog eikite į „Google maps“ įjungę GPS ir spustelėkite mėlyną tašką. Tai parodys adresą su platuma ir ilguma, kaip parodyta paveikslėlyje žemiau
Visas kodas ir parodomasis vaizdo įrašas pateikiami žemiau.