- Components necessaris
- Obtenir dades d’ubicació des del GPS
- Esquema de connexions
- Passos per a la interfície GPS amb microcontrolador AVR
- Explicació del codi
Els mòduls GPS s’utilitzen àmpliament en aplicacions electròniques per fer un seguiment de la ubicació en funció de les coordenades de longitud i latitud. El sistema de rastreig de vehicles, el rellotge GPS, el sistema d’alerta de detecció d’accidents, la navegació del trànsit, el sistema de vigilància, etc., són alguns dels exemples en què la funcionalitat GPS és essencial. El GPS proporciona altitud, latitud, longitud, hora UTC i molta altra informació sobre la ubicació concreta, extreta de més d’un satèl·lit. Per llegir les dades del GPS, cal un microcontrolador, de manera que aquí estem interfaçant el mòdul GPS amb el microcontrolador AVR Atmega16 i imprimim la longitud i la latitud a la pantalla LCD de 16x2.
Components necessaris
- Atmega16 / 32
- Mòdul GPS (GPS uBlox Neo 6M)
- Antena de fil llarg
- LCD de 16x2
- Resistència de 2,2 k
- Condensador de 1000uf
- Condensador de 10uF
- Cable de connexió
- LM7805
- Jack DC
- Adaptador de 12 V CC
- Burgstips
- PCB o PCB d’ús general
Ublox Neo 6M és un mòdul GPS en sèrie que proporciona detalls de la ubicació a través de la comunicació en sèrie. Té quatre passadors.
|
Pin |
Descripció |
|
Vcc |
Font d'alimentació de 2,7 - 5V |
|
Gnd |
Terra |
|
TXD |
Transmet les dades |
|
RXD |
Rebre dades |

El mòdul GPS Ublox neo 6M és compatible amb TTL i les seves especificacions es donen a continuació.
|
Captureu el temps |
Inici fresc: 27 s, inici calent: 1 s |
|
Protocol de comunicació |
NMEA |
|
Comunicació en sèrie |
9600bps, 8 bits de dades, 1 bit d'aturada, sense paritat i sense control de flux |
|
Corrent de funcionament |
45mA |
Obtenir dades d’ubicació des del GPS
El mòdul GPS transmetrà dades en diverses cadenes a una velocitat de 9600 baudios. Si fem servir un terminal UART amb una velocitat de 9600 Baud, podem veure les dades rebudes pel GPS.
El mòdul GPS envia les dades de posició de seguiment en temps real en format NMEA (vegeu la captura de pantalla anterior). El format NMEA consta de diverses frases, a continuació es detallen quatre frases importants. Podeu trobar més detalls sobre la frase NMEA i el seu format de dades aquí.
- $ GPGGA: dades de correcció del sistema de posicionament global
- $ GPGSV: satèl·lits GPS a la vista
- $ GPGSA: GPS DOP i satèl·lits actius
- $ GPRMC: dades GPS / trànsit específiques mínimes recomanades
Obteniu més informació sobre les dades GPS i les cadenes NMEA aquí.
Aquestes són les dades que rep el GPS quan es connecta a una velocitat de 9600 bauds.
$ GPRMC, 141848,00, A, 2237,63306, N, 08820,86316, E, 0,555,, 100418 ,,, A * 73 $ GPVTG,, T,, M, 0,555, N, 1,024, K, A * 27 $ GPGGA, 141848,00, 2237.63306, N, 08820.86316, E, 1,03,2,56,1,9, M, -54,2, M,, * 74 $ GPGSA, A, 2,06,02,05,,,,,,,,,, 2,75, 2,56,1,00 * 02 $ GPGSV, 1,1,04,02,59,316,30,05,43,188,25,06,44,022,23,25,03,324, * 76 $ GPGLL, 2237,63306, N, 08820.86316, E, 141848.00, A, A * 65
Quan fem servir el mòdul GPS per rastrejar qualsevol ubicació, només necessitem coordenades i ho podem trobar a la cadena $ GPGGA. Només s’utilitza la cadena $ GPGGA (Global Positioning System Fix Data) en programes i s’ignoren altres cadenes.
$ GPGGA, 141848,00,2237,63306, N, 08820,86316, E, 1,03,2,56,1,9, M, -54,2, M,, * 74
Quin significat té aquesta línia?
El significat d’aquesta línia és: -
1. La cadena sempre comença amb un signe "$"
2. GPGGA significa Global Fixing System Fix Data
3. "," El coma indica la separació entre dos valors
4. 141848.00: hora GMT a les 14 (h): 18 (min): 48 (seg): 00 (ms)
5. 2237.63306, N: latitud 22 (grau) 37 (minuts) 63306 (seg) nord
6. 08820.86316, E: Longitud 088 (grau) 20 (minuts) 86316 (seg) Est
7. 1: Quantitat de correcció 0 = dades no vàlides, 1 = dades vàlides, 2 = correcció DGPS
8. 03: Nombre de satèl·lits visualitzats actualment.
9. 1.0: HDOP
10. 2,56, M: altitud (alçada sobre el nivell del mar en metres)
11. 1.9, M: Alçada dels geoides
12. * 74: suma de comprovació
Per tant, necessitem els números 5 i 6 per recollir informació sobre la ubicació del mòdul o on es troba. En aquest projecte hem utilitzat una biblioteca GPS que proporciona algunes funcions per extreure la latitud i la longitud, de manera que no ens hem de preocupar d'això.
Prèviament, hem interfície GPS amb altres microcontroladors:
- Com utilitzar el GPS amb Arduino
- Tutorial sobre interfície del mòdul GPS Raspberry Pi
- Mòdul GPS d’interfície amb microcontrolador PIC
- Feu un seguiment d'un vehicle a Google Maps mitjançant Arduino, ESP8266 i GPS
Consulteu aquí tots els projectes relacionats amb el GPS.
Esquema de connexions
A continuació es mostra el diagrama de circuits per a la interfície GPS amb el microcontrolador AVR Atemga16:

