Você está na página 1de 7

Medical Unit Service with Raspberry Pi

Pozos Flores Angel Manrique Autors1


2

Electronics Engineering Career, Tijuana Baja California., Mxico Curse Design of Electronic Projects, Technological Institute of Tijuana, Mxico Phone (664) 2-32-52-11 E-mail: last_days_here@live.com

Abstract The present article contains the information on the progress of the electronic project named Medical Unit Service with Raspberry Pi which consists basically on a configuring a Raspberry Pi based on Linux Kernel, this dispositive is capable to read GPS position and i2c Sensors. Keywords Linux, command Raspberry Pi, GPS, python code. terminal,

I. INTRODUCCION El presente artculo se divide en secciones, donde cada seccin es fundamental para poder llevar a cabo el proyecto "Servicio de la Unidad Mdica con Raspberry Pi". Este est estructurado de una manera lgica y fcil de entender, con el propsito de que si en caso de que requiera informacin o documentacin sobre cmo se llev a cabo el proyecto, no sera demasiado confuso para el lector el poder entender el documento. Por lo tanto, cualquier pregunta con respecto a este trabajo se aclarara rpidamente sin necesidad de buscar otro medio de informacin. La informacin presentada en este documento se entrega en la forma ms clara posible y confiable. II. METODOLOGIA El primer punto que debemos cubrir es la busqueda de informacion de la configuracion requerida por el raspberry para que este pueda trabajar de una manera correcta y eficaz, despues procedemos a la busqueda de informacion relacionada a la configuracion de los dispositivos de i2c que tengan relacion con raspberry pi y posteriormente la busqueda de informacion de dispositivos GPS en el raspberry pi, esto se logra utilizando preguntas clave como, que herramientas son requeridas para la actualizacion de el sistema operativo?, que lenguaje debo utilizar?, que tipo de comunicacion es requerida? Una vez obtenida la informacion es necesario organizar las actividades para que se pueda dar un correcto seguimiento al orden en que deben de realizarse las actividades relacionadas a las diversas configuraciones del dispositivo. La figura 1 muestra el diagrama a bloques de las actividades a desarrollar de una manera global. Fig. 1 Cronograma de Actividades

II. DISENO CONCEPTUAL En esta seccin se describe el desarrollo del proyecto en una forma global mediante un diagrama de bloques que muestra los pasos a realizar de una forma sencilla.

Fig. 2 Diagrama a bloques del diseo conceptual de la unidad medica Uno de los requerimientos ms importantes para el desarrollo del proyecto es el conocimiento bsico del uso del sistema operativo Linux, ya que nuestro dispositivo est basado completamente en software libre el cual en su mayora es para Linux. Un protoboard es necesario para el montaje de los dispositivos seriales por medio del puerto UART (universal asynchronous receiver-transmitter) y el Puerto de I2C del GPIO del raspberry pi. Tambin es necesario un GPS compatible y sensores de i2c para la medicin de parmetros, es por ello que tambin es requerido un conocimiento del lenguaje de programacin python para el desarrollo de los programas que leern la informacin de los dispositivos antes mencionados. Para la creacin del proyecto especificaciones han sido propuestas. las siguientes

Acoplar un protoboard al raspberry mediante un cable en paralelo. Configurar el dispositivo para la utilizacin del puerto de propsito general de entrada salida (GPIO). Abrir el puerto de comunicacin UART. Abrir el Puerto de comunicacin de i2c para la lectura de los sensores. Una antena para el GPS para la obtencin de las seales de comunicacin satelital.

Fig. 4 Ubicacin de las entradas del GPIO

II. DISENO ESPECFICO El primer paso que se procede es el de actualizacin y configuracin del sistema operativo del raspberry pi, e instalacin de las herramientas necesarias para empezar a realizar nuestras actividades. Para ello vamos empezar por configurar el puerto GPIO como se muestra en la figura 3

Una vez que hemos identificado las entradas de nuestro GPIO procedemos a conectar el cable de comunicaciones y el adaptador de adafruit al protoboard y al raspberry, como se observa en la figura 5, donde observamos que el cable presenta una lnea roja en uno de sus extremos indicando el orden de los pines.

