¿Cómo funciona un módulo GPS NEO-6M y cómo interconectarlo con ESP32?

 


Si usted es un ingeniero de sistemas integrados y trabaja en la industria electrónica, puede llegar una situación en la que necesite determinar la posición de un objeto en movimiento o necesite determinar la altitud y la velocidad de una determinada ubicación. En este tipo de situación, un módulo GPS puede ser muy útil, por lo que en este artículo decidimos interconectar el módulo GPS GSM NEO-6M con ESP32. También le informaremos todos los pros y los contras de este dispositivo, así que sin más preámbulos, entremos en materia.

Distribución de pines del módulo GPS NEO-6M

El módulo GPS NEO-6M tiene cuatro pines: GND, TxD, RxD y VCC. Los pines TxD y RxD se utilizan para comunicarse con el microcontrolador.

Distribución de pines del módulo GPS NEO-6M

GND es el pin de tierra del módulo GPS y debe estar conectado al pin de tierra del ESP32.

TXD es el pin de transmisión del módulo GPS que necesita conectarse al pin RX del ESP32.

RXD es el pin de recepción del módulo GPS que necesita conectarse al pin TX del ESP32.

VCC es el pin de alimentación del módulo GPS y necesita conectarse al pin de 3,3 V del ESP32.



Módulo GPS NEO-6M – Piezas

El módulo NEO-6M es un módulo GSM listo para usar que se puede utilizar en muchas aplicaciones diferentes. Las piezas del módulo GPS NEO-6M se muestran a continuación:

Componentes del módulo GPS NEO-6M

El módulo GPS NEO-6M tiene cinco partes principales en la placa, la primera parte importante es el chip GPS NEO-6M en el corazón de la PCB. A continuación, tenemos una batería recargable y un módulo EEPROM en serie. Una EEPROM junto con una batería ayuda a retener los datos del reloj, los datos de posición más recientes (datos de órbita GNSS) y la configuración del módulo, pero no está diseñada para el almacenamiento permanente de datos. Sin la batería, el GPS siempre arranca en frío, por lo que el bloqueo inicial del GPS lleva más tiempo. La batería se carga automáticamente cuando se aplica energía y mantiene los datos hasta dos semanas sin energía. A continuación, tenemos nuestro LDO, debido al LDO integrado, el módulo se puede alimentar desde una fuente de alimentación de 5V. Por último, tenemos nuestro conector UFL donde necesitamos conectar una antena externa para que el GPS funcione correctamente.

 

Descripción general del módulo GPS NEO-6M

Módulo GPS NEO-6M con antena

El Sistema de Posicionamiento Global (GPS) es un sistema formado por 31 satélites que orbitan la Tierra. Podemos conocer su ubicación exacta porque están constantemente transmitiendo información de posición con el tiempo a través de señales de radio. En el corazón de la placa de conexión, se encuentra el módulo GPS NEO-6M diseñado y desarrollado por u-blox. Es muy pequeño pero tiene muchas funciones. Puede rastrear hasta 22 satélites a través de 50 canales mientras consume solo 45 mA de corriente y tiene un voltaje de funcionamiento de 2.7V ~ 3.6V. Una de las características más interesantes de este módulo es su modo de ahorro de energía. Esto permite una reducción en el consumo de energía del sistema. Con el modo de ahorro de energía activado, el consumo de corriente del módulo se reduce a solo 11 MA. Para obtener más detalles sobre el módulo GPS NEO-6M, puede consultar la hoja de datos del módulo NEO-6M.

 

Indicador LED de fijación de posición:

Si observa de cerca la placa del módulo GPS NEO-6M, puede encontrar un pequeño LED que se usa para indicar que el módulo GPS puede comunicarse con los satélites.

  • Sin pestañear, está buscando satélites.

Indicador LED del módulo GPS NEO-6M

  • Parpadeo cada 1 s: se encuentra la posición fija (el módulo puede ver suficientes satélites).

NEO-6M Indicador LED fijo de posición del módulo GPS

Antena:

El módulo viene con una antena de parche sensible de -161 dBm que puede recibir señales de radio de satélites GPS. Puedes conectar la antena a un pequeño conector UFL que hemos mencionado en la sección de marcado de piezas de este artículo.

Antena

Para la mayoría de las aplicaciones al aire libre, la antena de parche funcionará bien, pero para aplicaciones más exigentes o en interiores se recomienda utilizar una antena GPS activa de 3V.

Preguntas frecuentes sobre el módulo GPS NEO-6M

Q. ¿Cuál es la precisión de NEO-6M?

Según la hoja de datos, el dispositivo NEO-6M tiene una precisión de posición horizontal GPS de 2,5 m en condiciones ideales.

Q. ¿Cómo sé si un módulo GPS está funcionando?

Conecte la alimentación y un convertidor UART con el módulo GPS NEO-6M y ajuste la velocidad de transmisión a 9600. Si todo funciona correctamente, debe obtener datos del módulo cada segundo.