Tot el sistema funciona amb un adaptador de 12 V CC, però els circuits funcionen a 5 V, de manera que la font d'alimentació està regulada a 5 V mitjançant un regulador de tensió LM7805. Una pantalla LCD de 16x2 està configurada en mode de 4 bits i les seves connexions de pin es mostren al diagrama del circuit. El GPS també funciona amb 5v i el seu pin tx està connectat directament al microcontrolador Rx del Atmega16. Es fa servir un oscil·lador de cristall de 8 MHz per rellotjar el microcontrolador.

Passos per a la interfície GPS amb microcontrolador AVR
- Definiu les configuracions del microcontrolador que incloguin la configuració de l’oscil·lador.
- Configureu el port desitjat per a LCD, inclòs el registre DDR.
- Connecteu el mòdul GPS al microcontrolador mitjançant USART.
- Inicialitzeu el sistema UART en mode ISR, amb una velocitat de 9600 baud i LCD en mode de 4 bits.
- Agafeu dues matrius de caràcters en funció de la longitud de latitud i longitud.
- Rebeu un bit de caràcter alhora i comproveu si s’inicia a partir de $ o no.
- Si es rep $, és una cadena, hem de comprovar $ GPGGA, que inclou 6 lletres.
- Si es tracta de GPGGA, rebeu la cadena completa i configureu els indicadors.
- A continuació, extreu la latitud i la longitud amb direccions en dues matrius.
- Finalment, imprimiu les matrius de latitud i longitud a la pantalla LCD.

Explicació del codi
Al final es dóna un codi complet amb un vídeo de demostració, aquí s’expliquen algunes parts importants del codi.
Primer de tot, incloure alguna capçalera necessària al codi i, a continuació, escriure MACROS de màscara de bits per a la configuració LCD i UART.
#define F_CPU 8000000ul #include #include
Ara declareu i inicialitzeu algunes variables i matrius per emmagatzemar la cadena GPS, la longitud de latitud i els indicadors.
char buf; volatile char ind, flag, stringReceived; char gpgga = {'$', 'G', 'P', 'G', 'G', 'A'}; latitud char; char logitude;
Després d'això, tenim una funció de controlador LCD per conduir LCD.
void lcdwrite (char ch, char r) { LCDPORT = ch & 0xF0; RWLow; if (r == 1) RSHigh; altrament RSLow; Alt; _delay_ms (1); BAIX; _delay_ms (1); LCDPORT = ch << 4 & 0xF0; RWLow; if (r == 1) RSHigh; altrament RSLow; Alt; _delay_ms (1); EN Baixa; _delay_ms (1); } void lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ delay_ms (20); } } void lcdbegin () { char lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; per a (int i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Després vam inicialitzar la comunicació en sèrie amb GPS i vam comparar la cadena rebuda amb "GPGGA":
void serialbegin () { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; UCSRB = (1 <
Ara bé, si la cadena rebuda es fa coincidir correctament amb GPGGA, a la funció principal , extreu i mostreu la coordenada de latitud i longitud de la ubicació:
lcdwrite (0x80,0); lcdprint ("Lat:"); impressió de sèrie ("Latitude:"); for (int i = 15; i <27; i ++) { latitud = buf; lcdwrite (latitud, 1); serialwrite (latitud); if (i == 24) { lcdwrite ('', 1); i ++; } } serialprintln (""); lcdwrite (192,0); lcdprint ("Registre:"); impressió de sèrie ("Logitude:"); for (int i = 29; i <41; i ++) { logitude = buf; lcdwrite (logitud, 1); serialwrite (logitud); if (i == 38) { lcdwrite ('', 1); i ++; } }
Així doncs, és així com es pot connectar el mòdul GPS amb ATmega16 per trobar les coordenades de la ubicació.
A continuació, trobareu el codi complet i el vídeo de treball.