Fig. 5 conexin de el Puerto GPIO al Protoboard Esto es de suma importancia ya que podras daar el GPIO si al conectar un dispositivo este no se encuentra correctamente configurado. Procedemos a actualizar el sistema operativo y activar nuestro GPIO, donde abrimos una terminal y escribimos los siguientes comandos. sudo apt-get update sudo apt-get install git sudo apt-get install python-dev sudo apt-get install python-rpi.gpio

Fig 3 Puerto general purpose input/output. El Puerto de comunicaciones contiene las siguientes caractersticas para sus conexiones. True GPIO I2C interface SPI similar a I2C pero estndar diferente Serial RX y TX para comunicacin con perifricos seriales

En la figura 6 se observa lo que ocurre en la consola de nuestro dispositivo.

Cada uno de ellos se utiliza para comunicarse con diversos dispositivos, ya sea para la lectura o escritura de instrucciones de programacin. Todos estos pines tambin se pueden utilizar para propsitos de entrada y/o salida de tipo digital. En la figura 4 se muestran las ubicaciones de los puertos de comunicacin de nuestro raspberry pi. Fig. 6 Actualizacin e instalacin de las herramientas del GPIO

Una vez instaladas las herramientas del GPIO procedemos a la instalacin del Daemon de I2c y configurarlo. Donde i2c se utiliza para aplicaciones comunes entre dispositivos diversos nosotros usaremos un sensor de brjula y un giroscopio de LEGO mindstorms. Para ello abrimos una terminal e introduciremos los siguientes comandos, el primer comando abrir un archivo en modules donde agregaremos las entradas de i2c. sudo nano /etc/modules i2c-bcm2708 i2c-de

Una vez que hemos terminado, reiniciamos el sistema operativo y conectamos nuestro sensor de i2c de LEGO mindstorms de acuerdo a la configuracin dada por el fabricante a los pines de SDA y SCL del GPIO y uno a la fuente de 5v y otro a tierra como se observa en la figura 9 e introducimos el siguiente comando para detectar los dispositivos conectados. sudo i2cdetect -y 1

Una vez agregadas las entradas presionamos ctrl+x y damos enter y guardamos los cambios como se observa en la figura 7.

Fig. 9 Conexin de i2c Donde el valor de 1 es la versin de raspberry que tenemos, como nosotros estamos utilizando el de 512mb es la versin 1, la 0 es la de 256mb, en la figura 10 observamos lo que sucede al introducir el comando. Fig. 7 Archivo de configuracin de i2c. Una vez concluido reiniciamos el raspberry pi. Ahora procederemos a instalar las herramientas De i2c para ello abrimos una terminal e introducimos los siguientes comandos. sudo apt-get install python-smbus sudo apt-get install i2c-tools Fig. 10 deteccin de los dispositivos de i2c. En las discusiones explicaremos por qu no son detectados nuestros sensores de i2c, en la figura 10 mostramos varios tipos de sensores que existen de tipo i2c para tener una idea ms precisa de que hacen.

Despus de que termine la instalacin introducimos el siguiente comando. Sudo nano/etc/modprobe.d/raspi_blacklist.conf

Y lo editamos poniendo un # en cada uno de ellos, como se observa en la figura 8 y guardamos.

Fig. 8 Archivo de configuracin de i2c.

Fig. 10 tipos de sensores de i2c.

Para la instalacin del GPS en el Raspberry PI se requieren la instalacin del Daemon del GPS, lo primero que tenemos que hacer es instalar el software requerido en la raspberry para que pueda entender la informacin que es enviada por serie de nuestro modulo receptor de GPS que estar ubicado en /dev/ttyAMA0. Abrimos una terminal e introducimos sudo apt-get install gpsd gpsd-clients pythongps sudo gpsd /dev/ttyAMA0 -F /var/run/gpsd.sock (modificado)

En la figura 12 observamos lo que se edit en el archivo antes mencionado, despus procedemos a reiniciar.

