Introducción

En este tutorial te enseñaremos cómo puedes integrar la tecnología GPS con Arduino, lo que nos dará las herramientas para realizar dispositivos de rastreo, localización y medición remota o para conocer el tiempo con extrema precisión.

Específicamente utilizaremos el módulo GPS NEO-6M (GY-NEO6MV2) para Arduino que es bastante popular, fácil de conseguir y económico. También utilizaremos la Tarjeta de desarrollo Arduino Uno, pero los ejemplos que realizaremos pueden funcionar en cualquier otra tarjeta de la familia Arduino.

En este tutorial trataremos los temas más básicos de la tecnología GPS y sus aplicaciones con Arduino tales como la conexión del módulo GPS con Arduino, la forma de comunicación y finalmente la obtención de información de ubicación (latitud y longitud). En posteriores entregas exploraremos más aplicaciones y ejemplos de esta emocionante y fascinante tecnología.

¿Qué es la tecnología GPS?

La tecnología GPS (Global Positioning System) consiste en una constelación de 24 satélites en órbita que transmiten información precisa de tiempo y posición (órbita del satélite) a estaciones o receptores terrestres.

Cuando el receptor GPS recibe la señal y rastrea al menos 4 satélites, tiene la capacidad de calcular su posición geográfica de forma absoluta y se dice que “ha obtenido un punto GPS” (GPS Fix). Las estaciones terrestres NO transmiten información de vuelta al satélite GPS, solamente utilizan la información recibida para realizar cálculos matemáticos.

La estación terrestre (receptor GPS) es la encargada de calcular su posición utilizando la información transmitida por los satélites. El receptor GPS utiliza un método matemático conocido como trilateración.

El sistema GPS provee información de navegación: Latitud, Longitud, Velocidad, Rumbo, Tiempo, etc. 

Si algún lector desea conocer más detalles técnicos sobre el funcionamiento del sistema GPS recomendamos revisar el libro: FUNDAMENTALS OF GPS RECEIVERS A HARDWARE APPROACH (DAN DOBERSTEIN).

En todo momento deben existir de 4 a 12 satélites en vista para que el GPS funcione. La siguiente animación nos da una idea de cómo funcionan los satélites GPS.

¿Cómo funciona un módulo GPS?

Un módulo GPS es un receptor de radiofrecuencia que capta y procesa las señales de los satélites GPS y nos entrega mediante una interfaz serial los datos de posición (información de navegación). Esto quiere decir que este dispositivo realiza todos el procesamiento de señales de radiofrecuencia y cálculos matemáticos de forma autónoma.

La mayoría de los módulos GPS entregan su salida mediante una interfaz serial asíncrona (UART) en un formato de datos conocido con sentencias NMEA. Cuando un módulo GPS para Arduino recibe alimentación, envía continuamente datos NMEA en el pin TX.

La configuración por defecto del puerto serie (UART), depende mucho del fabricante del módulo GPS pero es común encontrar módulos que funcionan a estas velocidades:

  • 4800
  • 9600
  • 38400

Al tratarse de una comunicación por UART las señales habituales son:

  • Conexión necesaria: GPS TX → Arduino RX
  • Conexión opcional: GPS RX → Arduino TX
  • VCC positivo de alimentación
  • GND tierra o negativo de la alimentación

Podrían existir otros baudrates y configuraciones de fábrica diferentes, por lo que habrá que revisar con el fabricante o el proveedor del módulo. Para el caso del módulo GY-NEO6MV2 hemos notado que casi siempre viene configurado a 9600 baudios.

Sentencias NMEA

Las sentencias NMEA (siglas de National Marine Electronics Asociation) son el estándar utilizado por la mayoría de los receptores GPS.

