Explorando el mundo de la navegación GPS con el módulo Neo-6M uBlox

Introducción:

En la era digital de hoy, los sistemas de navegación GPS se han vuelto indispensables en muchas aplicaciones, desde la navegación marina y terrestre hasta el seguimiento de vehículos y drones. En este blog, exploramos cómo puedes integrar y utilizar el módulo GPS Neo-6M uBlox en tus propios proyectos con Arduino.

¿Qué es el Neo-6M uBlox?

El módulo uBlox NEO-6M GPS es un dispositivo portátil de alta calidad que permite a los dispositivos electrónicos, como un Arduino o Raspberry Pi, recibir información de posicionamiento global de satélites. Esta capacidad puede brindar funcionalidad de navegación y seguimiento a tus proyectos.

Aquí algunas características principales del uBlox NEO-6M GPS:

  1. Tamaño compacto: El NEO-6M es pequeño y fácil de montar, lo que lo hace perfecto para aplicaciones donde el tamaño y el peso son críticos, como en drones o dispositivos portátiles.

  2. Alta sensibilidad: Muestra un rendimiento excepcional incluso en condiciones de poca señal. Puede recibir señales de hasta 22 satélites simultáneamente.

  3. Bajo consumo de energía: A pesar de su alta sensibilidad, el NEO-6M es eficiente en términos energéticos, lo que facilita su uso en dispositivos alimentados por batería.

  4. Protocolo NMEA y UBX: Soporta los protocolos estándar de comunicación NMEA 0183 y UBX de uBlox, lo que permite una fácil integración con una amplia variedad de dispositivos y software.

  5. Precisión de tiempo (1PPS Output): Proporciona señales de pulso por segundo (PPS) que pueden utilizarse para la sincronización temporal.

  6. Canales de seguimiento: Hasta 50 canales de seguimiento.

  7. Velocidad de actualización: Soporta una velocidad de actualización de hasta 5Hz.

  8. Soporte para antena activa y pasiva: El módulo NEO-6M puede trabajar con antenas activas y pasivas.

  9. Voltaje de funcionamiento: Funciona con un voltaje de 3.3V a 5V, es amigable con la mayoría de las plataformas de microcontroladores.

Puedes ver la hoja de datos aquí.

Cómo conectar el Neo-6M uBlox a tu Arduino

 La conexión entre un módulo GPS como el NEO-6M y un Arduino es bastante directa. Aquí te proporciono una descripción del proceso de conexión estándar:

  • Conexión de energía: Conecta el pin VCC del módulo GPS a 3.3V, y conecta el pin GND del módulo al pin GND de tu placa Arduino para completar el circuito de alimentación.
  • Conexión de datos: Luego, tendrás que conectar los pines de transmisión de datos (TX y RX) del módulo GPS a los pines de tu placa Arduino. Como el NEO-6M es un dispositivo serie, necesitarás conectar el pin TX del módulo GPS al pin RX de tu Arduino y el pin RX del módulo GPS al pin TX de tu Arduino.

NEO-6M

Este módulo cuenta con un LED azul que comenzará a parpadear cuando el GPS establezca comunicación.

Programando

Una vez que hayas conectado el gps, deberás programar tu Arduino para comunicarse con él. 

Crea un nuevo sketch de Arduino y copia el código que esta a continuación:

 

El código proporcionado establece una conexión serie entre un Arduino y un módulo GPS usando la biblioteca SoftwareSerial. A través de los pines 4 y 3 del Arduino, el código lee datos del módulo GPS y los envía a la consola serie del IDE de Arduino.

  • #include <SoftwareSerial.h>: Incluye la biblioteca SoftwareSerial.
  • SoftwareSerial gps(4, 3): Crea una conexión serie con el módulo GPS utilizando los pines 4 (RX) y 3 (TX).
  • char dato = ' ': Inicializa una variable para almacenar los datos del GPS.
  • Serial.begin(115200): Inicia la comunicación serie en el puerto de la computadora a una tasa de 115200 baudios.
  • gps.begin(9600): Inicia la comunicación serie con el módulo GPS a una tasa de 9600 baudios.
  • if (gps.available()): Comprueba si hay datos disponibles desde el módulo GPS.
  • dato = gps.read(): Lee los datos del módulo GPS.
  • Serial.print(dato): Imprime los datos del GPS en la consola serie del IDE de Arduino.

 Sube el sketch a tu Arduino y abre el monitor serial a 115200 bauds, si el GPS ya establecio comunicación debes poder ver los datos en formato NMEA.

 A continuación tienes la explicación de cada oración:

$GPGGA - Datos de corrección esenciales que proporcionan datos de localización y exactitud en 3D.

