- Komponenter, der kræves
- GPS-modul
- Pin ud af STM32F103C8
- Kredsløbsdiagram og forbindelser
- Programmering STM32F103C8 til GPS-modulgrænseflade
- Find bredde- og længdegrad med GPS og STM32
GPS står for Global Positioning System og bruges til at registrere bredde og længdegrad for enhver placering på jorden med nøjagtig UTC-tid (Universal Time Coordinated). Denne enhed modtager koordinaterne fra satellitten for hvert sekund med tid og dato. GPS giver stor nøjagtighed og giver også andre data udover positionskoordinater.
Vi ved alle, at GPS er en meget nyttig enhed og meget almindeligt anvendt i mobiltelefoner og andre bærbare enheder til sporing af placeringen. Det har meget bred vifte af applikationer inden for alle områder fra at ringe til taxaen derhjemme for at spore flyets højde. Her er nogle nyttige GPS-relaterede projekter, vi tidligere har bygget:
- Køretøjssporingssystem
- GPS-ur
- System til alarmdetektering
- Raspberry Pi GPS-modul Interfacing-vejledning
- Interfacing GPS-modul med PIC-mikrocontroller
Her i denne vejledning vil vi interface et GPS-modul med STM32F103C8 mikrokontroller for at finde placeringskoordinaterne og vise dem på 16x2 LCD-skærm.
Komponenter, der kræves
- STM32F103C8 Microcontroller
- GPS-modul
- 16x2 LCD-skærm
- Brødbræt
- Tilslutning af ledninger
GPS-modul
Det er et GY-NEO6MV2 XM37-1612 GPS-modul. Dette GPS-modul har fire pin + 5V, GND, TXD og RXD. Den kommunikerer ved hjælp af serielle ben og kan let interfaceres med den serielle port på STM32F103C8.
GPS-modulet sender dataene i NMEA-format (se skærmbilledet nedenfor). NMEA-format består af flere sætninger, hvor vi kun har brug for en sætning. Denne sætning starter fra $ GPGGA og indeholder koordinater, tid og andre nyttige oplysninger. Denne GPGGA henvises til data om Global Positioning System Fix. Lær mere om læsning af GPS-data og dens strenge her.
Nedenfor er en prøve $ GPGGA-streng sammen med beskrivelsen:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0,9,510,4, M, 43,9, M,, * 47
$ GPGGA, HHMMSS.SSS, breddegrad, N, længdegrad, E, FQ, NOS, HDP, højde, M, højde, M,, kontrolsumdata
Men her i denne vejledning bruger vi et TinyGPSPlus GPS-bibliotek, der udtrækker al den nødvendige information fra NMEA-sætningen, og vi skal bare skrive en simpel kodelinje for at få bredde og længde, som vi vil se senere i vejledningen.
Pin ud af STM32F103C8
STM32F103C8 (BLÅ PILLE) USART seriel kommunikationsporte vises i nedenstående pin-out-billede. Disse er blåfarvede med (PA9-TX1, PA10- RX1, PA2-TX2, PA3- RX2, PB10-TX3, PB11- RX3). Det har tre sådanne kommunikationskanaler.
Kredsløbsdiagram og forbindelser
Kredsforbindelser mellem GPS-modul og STM32F103C8
GPS-modul |
STM32F103C8 |
RXD |
PA9 (TX1) |
TXD |
PA10 (RX1) |
+ 5V |
+ 5V |
GND |
GND |
Forbindelser mellem 16x2 LCD og STM32F103C8
LCD-stift nr |
LCD-pin-navn |
STM32 Pin-navn |
1 |
Jord (GND) |
Jord (G) |
2 |
VCC |
5V |
3 |
VEE |
Pin fra Center of Potentiometer |
4 |
Registrer Vælg (RS) |
PB11 |
5 |
Læs / skriv (RW) |
Jord (G) |
6 |
Aktivér (EN) |
PB10 |
7 |
Databit 0 (DB0) |
Ingen forbindelse (NC) |
8 |
Databit 1 (DB1) |
Ingen forbindelse (NC) |
9 |
Databit 2 (DB2) |
Ingen forbindelse (NC) |
10 |
Databit 3 (DB3) |
Ingen forbindelse (NC) |
11 |
Data Bit 4 (DB4) |
PB0 |
12 |
Databit 5 (DB5) |
PB1 |
13 |
Databit 6 (DB6) |
PC13 |
14 |
Databit 7 (DB7) |
PC14 |
15 |
LED Positiv |
5V |
16 |
LED negativ |
Jord (G) |
Hele opsætningen ser ud som nedenfor:
Programmering STM32F103C8 til GPS-modulgrænseflade
Komplet program til at finde placering ved hjælp af GPS-modul ved hjælp af STM32 gives i slutningen af dette projekt. STM32F103C8 kan programmeres ved hjælp af Arduino IDE ved blot at slutte den til pc via USB-port. Sørg for at fjerne stifterne TX og RX, mens du uploader kode, og tilslut den efter upload.
For at interface GPS med STM32 skal vi først downloade et bibliotek fra GitHub-linket TinyGPSPlus. Efter download af biblioteket kan det inkluderes i Arduino IDE ved at skitse -> Inkluder bibliotek -> Tilføj.zip-bibliotek. Samme bibliotek kan bruges til at interface GPS med Arduino.
Så inkluder først de nødvendige biblioteksfiler og definer stifter til 16x2 LCD:
#omfatte
Opret derefter et objekt med navnet gps i klassen TinyGPSPlus.
TinyGPSPlus GPS;
Næste i tomrum opsætning , begynder den serielle kommunikation med GPS-modulet ved hjælp Serial1.begin (9600). Serial1 bruges som Serial 1-port (Pins-PA9, PA10) på STM32F103C8.
Serial1.begin (9600);
Vis derefter velkomstbesked i et stykke tid.
lcd.begin (16,2); lcd.print ("Circuit Digest"); lcd.setCursor (0,1); lcd.print ("STM32 med GPS"); forsinkelse (4000); lcd.clear ();
Dernæst i hulrummet () modtager vi breddegrad og længdegrad fra GPS'en og kontrollerer, om de modtagne data er gyldige eller ej, og viser oplysninger i den serielle skærm og LCD.
Kontrollerer, om de tilgængelige placeringsdata er gyldige eller ej
loc_valid = gps.location.isValid ();
Modtager breddegrad
lat_val = gps.location.lat ();
Modtager længdegradens data
lng_val = gps.location.lng ();
Hvis der modtages ugyldige data, vises "*****" i seriel skærm og display "venter" i LCD.
hvis (! loc_valid) { lcd.print ("Waiting"); Serial.print ("Latitude:"); Serial.println ("*****"); Serial.print ("Longitude:"); Serial.println ("*****"); forsinkelse (4000); lcd.clear (); }
Hvis der modtages gyldige data, vises bredde- og længdegrad på seriel skærm såvel som på LCD-skærm.
lcd.clear (); Serial.println ("GPS-LÆSNING:"); 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 ("LANG:"); lcd.print (lng_val, 6); forsinkelse (4000);
Følgende funktion giver forsinkelsen for at læse dataene. Det fortsætter med at lede efter dataene på den serielle port.
statisk ugyldigt GPSDelay (usigneret lang ms) { usigneret lang start = millis (); gør { while (Serial1.available ()) gps.encode (Serial1.read ()); } mens (millis () - start <ms); }
Find bredde- og længdegrad med GPS og STM32
Når du har bygget opsætningen og uploadet koden, skal du sørge for at placere GPS-modulet i åbent område for at modtage signalet hurtigt. Nogle gange tager det få minutter at modtage signal, så vent et stykke tid. LED'en begynder at blinke i GPS-modulet, når det begynder at modtage signal, og placeringskoordinater vises på LCD-displayet.
Du kan kontrollere stedets bredde og længdegrad ved hjælp af Google maps. Gå bare til Google maps med GPS slået TIL, og klik på den blå prik. Den viser adressen med bredde- og længdegrad som vist på billedet nedenfor
Den komplette kode og demonstrationsvideo er angivet nedenfor.