Se trata de un protocolo basado en lineas de texto, aunque no está diseñado para ser fácilmente legible por humanos. Se usan “Sentencias” o lineas de texto delimitadas por saltos de linea. Existen varios tipos de sentencias NMEA según el estándar, pero todas tienen en común lo siguiente:

  • Inician con el carácter $ seguido del nombre de la sentencia (indica el tipo de datos que contiene)
  • Los datos (campos) en cada sentencia están delimitados por comas.
  • Envío de checksum al final en cada sentencia NMEA

Para entender un poco que es una sentencia NMEA veamos un ejemplo, prestando atención a la linea que comienza con $GPRMC y $GPGGA:

  • Hora – 235317.000 equivale a 23:53 y 17.000 GMT
  • Longitud: 4003.9040, N Norte
  • Longitud: 10512.5792, W Oeste
  • Numero de satélites vistos: 08
  • Altitud: 1577 metros

El estándar es propietario y para obtener la especificación completa hace falta pagar por ello, sin embargo, existe suficiente información en Internet para permitirnos trabajar cómodamente.

Materiales utilizados en las prácticas

Conexión de módulo GPS GY-NEO6MV2 con Arduino

Para conectar un módulo GY-NEO6MV2 GPS con Arduino haremos uso de una interfaz UART de nuestro microcontrolador, sin embargo el Arduino Uno solamente tenemos una interfaz seria asíncrona, por lo que debemos emular la interfaz en donde se conecta el GPS por software usando la librería “SoftwareSerial“.

La conexión de nuestro módulo se realizará como se muestra en la imagen a continuación:

Diagrama de conexión de un módulo NEO-6M (GY-NEO6MV2) GPS con Arduino UNO.

Código y programación de GPS con Arduino

Programa o código para visualizar datos NMEA

Este programa permite visualizar datos NMEA en el monitor serie de Arduino. Esto es de suma importancia para validad que nuestro módulo GPS funciona correctamente y que la comunicación con la tarjeta Arduino es adecuada.

También podemos utilizar una interfaz USB serial UART TTL para probar diferentes baudrates y validar el funcionamiento de nuestro receptor GPS.

La salida del programa anterior vista en el monitor serial de Arduino IDE debe ser similar a lo que se muestra a continuación:

Datos NMEA visualizados en el monitor serial de Arduino IDE.

Si el programa no muestra nada o muestra caracteres extraños deberemos revisar las conexiones y también el baudrate.

Librería para módulo GPS en Arduino

Existen varias librerías para manejar la información que entregan los módulos GPS, sin embargo debido a su popularidad, uso de recursos y la comunidad existente, creemos que la mejor opción para realizar esta tarea es la librería TinyGPS.

Podemos obtener esta desde su página oficial que se enlaza a continuación o bien agregarla desde el gestor de librerías en el Arduino IDE:

Obtener coordenadas desde módulo GPS con Arduino

Para que este programa funcione será necesario tener instalada la librería TinyGPS. Este programa mostará en el monitor serie de Arduino la latitud y longitud calculada por el módulo GPS NEO-6M (GY-NEO6MV2).

Lecturas recomendadas

Conclusión

  • En este artículo se han presentado las nociones sobre el funcionamiento del sistema de posicionamiento global GPS con la tarjeta de desarrollo Arduino.
  • Hemos aprendido las bases del sistema de coordenadas geográficas usadas en la navegación GPS.
  • Conocimos el protocolo NMEA 0183 mediante el cual un receptor GPS envía información de navegación.
  • Sabemos ahora que los GPS se conectan mediante el UART (Serial o SoftwareSerial) al Arduino o cualquier otro microcontrolador o computadora.
  • Aprendimos a conectar módulo GPS NEO-6MV2 a la tarjeta Arduino Uno R3.
  • Visualizamos las sentencias NMEA directamente en el monitor serial de arduino.
  • Aprendimos sobre la librería TinyGPS y su uso para procesar sentencias NMEA.
  • Realizamos un programa básico con TinyGPS que nos muestra las coordenadas en latitud y longitud a partir de un GPS con Arduino.
1
Escanea el código