Localizador GPS con Raspberry Pi y Ublox NEO 6M


Un tracker GPS o localizador GPS es un dispositivo electrónico capaz de rastrear en tiempo real a personas, vehículos y objetos usando coordenadas geográficas (longitud y latitud) proporcionadas por una red de 24 satélites con trayectorias sincronizadas, orbitando a 21.000 km sobre nuestras cabezas. Estos satélites utilizan la triangulación para determinar la posición del localizador con un margen de error de pocos metros (o centímetros en el caso del GPS diferencial).

La red de satélites GPS fue diseñada y desarrollada con fines puramente militares por el departamento de defensa de Estados Unidos de América.

La idea de este proyecto es crear un localizador GPS con Raspberry Pi que almacene en un archivo local su posición exacta cada cierto tiempo, creando así una lista de localizaciones o checkpoints que posteriormente representaremos en una mapa interactivo de Google Maps aprovechando su API. Este mapa se podrá consultar accediendo al servidor web con soporte PHP montado en la misma Raspberry Pi.

Componentes necesarios

1x Raspberry Pi 1/2/3/Zero/Zero W (cualquier versión/modelo)
1x Módulo GPS Ublox NEO M6 o similar

Descargar documentación del módulo GPS (PDF)

Esquema y conexiones

Alimentaremos el módulo GPS desde los pines GPIO 3.3V y GND de la Raspberry Pi y, para comunicarnos con el, usaremos el puerto serie. Conectaremos el módulo tal y como indica el siguiente esquema:

localizador GPS con Raspberry Pi

Recuerda que los cables TX y RX deben estar cruzados, es decir, el pin TX de la Raspberry Pi va conectado al pin RX del módulo GPS y el pin RX de la Raspberry Pi va conectado al pin TX del módulo GPS

Preparando la Raspberry Pi

Como ya sabéis, el puerto serie dev/ttyAMA0 no esta disponible por defecto y hay que desbloquearlo. Para ello abriremos el archivo /boot/cmdline.txt y cambiamos:

por:

Seguidamente abrimos el archivo /etc/inittab y comentamos con una # la última línea, cambiamos:

Por:

Para que estos cambios tengan efecto reiniciamos la Raspberry Pi. Una vez reiniciada ya tendremos el puerto serie listo para usarlo. Ahora vamos a instalar algunas dependencias que nos harán falta para interpretar los datos del módulo GPS mediante este comando desde la terminal:

GPSD es una aplicación que corre en segundo plano y que recoge los datos GPS del módulo y los envía a través de un socket que necesita ser activado cada vez que iniciamos la Raspberry (más adelante veremos como automatizar este paso), por eso introducimos en la terminal:

Si todo está bien, al introducir el siguiente comando en la terminal:

Debería mostrar algo como esto:

tracker GPS con Raspberry Pi

Bien, ahora que tenemos la Raspberry Pi y el módulo GPS Ublox 6M funcionando es la hora de crear un pequeño daemon que tome las coordenadas y las escriba en un archivo cada cierto tiempo.

Guardando los checkpoints en un archivo

Este script consulta el módulo GPS y extrae la latitud y la longitud para escribirlas en un archivo de texto cada 10 segundos:

Así se vería el script funcionando en la consola:

localizador GPS con Raspberry Pi

Automatizando el arranque del script

Para que el script se inicie automáticamente al arrancar la Raspberry abrimos el archivo etc/rc.local y ponemos justo antes de exit 0:

Luego creamos un archivo llamado /home/pi/gps.sh y dentro escribimos:

Ahora, cada vez que inicie la Raspberry Pi se iniciará también el socket GPS y se ejecutará el script. De este modo tan solo tendríamos que darle tensión a la Raspberry Pi y ella sola empezaría a guardar coordenadas en el archivo /home/pi/locations.txt.

Representando las coordenadas en Google Maps

Google maps nos ofrece la posibilidad de representar una ruta en el mapa estableciendo checkpoints mediante coordenadas asi que aprovechando la API hemos construido un pequeño script en PHP que carga todos los checkpoints del archivo locations.txt generado por el daemon que hemos escrito previamente en Python. Este es el código:

Si queremos que el mapa se pueda consultar desde un navegador web tan solo tenemos que instalar Apache o cualquier otra aplicación que haga de servidor web y también el paquete de soporte para PHP. También habría que asignar como carpeta raíz del servidor la carpeta donde esta el script y el archivo locations.txt.

Resultado final


[Total:2    Promedio:4/5]
Compartir en redes sociales: