Ci sono molti satelliti GPS intorno alla Terra che vengono utilizzati per fornire la posizione esatta di qualsiasi luogo. Insieme alle coordinate della posizione (latitudine e longitudine), fornisce anche altri dati come ora, data, altitudine, angolo di rilevamento della direzione, ecc. Abbiamo già imparato a leggere questi dati GPS dal satellite utilizzando Arduino. Quindi creeremo un orologio GPS utilizzando i dati di "Ora e data" dal satellite GPS. L'orologio GPS aggiornato è molto preciso e fornisce i dati in tempo reale con una precisione di millisecondi.
Componenti:
- Arduino Uno
- Modulo GPS
- LCD 16x2
- Cavi di collegamento
- Alimentazione elettrica
Spiegazione di lavoro:
Il modulo GPS invia i dati in formato NMEA, vedere l'output dei dati GPS nello screenshot sottostante. Il formato NMEA è composto da diverse frasi, in cui abbiamo bisogno di una frase per estrarre la data e l'ora. Questa frase parte da $ GPRMC e contiene le coordinate, l'ora e altre informazioni utili. Questo $ GPRMC si riferisce ai dati GPS / di transito specifici minimi consigliati e la lunghezza di questa stringa è di circa 70 caratteri. Abbiamo precedentemente estratto la stringa $ GPGGA nel sistema di tracciamento dei veicoli per trovare le coordinate di latitudine e longitudine. Ecco l'output GPS:
E la stringa $ GPRMC contiene principalmente velocità, ora, data e posizione
$ GPRMC, 123519.000, A, 7791.0381, N, 06727.4434, E, 022.4,084.4,230394,003.1, W * 6 A $ GPRMC, HHMMSS.SSS, A, latitudine, N, longitudine, E, velocità, angolo, data, MV, W, CMD
Identificatore |
Descrizione |
RMC |
Frase minima consigliata C |
HHMMSS.SSS |
Tempo in formato ora minuti secondi e millisecondi. |
UN |
Status // A = attivo e V = void |
Latitudine |
Latitudine 49 gradi. 16.45 min. Nord |
N |
Direzione N = Nord, S = Sud |
Longitudine |
Longitudine (coordinate) |
E |
Direzione E = Est, W = Ovest |
Velocità |
velocità in nodi |
Angolo |
Angolo di tracciamento in gradi |
Data |
DATE in UTC |
MV |
Variazione magnetica |
W |
Direzione di variazione E / O |
CMD (* 6A) |
Dati di checksum |
Possiamo estrarre ora e data dalla stringa $ GPRMC contando le virgole nella stringa. Con l'aiuto di Arduino e della programmazione, troviamo la stringa $ GPRMC e la memorizziamo in un array, quindi Time (formato 24 ore) può essere trovato dopo una virgola e Date può essere trovato dopo nove virgole. Ora e data vengono ulteriormente salvate in stringhe.
Un satellite GPS fornisce l'ora e la data in UTC (Coordinated Universal Time), quindi dobbiamo convertirle di conseguenza. Per convertire in base all'ora indiana, abbiamo aggiunto 5:30 in ora UTC, poiché l'ora indiana è 5 ore e mezza avanti rispetto a UTC / GMT.
Schema elettrico:
Le connessioni ai circuiti dell'orologio GPS Arduino sono semplici. Arduino è utilizzato per controllare l'intero processo, riceve i dati GPS dal satellite attraverso il modulo GPS, estrae la data e l'ora dalla stringa $ GPRMC e le mostra sul display LCD.
I pin dati D4, D5, D6, D7 dell'LCD 16x2 sono collegati al pin n. 5, 4, 3, 2 di Arduino e pin di comando RS ed EN di LCD sono collegati rispettivamente ai pin 7 e 6 di Arduino. Il pin Tx del modulo ricevitore GPS è collegato al pin Rx 10 di Arduino. Il PIN di terra di Arduino e il GPS sono collegati tra loro. Qui abbiamo utilizzato il modulo GPS SKG13BL, funzionante a una velocità di trasmissione di 9800 bps. Arduino è anche configurato a 9800 bps baud rate utilizzando la funzione "Serial.begin (9800)".
Spiegazione della programmazione:
Nella prima parte della programmazione includiamo le librerie e definiamo i pin per la comunicazione seriale LCD e software. Definire anche alcune variabili con array per la memorizzazione dei dati. Usando la Software Serial Library qui, abbiamo consentito la comunicazione seriale sui pin 10 e 11 e li abbiamo resi rispettivamente Rx e Tx. Di default i Pin 0 e 1 di Arduino sono usati per la comunicazione seriale ma utilizzando la libreria SoftwareSerial, possiamo consentire la comunicazione seriale su altri pin digitali di Arduino
#includere
Dopo di che abbiamo inizializzato la comunicazione seriale e l'LCD nella funzione di configurazione e abbiamo mostrato un messaggio di benvenuto sull'LCD.
Quindi abbiamo estratto l'ora e la data dalla stringa ricevuta.
mentre (x
Quindi converti l'ora e la data in decimale e modificale nell'ora indiana (UTC +5: 30)
int UTC_hourDec = UTC_hour.toInt (); int UTC_minutDec = UTC_minut.toInt (); int secondo = UTC_second.toInt (); int Date = UTC_date.toInt (); int Month = UTC_month.toInt ();……………
E poi finalmente l'ora e la data sono state visualizzate sul display LCD utilizzando la funzione lcd.print , controlla il codice completo di seguito.