- Componentes requeridos
- Módulo GPS
- Pin fuera de STM32F103C8
- Diagrama de circuito y conexiones
- Programación de STM32F103C8 para interfaz de módulo GPS
- Encontrar latitud y longitud con GPS y STM32
GPS significa Sistema de Posicionamiento Global y se utiliza para detectar la latitud y longitud de cualquier ubicación en la Tierra, con la hora UTC exacta (Hora Universal Coordinada). Este dispositivo recibe las coordenadas del satélite para cada segundo, con fecha y hora. El GPS ofrece una gran precisión y también proporciona otros datos además de las coordenadas de posición.
Todos sabemos que el GPS es un dispositivo muy útil y muy utilizado en teléfonos móviles y otros dispositivos portátiles para rastrear la ubicación. Tiene una amplia gama de aplicaciones en todos los campos, desde llamar al taxi en su casa hasta rastrear la altitud de los aviones. Aquí hay algunos proyectos útiles relacionados con GPS, que construimos anteriormente:
- Sistema de seguimiento de vehículos
- Reloj GPS
- Sistema de alerta de detección de accidentes
- Tutorial de interfaz del módulo GPS Raspberry Pi
- Interfaz del módulo GPS con el microcontrolador PIC
Aquí, en este tutorial, conectaremos un módulo GPS con el microcontrolador STM32F103C8 para encontrar las coordenadas de ubicación y mostrarlas en una pantalla LCD de 16x2.
Componentes requeridos
- Microcontrolador STM32F103C8
- Módulo GPS
- Pantalla LCD 16x2
- Tablero de circuitos
- Conexión de cables
Módulo GPS
Es un módulo GPS GY-NEO6MV2 XM37-1612. Este módulo GPS tiene cuatro pines + 5V, GND, TXD y RXD. Se comunica mediante los pines serie y se puede conectar fácilmente con el puerto serie del STM32F103C8.
El módulo GPS envía los datos en formato NMEA (vea la captura de pantalla a continuación). El formato NMEA consta de varias oraciones, en las que solo necesitamos una oración. Esta oración comienza en $ GPGGA y contiene las coordenadas, la hora y otra información útil. Este GPGGA se refiere a Datos de reparación del sistema de posicionamiento global. Conozca más sobre la lectura de datos GPS y sus cadenas aquí.
A continuación se muestra un ejemplo de cadena $ GPGGA, junto con su descripción:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510.4, M, 43.9, M,, * 47
$ GPGGA, HHMMSS.SSS, latitud, N, longitud, E, FQ, NOS, HDP, altitud, M, altura, M,, datos de suma de comprobación
Pero aquí, en este tutorial, estamos usando una biblioteca de GPS TinyGPSPlus que extrae toda la información requerida de la oración NMEA, y solo necesitamos escribir una línea simple de código para obtener la latitud y la longitud, que veremos más adelante en el tutorial..
Pin fuera de STM32F103C8
STM32F103C8 (BLUE PILL) Los puertos de comunicación en serie USART se muestran en la imagen de pin out a continuación. Estos son de color azul con (PA9-TX1, PA10-RX1, PA2-TX2, PA3-RX2, PB10-TX3, PB11-RX3). Tiene tres canales de comunicación de este tipo.
Diagrama de circuito y conexiones
Conexiones de circuito entre el módulo GPS y STM32F103C8
Módulo GPS |
STM32F103C8 |
RXD |
PA9 (TX1) |
TXD |
PA10 (RX1) |
+ 5V |
+ 5V |
GND |
GND |
Conexiones entre LCD 16x2 y STM32F103C8
Pin LCD No |
Nombre del pin LCD |
Nombre de pin STM32 |
1 |
Tierra (Gnd) |
Tierra (G) |
2 |
VCC |
5V |
3 |
VEE |
Pin del centro del potenciómetro |
4 |
Registro Seleccionar (RS) |
PB11 |
5 |
Lectura / escritura (RW) |
Tierra (G) |
6 |
Habilitar (EN) |
PB10 |
7 |
Bit de datos 0 (DB0) |
Sin conexión (NC) |
8 |
Bit de datos 1 (DB1) |
Sin conexión (NC) |
9 |
Bit de datos 2 (DB2) |
Sin conexión (NC) |
10 |
Bit de datos 3 (DB3) |
Sin conexión (NC) |
11 |
Bit de datos 4 (DB4) |
PB0 |
12 |
Bit de datos 5 (DB5) |
PB1 |
13 |
Bit de datos 6 (DB6) |
PC13 |
14 |
Bit de datos 7 (DB7) |
PC14 |
15 |
LED positivo |
5V |
dieciséis |
LED negativo |
Tierra (G) |
Toda la configuración se verá a continuación:
Programación de STM32F103C8 para interfaz de módulo GPS
El programa completo para encontrar la ubicación usando el módulo GPS usando STM32 se proporciona al final de este proyecto. STM32F103C8 se puede programar usando Arduino IDE simplemente conectándolo a la PC a través del puerto USB. Asegúrese de quitar los pines TX y RX mientras carga el código y conéctelo después de cargarlo.
Para interconectar GPS con STM32, primero tenemos que descargar una biblioteca del enlace de GitHub TinyGPSPlus. Después de descargar la biblioteca, se puede incluir en el IDE de Arduino en Sketch -> Incluir biblioteca -> Agregar biblioteca.zip. La misma biblioteca se puede utilizar para conectar GPS con Arduino.
Así que primero incluya los archivos de biblioteca necesarios y defina los pines para LCD 16x2:
#incluir
Luego crea un objeto llamado gps de la clase TinyGPSPlus.
TinyGPSPlus gps;
A continuación, en la configuración vacía , comience la comunicación en serie con el módulo GPS utilizando Serial1.begin (9600). Serial1 se utiliza como puerto Serial 1 (Pines-PA9, PA10) del STM32F103C8.
Serial1.begin (9600);
Luego, muestre el mensaje de bienvenida durante algún tiempo.
lcd.begin (16,2); lcd.print ("Resumen de circuitos"); lcd.setCursor (0,1); lcd.print ("STM32 con GPS"); retraso (4000); lcd.clear ();
A continuación, en el bucle vacío (), recibimos la latitud y la longitud del GPS y verificamos si los datos recibidos son válidos o no y mostramos la información en el monitor de serie y la pantalla LCD.
Comprobando si los datos de ubicación disponibles son válidos o no
loc_valid = gps.location.isValid ();
Recibe los datos de latitud
lat_val = gps.location.lat ();
Recibe los datos de longitud
lng_val = gps.location.lng ();
Si se reciben datos no válidos, muestra “*****” en el monitor de serie y muestra “esperando” en la pantalla LCD.
if (! loc_valid) { lcd.print ("Esperando"); Serial.print ("Latitud:"); Serial.println ("*****"); Serial.print ("Longitud:"); Serial.println ("*****"); retraso (4000); lcd.clear (); }
Si se reciben datos válidos, la latitud y la longitud se muestran en el monitor en serie, así como en la pantalla LCD.
lcd.clear (); Serial.println ("LECTURA GPS:"); Serial.print ("Latitud:"); Serial.println (lat_val, 6); lcd.setCursor (0,0); lcd.print ("LAT:"); lcd.print (lat_val, 6); Serial.print ("Longitud:"); Serial.println (lng_val, 6); lcd.setCursor (0,1); lcd.print ("LARGO:"); lcd.print (lng_val, 6); retraso (4000);
La siguiente función proporciona la demora para leer los datos. Sigue buscando los datos en el puerto serie.
GPSDelay estático vacío (ms largo sin firmar) { inicio largo sin firmar = milis (); hacer { while (Serial1.available ()) gps.encode (Serial1.read ()); } while (millis () - inicio <ms); }
Encontrar latitud y longitud con GPS y STM32
Después de crear la configuración y cargar el código, asegúrese de colocar el módulo GPS en un área abierta para recibir la señal rápidamente. A veces se necesitan unos minutos para recibir la señal, así que espere un poco. El LED comenzará a parpadear en el módulo GPS cuando comience a recibir la señal y las coordenadas de ubicación se mostrarán en la pantalla LCD.
Puede verificar la latitud y la longitud de la ubicación utilizando mapas de Google. Simplemente vaya a los mapas de Google con el GPS encendido y haga clic en el punto azul. Mostrará la dirección con la latitud y longitud como se muestra en la imagen de abajo
El código completo y el video de demostración se muestran a continuación.