“Medical Unit Service with Raspberry Pi”

Pozos Flores Angel Manrique Autors1
2

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

1

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 artículo se divide en secciones, donde cada sección es fundamental para poder llevar a cabo el proyecto "Servicio de la Unidad Médica con Raspberry Pi". Este está estructurado de una manera lógica y fácil de entender, con el propósito de que si en caso de que requiera información o documentación sobre cómo 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 aclararía rápidamente sin necesidad de buscar otro medio de información. La información presentada en este documento se entrega en la forma más 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 sección 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 diseño conceptual de la unidad medica Uno de los requerimientos más importantes para el desarrollo del proyecto es el conocimiento básico del uso del sistema operativo Linux, ya que nuestro dispositivo está basado completamente en software libre el cual en su mayoría 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. También es necesario un GPS compatible y sensores de i2c para la medición de parámetros, es por ello que también es requerido un conocimiento del lenguaje de programación python para el desarrollo de los programas que leerán la información de los dispositivos antes mencionados. Para la creación del proyecto especificaciones han sido propuestas. las siguientes

como se observa en la figura 5. e instalación de las herramientas necesarias para empezar a realizar nuestras actividades. Una antena para el GPS para la obtención de las señales de comunicación satelital. donde abrimos una terminal y escribimos los siguientes comandos. 6 Actualización e instalación de las herramientas del GPIO . Cada uno de ellos se utiliza para comunicarse con diversos dispositivos. Abrir el Puerto de comunicación de i2c para la lectura de los sensores. Abrir el puerto de comunicación UART. Procedemos a actualizar el sistema operativo y activar nuestro GPIO. DISENO ESPECÍFICO El primer paso que se procede es el de actualización y configuración del sistema operativo del raspberry pi. En la figura 4 se muestran las ubicaciones de los puertos de comunicación de nuestro raspberry pi. 5 conexión de el Puerto GPIO al Protoboard Esto es de suma importancia ya que podrías dañar el GPIO si al conectar un dispositivo este no se encuentra correctamente configurado. 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. Configurar el dispositivo para la utilización del puerto de propósito general de entrada – salida (GPIO). donde observamos que el cable presenta una línea roja en uno de sus extremos indicando el orden de los pines.gpio Fig 3 Puerto general purpose input/output. • • • • sudo apt-get update sudo apt-get install git sudo apt-get install python-dev sudo apt-get install python-rpi. • • • • True GPIO I2C interface SPI similar a I2C pero estándar diferente Serial RX y TX para comunicación con periféricos seriales En la figura 6 se observa lo que ocurre en la consola de nuestro dispositivo. ya sea para la lectura o escritura de instrucciones de programación. Fig. 4 Ubicación de las entradas del GPIO II. El Puerto de comunicaciones contiene las siguientes características para sus conexiones. Fig. Todos estos pines también se pueden utilizar para propósitos de entrada y/o salida de tipo digital.• • • • • Acoplar un protoboard al raspberry mediante un cable en paralelo. Fig.

10 tipos de sensores de i2c. en la figura 10 mostramos varios tipos de sensores que existen de tipo i2c para tener una idea más precisa de que hacen. Fig. como nosotros estamos utilizando el de 512mb es la versión 1. el primer comando abrirá un archivo en modules donde agregaremos las entradas de i2c. . Donde i2c se utiliza para aplicaciones comunes entre dispositivos diversos nosotros usaremos un sensor de brújula y un giroscopio de LEGO mindstorms. Después de que termine la instalación introducimos el siguiente comando.conf Y lo editamos poniendo un # en cada uno de ellos. 8 Archivo de configuración de i2c. • Sudo nano/etc/modprobe. reiniciamos el sistema operativo y conectamos nuestro sensor de i2c de LEGO mindstorms de acuerdo a la configuración 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. Para ello abrimos una terminal e introduciremos los siguientes comandos. Fig. en la figura 10 observamos lo que sucede al introducir el comando. • 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. • • sudo apt-get install python-smbus sudo apt-get install i2c-tools Fig. 10 detección de los dispositivos de i2c. Ahora procederemos a instalar las herramientas De i2c para ello abrimos una terminal e introducimos los siguientes comandos. Fig. como se observa en la figura 8 y guardamos. • • • sudo nano /etc/modules i2c-bcm2708 i2c-de Una vez que hemos terminado.Una vez instaladas las herramientas del GPIO procedemos a la instalación del Daemon de I2c y configurarlo. 9 Conexión de i2c Donde el valor de 1 es la versión de raspberry que tenemos.d/raspi_blacklist. 7 Archivo de configuración de i2c. Una vez concluido reiniciamos el raspberry pi. la 0 es la de 256mb. En las discusiones explicaremos por qué no son detectados nuestros sensores de i2c. Fig.

lo primero que tenemos que hacer es instalar el software requerido en la raspberry para que pueda entender la información que es enviada por serie de nuestro modulo receptor de GPS que estará ubicado en /dev/ttyAMA0.sock (modificado) En la figura 12 observamos lo que se editó en el archivo antes mencionado.115200 kgdboc=ttyAMA0. #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 . $ sudo nano /etc/inittab Fig. 11 apertura del puerto serial del raspberry pi Después abrimos el archivo con el siguiente comando y modificamos la línea 1 para dejarla como la línea 2 donde observamos que se antepone un # en el segundo renglón.sock Y hacemos un test cgps -s en la figura 14 observamos las lecturas que se están obteniendo del GPS.115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait dwc_otg. sudo killall gpsd sudo gpsd /dev/ttyAMA0 -F /var/run/gpsd.lpm_enable=0 console=ttyAMA0. Después editaremos la línea de comandos para ello abrimos una terminal e introducimos el siguiente código. después procedemos a reiniciar. para ello abrimos una terminal e introducimos las siguientes líneas de comando. sudo nano /boot /cmdline. 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. Abrimos una terminal e introducimos • • sudo apt-get install gpsd gpsd-clients pythongps sudo gpsd /dev/ttyAMA0 -F /var/run/gpsd.Para la instalación del GPS en el Raspberry PI se requieren la instalación del Daemon del GPS. 12 configuración de inittab Una vez que hemos reiniciado conectamos el GPS al protoboard de acuerdo a la asignación de los pines del GPIO como se observa en la figura 13 y procedemos a hacer un test. Fig. 13 Conexión del GPS al GPIO del raspberry pi.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait Fig.txt Donde agregamos un # a la línea original e introducimos la línea dos debajo como se observa en la figura 11 dwc_otg.

