- Componentes requeridos
- Obtener datos de ubicación del GPS
- Diagrama de circuito
- Pasos para conectar el GPS con el microcontrolador AVR
- Explicación del código
Los módulos GPS se utilizan ampliamente en aplicaciones electrónicas para rastrear la ubicación en función de las coordenadas de longitud y latitud. El sistema de seguimiento de vehículos, el reloj GPS, el sistema de alerta de detección de accidentes, la navegación del tráfico, el sistema de vigilancia, etc. son algunos de los ejemplos en los que la funcionalidad GPS es esencial. El GPS proporciona altitud, latitud, longitud, hora UTC y mucha otra información sobre la ubicación en particular, que se toma de más de un satélite. Para leer datos de GPS, se necesita un microcontrolador, por lo que aquí estamos interconectando el módulo GPS con el microcontrolador AVR Atmega16 e imprimiendo la longitud y latitud en una pantalla LCD de 16x2.
Componentes requeridos
- Atmega16 / 32
- Módulo GPS (uBlox Neo 6M GPS)
- Antena de hilo largo
- LCD de 16x2
- Resistencia de 2.2k
- Condensador 1000uf
- Condensador 10uF
- Cable de conexión
- LM7805
- DC Jack
- Adaptador de 12V DC
- Burgstips
- PCB o PCB de uso general
Ublox Neo 6M es un módulo GPS en serie que proporciona detalles de ubicación a través de la comunicación en serie. Tiene cuatro pines.
Alfiler |
Descripción |
Vcc |
2.7 - Fuente de alimentación de 5V |
Gnd |
Suelo |
TXD |
Dato transmitido |
RXD |
Recibir datos |
El módulo GPS Ublox neo 6M es compatible con TTL y sus especificaciones se detallan a continuación.
Tiempo de captura |
Inicio frío: 27 s, Inicio en caliente: 1 s |
Protocolo de comunicación |
NMEA |
Comunicación serial |
9600bps, 8 bits de datos, 1 bit de parada, sin paridad y sin control de flujo |
Corriente de funcionamiento |
45 mA |
Obtener datos de ubicación del GPS
El módulo GPS transmitirá datos en varias cadenas a una velocidad de 9600 baudios. Si usamos un terminal UART con 9600 Baud rate, podemos ver los datos recibidos por GPS.
El módulo GPS envía los datos de posición de seguimiento en tiempo real en formato NMEA (vea la captura de pantalla anterior). El formato NMEA consta de varias oraciones, en las que a continuación se dan cuatro oraciones importantes. Puede encontrar más detalles sobre la sentencia NMEA y su formato de datos aquí.
- $ GPGGA: Datos de corrección del sistema de posicionamiento global
- $ GPGSV: satélites GPS a la vista
- $ GPGSA: GPS DOP y satélites activos
- $ GPRMC: datos de GPS / tránsito específicos mínimos recomendados
Obtenga más información sobre los datos GPS y las cadenas NMEA aquí.
Estos son los datos que recibe el GPS cuando se conecta a una velocidad de 9600 baudios.
$ GPRMC, 141848.00, A, 2237.63306, N, 08820.86316, E, 0.553`` 100418,,, A * 73 $ GPVTG,, T,, M, 0.553, 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
Cuando usamos el módulo GPS para rastrear cualquier ubicación, solo necesitamos coordenadas y podemos encontrar esto en la cadena $ GPGGA. Solo la cadena $ GPGGA (datos de corrección del sistema de posicionamiento global) se usa principalmente en programas y otras cadenas se ignoran.
$ GPGGA, 141848.00,2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54.2, M,, * 74
¿Cuál es el significado de esa línea?
El significado de esa línea es: -
1. La cadena siempre comienza con un signo "$"
2. GPGGA son las siglas de Global Positioning System Fix Data
3. "," coma indica la separación entre dos valores
4. 141848.00: hora GMT como 14 (h): 18 (min): 48 (s): 00 (ms)
5. 2237.63306, N: Latitud 22 (grados) 37 (minutos) 63306 (seg) Norte
6. 08820.86316, E: Longitud 088 (grados) 20 (minutos) 86316 (segundos) Este
7. 1: Cantidad fija 0 = datos no válidos, 1 = datos válidos, 2 = fija DGPS
8. 03: Número de satélites visualizados actualmente.
9. 1.0: HDOP
10. 2.56, M: Altitud (Altura sobre el nivel del mar en metros)
11. 1.9, M: altura de geoides
12. * 74: suma de comprobación
Por lo tanto, necesitamos los números 5 y 6 para recopilar información sobre la ubicación del módulo o dónde está ubicado. En este proyecto hemos utilizado una biblioteca GPS que proporciona algunas funciones para extraer la latitud y la longitud para que no tengamos que preocuparnos por eso.
Anteriormente hemos interconectado GPS con otros microcontroladores:
- Cómo usar el GPS con Arduino
- Tutorial de interfaz del módulo GPS Raspberry Pi
- Interfaz del módulo GPS con el microcontrolador PIC
- Rastrea un vehículo en Google Maps usando Arduino, ESP8266 y GPS
Consulta todos los proyectos relacionados con GPS aquí.
Diagrama de circuito
El diagrama de circuito para la interfaz GPS con el microcontrolador AVR Atemga16 se muestra a continuación:
Todo el sistema funciona con un adaptador de CC de 12 V, pero los circuitos funcionan con 5 V, por lo que la fuente de alimentación está regulada a 5 V mediante el regulador de voltaje LM7805. Una pantalla LCD de 16x2 está configurada en modo de 4 bits y sus conexiones de pines se muestran en el diagrama del circuito. El GPS también funciona con 5v y su pin tx está conectado directamente al microcontrolador Rx del Atmega16. Se utiliza un oscilador de cristal de 8 MHz para sincronizar el microcontrolador.
Pasos para conectar el GPS con el microcontrolador AVR
- Establezca las configuraciones del microcontrolador que incluyen la configuración del oscilador.
- Configure el puerto deseado para LCD, incluido el registro DDR.
- Conecte el módulo GPS al microcontrolador usando USART.
- Inicialice el sistema UART en modo ISR, con 9600 baudios y LCD en modo de 4 bits.
- Tome dos matrices de caracteres según la longitud de latitud y longitud.
- Reciba un bit de carácter a la vez y compruebe si se inicia desde $ o no.
- Si se recibe $, entonces es una cadena, necesitamos marcar $ GPGGA, estas 6 letras incluyen $.
- Si es GPGGA, reciba la cadena completa y configure las banderas.
- Luego, extrae la latitud y la longitud con direcciones en dos matrices.
- Finalmente imprima las matrices de latitud y longitud en LCD.
Explicación del código
El código completo con un video de demostración se da al final, aquí se explican algunas partes importantes del código.
En primer lugar, incluya algún encabezado requerido en el código y luego escriba MACROS de máscara de bits para la configuración de LCD y UART.
#define F_CPU 8000000ul #include #include
Ahora declare e inicialice algunas variables y matrices para almacenar cadenas de GPS, latitud, longitud e indicadores.
char buf; carácter volátil ind, bandera, stringReceived; char gpgga = {'$', 'G', 'P', 'G', 'G', 'A'}; latitud de char; char logitude;
Después de eso, tenemos algunas funciones de controlador de LCD para conducir LCD.
anular lcdwrite (char ch, char r) { LCDPORT = ch & 0xF0; RWLow; si (r == 1) RSHigh; else RSLow; ENHigh; _delay_ms (1); ENLow; _delay_ms (1); LCDPORT = ch << 4 & 0xF0; RWLow; si (r == 1) RSHigh; else RSLow; ENHigh; _delay_ms (1); ENLow; _delay_ms (1); } void lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ delay_ms (20); } } void lcdbegin () { char lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; para (int i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Después de eso, inicializamos la comunicación serial con GPS y comparamos la cadena recibida con "GPGGA":
void serialbegin () { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; UCSRB = (1 <
Ahora, si la cadena recibida coincide correctamente con GPGGA, en la función principal extraiga y muestre las coordenadas de latitud y longitud de la ubicación:
lcdwrite (0x80,0); lcdprint ("Lat:"); serialprint ("Latitud:"); para (int i = 15; i <27; i ++) { latitud = buf; lcdwrite (latitud, 1); serialwrite (latitud); si (i == 24) { lcdwrite ('', 1); i ++; } } serialprintln (""); lcdwrite (192,0); lcdprint ("Registro:"); serialprint ("Logitude:"); para (int i = 29; i <41; i ++) { logitude = buf; lcdwrite (logitude, 1); serialwrite (logitud); si (i == 38) { lcdwrite ('', 1); i ++; } }
Así es como el módulo GPS puede interactuar con ATmega16 para encontrar las coordenadas de ubicación.
Encuentre el código completo y el video de trabajo a continuación.