Localización GPS con Arduino y los módulos GPS NEO-6


arduino-gps-neo-6

¿Qué es un GPS NEO-6?

Los dispositivos NEO-6 son una familia de receptores fabricados por U-Blox, que pueden ser conectados con facilidad a un autómata o procesador como Arduino.

Los GPS NEO-6 disponen de interface de comunicación UART, SPI, DDC (I2C) y USB. Soportan los protocolos NMEA, UBX binary y RTCM.

La familia de receptores GPS NEO-6 están diseñados para tener un pequeño tamaño, pequeño coste, y pequeño consumo. La intensidad de corriente necesaria es de unos 37mA en modo de medición continuo.

La tensión de alimentación es de 2.7 a 3.6V para los modelos NEO-6Q/6M, y 1.75-2.0V para los modelos NEO-6G.

Anuncio:

Frecuentemente se encuentran integrados en módulos que incorporan la electrónica necesaria para conectarla de forma sencilla a un Arduino. En la mayoría de los módulos, esto incluye un regulador de voltaje que permite alimentar directamente a 5V.

El GPS NEO-6 tiene un tiempo de encendido cold y warm de unos 30s, y en hot 1 segundo. La frecuencia máxima de medición es de 5Hz.

La precisión que en posición es de 2.5m, en velocidad 0,1m/s y en orientación 0.5º, valores más que aceptables para un sistema de posicionamiento GPS.

Los GPS son muy empleados en proyectos de electrónica y Arduino, especialmente en el caso de robots y vehículos como cuadricópteros.

Precio

Los receptores de GPS Neo-6 están diseñados para ser dispositivos de bajo precio. Podemos encontrar módulos como el NEO6MV2 por unos 3.60€, en vendedores internacionales de AliExpress o eBay.

arduino-gps-neo-6-componente

Esquema de montaje

La conexión es sencilla, ya que vamos la UART disponible en el receptor de GPS. En primer lugar alimentamos el módulo conectando Vcc y Gnd del módulo, a 5V y Gnd de Arduino.

Para que la conexión no interfiera con el puerto serie normal vamos a usar la librería SoftSerial para establecer una comunicación empleando cualquiera de los pines.

En el ejemplo usaremos el Pin 3 para RX y el Pin 4 para TX. Recordar que en la comunicación serial los pines se conectan con sus opuestos, es decir, RX – TX y viceversa, por lo que el esquema es el siguiente.

arduino-gps-neo-6-esquema

Mientras que la conexión con el módulo, vista desde Arduino, quedaría de la siguiente forma.

arduino-gps-neo-6-conexion

Ejemplos de código

Obtener lectura NMEA

El código necesario es igualmente muy sencillo, al realizarse a través de puerto se serie. Empleamos la librería SoftSerial para crear un puerto en cualquier par de pines de Arduino.

Los datos obtenidos del NEO-6 están en formato $GPRMC, uno de las secuencias disponisbles en el protocolo NMEA (National Marine Electronics Asociation).

Esta secuencia tiene la forma

$GPRMC,hhmmss.ss,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,ddmmyy,x.x,a*hh

Siendo,

hhmmss.ssHora UTC
AEstado receptor (A = OK, V = warning)
llll.ll,aLatitud (a = N o S)
yyyy.yy,aLongitud (a = E o W)
x.xVelocidad en nudos in knots
x.xCurso en grados
ddmmyyFecha UT
x.x,aVariacion magnética en grados (a = E o W)
*hhChecksum

Por ejemplo, la secuencia

$GPRMC,225446,A,4916.45,N,12311.12,W,000.5,054.7,191194,020.3,E*68

Tiene el siguiente significado

225446Hora 22:54:46 UTC
AEstado receptor A = OK
4916.45,NLatitud 49º 16.45 min Norte
12311.12,WLongitud 123º11.12 min Oeste
000.5Velocidad 0.5 nudos
054.7Curso 54.7º
191194Fecha 19 Noviembre 1994
020.3,EVariación magnética 20.3º East
*68Checksum

Obtener coordenadas con TinyGPS

Para interpretar la secuencia $GPRMC de forma sencilla disponemos de la librería TinyGPS, que nos permite parsear los datos obtenidos del módulo GPS.

El siguiente ejemplo emplea la librería TinyGPS para obtener las coordenadas (latitud y longitud) y mostrarlas en la pantalla.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección tutoriales de Arduino

Anuncio:

Previous Usar Arduino con los IMU de 9DOF MPU-9150 y MPU-9250
Next Medir el ángulo y sentido de giro con Arduino y encoder rotativo
1000
4 Comment threads
1 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
5 Comment authors
newest oldest
Antonio Martín

hola buenas, me ha sido de mucha ayuda tu información.
con arduino uno me funciona perfectamente, pero cuando lo intento hacer con mega, cambiando serial por serial1 y respetando los pines de conexión 19 y 18, no me funciona.
¿podrías ayudarme?
gracias de antemano

Sergio

Hola. Estoy teniendo cierto problema con lo siguiente: compilo el programa y lo subo al arduino y siempre que lo ejecuto, recibo señal, bien. Pero en ocasiones, recibo los datos correctos pero en otras obtengo una altura de 1000000m y 255 satélites, lo cual es imposible. Entonces, no sé por qué es ni cómo solucionarlo. Podrían ayudarme?

Jesús

Supongo que mientras no tengas 3d fix, el dato de la altura no te lo entrega. Me pasa lo mismo que a ti. Si puedes visualizar la trama gpgga en el momento que te da latitud y longitud, en la posición 9(dato de altura) o aparece 99 o sin dato(,,). Si te fijas en el nº de satélites a los que está “escuchando” seguro son 3 o 4 solo.

Virginia

Gracias no sé mucho me ayudo

Javier

Hola! Gracias por los tutoriales, son bastante didácticos y pudiendo elegir, siempre prefiero tu blog. Pongo este comentario además de para agradecer, porque no consigo recibir frases, tengo el GPS neo 6M conectado a 4 y 3 y alimentado (su led se enciende en rojo), cuando corro cualquier ejemplo de TinyGPS o TinyGPS++, en el monitor serie solo aumenta la variable chars y csum error, pero no consigo datos correctos. He probado con un Arduino uno y un Leonardo, y cambiando de orden 3 y 4. Que mas puedo hacer? Comprar otro modulo GPS y probar?
Gracias y un saludo!