- Componentes requeridos:
- Diagrama de circuito y explicación: -
- Obtener datos de ubicación de GPS:
- Pasos para conectar el GPS con el microcontrolador PIC: -
- Explicación del código:
GPS es la forma abreviada de Sistema de posicionamiento global. Es un sistema que proporciona altitud, latitud, longitud, hora UTC y mucha más información, que se toman de 2, 3, 4 o más satélites. Para leer los datos del GPS, necesitamos un microcontrolador y ya conectamos el GPS con Arduino y con Raspberry Pi.
Hemos seleccionado el módulo GPS G7020 fabricado por U-blox. Recibiremos la longitud y latitud de una posición particular del satélite y mostraremos lo mismo en una pantalla LCD de 16x2 caracteres. Así que aquí conectaremos el GPS con el microcontrolador PIC16F877A mediante microchip.
Componentes requeridos:
- Pic16F877A - Paquete PDIP40
- Tabla de pan
- Pickit-3
- Adaptador de 5V
- LCD JHD162A
- Módulo GPS uBLOX-G7020
- Cables para conectar periféricos.
- Resistencias 4.7k
- Bote de 10k
- Cristal de 20 MHz
- 2 condensadores cerámicos de 33pF
Diagrama de circuito y explicación: -
La pantalla LCD de 16x2 caracteres está conectada a través del microcontrolador PIC16F877A, en el que RB0, RB1, RB2 están conectados respectivamente al pin LCD que es RS, R / W y E. RB4, RB5, RB6 y RB7 están conectados a través de 4 pines D4, D5 de LCD, D6, D7. La pantalla LCD está conectada en modo de 4 bits o modo nibble. Obtenga más información sobre cómo conectar la pantalla LCD con el microcontrolador PIC.
Un oscilador de cristal de 20MHz con dos condensadores cerámicos de 33pF conectados entre los pines OSC1 y OSC2. Proporcionará una frecuencia de reloj constante de 20 MHz al microcontrolador.
Módulo GPS uBlox-G7020, recibe y transmite datos usando UART. PIC16F877A consta de un controlador USART dentro del chip, recibiremos datos del módulo GPS por USART, por lo que se realizará una conexión cruzada desde el pin Rx del microcontrolador al pin Tx del GPS y el pin de recepción USART conectado a través del pin de transmisión del GPS.
El uBlox-G7020 tiene un código de color para los pines. El pin positivo o de 5 V es de color rojo, el pin negativo o GND es de color negro y el pin de transmisión es de color azul.
He conectado todo esto en el tablero.
Obtener datos de ubicación de GPS:
Veamos cómo interconectar GPS usando USART y veamos el resultado en una pantalla LCD de 16x2 caracteres.
El módulo transmitirá datos en varias cadenas a una velocidad de 9600 baudios. Si usamos un terminal UART con 9600 Baud rate, veremos 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.
Pasos para conectar el GPS con el microcontrolador PIC: -
- Establezca las configuraciones del microcontrolador que incluyen la configuración del oscilador.
- Configure el puerto deseado para LCD, incluido el registro TRIS.
- Conecte el módulo GPS al microcontrolador usando USART.
- Inicialice el sistema USART en modo de recepción continua, con velocidad de 9600 baudios y LCD con 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 $ Receive, entonces es una cadena, debemos verificar GPGGA, estas 5 letras y la coma.
- Si es GPGGA, saltaremos el tiempo y buscaremos la latitud y la longitud. Almacenaremos la latitud y la longitud en una matriz de dos caracteres hasta que no se reciban N (norte) y E (este).
- Imprimiremos la matriz en LCD.
- Limpia la matriz.
Explicación del código:
Veamos el código línea por línea. Las primeras líneas son para configurar bits de configuración que se explicaron en el tutorial anterior, así que los estoy omitiendo por ahora. El Código completo se proporciona al final de este tutorial.
Estas cinco líneas se utilizan para incluir los ficheros de cabecera de la biblioteca, lcd.h y eusart.h es para LCD y USART respectivamente. Y xc.h es para el archivo de encabezado del microcontrolador.
#incluir
En la función void main () , system_init () ; La función se utiliza para inicializar LCD y USART.
Void main (vacío) { TRISB = 0x00; // Establecer como salida system_init ();
El lcd_init (); y EUSART_Intialize (); se llama de las dos bibliotecas lcd.h y eusart.h
vacío system_init (vacío) { lcd_init (); // Esto inicializará el lcd EUSART1_Initialize (); // Esto inicializará el Eusart }
En tiempo de bucle rompemos la cadena GPGGA para obtener la longitud y latitud de coordenadas. Recibimos un bit a la vez y lo comparamos con los caracteres individuales presentes en la cadena GPGGA.
Rompemos los códigos que obtendremos: -
incomer_data = EUSART1_Read (); // Verifique la cadena '$ GPGGA,' / * ------------------------------ Paso a paso encontrando la línea GPGGA- --------------------------- * / if (incomer_data == '$') {// La primera declaración de los datos GPS comienza con un $ sign incomer_data = EUSART1_Read (); // Si el primer if se vuelve cierto, la siguiente fase if (incomer_data == 'G') { incomer_data = EUSART1_Read (); if (datos_inumibles == 'P'); { datos_informes = EUSART1_Read (); if (datos_inumibles == 'G'); { datos_informes = EUSART1_Read (); if (datos_inumibles == 'G') { datos_ingresivos = EUSART1_Read (); if (datos_entrada == 'A') { datos_entrada = EUSART1_Read (); if (incomer_data == ',') {// primero, recibido incomer_data = EUSART1_Read (); // En esta etapa, se ha realizado la verificación final, se encuentra GPGGA.
Al usar este código, omitimos la hora UTC.
while (incomer_data! = ',') {// omitiendo la hora GMT incomer_data = EUSART1_Read (); }
Este código es para almacenar los datos de latitud y longitud en la matriz de caracteres.
incomer_data = EUSART1_Read (); latitude = incomer_data; while (datos_inferiores! = ',') { for (recuento_arreglo = 1; datos_inferiores! = 'N'; recuento_arreglo ++) { datos_inferiores = EUSART1_Read (); latitude = incomer_data; // Almacenar los datos de Latitud } incomer_data = EUSART1_Read (); if (datos_inferiores == ',') { for (recuento_arreglo = 0; datos_inferiores! = 'E'; recuento_arreglo ++) { datos_inferiores = EUSART1_Read (); longitude = incomer_data; // Almacenar los datos de longitud } }
Y finalmente hemos impreso longitud y latitud en LCD.
array_count = 0; lcd_com (0x80); // Selección de la línea uno del LCD while (array_count <12) {// La matriz de datos de Latitud es de 11 dígitos lcd_data (latitud); // Imprime los datos de Latitude array_count ++; } array_count = 0; lcd_com (0xC0); // Selección de la línea dos de Lcd while (array_count <13) {// La matriz de datos de longitud es de 12 dígitos lcd_data (longitude); // Imprime los datos de longitud array_count ++; }
Así es como podemos conectar el módulo GPS con el microcontrolador PIC para obtener la latitud y longitud de la ubicación actual.
Los archivos completos de código y encabezado se proporcionan a continuación.