Cómo usar un GPS con Arduino
ARDUINO

El GPS es un dispositivo muy útil que se emplea en muchos proyectos de electrónica y aplicaciones como sistemas de rastreo de vehículos, relojes GPS, sistemas de alerta de detección de accidentes, navegación de tráfico y sistemas de vigilancia, etc. Pero la pregunta es ¿cómo usar el GPS y leer los datos que entrega? Podemos obtener fácilmente los datos del GPS directamente en nuestra computadora usando Arduino.
GPS son las siglas de Global Positioning System (Sistema de Posicionamiento Global) y se usa para determinar la latitud y la longitud de cualquier ubicación en la Tierra, con la hora UTC exacta (Tiempo Universal Coordinado). Este dispositivo recibe las coordenadas del satélite cada segundo, junto con la hora y la fecha. El GPS ofrece una gran precisión y también proporciona otros datos además de las coordenadas de posición, que veremos en breve.

En este tutorial de GPS con Arduino, vamos a explicar cómo probar o conectar un módulo GPS usando la computadora y Arduino. Para conectar el GPS a la computadora necesitamos un convertidor USB a serie o una placa Arduino. Aquí usamos la placa Arduino para conectar el GPS. Solo necesitamos placa Arduino, módulo GPS, computadora y un adaptador de 12v/3.3v para la alimentación. Aquí hemos utilizado el módulo receptor GPS SKG13BL (que se muestra en la figura anterior).

Antes de conectarlo a la computadora, primero necesitamos retirar el circuito integrado (IC) de Arduino (el chip Atmega) de la placa Arduino, ya que solo necesitamos la circuitería serie de la placa. Esto se conoce como modo pasarela (Gateway mode). El retiro del IC se muestra en las siguientes figuras:


Ahora realiza la conexión como se indica en la siguiente imagen:
- Pin TX del GPS al PIN Digital 1 de Arduino (TXD)
- Pin de tierra (Ground) del GPS al PIN GND de Arduino
- Pin de alimentación (3.3v) del GPS al PIN de 3.3v de Arduino


Después de las conexiones, conecta el cable USB a la computadora, abre el software Arduino IDE en la computadora, selecciona el puerto COM y abre el monitor serie para escuchar el puerto serie, y enciende el Arduino y el módulo GPS.
Ahora verás los datos del GPS en la ventana del Monitor Serie de Arduino, como se muestra abajo. A continuación hay dos capturas: la primera es cuando el GPS no tiene cobertura y la segunda es cuando el GPS sí tiene cobertura.
Datos del GPS cuando el receptor GPS está fuera de cobertura:

Datos del GPS cuando el receptor GPS tiene cobertura:

En la ventana serie, puedes ver algunas líneas que empiezan con el signo $. Son las sentencias NMEA. El módulo GPS envía los datos de posición de rastreo en tiempo real en formato NMEA (ver la captura de arriba). El formato NMEA consta de varias sentencias, de las cuales las cuatro más importantes se indican a continuación. Puedes encontrar más detalles sobre las sentencias NMEA y su formato de datos aquí.
- $GPGGA: Global Positioning System Fix Data (datos de posición del GPS)
- $GPGSV: GPS satellites in view (satélites GPS a la vista)
- $GPGSA: GPS DOP and active satellites (DOP del GPS y satélites activos)
- $GPRMC: Recommended minimum specific GPS/Transit data (datos mínimos recomendados de GPS/tránsito)
Estas cadenas contienen muchos parámetros del GPS como: hora, fecha, longitud, latitud, velocidad, número de satélites en uso, altitud y muchos otros datos.
Para las coordenadas de cualquier ubicación y la hora, podemos usar $GPGGA y $GPRMC.
Para la fecha y la hora podemos usar la cadena $GPRMC.
Cuando usamos el módulo GPS para rastrear cualquier ubicación, solo necesitamos las coordenadas, y las podemos encontrar en la cadena $GPGGA. En la mayoría de los programas solo se usa la cadena $GPGGA (Global Positioning System Fix Data) y las demás cadenas se ignoran. Esta cadena contiene los datos de posición como se muestra a continuación:
$GPGGA,104534.000,7791.0381,N,06727.4434,E,1,08,0.9,510.4,M,43.9,M,,*47 $GPGGA,HHMMSS.SSS,latitude,N,longitude,E,FQ,NOS,HDP,altitude,M,height,M,,checksum data
| Identificador | Descripción |
| $GPGGA | Datos de posición del Sistema de Posicionamiento Global |
| HHMMSS.SSS | Hora en formato de horas, minutos, segundos y milisegundos. |
| Latitude | Latitud (coordenada) |
| N | Dirección N=Norte, S=Sur |
| Longitude | Longitud (coordenada) |
| E | Dirección E=Este, W=Oeste |
| FQ | Datos de calidad de la fijación (Fix Quality) |
| NOS | Número de satélites en uso |
| HDP | Dilución horizontal de la precisión (HDOP) |
| Altitude | Altitud (metros sobre el nivel del mar) |
| M | Metro |
| Height | Altura |
| Checksum | Datos de suma de verificación |
Y la cadena $GPRMC contiene principalmente velocidad, hora, fecha y posición.
$GPRMC,123519.000,A, 7791.0381,N, 06727.4434,E,022.4,084.4,230394,003.1,W*6A $GPRMC,HHMMSS.SSS,A,latitude,N,longitude,E,speed,angle,date,MV,W,CMD
| Identificador | Descripción |
| RMC | Sentencia mínima recomendada C |
| HHMMSS.SSS | Hora en formato de horas, minutos, segundos y milisegundos. |
| A | Estado // A=activo y V=nulo (void) |
| Latitude | Latitud 49 grados 16.45 min. Norte |
| N | Dirección N=Norte, S=Sur |
| Longitude | Longitud (coordenada) |
| E | Dirección E=Este, W=Oeste |
| Speed | Velocidad en nudos |
| Angle | Ángulo de rastreo en grados |
| Date | Marca de tiempo (fecha en UTC) |
| MV | Variación magnética |
| W | Dirección de la variación E/W |
| CMD (*6A) | Datos de suma de verificación |
En la mayoría de los casos esta cadena se usa para obtener la hora, la fecha y la velocidad.
Artículo traducido al español. Fuente original: CircuitDigest (por Saddam).