Cómo hacer un Geolocalizador con una Raspberry Pi? Script en Python

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

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Posted on July 24, 2016 and filed under TutorialPython, TopTutorial.