Tracker GPS con Raspberry Pi y el módulo Ublox M6

By Proyectos Raspberry Pi, , , With 53 comments

Descripción del proyecto

Un tracker GPS o localizador GPS es un dispositivo capaz de rastrear a personas, vehículos u objetos a través de coordenadas geográficas (longitud y latitud) en tiempo real y gracias a una red constituida por 24 satélites orbitando a 21.000 km sobre nuestras cabezas con trayectorias sincronizadas para cubrir toda la superficie del globo.

Estos satélites utilizan la triangulación para determinar la posición del localizador con una precisión de pocos metros (centímetros en el caso del GPS diferencial). La red de satélites GPS fue desarrollada con fines militares por el departamento de defensa de Estados Unidos.

La idea de este proyecto es crear un localizador GPS portátil con Raspberry Pi (Tracker GPS) 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 de forma local o remota. Sin más dilación veamos el esquema del proyecto.

Esquema y cableado del módulo Ublox M6

El módulo Ublox M6 es el módulo GPS más pequeño del mundo, tiene el tamaño de una tarjeta SD y ha sido diseñado específicamente para dotar de funcionalidades GPS básicas a cualquier proyecto. Se trata de una solución GPS totalmente integrada que no requiere apenas instalación, tan solo conectar unos cables. Este es el módulo:

tracker_gps_raspberry_ublox_m6

En la imagen podéis ver que el módulo no tiene pines soldados donde conectar los cables, así que, o soldamos los cables directamente a la placa, o adquirimos una cabecera de pines y la soldamos. Yo he optado por la segunda opción.

pines_gps_modulo

Para comunicar el módulo Ublox M6 con la Raspberry Pi usaremos el puerto serie ‘/dev/ttyAMA0‘. Para ello conectaremos el módulo GPS a la Raspberry tal como indica el esquema, recuerda que los cables TX y RX deben estar cruzados, es decir, el pin TX de la Raspberry va conectado al pin RX del módulo GPS y el pin RX de la Raspberry va conectado al pin TX del módulo GPS. Alimentaremos el módulo desde los pines GPIO de 3.3V y GND de la Raspberry.

tracker_gps_raspberry_pi

Preparando la Raspberry Pi

Como ya vimos en el tutorial “Llamadas y SMS con Sim900, Raspberry Pi y Python” 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 en la última línea ponemos un ‘#’. Cambiamos:

Por:

Para que estos cambios tengan efecto reiniciamos la Raspberry Pi, una vez reiniciada ya tendremos el puerto serie listo para usarlo. Ahora instalaremos algunas dependencias que nos harán falta para interpretar los datos del módulo GPS con 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 muestro como automatizar este paso), por eso introducimos en la terminal:

Si lo has hecho todo bien al introducir el siguiente comando:

Te debería mostrar algo como esto:

gps_client

Scripting con Python

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. Este es el código del script, encontré varios códigos y los junté en uno.

Asi se vería el script funcionando:

gpsx1

Automatizando el arranque

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

Luego he creado un archivo llamado ‘/home/pi/gps.sh‘ y dentro he escrito:

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

Representando las coordenadas con Google Maps

Google maps nos ofrece la posibilidad de representar una ruta en el mapa estableciendo ‘checkpoints’ mediante coordenadas asi que he aprovechado la API y he construido un pequeño script en PHP que carga todos los ‘checkpoints’ del archivo ‘locations.txt’ generado por el ‘daemon’ que hemos hecho 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 pero esto ya nos da para otro tutorial…

Primer test del tracker GPS

He puesto la Raspbery en el salpicadero pegada con 2 tiras de velcro auto adhesivas y la he conectado a una batería portátil de 5V, 1600Mah y 1A, suficiente para alimentar todo el conjunto. He dado una vuelta de 12Kms aproximadamente y este es el resultado:

track01

Si te ha gustado este proyecto deja un comentario, un +1 o un like!!.

Puedes ver la documentación del módulo Ublox NEO M6 desde aqui.