Despus editaremos la lnea de comandos para ello abrimos una terminal e introducimos el siguiente cdigo. sudo nano /boot /cmdline.txt Donde agregamos un # a la lnea original e introducimos la lnea dos debajo como se observa en la figura 11 dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait Fig. 12 configuracin de inittab Una vez que hemos reiniciado conectamos el GPS al protoboard de acuerdo a la asignacin de los pines del GPIO como se observa en la figura 13 y procedemos a hacer un test. Donde primeramente reiniciamos el servicio y re direccionamos para que gpsd pueda usar HW UART (Universal asynchronous receiver/transmitter) y no lo tome del USB, para ello abrimos una terminal e introducimos las siguientes lneas de comando. sudo killall gpsd sudo gpsd /dev/ttyAMA0 -F /var/run/gpsd.sock Y hacemos un test cgps -s en la figura 14 observamos las lecturas que se estn obteniendo del GPS.

Fig. 11 apertura del puerto serial del raspberry pi Despus abrimos el archivo con el siguiente comando y modificamos la lnea 1 para dejarla como la lnea 2 donde observamos que se antepone un # en el segundo rengln. $ sudo nano /etc/inittab Fig. 13 Conexin del GPS al GPIO del raspberry pi.
#Spawn a getty on Raspberry Pi serial line T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100 #Spawn a getty on Raspberry Pi serial line #T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

Que datos recibimos del GPS ~$ gpspipe r $GPRMC,160516,A,5209.2521,N,00428.9913,E,000.0, 140.8,270108,001.0,W*67 $GPGGA,160516,5209.2521,N,00428.9913,E,1,03,4.7,, M,46.8,M,,*65 $GPGSA,A,2,01,,,,,,17,20,,,,,4.8,4.7,*17 $GPGSV,3,1,11,01,28,046,38,04,15,301,00,11,52,152,0 0,12,03,357,00*7B $GPGSV,3,2,11,13,10,201,00,14,01,035,00,17,44,274,3 2,20,85,276,40*74 $GPGSV,3,3,11,23,45,183,00,31,23,072,00,37,00,000,0 0*41 $PGRME,27.9,M,,M,31.2,M*0C $GPGLL,5209.2521,N,00428.9913,E,160516,A*29 $GPVTG,141,T,142,M,000.0,N,0000.0,K*7D $PGRMV,0.0,0.0,*72 $PGRMF,440,57930,270108,160516,14,5209.2521,N,0 0428.9913,E,A,1,0,141,\ 5,1*2B $PGRMB,,,,,,K,,,*2D $PGRMM,WGS 84*06 Se procedi a desarrollar un cdigo en Python para tomar las lecturas del GPS y mostrarlas de forma tal que la persona encargada del servicio sea capaz de manipular dicha informacin para propsitos prcticos en este caso un servicio mdico de rastreo en tiempo real. El cdigo desarrollado muestra los siguientes parmetros de lectura en la figura 15 y en la figura 16 se muestra una interfaz grfica de las lecturas del GPS.

Fig. 14 lectura GPS con GPSD.

III. RESULTADOS Al conectar nuestros sensores de LEGO mindstorms de i2c no se obtuvo respuesta debido a que las velocidades de comunicacin entre el raspberry pi y los sensores lego son diferentes, ya que los sensores son de baja velocidad 9600b/s y el que viene por default en el raspberry es de alta velocidad de 100kb/s y no permita cambiarlo. Entonces al escribir el comando de deteccin de los dispositivos de i2c, el raspberry no era capaz de leer los dispositivos ya que las velocidades no coincidan y pareca que no exista el dispositivo, porque la lectura para la deteccion ocurra demasiado rpido. Se opt por instalar las libreras de wiringpi para tener ms control sobre el puerto GPIO y tratar de forzar a que leyera el dispositivo con el siguiente comando. gpio load i2c [baud rate in Kb/sec] obteniendo una respuesta similar. Como ltima alternativa se procedi a buscar una forma de reducir la velocidad estrechando el clock del raspberry mediante cdigo obteniendo resultados similares. Para saber los datos que estamos recibiendo del GPS introducimos las siguientes lneas de comando. A que velocidad se comunica nuestro dispositivo. ~$ stty < /dev/ttyAMA0 speed 4800 baud; line = 0; intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>; start = <undef>; stop = <undef>; susp = <undef>; rprnt = <undef>; werase = <undef>; lnext = <undef>; flush = <undef>; min = 1; time = 0; -brkint icrnl imaxbel -opost -onlcr -isig -icanon -iexten -echo echoe -echok -echoctl echoke

