En este artículo, exploraremos cómo interfazar el módulo GPS ublox NEO-6M con Arduino. Descubrirás cómo conectar estos dos componentes para obtener datos precisos de ubicación y posición en tus proyectos de electrónica y robótica. ¡Sigue leyendo para aprender más sobre esta emocionante combinación de tecnología!
Ofrezca a su próximo proyecto Arduino la capacidad de capturar ubicaciones con el módulo GPS NEO-6M, que puede rastrear 22 satélites e identificar ubicaciones en cualquier parte del mundo. Puede servir como una excelente plataforma de lanzamiento para cualquiera que quiera ingresar al mundo del GPS.
Son de bajo consumo de energía (adecuados para dispositivos que funcionan con baterías), asequibles, fáciles de conectar y extremadamente populares entre los aficionados.
¿Cómo funciona el GPS?
GPS es un sistema de más de 30 satélites de navegación que orbitan alrededor de la Tierra. Sabemos dónde se encuentran en el espacio porque transmiten constantemente información sobre su posición y hora actual a la Tierra en forma de señales de radio.
Un receptor GPS escucha estas señales. Una vez que el receptor haya calculado la distancia a al menos tres satélites GPS, podrá determinar dónde se encuentra.
Este proceso se llama trilateración.
Descripción general del hardware
Chip GPS NEO-6M
El corazón del módulo es un chip GPS de U-blox – NEO-6M. El chip mide menos que un sello postal, pero incluye una sorprendente cantidad de funcionalidades en su pequeño marco.
Puede rastrear hasta 22 satélites en 50 canales y logra la sensibilidad de seguimiento más alta de la industria de -161 dB mientras consume solo 45 mA de energía.
A diferencia de otros módulos GPS, puede realizar 5 actualizaciones de ubicación por segundo con una precisión de posicionamiento horizontal de 2,5 m. El motor de posicionamiento de U-blox 6 también tiene un Time-To-First-Fix (TTFF) de menos de 1 segundo.
Una de las mejores características del chip es el modo de ahorro de energía (PSM). Esto permite reducir el consumo de energía del sistema encendiendo y apagando selectivamente ciertas partes del receptor. Esto reduce drásticamente el consumo de energía del módulo a solo 11 mA, lo que lo hace adecuado para aplicaciones sensibles a la corriente, como relojes GPS.
Los pines de datos requeridos del chip GPS NEO-6M se dividen en cabezales de pines con un paso de 0,1 pulgadas. Contiene los pines necesarios para comunicarse con el microcontrolador a través del UART. El módulo admite velocidades de baudios de 4800 bps a 230400 bps con un número de baudios predeterminado de 9600.
Aquí están las especificaciones:
Tipo de receptor | 50 canales, GPS L1 (1575,42 MHz) |
Precisión de la posición horizontal | 2,5 m |
Frecuencia de actualización de navegación | 1Hz (máximo 5Hz) |
Tiempo record | Arranque en frío: 27 s Arranque en caliente: 1 s |
Sensibilidad de navegación | -161dBm |
Protocolo de comunicación | NMEA, UBX binario, RTCM |
Velocidad de transmisión en serie | 4800-230400 (predeterminado 9600) |
temperatura de funcionamiento | -40°C ~ 85°C |
Tensión de funcionamiento | 2,7 V ~ 3,6 V |
Corriente de funcionamiento | 45mA |
Impedancia TXD/RXD | 510Ω |
Consulte la siguiente hoja de datos para obtener más detalles.
Posición fija de la pantalla LED
Hay un LED en el módulo GPS NEO-6M que indica el estado de “posicionamiento”. Dependiendo del estado en el que se encuentre, parpadeará a diferentes velocidades:
- sin parpadear – busca satélites.
- Parpadea cada 1 segundo – Se encontró una corrección de posición (el módulo puede ver suficientes satélites).
Regulador LDO de 3,3 V
El voltaje de funcionamiento del chip NEO-6M oscila entre 2,7 y 3,6 V. Pero la buena noticia es que este módulo viene con MICREL MIC5205 Regulador 3V3 de caída ultrabaja.
Los pines lógicos también toleran 5 V, por lo que podemos conectarlos fácilmente a Arduino o a cualquier microcontrolador lógico de 5 V sin utilizar un convertidor de nivel lógico.
Batería y EEPROM
El módulo está equipado con una EEPROM serie de dos cables HK24C32. Tiene un tamaño de 4 KB y está conectado al chip NEO-6M a través de I2C.
El módulo también contiene una batería de botón recargable que actúa como supercondensador.
La EEPROM y la batería juntas ayudan a mantener la BBR (RAM respaldada por batería). BBR contiene datos de reloj, datos de posición actual (datos de órbita GNSS) y configuración del módulo. Sin embargo, no se utiliza para el almacenamiento permanente de datos.
La batería se carga automáticamente cuando el módulo está encendido y almacena datos durante dos semanas sin energía.
Dado que la batería almacena el reloj y los datos de la última posición, el tiempo hasta el primer arreglo (TTFF) se reduce significativamente a 1 segundo. Esto permite un bloqueo de posición significativamente más rápido. Sin batería, el GPS siempre arrancará en frío y el bloqueo inicial del GPS tardará más.
antena
El módulo tiene una antena de parche con una sensibilidad de -161 dBm para recibir señales de radio de satélites GPS.
Puede encajar esta antena en el pequeño conector U.FL del módulo.
La antena patch es ideal para la mayoría de nuestros proyectos. Sin embargo, si deseas mayor sensibilidad y precisión, también puedes conectar cualquier antena GPS activa de 3V.
Los conectores U.FL son pequeños, sensibles y no están diseñados para soportar cargas. Para evitar daños a la conexión U.FL, puede pasar el cable U.FL a través del orificio de montaje.
Asignación de pines del módulo GPS NEO-6M
El módulo GPS NEO-6M tiene un total de 4 pines que lo conectan con el mundo exterior. Las conexiones son las siguientes:
Tierra es el pin de tierra y debe conectarse al pin GND del Arduino.
TxD (transmisor) El pin se utiliza para la comunicación en serie.
RxD (receptor) El pin se utiliza para la comunicación en serie.
VCC suministra energía al módulo. Puedes conectarlo directamente al pin de 5V del Arduino.
Cableado de un módulo GPS NEO-6M a un Arduino
Ahora que sabemos todo sobre el módulo, podemos empezar a conectarlo a nuestro Arduino.
Comience conectando la antena de parche al conector U.FL. Puede pasar el cable U.FL a través de uno de los orificios de montaje.
El módulo normalmente viene con cabezales de pines sin soldar. Entonces primero tienes que soldarlos.
Luego, conecte el pin VCC al pin de 5V en el Arduino y GND a tierra.
Finalmente, conecte los pines Tx y Rx del módulo a los pines digitales #2 y #3 respectivamente.
Una vez que tengas todo conectado, ¡estarás listo para comenzar!
Código Arduino: leer datos de GPS
Lo mejor del receptor GPS NEO-6M es que envía datos inmediatamente después de encenderlo. El siguiente boceto simplemente lee estos datos y los escribe en el monitor serie.
#include <SoftwareSerial.h>
// Choose two Arduino pins to use for software serial
int RXPin = 2;
int TXPin = 3;
//Default baud of NEO-6M is 9600
int GPSBaud = 9600;
// Create a software serial port called "gpsSerial"
SoftwareSerial gpsSerial(RXPin, TXPin);
void setup()
{
// Start the Arduino hardware serial port at 9600 baud
Serial.begin(9600);
// Start the software serial port at the GPS's default baud
gpsSerial.begin(GPSBaud);
}
void loop()
{
// Displays information when new sentence is available.
while (gpsSerial.available() > 0)
Serial.write(gpsSerial.read());
}
Cargue el programa y abra el Serial Monitor a través del IDE de Arduino. Recuerde seleccionar 9600 baudios. Deberías ver un texto como este:
Frases NMEA
Los datos que obtiene en el monitor serie son en realidad conjuntos de datos NMEA.
NMEA es un acrónimo de Asociación Nacional de Electrónica Marina. Este es un formato de mensaje estándar para casi todos los receptores GPS.
El estándar NMEA está formateado en las llamadas líneas de datos. oraciones. Cada oración tiene campos de datos separados por comas para facilitar el análisis por parte de computadoras y microcontroladores.
Estas sentencias NMEA se envían en un intervalo llamado Frecuencia de actualización.
De forma predeterminada, el módulo GPS NEO-6M actualiza esta información una vez por segundo (frecuencia de 1 Hz). Sin embargo, puedes configurarlo para hasta 5 actualizaciones por segundo (frecuencia de 5Hz).
Analizar oraciones NMEA
Es común que los microcontroladores lean sentencias NMEA y las analicen de forma fácil de usar. El análisis simplemente extrae bloques de datos del conjunto NMEA.
El estándar NMEA contiene muchas frases. Los más comunes son:
- $GPRMC Proporciona hora, fecha, latitud, longitud, altitud y velocidad estimada.
- $GPGGA El conjunto proporciona datos de fijación esenciales que proporcionan datos de precisión y ubicación en 3D.
$GPRMC Conjunto NMEA
Para comprender la estructura del mensaje NMEA, primero examinemos el popular mensaje $GPRMC.
$GPRMC, 123519, A, 4807.038, N, 01131.000, E, 022.4, 084.4, 230394, 003.1, W*6A
$ | Cada frase NMEA comienza con el carácter $. |
GPRMC | Coordenadas mínimas recomendadas para el posicionamiento global |
123519 | Hora actual en UTC – 12:35:19 |
A | Estado A=activo o V=Anulado. |
4807.038,N | Latitud 48 grados 07.038′ N |
01131.000,E | Longitud 11 grados 31.000′ E |
022.4 | Velocidad en nudos sobre el suelo. |
084.4 | Ángulo de convergencia en grados Verdadero |
220318 | Fecha actual: 22 de marzo de 2018 |
003.1,W | Variación magnética |
*6A | Los datos de la suma de comprobación siempre comienzan con * |
$GPGGA Conjunto NMEA
Tomemos un ejemplo de una sentencia $GPGGA NMEA.
$GPGGA, 123519, 4807,038, N, 01131,000, E, 1, 08, 0,9, 545,4, M, 46,9, M, , *47
$ | Inicio de la frase NMEA. |
GPGA | Datos fijos del Sistema de Posicionamiento Global |
123519 | Hora actual en UTC – 12:35:19 |
4807.038,N | Latitud 48 grados 07.038′ N |
01131.000,E | Longitud 11 grados 31.000′ E |
1 | arreglo GPS |
08 | Número de satélites rastreados |
0,9 | Dilución horizontal de la posición. |
545.4,M | Altura en metros (sobre el nivel medio del mar) |
46,9M | Altura del geoide (nivel medio del mar) |
(campo vacío) | Tiempo en segundos desde la última actualización del DGPS |
(campo vacío) | Número de identificación de la estación DGPS |
*47 | Los datos de la suma de comprobación siempre comienzan con * |
$GPRMC y $GPGGA son conjuntos GPS NMEA básicos. Hay muchas frases NMEA alternativas y complementarias que proporcionan información similar o adicional. Para obtener más información sobre otros conjuntos NMEA, consulte informacióngps.org
Instalación de biblioteca
Aunque el formato delimitado por comas de las sentencias NMEA facilita enormemente el análisis, existen bibliotecas que hacen el trabajo pesado. Una de las bibliotecas más populares es la PequeñoGPS++ Biblioteca. Esta es la biblioteca que usaremos en nuestros ejemplos.
La biblioteca TinyGPS++ proporciona métodos compactos y fáciles de usar para extraer posición, fecha, hora, altitud, velocidad y rumbo de dispositivos GPS.
Esta biblioteca no está incluida en el IDE de Arduino, por lo que primero debes instalarla.
Para instalar la biblioteca, navegue hasta Sketch > Incluir bibliotecas > Administrar bibliotecas… Espere a que el Administrador de bibliotecas descargue el índice de la biblioteca y actualice la lista de bibliotecas instaladas.
Filtra tu búsqueda escribiendo “Tinygpsplus'. Haga clic en la primera entrada y luego seleccione Instalar.
Código Arduino – Biblioteca TinyGPS++
Una vez instalada la biblioteca, puede copiar el siguiente boceto en el IDE de Arduino.
El siguiente boceto de prueba imprime información de ubicación (latitud, longitud y altitud) y UTC (fecha y hora) en el monitor de serie. Pruebe el boceto antes de que lo expliquemos con más detalle.
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
// Choose two Arduino pins to use for software serial
int RXPin = 2;
int TXPin = 3;
int GPSBaud = 9600;
// Create a TinyGPS++ object
TinyGPSPlus gps;
// Create a software serial port called "gpsSerial"
SoftwareSerial gpsSerial(RXPin, TXPin);
void setup()
{
// Start the Arduino hardware serial port at 9600 baud
Serial.begin(9600);
// Start the software serial port at the GPS's default baud
gpsSerial.begin(GPSBaud);
}
void loop()
{
// This sketch displays information every time a new sentence is correctly encoded.
while (gpsSerial.available() > 0)
if (gps.encode(gpsSerial.read()))
displayInfo();
// If 5000 milliseconds pass and there are no characters coming in
// over the software serial port, show a "No GPS detected" error
if (millis() > 5000 && gps.charsProcessed() < 10)
{
Serial.println("No GPS detected");
while(true);
}
}
void displayInfo()
{
if (gps.location.isValid())
{
Serial.print("Latitude: ");
Serial.println(gps.location.lat(), 6);
Serial.print("Longitude: ");
Serial.println(gps.location.lng(), 6);
Serial.print("Altitude: ");
Serial.println(gps.altitude.meters());
}
else
{
Serial.println("Location: Not Available");
}
Serial.print("Date: ");
if (gps.date.isValid())
{
Serial.print(gps.date.month());
Serial.print("/");
Serial.print(gps.date.day());
Serial.print("/");
Serial.println(gps.date.year());
}
else
{
Serial.println("Not Available");
}
Serial.print("Time: ");
if (gps.time.isValid())
{
if (gps.time.hour() < 10) Serial.print(F("0"));
Serial.print(gps.time.hour());
Serial.print(":");
if (gps.time.minute() < 10) Serial.print(F("0"));
Serial.print(gps.time.minute());
Serial.print(":");
if (gps.time.second() < 10) Serial.print(F("0"));
Serial.print(gps.time.second());
Serial.print(".");
if (gps.time.centisecond() < 10) Serial.print(F("0"));
Serial.println(gps.time.centisecond());
}
else
{
Serial.println("Not Available");
}
Serial.println();
Serial.println();
delay(1000);
}
La salida en el monitor serie se ve así.
Explicación del código:
El boceto comienza integrando la biblioteca TinyGPS++ recién instalada y la biblioteca SoftwareSerial. Luego se declaran los pines Arduino a los que está conectado el módulo GPS NEO-6M, así como una variable que almacena la velocidad en baudios estándar del GPS.
A…Crear TinyGPSPlus
El objeto ayuda a acceder a funciones especiales relacionadas con la biblioteca. Después de eso creamos un puerto de software serie llamado gpsSerial
del cual hablaremos con el módulo.
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
int RXPin = 2;
int TXPin = 3;
int GPSBaud = 9600;
TinyGPSPlus gps;
SoftwareSerial gpsSerial(RXPin, TXPin);
En la función de configuración iniciamos la comunicación serial con la PC y el módulo GPS.
void setup()
{
Serial.begin(9600);
gpsSerial.begin(GPSBaud);
}
En la función de bucle está el displayInfo()
Se llama a una función personalizada que imprime información de ubicación (latitud, longitud y altitud) y UTC (fecha y hora) en el monitor en serie cada vez que se codifica correctamente una nueva frase NMEA.
Si pasan 5000 milisegundos y no llegan caracteres al puerto serie del software, se imprimirá el mensaje de error «No se detectó GPS».
void loop()
{
while (gpsSerial.available() > 0)
if (gps.encode(gpsSerial.read()))
displayInfo();
if (millis() > 5000 && gps.charsProcessed() < 10)
{
Serial.println(F("No GPS detected"));
while(true);
}
}
Funciones más útiles en la biblioteca TinyGPS++
Hay muchas funciones útiles que puedes utilizar con un objeto TinyGPS++. Algunos de ellos se enumeran a continuación:
gps.speed.value()
La función devuelve la velocidad actual en centésimas de nudo.gps.course.value()
La función devuelve el rumbo base actual en centésimas de grado.gps.satellites.value()
La función devuelve el número de satélites visibles y participantes.gps.hdop.value()
La función devuelve la pérdida de precisión horizontal.gps.age()
La función indica la antigüedad de los datos de un objeto. Devuelve el número de milisegundos desde la última actualización. Si el valor es 1500 o más, puede indicar una «solución perdida».- Si desea extraer datos de otro conjunto NMEA. Puede utilizar la función de extracción personalizada de la biblioteca diciéndole a TinyGPS++ el nombre del conjunto y el número de campo que le interesa. Por ejemplo, si quieres conocer la variación magnética, puedes llamar a:
TinyGPSCustom magneticVariation(gps, "GPRMC", 10);
Luego puedes consultarlo así:magneticVariation.value()
Software U-Center
El Centro U de u-blox es una poderosa herramienta para evaluar, analizar el rendimiento y configurar los receptores GPS u-blox, incluido el NEO-6M. Es una herramienta gratuita pero sólo se puede utilizar en la plataforma Windows.
Puede mostrar visualizaciones de datos gráficos y estructurados en tiempo real desde cualquier receptor GPS, como:
- Vista de resumen de satélite
- Vista de resumen de navegación
- Brújula, velocímetro, reloj, altímetro.
- Vista gráfica de dos parámetros cualesquiera de su elección
- Función de grabación y reproducción de datos.
Este software se puede descargar desde el sitio web de u-blox.
Conecte NEO-6M al U-Center
Para utilizar el software U-Center, debe conectar su NEO-6M a su PC mediante un convertidor de USB a TTL.
La siguiente imagen muestra el NEO-6M conectado a la PC mediante el convertidor de USB a TTL PL2303.
Usando U-Centro
Después de una instalación exitosa, se puede iniciar U-Center a través del menú Inicio (Todos los programas -> u-blox -> u-center -> u-center). Comienza como se muestra a continuación.
Localice la barra de herramientas de Comunicación y haga clic en la flecha al lado del icono. Luego se mostrará una lista de todos los puertos COM disponibles. Seleccione el puerto COM correspondiente al que está conectado el receptor.
El botón Consola de texto le muestra las frases NMEA sin procesar. Esto es útil para verificar rápidamente archivos ASCII visibles provenientes del módulo a través de USB.
u-center también puede mostrar la posición en Google Maps (fuera de línea/en línea).
Puede encontrar más información sobre el software U-Center aquí Guía del usuario.
Interfaz módulo GPS ublox NEO-6M con Arduino
Impulsa tu próximo proyecto de Arduino con la capacidad de localización del módulo GPS NEO-6M, que puede rastrear 22 satélites e identificar ubicaciones en cualquier parte del mundo. Este módulo puede ser un excelente punto de partida para cualquier persona interesada en adentrarse en el mundo del GPS.
¿Cómo funciona el GPS?
El GPS es un sistema de más de 30 satélites de navegación orbitando la Tierra. Estos satélites transmiten constantemente información sobre su posición y tiempo actual a la Tierra en forma de señales de radio. Un receptor de GPS escucha estas señales. Una vez que el receptor calcula su distancia desde al menos tres satélites de GPS, puede determinar dónde te encuentras. Este proceso se conoce como trilateración.
Descripción del hardware
Chip GPS NEO-6M
En el corazón del módulo se encuentra el chip GPS de U-blox, el NEO-6M. Este chip mide menos que un sello postal pero incorpora una cantidad sorprendente de características en su pequeño tamaño. Puede rastrear hasta 22 satélites en más de 50 canales y lograr el más alto nivel de sensibilidad de rastreo de la industria, es decir, -161 dB, mientras consume solo 45 mA de corriente.
Su motor de posicionamiento U-blox 6 puede realizar hasta 5 actualizaciones de ubicación en un segundo con una precisión de posición horizontal de 2.5m. Uno de los mejores aspectos del chip es su Modo de Ahorro de Energía (PSM), que reduce el consumo de energía del módulo a solo 11mA, haciéndolo adecuado para aplicaciones sensibles a la batería.
Para más detalles, consulta la hoja de datos de NEO-6M.
Para más información, visita ublox.com.
Preguntas Frecuentes
- ¿Cómo se conecta el módulo GPS NEO-6M a un Arduino?
- ¿Cómo se lee y procesa la información GPS con Arduino?
- ¿Cómo se usa el software U-center con el módulo NEO-6M?
Para conectar el módulo al Arduino, primero debes soldar los pines del módulo y luego conectar el pin VCC a la alimentación de 5V del Arduino, el pin GND a tierra y los pines Tx y Rx a los pines digitales #2 y #3 respectivamente.
Puedes utilizar la librería TinyGPS++ para extraer y procesar datos de las sentencias NMEA que envía el módulo. La librería facilita la extracción de la información de posición, fecha, hora, altitud, velocidad, entre otros.
Para utilizar el software U-center con el módulo, necesitas conectar el NEO-6M a tu PC utilizando un convertidor USB a TTL. Luego, puedes seleccionar el puerto COM correspondiente en U-center para ver datos en tiempo real y configurar el módulo.
¡Vaya, este artículo me ha abierto los ojos a nuevas posibilidades con Arduino! Definitivamente voy a investigar más sobre cómo aprovechar un módulo GPS. ¡Gracias por compartir esta info tan interesante!
¡Qué útil! Nunca había considerado utilizar un módulo GPS con Arduino, pero ahora me has convencido. ¡Gracias por la info!
¡Interesante! Nunca imaginé que se pudiera conectar un módulo GPS con Arduino. ¡Buena información!
¡Vaya! Me parece increíble lo que se puede hacer con Arduino y un módulo GPS. Definitivamente voy a probarlo. ¡Gracias por compartir!