Q. ¿Qué es una antena GPS?

Una antena GNSS o GPS es un dispositivo diseñado para recibir y amplificar las señales de radio transmitidas en frecuencias específicas por satélites GNSS y convertirlas en una señal electrónica para su uso por un receptor GNSS o GPS.

Q. ¿Por qué se necesitan 4 satélites para el GPS?

El número mágico es 4 debido a la forma en que el GPS calcula su posición exacta. Cada satélite envía una señal que incluye 1) la hora exacta en que se envía la señal y 2) la posición exacta del satélite en relación con el centro de la Tierra.

Q. ¿Qué frecuencias utiliza el GPS?

Todos los satélites GPS transmiten en al menos dos frecuencias portadoras: L1, a 1575,42 MHz, y L2, a 1227,6 MHz (los satélites más nuevos también transmiten en L5 a 1176 MHz).

Diagrama de circuito para el módulo GSM NEO-6M

El circuito para el módulo GPS NEO-6M es muy simple y fácil de entender. En este módulo, todo el trabajo principal es manejado por el módulo GPS y necesitamos dos o tres componentes más para que el módulo GPS funcione. A continuación se muestra el esquema completo del módulo GPS NEO-6M.

Esquema del módulo GPS NEO-6M

En el esquema, tenemos un regulador de voltaje de 3.3V que se encarga de convertir la entrada de 5V a 3.3V y también tenemos una EEPROM AT24C33 y una batería. La EEPROM y la batería juntas ayudan a retener la RAM respaldada por batería que puede contener los datos y la posición del reloj durante un período de tiempo limitado. Aparte de eso, tenemos el conector UFL en el que debe conectar una antena de parche externa para que el módulo funcione correctamente.

Diagrama del circuito del módulo GPS ESP32 NEO-6M

Ahora que tenemos una comprensión completa del módulo GPS NEO-6M, podemos conectar todos los cables necesarios a la placa ESP32 y verificar si el módulo funciona correctamente o está dando errores. A continuación, escribiremos un código y decodificaremos los datos GPS recibidos. A continuación se muestra el diagrama de conexión del módulo GPS NEO-6M con ESP32.

ESP32 con conexión de circuito de módulo GPS

 

Comprensión de las sentencias NMEA

Si conectamos el módulo a un convertidor USB a UART y abrimos una ventana de monitor serie, podemos ver algunos datos que salen del módulo GPS NEO-6M. Estas se llaman sentencias NMEA, NMEA es un acrónimo de la Asociación Nacional de Electrónica Marina. Este es un formato de mensaje estándar para casi todos los receptores GPS. A continuación se muestra una captura de pantalla de la ventana del monitor serie.

Sentencias NMEA

Las oraciones NMEA comienzan con el carácter $ y cada campo de datos está separado por una coma.

Hay muchos tipos diferentes de sentencias NMEA. Estos diferentes tipos se diferencian por el primer carácter antes de la primera coma. El GP después del símbolo $ indica que se trata de un dato de posición GPS. El $GPGGA es un mensaje NEMA básico que proporciona datos de ubicación en 3D.

$GPGGA, 130113.00, 37XX.XXXX,N, 07XXX.XXXX, E,1,04,3.97,404.9,M,45.7,M,,*79

130113: representa la hora en que se toman los datos, 13:01:13 UTC

Artículo 37XX. XXXX,N - Latitud 37 grados XX.XXXX' N

07XXX. XXXX,E - Longitud 007 grados 07XXX. XXXX,E

1 - calidad de corrección (0 = inválida; 1 = corrección de GPS. 2 = corrección de DGPS; 3 = corrección de PPS; 4 = cinemática en tiempo real; 5 = RTK flotante; 6 = estimada (estimación a estima); 7 = modo de entrada manual; 8 = modo de simulación)

04 – Número de satélites objeto de seguimiento

3.97 – Dilución horizontal de la posición

404.9, M – Altitud, en metros sobre el nivel del mar

45.7, M – Altura del geoide (nivel medio del mar) sobre el elipsoide WGS84

Vacío- Tiempo de actualización de DGPS

Vacío- ID de la estación DGPS

*79 – los datos de la suma de comprobación, siempre comienzan con *

Hay muchas sentencias NMEA diferentes. Si desea conocer más detalles sobre ellos, puede consultar el sitio web de GIDS que enumera toda la información básica.

Código para la interfaz GPS NEO-6M con ESP32

Si conecta el módulo con el monitor serie, obtendrá la salida en la ventana del monitor serie que hemos mencionado anteriormente. Puede trabajar con este tipo de datos si lo desea, pero la forma más fácil es usar una biblioteca para analizar todos los datos GPS y almacenarlos en variables para su uso posterior. Y para el código, haremos exactamente eso. Vamos a utilizar la librería TinyGPSPlus-ESP32 de Mike Hart. Puede descargar la biblioteca desde GitHub o puede usar el administrador de bibliotecas de Arduino para instalar la biblioteca.

