- Componenti richiesti
- Modulo GPS
- Pin fuori STM32F103C8
- Schema elettrico e collegamenti
- Programmazione STM32F103C8 per interfacciamento modulo GPS
- Trovare latitudine e longitudine con GPS e STM32
GPS è l'acronimo di Global Positioning System e viene utilizzato per rilevare la latitudine e la longitudine di qualsiasi luogo sulla Terra, con l'ora esatta UTC (Universal Time Coordinated). Questo dispositivo riceve le coordinate dal satellite per ogni secondo, con ora e data. Il GPS offre una grande precisione e fornisce anche altri dati oltre alle coordinate di posizione.
Sappiamo tutti che il GPS è un dispositivo molto utile e molto comunemente utilizzato nei telefoni cellulari e altri dispositivi portatili per tracciare la posizione. Ha una gamma molto ampia di applicazioni in ogni campo, dalla chiamata del taxi a casa tua al monitoraggio dell'altitudine degli aerei. Ecco alcuni utili progetti relativi al GPS, che abbiamo costruito in precedenza:
- Sistema di tracciamento dei veicoli
- Orologio GPS
- Sistema di allarme rilevamento incidenti
- Tutorial sull'interfacciamento del modulo GPS Raspberry Pi
- Interfacciamento del modulo GPS con il microcontrollore PIC
Qui in questo tutorial, interfacciamo un modulo GPS con il microcontrollore STM32F103C8 per trovare le coordinate della posizione e visualizzarle sul display LCD 16x2.
Componenti richiesti
- Microcontrollore STM32F103C8
- Modulo GPS
- Display LCD 16x2
- Breadboard
- Collegamento dei cavi
Modulo GPS
È un modulo GPS GY-NEO6MV2 XM37-1612. Questo modulo GPS ha quattro pin + 5V, GND, TXD e RXD. Comunica utilizzando i pin seriali e può essere facilmente interfacciato con la porta seriale dell'STM32F103C8.
Il modulo GPS invia i dati in formato NMEA (vedere lo screenshot sotto). Il formato NMEA è composto da più frasi, in cui è necessaria solo una frase. Questa frase parte da $ GPGGA e contiene le coordinate, l'ora e altre informazioni utili. Questo GPGGA è denominato Global Positioning System Fix Data. Scopri di più sulla lettura dei dati GPS e delle relative stringhe qui.
Di seguito è riportata una stringa $ GPGGA di esempio, insieme alla sua descrizione:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510.4, M, 43,9, M`` * 47
$ GPGGA, HHMMSS.SSS, latitudine, N, longitudine, E, FQ, NOS, HDP, altitudine, M, altezza, M, dati di checksum
Ma qui in questo tutorial, stiamo usando una libreria GPS TinyGPSPlus che estrae tutte le informazioni richieste dalla frase NMEA, e dobbiamo solo scrivere una semplice riga di codice per ottenere la latitudine e la longitudine, che vedremo più avanti nel tutorial.
Pin fuori STM32F103C8
Le porte di comunicazione seriale USART STM32F103C8 (PILLOLA BLU) sono mostrate nell'immagine dei pin di seguito. Questi sono di colore blu con (PA9-TX1, PA10- RX1, PA2-TX2, PA3- RX2, PB10-TX3, PB11- RX3). Dispone di tre di questi canali di comunicazione.
Schema elettrico e collegamenti
Collegamenti del circuito tra il modulo GPS e STM32F103C8
Modulo GPS |
STM32F103C8 |
RXD |
PA9 (TX1) |
TXD |
PA10 (RX1) |
+ 5V |
+ 5V |
GND |
GND |
Connessioni tra LCD 16x2 e STM32F103C8
N. pin LCD |
Nome pin LCD |
Nome pin STM32 |
1 |
Terra (Gnd) |
Terra (G) |
2 |
VCC |
5V |
3 |
VEE |
Pin dal centro del potenziometro |
4 |
Seleziona registro (RS) |
PB11 |
5 |
Lettura / scrittura (RW) |
Terra (G) |
6 |
Abilita (EN) |
PB10 |
7 |
Bit di dati 0 (DB0) |
Nessuna connessione (NC) |
8 |
Bit di dati 1 (DB1) |
Nessuna connessione (NC) |
9 |
Bit di dati 2 (DB2) |
Nessuna connessione (NC) |
10 |
Bit di dati 3 (DB3) |
Nessuna connessione (NC) |
11 |
Bit di dati 4 (DB4) |
PB0 |
12 |
Bit di dati 5 (DB5) |
PB1 |
13 |
Bit di dati 6 (DB6) |
PC13 |
14 |
Bit di dati 7 (DB7) |
PC14 |
15 |
LED positivo |
5V |
16 |
LED negativo |
Terra (G) |
L'intera configurazione apparirà come di seguito:
Programmazione STM32F103C8 per interfacciamento modulo GPS
Alla fine di questo progetto viene fornito un programma completo per la ricerca della posizione utilizzando il modulo GPS utilizzando STM32. STM32F103C8 può essere programmato utilizzando Arduino IDE semplicemente collegandolo al PC tramite porta USB. Assicurati di rimuovere i pin TX e RX durante il caricamento del codice e collegalo dopo il caricamento.
Per interfacciare il GPS con STM32, dobbiamo prima scaricare una libreria dal link GitHub TinyGPSPlus. Dopo aver scaricato la libreria, può essere inclusa nell'IDE di Arduino da Sketch -> Includi libreria -> Aggiungi libreria.zip. La stessa libreria può essere utilizzata per interfacciare il GPS con Arduino.
Quindi prima includi i file di libreria necessari e definisci i pin per LCD 16x2:
#includere
Quindi crea un oggetto chiamato gps della classe TinyGPSPlus.
TinyGPSPlus gps;
Successivamente, nella configurazione void , inizia la comunicazione seriale con il modulo GPS utilizzando Serial1.begin (9600). Serial1 viene utilizzata come porta Serial 1 (Pins-PA9, PA10) di STM32F103C8.
Serial1.begin (9600);
Quindi visualizzare il messaggio di benvenuto per un po 'di tempo.
lcd.begin (16,2); lcd.print ("Circuit Digest"); lcd.setCursor (0,1); lcd.print ("STM32 con GPS"); ritardo (4000); lcd.clear ();
Successivamente, nel loop void (), riceviamo latitudine e longitudine dal GPS e controlliamo se i dati ricevuti sono validi o meno e visualizziamo le informazioni nel monitor seriale e LCD.
Verificare se i dati sulla posizione disponibili sono validi o meno
loc_valid = gps.location.isValid ();
Riceve i dati di latitudine
lat_val = gps.location.lat ();
Riceve i dati di longitudine
lng_val = gps.location.lng ();
Se vengono ricevuti dati non validi, viene visualizzato "*****" sul monitor seriale e "in attesa" sul display LCD.
if (! loc_valid) { lcd.print ("Waiting"); Serial.print ("Latitude:"); Serial.println ("*****"); Serial.print ("Longitude:"); Serial.println ("*****"); ritardo (4000); lcd.clear (); }
Se vengono ricevuti dati validi, la latitudine e la longitudine vengono visualizzate sul monitor seriale e sul display 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); ritardo (4000);
La seguente funzione fornisce il ritardo per leggere i dati. Continua a cercare i dati sulla porta seriale.
static void GPSDelay (unsigned long ms) { unsigned long start = millis (); do { while (Serial1.available ()) gps.encode (Serial1.read ()); } while (millis () - inizio <ms); }
Trovare latitudine e longitudine con GPS e STM32
Dopo aver creato la configurazione e caricato il codice, assicurati di posizionare il modulo GPS in un'area aperta per ricevere il segnale velocemente. A volte ci vogliono pochi minuti per ricevere il segnale, quindi aspetta un po 'di tempo. Il LED inizierà a lampeggiare nel modulo GPS quando inizia a ricevere il segnale e le coordinate della posizione verranno visualizzate sul display LCD.
Puoi verificare la latitudine e la longitudine della posizione utilizzando le mappe di Google. Basta andare su Google Maps con il GPS attivato e fare clic sul punto blu. Mostrerà l'indirizzo con la latitudine e la longitudine come mostrato nell'immagine sotto
Di seguito vengono forniti il codice completo e il video dimostrativo.