Grabar posición al segundo es posible con soluciones sencillas basadas en hardware y software libre. Este tutorial muestra un proyecto de fin de semana con la aplicación de Raspberry Pi acoplado a un GPS que graba posiciones en coordenadas geográficas cada segundo en una tarjeta de memoria. Los datos guardados pueden ser visualizados y procesados en QGIS.
Este es el primero de una serie de tutoriales que desarrollaremos sobre geolocalizadores donde acoplaremos características de registro online, implementación de bases de datos NoSQL, representación Web en tiempo real. Por último haremos una aplicación en el estudio de hábitat de ganado.
Video
Materiales
Para este prototipo se han utilizado los siguientes materiales:
- 1 Rapsberry Pi 2 Model B
- 1 GPS Ublox Neo-6M
- 1 Interruptor
- 1 Led
- 1 Resistencia 1k Ohm
- 1 Batería externa con conexión USB
Ensamblaje y programación
El GPS fue conectado siguiendo las instrucciones de este tutorial: Enlace. Se utilizó la conexión via serial en lugar de la conexión USB sugerido en otros tutoriales.
Ya que el puerto serial y el gps se necesitan inicializar cada vez que se inicia el Raspberry Pi, pusimos estos comandos:
stty -F /dev/ttyAMA0 9600
sudo gpsd /dev/ttyAMA0 -F /var/run/gpsd.sock
de manera que corran cuando se inicie la Raspberry Pi siguiendo la Alternativa #1 de este tutorial: Enlace.
Se programó un código en Python que registre las lecturas del GPS solo cuando el toque el interruptor. Para ver que las lecturas se están registrando, le programó que el LED de un pulso. A continuación mostramos el código:
import RPi.GPIO as GPIO import os from gps import * #Empezamos el gps session = gps() session.stream(WATCH_ENABLE|WATCH_NEWSTYLE) #Iniciamos los pines del Raspberry GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(16, GPIO.OUT) #Abrimos el registro de numeros texto = open('registropuntos.txt','w') texto.write('lat,lon,fecha\n') texto.close() #Funcion que graba texto en registropuntos.text def registro(linea): texto = open('registropuntos.txt','a') texto.write(linea + '\n') texto.close() #Aqui da un pulso luego que ha grabado GPIO.output(16, GPIO.LOW) time.sleep(0.2) GPIO.output(16, GPIO.HIGH) while True: input_state = GPIO.input(23) if input_state == False: print('Registrando Puntos') GPIO.output(16, GPIO.HIGH) report = session.next() if report.keys()[0] == 'epx' : lat = float(report['lat']) lon = float(report['lon']) print("lat=%f \t lon=%f \t time=%s" % (lat, lon, report['time'])) registro(str(lat) + ',' +str(lon) + ',' + report['time']) time.sleep(0.8) else: print('No Esta Registrando Nada') GPIO.output(16, GPIO.OUT) time.sleep(1)
También puede descargar el archivo de este enlace: encender.py
Esta interesado en una solución con automatización en Raspberry Pi? Escríbanos a gestiondelagua@gidahatari.com