152.45.5209.0. stop = <undef>.9.M.M. -brkint icrnl –imaxbel -opost -onlcr -isig -icanon -iexten -echo echoe -echok -echoctl –echoke Fig.04.. Para saber los datos que estamos recibiendo del GPS introducimos las siguientes líneas de comando.1..01.0 0428.*17 $GPGSV.N.035.0.00..E. line = 0.11. M.N.14. flush = <undef>.0.9913.46.. intr = <undef>. lnext = <undef>.00428.3.8.23. werase = <undef>.9913.N.*72 $PGRMF.00.142.00*7B $GPGSV.001.14.4.E.K*7D $PGRMV.E.*2D $PGRMM..52.160516.27. el raspberry no era capaz de leer los dispositivos ya que las velocidades no coincidían y parecía que no existía el dispositivo.5209. 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 permitía cambiarlo.01. Fig.00.0. kill = <undef>.03.0.13. El código desarrollado muestra los siguientes parámetros de lectura en la figura 15 y en la figura 16 se muestra una interfaz gráfica de las lecturas del GPS.046.*65 $GPGSA.57930.A. min = 1.3.276.3.E.000. time = 0.2521.301. gpio load i2c [baud rate in Kb/sec] obteniendo una respuesta similar.0000.38. 14 lectura GPS con GPSD.A.160516.160516...17.9913.357.31.8.20. RESULTADOS Al conectar nuestros sensores de LEGO mindstorms de i2c no se obtuvo respuesta debido a que las velocidades de comunicación entre el raspberry pi y los sensores lego son diferentes.K.2521.7.A*29 $GPVTG..03.00428.141..3 2.40*74 $GPGSV.000.270108.0.15. 140.11...00.37. Como última alternativa se procedió a buscar una forma de reducir la velocidad estrechando el clock del raspberry mediante código obteniendo resultados similares.4. quit = <undef>.270108.M*0C $GPGLL.20. susp = <undef>.0.7.1.11.8.2. Entonces al escribir el comando de detección de los dispositivos de i2c. porque la lectura para la deteccion ocurría demasiado rápido.44. start = <undef>.\ 5..2.1..274.11.31.M.M.440..4.N.160516.2521.072. 15 lectura GPS con el código desarrollado .01. A que velocidad se comunica nuestro dispositivo.2. erase = <undef>.0 0*41 $PGRME.0.Que datos recibimos del GPS ~$ gpspipe –r $GPRMC.00. eof = <undef>..0.17.3.W*67 $GPGGA.00428.5209.28.183. ~$ stty < /dev/ttyAMA0 speed 4800 baud..WGS 84*06 Se procedió a desarrollar un código en Python para tomar las lecturas del GPS y mostrarlas de forma tal que la persona encargada del servicio sea capaz de manipular dicha información para propósitos prácticos en este caso un servicio médico de rastreo en tiempo real.201.T. III.5209.. rprnt = <undef>.23.10.2521.0 0.12..1*2B $PGRMB.N.00..9913.000.A.141.85. Se optó por instalar las librerías de wiringpi para tener más control sobre el puerto GPIO y tratar de forzar a que leyera el dispositivo con el siguiente comando.

forzar a que se guardaran los cambios en la frecuencia de default.net/2007/05/27/python-gpsdbindings/ http://stackoverflow. REFERENCIAS Configuracion del Raspberry Basica. http://learn. y para el reconocimiento del GPS se requiero el forzar al dispositivo a que leyera el GPS de forma serial ya que la mayoría de los GPS comerciales vienen en modo de USB y como el raspberry pi cuenta con 2 puertos no existe tanta dificultad.adafruit.system('clear') print print ' Informacion GPS ' print V.hobbytronics.system('clear') class GpsPoller(threading.net/raspberry-pi/wiringpi/ Disminución de la velocidad del raspberry pi Fig.drogon.Thread. donde en un futuro es posible que el raspberry sea capaz de leer los dispositivos de baja velocidad de i2c.running = True def run(self): global gpsd while gpsp. 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. donde se buscó desde alterar la imagen del raspberry. o crear un código más . donde se presenta un error en la hora el cual se debe a que requiere un pin que el GPS no presenta para la actualización de la hora del servidor asignado en NTP.Thread): def __init__(self): threading.running: gpsd. por ello fue necesario cambiar varias configuraciones para que lo pudiera detectar y trabajar con él. manipular por medio de código la velocidad para reducirla.com/questions/2564137/pythonhow-to-terminate-a-thread-when-main-program-ends VI.organizado que sea capaz de enviar las lecturas directamente al servidor. Por ejemplo se podría añadir 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.current_value = None self.co. 16 lectura GPS en una interfaz grafica IV. instalar librerías alternas para el control del GPIO. APPENDICE import os from gps import * from time import * import time import threading gpsd = None os. 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 electrónico o mensaje de texto a una persona que haya contratado el servicio.__init__(self) global gpsd #bring it in scope gpsd = gps(mode=WATCH_ENABLE) self.next() if __name__ == '__main__': gpsp = GpsPoller() try: gpsp. aparte que el raspberry pi es reciente y no tiene mucho en el mercado la mayoría de sus aplicaciones están en fase de desarrollo.uk/raspberry-pi-i2c-clockstretching GPSD basics http://blog.start() while True: os. http://www.perrygeo. DISCUSIÓN Uno de los problemas más fuertes y que necesito más tiempo fue encontrar la causa del porque los dispositivos de i2c no eran detectados.com/adafruits-raspberry-pi-lesson4-gpio-setup Librerías de WiringPi https://projects.

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

Sign up to vote on this title
UsefulNot useful