Hora UTC, Coordenadas de latitud (grados y minutos), Indicador de latitud: N (Norte) o S (Sur),  Coordenadas de longitud (grados y minutos), Indicador de longitud: E (Este) o W (Oeste), (Calidad de la fijación: 0 = inválido, 1 = Fijación GPS (SPS) , 2 = Ajuste DGPS), (Número de satélites utilizados: Rango de 0 a 12), Dilución de precisión horizontal (HDOP), Altitud,Unidad de altitud, Altura del geoide, Unidad de la altura del geoide, (Campo vacío), suma de comprobación( comienza siempre con *).

 

$GPGSA - GPS DOP y satélites activos. Esta sentencia proporciona detalles sobre la naturaleza de la corrección. Incluye los números de los satélites que se utilizan en la solución actual y el DOP.

(A =Selección automática de fijación 2D o 3D ,M = manual), (fijar 3D - los valores incluyen: 1 = no fijar 2 = fijación 2D 3 = Solución 3D), PRN de los satélites utilizados para la fijación, PDOP (dilución de precisión), Dilución horizontal de precisión (HDOP) , Dilución vertical de precisión (VDOP) , *suma de comprobación.

$GPGSV - Muestra datos sobre los satélites que la unidad podría encontrar en función de su máscara de visualización y datos de almanaque. También muestra la capacidad actual para rastrear estos datos.

Número de frases para los datos completos,numero de oración, Número de satélites a la vista ,Número de satélite PRN , Elevación (grados) , Azimut (grados), SNR, Hasta 4 satélites por oración, *suma de comprobación.

$GPGLL - Indica que esta oración es una "Posición Geográfica - Latitud/Longitud".

Coordenadas de latitud (grados y minutos), Indicador de latitud (Norte o Sur), Coordenadas de longitud (grados y minutos), Indicador de longitud (Este o Oeste), Tiempo UTC de la posición, Estado de los datos (A =datos válidos o V= datos no válidos), Checksum.

$GPRMC - Es probablemente la oración más importante del GPS, ya que incluye la información más crucial - hora, fecha, posición, velocidad y rumbo.

Tiempo UTC,Estado (A =datos válidos o V= datos no válidos), Latitud (grados y minutos), Indicador de latitud (Norte o Sur), Coordenadas de longitud (grados y minutos), Indicador de longitud (Este o Oeste),Velocidad sobre el terreno(Nudos), Rumbo(grados), Fecha (Día/Mes/Año), Variación magnética (grados), Indicador de variación magnética,Modo, Checksum.

$GPVTG - Proporciona datos de "Track made good and Ground speed" (Rumbo y velocidad sobre el terreno). Esta oración comunica la velocidad y el ángulo de desplazamiento del dispositivo.

 Rumbo verdadero, (Indicador de rumbo verdadero: Siempre 'T' para verdadero), Rumbo magnético, (Indicador de rumbo magnético: Siempre 'M' para magnético), Velocidad en nudos,Indicador de velocidad,Velocidad en km/h,Indicador de velocidad,Modo, Checksum.

Librería TinyGPS

Después de obtener los datos en formato NMEA puedes usar la biblioteca "TinyGPS" que proporciona funciones para decodificar estos mensajes y extraer información útil de ellos, como las coordenadas GPS, la velocidad, la altitud, la fecha, la hora y más. Para poder usarla desde el IDE de Arduino ve a (Sketch -> Incluir biblioteca -> Administrar bibliotecas...  luego busca "TinyGPS") y haz clic en "Instalar".

Crea un nuevo sketch de Arduino y copia el código que esta a continuación:

 

Este código de Arduino utiliza las bibliotecas SoftwareSerial y TinyGPS. Establece una comunicación vía puerto serial con un módulo GPS y lee y decodifica los datos que recibe.

  • #include <SoftwareSerial.h> y #include <TinyGPS.h>: Incluye las bibliotecas SoftwareSerial y TinyGPS.
  • TinyGPS gps y SoftwareSerial ss(4,3): Crea una instancia de TinyGPS y SoftwareSerial. En el segundo caso, utiliza los pines 4 y 3 del Arduino para comunicación serial.
  • void setup() {...}: Configura las velocidades de baudios para la comunicación serial.
  • void loop() {...}: En el bucle principal, si hay datos disponibles desde el módulo GPS, los lee, los decodifica y los muestra. Si se obtiene un dato válido, extrae la latitud, longitud, altitud y el tiempo. Después, imprime estos datos en la consola serial.

Sube el sketch a tu Arduino y abre el monitor serial a 115200 bauds para ver los resultados.

Conclusión 

La navegación GPS ha impactado significativamente nuestra vida cotidiana y seguirá haciéndolo en el futuro previsible. Con el módulo Neo-6M uBlox y tu Arduino, estás bien equipado para embarcarte en cualquier proyecto que requiera seguimiento GPS. Ya sea para uso personal o para un prototipo de producto, el Neo-6M uBlox es una elección confiable para tus necesidades de navegación.

Productos Relacionados

Ver artículo

Ver artículo

Gps

Deja un comentario