Ahora que toda la preparación está hecha, podemos pasar a la parte del código para ESP32, al principio comenzamos por incluir todas las bibliotecas necesarias. Y como el ejemplo es muy básico, estamos usando solo una biblioteca.

#include <TinyGPSPlus.h>

A continuación, creamos un objeto TinyGPSPlus para que podamos trabajar con la biblioteca.

TinyGPSPlus gps;

A continuación, tenemos nuestra función de configuración. En la función de configuración, inicializamos el Serial y el Serial2 del módulo ESP32 para que podamos comunicarnos tanto con el PC como con el módulo GPS.

void setup() {
  Serial.begin(9600);
  Serial2.begin(9600);
  delay(3000);
}

A continuación, tenemos nuestra función updateSerial(). Esta función es un bucle invertido entre el UART1 y el UART2 para que podamos monitorear los datos entrantes fuera de la ventana del monitor serie.

void updateSerial(){
  delay(500);
  while (Serial.available())  {
    Serial2.write(Serial.read());//Forward what Serial received to Software Serial Port
  }
  while (Serial2.available())  {
    Serial.write(Serial2.read());//Forward what Software Serial received to Serial Port
  }
}

A continuación, tenemos la función displayInfo(), en esta función, analizamos la latitud y longitud del GPS con la ayuda de los métodos gps.location.lat() y gps.location.lng() de la biblioteca TinyGPSPlus y los imprimimos en la ventana del monitor serie.

void displayInfo()
{
  Serial.print(F("Location: "));
  if (gps.location.isValid()){
    Serial.print(gps.location.lat(), 6);
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 6);
  }
  else
  {
    Serial.print(F("INVALID"));
  }
}

Finalmente, tenemos nuestra función de bucle, en la función de bucle primero hemos llamado a la función updateSerial(), y coméntalo, puede descomentar esto si está ejecutando el dispositivo por primera vez o está depurando el módulo GPS. A continuación, comprobamos si serial2 está disponible o no. Si serial2 está disponible, llamamos a la función displayInfo(), esta función nos devuelve los datos de latitud y longitud.

void loop() {
  //updateSerial();
  while (Serial2.available() > 0)
    if (gps.encode(Serial2.read()))
      displayInfo();
  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println(F("No GPS detected: check wiring."));
    while (true);
  }
}

This marked the end of our coding portion and we can move on to the next portion of the article.

Working of the NEO-6M GPS Module

The gif below shows how the NEO-6M GPS module works. We have written the code so that after the ESP32 is initialized, it checks if the module is working and gives the output in the serial monitor windows. Once every checking procedure is completed, the module checks if data is available and prints it in the serial monitor window.

Depuración del módulo GPS NEO-6M

Al trabajar con el módulo GPS NEO-6M, nos enfrentamos a una serie de problemas, en esta sección del artículo discutiremos algunos de esos problemas.

  • Como estamos usando un ESP32 para comunicarnos con el módulo GPS, mi idea inicial fue alimentarlo con el riel de 3.3V del ESP pero el módulo no estaba cableado y tuve que conectar una batería externa para trabajar con el módulo.

  • El segundo gran problema fue con la antena. Si está pensando en usar el módulo en condiciones interiores, déjeme decirle que no funcionará porque la antena es muy pobre y no puede recibir el satélite en condiciones interiores.

Si es completamente nuevo en el módulo GPS y enfrenta problemas para hacer que este módulo funcione, consulte el artículo de la guía de solución de problemas del módulo Neo 6M GPs que no funciona para verificar los problemas comunes con este módulo y cómo resolverlos.

Archivos de apoyo





Código completo del proyecto

#include <TinyGPSPlus.h>
// The TinyGPSPlus object
TinyGPSPlus gps;
void setup() {
  Serial.begin(9600);
  Serial2.begin(9600);
  delay(3000);
}
void loop() {
  //updateSerial();
  while (Serial2.available() > 0)
    if (gps.encode(Serial2.read()))
      displayInfo();
  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println(F("No GPS detected: check wiring."));
    while (true);
  }
}
void displayInfo()
{
  Serial.print(F("Location: "));
  if (gps.location.isValid()){
    Serial.print("Lat: ");
    Serial.print(gps.location.lat(), 6);
    Serial.print(F(","));
    Serial.print("Lng: ");
    Serial.print(gps.location.lng(), 6);
    Serial.println();
  } 
  else
  {
    Serial.print(F("INVALID"));
  }
}
void updateSerial()
{
  delay(500);
  while (Serial.available())
  {
    Serial2.write(Serial.read());//Forward what Serial received to Software Serial Port
  }
  while (Serial2.available())
  {
    Serial.write(Serial2.read());//Forward what Software Serial received to Serial Port
  }
}
Fuente 

Comentarios

Entradas populares de este blog

Localizador de emergencia GSM y GPS basado en ESP32 con activación por botón

Monitoreo de ECG basado en IoT con sensor de ECG AD8232 y ESP32