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
- Arduino Uno R3 o tarjeta compatible con Arduino Uno R3
- Módulo GPS NEO-6M (GY-NEO6MV2)
- Cables dupont macho - hembra
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:

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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | /** Geek Factory - "Dale vuelo a tus proyectos" Tienda de electrónica, Arduino, Raspberry Pi, IoT www.geekfactory.mx GEEK FACTORY INVIERTE TIEMPO Y RECURSOS EN DESARROLLAR ESTOS EJEMPLOS Y TUTORIALES. SI ENCUENTRAS ÚTIL ESTE CÓDIGO, CONSIDERA REALIZAR UNA COMPRA CON NOSOTROS. EJEMPLO MODULO GPS 1 Descripción: Este programa crea un puerto serie (UART) emulado por software utilizando la librería SoftwareSerial y redirige los datos desde y hacia la interfaz por hardware en los pines 0 y 1 del Arduino Uno. La aplicación principal de este programa es para la tarjeta Uno por que el modelo Mega si dispone de varias interfaces UART en Hardware. Este sketch NO permite la comunicación full duplex debido a las limitaciones de hardware y software de la librería SoftwareSerial. https://www.arduino.cc/en/Reference/SoftwareSerial */ #include <SoftwareSerial.h> // cambiar aquí la configuración de los pines para la librería SoftwareSerial #define CONFIG_GPS_RXPIN 4 #define CONFIG_GPS_TXPIN 3 #define CONFIG_GPS_BAUDRATE 9600 // puerto serie emulado: el Arduino Uno tiene solamente una intefaz UART // en el constructor de SoftwareSerial se especifican los pines para las señales RX Y TX SoftwareSerial swseri = SoftwareSerial(CONFIG_GPS_RXPIN, CONFIG_GPS_TXPIN); void setup() { // iniciar las interfaces seriales a la velocidad previamente definida swseri.begin(CONFIG_GPS_BAUDRATE); Serial.begin(CONFIG_GPS_BAUDRATE); } void loop() { // si hay datos en la intefaz serial emulada por software, transferirlos al UART por hardware if (swseri.available()) { Serial.write(swseri.read()); } // si hay datos en la intefaz serial por hardware, transferirlos al UART emulado por software if (Serial.available()) { swseri.write(Serial.read()); } } |
La salida del programa anterior vista en el monitor serial de Arduino IDE debe ser similar a lo que se muestra a continuación:

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).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | /** Geek Factory - "Dale vuelo a tus proyectos" Tienda de componentes electrónicos www.geekfactory.mx GEEK FACTORY INVIERTE TIEMPO Y RECURSOS EN DESARROLLAR ESTOS EJEMPLOS Y TUTORIALES. SI ENCUENTRAS ÚTIL ESTE CÓDIGO, CONSIDERA REALIZAR UNA COMPRA CON NOSOTROS. EJEMPLO MODULO GPS 2a Descripción: Este programa recibe datos NMEA de una intefaz serial UART emulada por software (SoftwareSerial) y los pasa a la librería TinyGPS para su procesamiento. La librería nos entrega las coordenadas calculadas por el GPS en variables de tipo float para realizar cualquier otro procesamiento que se requiera. En este ejemplo solamente imprimimos las coordenadas en el monitor serial de Arduino. */ #include <SoftwareSerial.h> #include <TinyGPS.h> // configurar aquí los pines donde se conecta el módulo GPS y el baudrate #define CONFIG_GPS_RXPIN 4 #define CONFIG_GPS_TXPIN 3 #define CONFIG_GPS_BAUDRATE 9600 // instancia de la librería TinyGPS TinyGPS gps; // interfaz serial emulada por software (necesaria por que Arduino Uno solo dispone de una UART) SoftwareSerial ss(CONFIG_GPS_RXPIN, CONFIG_GPS_TXPIN); // variables para los datos obtenidos desde el GPS float latitude, longitude; unsigned long age; /** Función setup: se ejecuta una vez cuando encendemos el arduino */ void setup() { // preparar las interfaces seriales para comunicación con la PC y el módulo GPS Serial.begin(115200); // esta es la interfaz del módulo GPS ss.begin(CONFIG_GPS_BAUDRATE); Serial.println(F("----------------------------------------------------")); Serial.println(F(" EJEMPLO USO DE MODULO NEO-6M GPS CON ARDUINO ")); Serial.println(F(" https://www.geekfactory.mx ")); Serial.println(F("----------------------------------------------------")); } /** Función loop: se ejecuta continuamente mientras el arduino permanece encendido */ void loop() { // verifcar si hay datos en la interfaz serial del módulo GPS while (ss.available()) { // si hay datos, leer un caracter a la vez y pasarlo al objeto TinyGPS para que lo procese char c = ss.read(); // descomendar para ver en el monitor serial los caracteres recibidos desde el módulo GPS //Serial.write(c); // cuando se haya recibido una sentencia completa con información de posición esta función // miembro retorna un valor que se evalúa como verdadero if (gps.encode(c)) { // obtener los datos desde TinyGPS y almacenarlos en las variables que creamos gps.f_get_position(&latitude, &longitude, &age); Serial.print(F("COORDENADAS GPS -> ")); // imprimir latitud al monitor serial Serial.print(F("LATITUD = ")); Serial.print(latitude, 6); // impirmir longitud al monitor serial Serial.print(F(" LONGITUD = ")); Serial.print(longitude, 6); // saltar a una nueva línea Serial.println(); } } } |
Lecturas recomendadas
- Página oficial de la librería TinyGPS y TinyGPS++
- Repositorio de TinyGPS en GitHub
- Repositorio de TinyGPS++ en Github
- Libro en inglés sobre receptores GPS
- Página de producto módulo receptor GPS NEO-6M GY-NEO6MV2
- Información del estándar NMEA 0183
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.