Fig. 15 lectura GPS con el cdigo desarrollado

organizado que sea capaz de enviar las lecturas directamente al servidor.

REFERENCIAS Configuracion del Raspberry Basica. http://learn.adafruit.com/adafruits-raspberry-pi-lesson4-gpio-setup Libreras de WiringPi https://projects.drogon.net/raspberry-pi/wiringpi/ Disminucin de la velocidad del raspberry pi Fig. 16 lectura GPS en una interfaz grafica IV. DISCUSIN Uno de los problemas ms fuertes y que necesito ms tiempo fue encontrar la causa del porque los dispositivos de i2c no eran detectados, donde se busc desde alterar la imagen del raspberry, manipular por medio de cdigo la velocidad para reducirla, forzar a que se guardaran los cambios en la frecuencia de default, instalar libreras alternas para el control del GPIO, y para el reconocimiento del GPS se requiero el forzar al dispositivo a que leyera el GPS de forma serial ya que la mayora de los GPS comerciales vienen en modo de USB y como el raspberry pi cuenta con 2 puertos no existe tanta dificultad, por ello fue necesario cambiar varias configuraciones para que lo pudiera detectar y trabajar con l, donde se presenta un error en la hora el cual se debe a que requiere un pin que el GPS no presenta para la actualizacin de la hora del servidor asignado en NTP. http://www.hobbytronics.co.uk/raspberry-pi-i2c-clockstretching GPSD basics http://blog.perrygeo.net/2007/05/27/python-gpsdbindings/ http://stackoverflow.com/questions/2564137/pythonhow-to-terminate-a-thread-when-main-program-ends

VI. APPENDICE
import os from gps import * from time import * import time import threading gpsd = None os.system('clear') class GpsPoller(threading.Thread): def __init__(self): threading.Thread.__init__(self) global gpsd #bring it in scope gpsd = gps(mode=WATCH_ENABLE) self.current_value = None self.running = True def run(self): global gpsd while gpsp.running: gpsd.next() if __name__ == '__main__': gpsp = GpsPoller() try: gpsp.start() while True: os.system('clear') print print ' Informacion GPS ' print

V. CONCLUSION La importancia de este tipo de proyectos se presenta en que se tiene una cierta libertad para ser creativos ya que al tratarse de software libre es necesario experimentar con configuraciones, aparte que el raspberry pi es reciente y no tiene mucho en el mercado la mayora de sus aplicaciones estn en fase de desarrollo, donde en un futuro es posible que el raspberry sea capaz de leer los dispositivos de baja velocidad de i2c. Esta es solo una parte del proyecto en si el cual pretende crear todo un servicio que sea inteligente y capaz de leer datos en tiempo real y enviarlos por medio de correo electrnico o mensaje de texto a una persona que haya contratado el servicio. Por ejemplo se podra aadir un servicio de mapas gratuito como NAVIT y configurarlo para que reciba las lecturas del GPS y las muestre en un monitor localizado en el raspberry pi, o crear un cdigo ms

print 'latitude ' , gpsd.fix.latitude print 'longitude ' , gpsd.fix.longitude print 'time utc ' , gpsd.utc,' + ', gpsd.fix.time print 'altitude (m)' , gpsd.fix.altitude print 'eps ' , gpsd.fix.eps print 'epx ' , gpsd.fix.epx print 'epv ' , gpsd.fix.epv print 'ept ' , gpsd.fix.ept print 'speed (m/s) ' , gpsd.fix.speed print 'climb ' , gpsd.fix.climb print 'track ' , gpsd.fix.track print 'mode ' , gpsd.fix.mode print print 'sats ' , gpsd.satellites time.sleep(5) except (KeyboardInterrupt, SystemExit): print "\nKilling Thread..." gpsp.running = False gpsp.join() print "Done.\nExiting."

Você também pode gostar