TFG - Javier Arechalde
TFG - Javier Arechalde
TFG - Javier Arechalde
Autor
Javier Arechalde Pelaz
Director
Eloy Irigoyen Gordo
Curso Acadmico
2015/2016
[2]
NDICE DE CONTENIDOS
INTRODUCCIN ............................................................................................ 7
BENEFICIOS ................................................................................................ 10
3.1 Beneficios Tcnicos ............................................................................... 10
3.2 Beneficios Econmicos.......................................................................... 10
METODOLOGA ........................................................................................... 31
5.1 Puesta en marcha de Arduino ............................................................... 31
5.2 Puesta en marcha de la RPi .................................................................. 35
5.3 Muestra de datos ................................................................................... 41
5.4 Consulta de datos de forma remota ....................................................... 42
5.5 Representacin de datos en tiempo real................................................ 44
5.6 Anlisis de datos ................................................................................... 46
PRESUPUESTO .......................................................................................... 54
CONCLUSIONES ......................................................................................... 56
ANEXOS..................................................................................................................... 58
Anexo 1: Conexin de sensores ................................................................................. 58
Anexo 2: Carga del programa en la RPi ...................................................................... 62
Anexo 3: Haciendo la RPi disponible desde internet ................................................... 64
[3]
NDICE DE FIGURAS
[5]
NDICE DE TABLAS
[6]
1 INTRODUCCIN
Hoy en da, es un tema de actualidad la aparicin de los single-board-computer (SBC)
u ordenadores de una sola placa, que son bsicamente un ordenador completo en un
solo circuito. Estos ordenadores abren todo un mundo de posibilidades a la hora de
desarrollar todo tipo de programas, aplicaciones, etc. Debido a su reducido tamao y a
su relativamente elevada potencia se pueden utilizar para realizar tareas que antes
realizaba un ordenador, consiguiendo una reduccin considerable en el espacio y en el
consumo.
Figura 1. eHealth
[7]
2 OBJETIVOS Y ALCANCE
El objetivo de este proyecto es el desarrollo de una plataforma para analizar seales
fisiolgicas portable, basado en plataformas low cost o de bajo coste. Esta plataforma
adems ha de ser portable, y se pretender que sea sencilla de usar, para tratar de
llegar al mayor nmero de gente posible.
Para mostrar los datos, se tratar que el sistema tenga una interfaz amigable e intuitiva,
para que el usuario pueda ver los datos fisiolgicos de una manera simple y muy visual.
Este sistema estar basado en Arduino nicamente, disendose la interfaz desde el
entorno de desarrollo de Arduino (Arduino IDE). Se presentar un men en el que el
usuario podr ver las distintas opciones disponibles y seleccionar la que ms le
convenga.
Para las siguientes utilidades se usarn los dos dispositivos, Arduino y Raspberry Pi,
conectados entre s para la obtencin y el procesado de datos respectivamente. La
necesaria utilizacin de la Raspberry Pi se debe a la limitacin de Arduino tanto de
potencia, como de memoria disponible.
[8]
Por ltimo, para el anlisis de seales fisiolgicas se ofrecern, dos soluciones. Una
herramienta prctica para deteccin de situaciones de estrs, pnico etc., basada en el
anlisis de la respuesta galvnica de la piel y de las pulsaciones por minuto. Y por otro
lado una herramienta que se encarga de analizar la seal ECG, en varios aspectos.
Ambas herramientas estarn basadas en scripts de Python.
[9]
3 BENEFICIOS
3.1 Beneficios Tcnicos
Esta plataforma ofrecer varias herramientas de recogida, procesamiento y
almacenamiento de datos. Los programas que utilizar, y las herramientas en las que
se basar su programacin son todas de cdigo abierto, y por lo tanto gratuitas.
Adems, sern todas ellas multiplataforma, lo que permitr usarlas ya sea en PC
(Windows), OSX o Linux.
Tendr la gran ventaja de contar con un servidor web LAMP, en el cual, a parte de
almacenar datos, ofrecer distintas alternativas para la visualizacin. Adems, la
adquisicin y visualizacin de datos se podr realizar de forma remota, y una vez
almacenados en la base de datos, podrn ser consultados en cualquier momento y
lugar. Adems, la plataforma ser totalmente portable, pudiendo alimentarse la
Raspberry Pi y Arduino con una batera, y conectados a la red por medio de Wi-Fi.
Por otro lado, todo el software que se utilizar en esta plataforma, adems de las
herramientas utilizadas para la programacin, sern gratuitos, por lo que supondr una
reduccin considerable de gastos con respecto al uso de herramientas convencionales.
[10]
4 ANLISIS DE ALTERNATIVAS
En los siguientes apartados se analizarn las distintas alternativas tanto de software,
como de hardware, en las que se podra basar la plataforma planteada. Ms adelante
se expondrn las soluciones escogidas.
4.1
Alternativas de hardware
Arduino es una plataforma que cumplir con todos los requisitos. Una vez tomada la
decisin de basar la plataforma en Arduino, slo quedara decidir cul de las distintas
versiones de Arduino se utilizar en este proyecto.
Microcontrolador
Reloj
Memoria Flash
SRAM
Pines E/S digitales
Pines Analgicos
Arduino UNO
Ethernet
Leonardo
Arduino Due
ATmega328 Atmega328 ATmega32U4 Atmel SAM3U4E
16 MHz
16 MHz
16 MHz
96 MHz
32 kB
32 kB
32 kB
256 kB
2 kB
2 kB
3.3 kB
50 kB
14
14 (10)
14
54
6
6
6
16
Tabla 1 Comparativa dispositivos Arduino
[11]
ADK
ATmega2560
16 MHz
256 kB
8 kB
54
16
Por su compatibilidad total con el mdulo eHealth, y por ser la versin de Arduino ms
comn, se ha elegido la versin oficial de Arduino, el Arduino UNO. Sobre este
dispositivo se desarrollar toda la parte del proyecto correspondiente a la obtencin de
datos. Ms adelante, y debido a la limitacin en su memoria, potencia, y teniendo en
mente futuras aplicaciones, Arduino quedar directamente descartado como plataforma
para procesamiento de datos y por ello habr que recurrir a otras alternativas.
A la hora de tratamiento de datos se parte de las mismas premisas que para la obtencin
de datos, pero en este caso se buscar adems un dispositivo con potencia suficiente
para la realizacin de las tareas de representar datos, almacenarlos y procesarlos.
Comenzando por el PC, es una mquina fiable, compatible con prcticamente todo el
software de programacin disponible en la actualidad, y con potencia ms que de sobra
para realizar todas las tareas que hagan falta. Sin embargo, tambin tiene las contras
de ser un dispositivo relativamente caro, y con un elevado consumo de energa.
Adems, incumple una de las premisas fundamentales del proyecto, que es que la
plataforma desarrollada sea portable.
Por otro lado, la Raspberry Pi, dispone de un sistema operativo, entre otros, basado en
la distribucin Debian (Linux), con unas menores alternativas de software disponibles
que en un PC, y con una potencia considerablemente menor. Sin embargo, se trata de
un dispositivo econmico, de reducido consumo y lo que es ms importante, portable.
En resumen, la Raspberry Pi ofrece casi todo lo que podra ofrecer un PC, sin renunciar
a la portabilidad, eso s, con una potencia ms limitada.
Precio
Conectividad
Potencia
Consumo
Peso
Raspberry Pi
Wifi, Bluetooth,
Ethernet
Limitada
Reducido
Reducido
PC
Wifi, Bluetooth,
Ethernet
Elevada
Elevado
Elevado
[12]
Para la obtencin de los datos, se requerir una herramienta que permita obtener los
datos de forma fiable.
En este caso Arduino IDE ser la principal alternativa, debido a que las libreras para la
obtencin de datos a travs del mdulo eHealth, han sido desarrolladas para este
entorno de desarrollo. Otra alternativa sera usar el entorno de desarrollo Processing,
muy similar al Arduino IDE, pero con ms complementos que permiten el desarrollo de
interfaces grficas, representacin en tiempo real, etc. Como habra que adaptar las
libreras a Processing, y debido a que Arduino posee una potencia limitada para futuras
aplicaciones, se descartar en principio su uso, pero no se descartar que en un futuro
pudiera llegar a utilizarse para estos propsitos.
Procesamiento de datos
Matlab y Python sern las alternativas a tener en cuenta, debido a que ambos son
lenguajes de scripting, o cdigo interpretado, que permiten realizar cambios en el cdigo
con facilidad sin necesidad de compilar; esto supone un sacrificio en cuanto al
rendimiento, pero se un ahorro de una cantidad considerable de tiempo. Otra
herramienta a tener en cuenta sera R, pero queda descartado al ser una herramienta
ms enfocada hacia el anlisis estadstico.
[13]
Matlab es una potente herramienta desarrollada por MathWorks, con una gran cantidad
de mdulos disponible de fbrica, para crear interfaces grficas, representar datos, etc.
El mayor inconveniente de esta herramienta es su precio, que al ser elevado, no es muy
adecuado para el diseo de esta plataforma low-cost.
Por otro lado, Python es una herramienta potente tambin, open source y gratuita,
adems de ser compatible con todos los sistemas operativos usados comnmente para
ordenador. Es una herramienta ampliamente utilizada en aplicaciones orientadas hacia
el anlisis de datos, y tambin dispone de muchos mdulos disponibles cono NumPy,
MatPlotlib o Tkinter, que aunque no vengan instalados de serie y requieran una puesta
a punto, permitirn aadir distintas funcionalidades a Python para crear programas
mucho ms completos.
Dado que se quiere desarrollar una herramienta de bajo coste, a la vez accesible para
todo el mundo y flexible, para el desarrollo de este proyecto se utilizar la herramienta
Python, para programar todo lo que nos sea necesario a la hora de obtener y procesar
datos de la plataforma Arduino.
[14]
Almacenamiento de datos
Se tendrn en cuenta dos alternativas para la gestin de bases de datos desde la Web,
phpMyAdmin, herramienta web de gestin de bases de datos muy extendida y Adminer,
menos popular, pero con ciertas ventajas a tener en cuenta.
[15]
La herramienta con la que se programa para Arduino es Arduino IDE, una herramienta
basada en Processing. El lenguaje de programacin para Arduino est basado en
Wiring. Cabe destacar la limitada memoria Flash de la que consta Arduino, ya que ser
lo que limitar, a parte de su potencia, el desarrollo de aplicaciones ms potentes en
Arduino, y por lo cual ser necesario recurrir a Raspberry Pi, y a la creacin de varios
sketches de Arduino para cada aplicacin en vez de uno unificado. En la siguiente tabla
se pueden observar las caractersticas tcnicas de la placa Arduino UNO REV3.
[16]
Arduino UNO
Microcontrolador
ATmega328
Voltaje de operacin
5V
Voltaje de entrada
7-12 V
Pins deI/O digital
14 (6 se pueden usar como PWM)
Pins de I analgica
6
DC por el pin IO
40 mA
DC por el pin de 3.3 V
50 mA
Memoria Flash
32 kB
SRAM
2kB
EEPROM
1kB
Frecuencia de reloj
16 Hz
Tabla 3 Caractersticas Arduino UNO
[17]
Este mdulo se conectar encima de la placa Arduino con los pines que sobresalen en
su parte inferior. Una vez colocada ya se podrn conectar los distintos sensores a el
mdulo, pero para leer los datos de ellos correctamente habr que hacer uso de unas
libreras especficas con sus funciones correspondientes. Estas libreras las
proporcionar la propia empresa que disea y fabrica el mdulo, Cooking Hacks. Las
distintas entradas de las que consta el mdulo se pueden apreciar en la siguiente figura.
4.3.3 Raspberry Pi
Raspberry Pi se trata de un ordenador de un solo circuito o single board computer (SBC).
Es un dispositivo de bajo coste, y fue desarrollado en Reino Unido por la Fundacin
Raspberry Pi para estimular el aprendizaje de programacin, en especial de Python, que
ser el lenguaje utilizado para el desarrollo de la mayora de aplicaciones de esta
plataforma.
El software que utiliza es open source, y por lo tanto gratuito. Su sistema operativo oficial
es Raspbian, una distribucin de Linux basada en Debian, aunque dispone de ms
sistemas operativos basados en Linux, algunos para aplicaciones ms concretas, e
incluso una versin de Windows para el internet de las cosas, Windows 10 IoT (internet
of things).
[18]
Raspberry Pi 3 Model B
SoC
BCM2837
CPU
GPU
RAM
1GB SDRAM
Almacenamiento
Micro-SD
Ethernet
10/100
Comunicacin Inalmbrica
GPIO
40
Precio
35
Tabla 4 Caractersticas tcnicas Raspberry Pi
[19]
4.3.4 Sensores
A la hora de la obtencin de datos se han elegido cuatro sensores que proporcionarn
una cantidad significativa de datos del paciente. Los sensores utilizados se describen a
continuacin.
Sensor de temperatura corporal
Este sensor, devolver una seal analgica, que mediante una funcin definida en las
libreras de eHealth, se traducir en la temperatura corporal. Es importante, calibrar las
funciones de las libreras asociadas este sensor antes de su uso para obtener unas
mediciones ms exactas.
[20]
Hipotermia:
Se considerar que se da hipotermia cuando la temperatura descienda de los 36C,
en este caso el paciente comenzara a sentir temblores, entumecimiento y cambio
del color de su piel, tornndose gris o azulada.
Temperatura normal:
Se tomar como temperatura normal, la temperatura corporal que se encuentre
alrededor de los 37C, con un margen de medio grado Celsius.
Fiebre o hipertermia:
Se considerar fiebre o hipertermia a las temperaturas corporales en el rango de los
37.5 38.3C, el nico inconveniente es la imposibilidad de distinguir entre ambas
con este nico dato.
Hiperpirexia:
Para hiperpirexia o fiebres muy elevadas se considerarn las temperaturas
corporales que excedan los 40C.
[21]
Hipotermia
<35C
Normal
36.5-37.5C
Fiebre o Hipertermia
37.5-38.3C
Hiperpirexia
>40-41.5C
Pulsioxmetro
[22]
Hipoxia
88-94%
Valores aceptables
94-99%
Intoxicacin CO
100%
Aparte, con este sensor se podr obtener el ritmo cardaco del paciente. El conocimiento
del ritmo cardaco ser importante a la hora de obtener informacin sobre enfermedades
subyacentes, o para conocer los lmites del paciente a la hora de realizar ejercicios de
alta intensidad. El ritmo cardaco se podr extraer de la curva del ECG, pero como ya
se dispone de una herramienta que nos devuelve directamente su valor, se descartar
esta opcin.
El ritmo cardaco de una persona adulta en reposo oscila entre 60 y 100 latidos por
minuto, un ritmo cardaco demasiado alto o bajo podra indicar como se ha dicho antes
enfermedades o problemas cardacos subyacentes.
Debido a que la frecuencia cardaca es una variable que, en funcin del tipo de paciente,
es decir su edad, si hace deporte o no, etc. vara, no ser posible definir un nico rango
en el que se consideren aceptables los valores de la frecuencia cardaca. Por ello, se
usar la siguiente frmula basada en la edad para dictar la frecuencia cardaca mxima
del paciente.
= 220
Otra manera de ver si el ritmo cardaco es aceptable o no, sera mediante la siguiente
tabla, en la cual, en funcin de la edad del paciente, se definen una serie de rangos en
funcin de las pulsaciones por minuto.
[23]
Sensor ECG
[24]
Mediante estos electrodos, se obtendr la curva del ECG. Esta, como se puede apreciar
en la siguiente figura consta de varias partes diferenciadas con los siguientes
caracteres: P, Q, R, S, T, U. Mediante la relacin de estas partes se obtendrn datos
acerca de la actividad cardaca del paciente. Por ejemplo, con la duracin de los
perodos T y T se obtendra el ritmo cardaco.
Mediante el uso del ECG se podrn obtener, adems, los siguientes datos acerca del
corazn: su orientacin en la cavidad torcica, variaciones en el grosor del mismo,
daos a sus distintas partes, su frecuencia y ritmo cardaco, y patrones de actividad
elctrica anormal, que pueden dar lugar a ritmos cardacos anormales.
Sensor GSR
GSR responde a las siglas Galvanic Skin Response o respuesta galvnica de la piel. La
medida de esta seal se basa en la actividad electrodrmica, que es la propiedad del
cuerpo humano que produce continuas variaciones en las caractersticas elctricas de
la piel. El sensor GSR mide la conductancia elctrica entre dos puntos, y es, en esencia,
un tipo de hmetro.
[25]
[26]
El Arduino IDE contiene un editor de texto para escribir cdigo, un rea de mensajes,
una consola de texto o serial en la que visualizaremos los datos, y una barra de
herramientas para realizar las acciones ms comunes, ya sea compilar el cdigo,
cargarlo a la placa Arduino o abrir el serial. En el recuadro inferior negro se mostrarn
los mensajes de error, ya sean a la hora de compilar o transferir el programa a la placa
Arduino.
[27]
Los programas escritos usando el Arduino IDE se llaman sketches. Estos sketches
constarn de dos funciones especiales, setup() y loop(), la funcin setup(), ser
llamada una vez, y ser un buen lugar para inicializar el serial, y para declarar variables
que se vayan a usar a lo largo del sketch, la funcin loop(), corre de manera continua
en un bucle, y va a ser donde se ubicar la parte principal del programa y desde el cual
se realizarn las llamadas a las funciones secundarias.
4.4.2 Python
Python es un lenguaje de programacin de propsito general. Se trata de un lenguaje
simple, verstil, y de fcil desarrollo. Es un lenguaje de scripting multiplataforma,
orientado a objetos con el cual se puede desarrollar cualquier tipo de programa desde
aplicaciones, servidores de red, etc.
[28]
Para el desarrollo del proyecto se utilizar la versin 2.7 de Python, que aunque no sea
la versin ms reciente, sigue siendo una versin ampliamente utilizada y es la versin
ms estable y con mayor nmero de mdulos compatibles. A esta distribucin se le
aadirn un par de mdulos que permitirn crear una GUI o interfaz de usuario guiada,
adems de crear grficas en tiempo real de los datos obtenidos de Arduino y libreras
con funciones para el tratamiento de datos, como NumPy.
4.4.3 PHPMyAdmin
PHPMyAdmin es una herramienta gratuita de software escrita en PHP, pensada para
manejar bases de datos MySQL a travs de la web. phpMyAdmin soporta las
operaciones comunes que se suelen utilizar a la hora de gestionar bases de datos,
manejar bases de datos, tablas, columnas, ndices, usuarios y sus permisos, etc.
[29]
Esta herramienta permitir consultar los datos almacenados tras la toma de muestras.
Adems, incluye una herramienta de visualizacin de datos, con la que se podrn
representar los datos almacenados.
[30]
5 METODOLOGA
5.1 Puesta en marcha de Arduino
En los siguientes apartados, se describirn los pasos a seguir para la puesta en marcha
de la placa Arduino. Esto incluye la edicin de las libreras, y la carga de los sketches
en la placa Arduino.
[31]
A continuacin, se realizarn una serie de cambios en las libreras para hacer que
funcionen correctamente con la versin de Arduino IDE utilizada en este proyecto.
Para la edicin de las libreras se utilizar Microsoft Visual Studio Code, una herramienta
disponible en la web de Visual Studio. Otra opcin sera editar las libreras desde el
editor de texto de Windows directamente, pero esta opcin queda directamente
descartada al ser demasiado engorroso.
Debido a que en las ltimas versiones de la plataforma eHealth se cambi el modelo del
pulsioxmetro, habr que realizar una serie de cambios en las libreras, ya que sino su
uso podra dar lugar a resultados errneos. A continuacin se describen los pasos a
seguir para adaptar las libreras a la versin ms antigua del pulsioximetro.
Para ello se descargar la versin 2.2 de las libreras (ms antigua a la actual), se abrir
el archivo eHealth.cpp, se copiar la funcin readPulsioximeter(void)
y se
sustituir por la misma funcin en la versin ms actual de las libreras. Una vez
introducido este cambio, la funcin quedara de la siguiente forma.
[32]
[33]
A continuacin, con ayuda del polmetro, se medirn las tres resistencias del puente
Wheatstone (Ra, Rb, Rc) y la tensin de referencia del puente Wheatstone
(RefTension). Despus, se sustituirn los valores dados en las libreras con los que se
hayan obtenido en las mediciones. La localizacin de las resistencias y del voltaje de
referencia en la placa eHealth, se pueden observar en la siguiente figura.
Por ltimo, se proceder a calibrar el sensor GSR. Para ello, se actuar de manera
anloga a la calibracin del sensor de temperatura. La nica diferencia es que, en este
caso, bastar nicamente con medir el voltaje entre los dos puntos que se aprecian en
la siguiente figura, e introducir el valor ledo en la funcin getSkinConductance(void).
Una vez completadas estas acciones, se guardarn los cambios en las libreras y ya se
podr para proceder a la siguiente etapa de la puesta a punto de la plataforma.
[34]
Se descargar NOOBS desde la pgina oficial de Raspberry Pi. Una vez descargado se
descomprimir el archivo y se obtendr un archivo imagen. Este archivo contiene varios
de los sistemas operativos disponibles para la Raspberry Pi, entre ellos Raspbian.
Con el archivo imagen disponible, se cargar ese archivo en una memoria microSD que
ms tarde se introducir en la Raspberry PI y har las veces de memoria. Para escribir
ese archivo en la tarjeta se har uso de la herramienta Win32DiskImager que se
encuentra para descargar en su pgina web. Al ejecutar el programa aparecer la
siguiente ventana.
[35]
Figura 26 Eleccin SO
[36]
Antes que nada, habr que comprobar que la RPi est actualizada y tiene la ltima
versin del SO disponible. Para ello se introducirn (con la RPi conectada a internet) los
siguientes dos comandos en el Terminal. Con estos comandos se actualizarn los
repositorios de RPi, y los programas que no estn al da.
Primero habr que seleccionar el tipo de servidor web que est instalado, en este caso
se trata de Apache2.
Un ltimo paso antes de pasar al siguiente apartado es dar permisos de root al servidor,
lo que permitir al servidor web ejecutar los scripts de Python de los que se obtendrn
los datos a mostrar y almacenar en el servidor web. Para ello se acceder al terminal y
se ejecutar el siguiente comando:
sudo visudo
[39]
Para ver como se hace la RPi disponible desde internet, a travs de la obtencin de un
dominio gratuito, vase Anexo 3.
Con este ltimo paso ya completado, se proceder a describir las distintas herramientas
de la plataforma desarrollada.
[40]
Para elegir los datos que se quieran obtener bastar con introducir en el recuadro
superior la letra correspondiente a los datos que se deseen observar y presionar la tecla
enter o enviar.
Una vez se haya elegido los datos que se quieren obtener, aparecer el siguiente
submen de opciones, en el que se podr elegir entre mostrar los datos, en este caso
de temperatura, o volver al men principal.
[41]
Para mostrar los datos bastara con enviar s y se comenzar a mostrar el dato de la
temperatura medida, cada segundo. La frecuencia con la que se muestra este dato, se
puede cambiar editando el delay, o la pausa entre medida y medida en la funcin
temperaturebucle() o la que corresponda del sketch de Arduino.
Para transferir los datos de Arduino a la RPi, se har uso de un script de Python, este
script, enviar una serie de comandos a la placa Arduino solicitando los datos que
requiera. Una vez la placa Arduino haya recibido los comandos, empezar a emitir los
datos que se le han solicitado.
[42]
Para corregir los errores de lectura de datos, se optar por usar una funcin que en el
caso de que no se reciba correctamente un dato, vuelva al principio de la ejecucin y se
vuelva a intentar obtener hasta que se consiga recibir un dato correctamente. A
continuacin, se puede observar un ejemplo de error en la lectura de datos.
Error de lectura:
36.77/r/n
36.68/r/n
36.72/r/n/xcef
En este caso el ultimo dato sera imposible de convertir debido a lo que se encuentra
despus de /n.
Fallo en la conversion:
36.77/r/n
7736.68/r/n
En este caso el dato convertido sera errneo ya que contiene al principio parte del dato
anterior.
[43]
Cuando se quiera obtener los datos del paciente, se tendr que acceder a la web donde
se encuentra la Raspberry Pi, en este caso ehealth.ddns.net. Una vez en esa direccin
se mostrar un par de enlaces, uno para recibir datos del paciente, y otro enlace para
el muestreo de datos. En este caso habr que dirigirse al primer enlace.
Tras haber pulsado dicho enlace, se abrir otra web con una lista de enlaces en los que
se podr elegir si recibir todos los datos de el paciente, o un nico dato por separado.
Se pulsar en alguna de las opciones, la pgina web realizar una llamada al script de
Python que se encarga de pasarle los datos, y una vez los reciba los mostrar en
pantalla, adems de almacenarlos en la base de datos para su posterior consulta. En la
siguiente figura se muestra un ejemplo de obtencin los datos de un paciente. Tambin
se ofrecer al usuario, la opcin de volver a obtener los datos pulsando el botn
actualizar.
[44]
Para la creacin de la interfaz grfica se har uso del mdulo Tkinter, disponible para
Python. Con l se crearn dos ventanas, una con un men con las opciones disponibles,
y otra en la que se muestran las alertas asociadas a las variables fisiolgicas de las que
se est haciendo el seguimiento. En el caso de que alguna de estas variables, de
sntomas de que el paciente muestre algn tipo de enfermedad o problema, la ventana
de alertas mostrara una alarma visual, adems de un mensaje de alerta.
Antes de la ejecucin del script habr que cargar en la placa Arduino el sketch
correspondiente (ver Anexo 4), y conectar entre s la placa Arduino y la Raspberry Pi
adems de los distintos sensores al paciente.
Una vez realizados estos pasos, se ejecutar el script. Tras unos instantes, se mostrar
un men en el que elegir las distintas opciones disponibles. Al elegir una de las opciones
el script mandar a la placa Arduino los comandos para pedir el dato elegido, y una vez
lo est recibiendo, comenzar la representacin de los mismos.
[45]
Se ofrecer una solucin para recoger muestras de datos a altas frecuencias. Esta
solucin est basada en la ejecucin de un script de Python que es llamado desde una
pgina web, tras la llamada a este script y una vez ste devuelva los datos solicitados,
los datos se almacenan en la base de datos MySQL, donde podrn ser consultados en
cualquier momento y desde cualquier lugar a travs de phpMyAdmin.
Una vez ajustados estos valores, se proceder a la llamada del script de Python desde
la web para la recogida de datos. Se acceder al dominio web asociado a la RPi, en
concreto a la opcin de muestreo de datos. Ya en esta pgina, aparecern las distintas
opciones a la hora de recogida de datos.
Tras elegir la opcin deseada, comenzar la ejecucin del script de Python que
devolver un array con los datos obtenidos.
[46]
Este script comenzar limpiando el buffer para recibir los datos ms actuales y no los
que se hayan ido quedando acumulados. Cuando empiece a recibir datos, har una
mediana con los 5 primeros datos, y se designar un rango de datos vlidos a partir del
valor de la mediana, para seales como el ECG o el GSR este rango ser mayor debido
la naturaleza de estas seales. En el caso de que uno de los datos se salga del rango
considerado como vlido, se llamar a una funcin que tratar de corregir este dato
tomando 5 valores y realizando otro filtro de mediana.
Aparte, se ofrecer una aplicacin para anlisis de datos basada en Python. Esta
herramienta recoger las seales GSR y las pulsaciones por minuto en dos distintos
arrays. Con esta herramienta, se podrn detectar situaciones de estrs, pnico, etc.
basndose en la grfica de Amplificacin obtenida. Esta grfica ser la multiplicacin de
los sucesivos incrementos de las seales GSR y BPM recogidas, y ayudar a detectar
mejor este tipo de situaciones.
[47]
Una vez obtenidos los datos, se calcula el incremento que ha habido entre las sucesivas
medidas, se almacenan cada uno en un array y despus se multiplicarn entre s para
resaltar ms los momentos en los que se han producido estas variaciones. Por ltimo,
se representarn todos los datos obtenidos, y se analizarn los resultados.
Anlisis de ECG
Por ltimo, se ofrecer una herramienta que se encargar de analizar la seal ECG del
paciente. Esta herramienta est basada en Python, y dispondr adems de una interfaz
de usuario con las distintas opciones disponibles y un par de ventanas en las que se
mostrar la seal recogida y los resultados obtenidos con este anlisis.
Con esta herramienta se podrn obtener datos de distintos aspectos del corazn, tales
como si sigue un ritmo normal o tiene arritmia, si el ritmo es sinusoidal o no, adems de
detectar comportamientos anormales, que pueden significar que el paciente est en
riesgo de un infarto, o que ha sufrido daos previamente.
[48]
Al ejecutar el script de Python, se comenzar recogiendo una onda ECG. Tras recogerla,
la graficar, y habr que dirigirse a la opcin analizar los resultados en el men. Al pulsar
analizar, se pedir la posicin aproximada de los puntos P, Q, R, S, y T, adems de las
pulsaciones por minuto. La posicin aproximada de estos puntos, se puede ver en la
grfica representada una vez se haya recogido la seal ECG, para obtener las
pulsaciones por minuto, bastar con medirlas mediante el pulsioxmetro. Despus de
introducir estos datos, el script dividir la seal ECG en los distintos intervalos, y ya se
podr pulsar en resultados para recibir los resultados del anlisis.
A continuacin, se describen los criterios que han sido tomados en cuenta en cada
apartado, para definir los resultados del anlisis del ECG.
Arritmia:
Para comprobar si el corazn dispone de un ritmo irregular, se considerar que entre
los periodos Q-R y R-S ha de haber como mximo una diferencia de un 10% entre s.
Ritmo sinusoidal:
Para considerar si hay un ritmo sinusoidal, se tendrn en cuenta las pulsaciones por
minuto, adems de la duracin del periodo P-R.
[49]
P-R:
Para considerar la duracin un periodo P-R normal, se aceptar para valores en un
rango de 0.12 a 0.2 segundos.
Q-T:
Para el intervalo Q-T, se tomar como rango vlido, un intervalo Q-T corregido de los
0.35 a los 0.45 segundos.
Alteraciones:
Para detectar alteraciones en el corazn se tomarn en cuenta los siguientes criterios.
Si el pico T se encuentra por encima del R, habr peligro de infarto, y si el pico T se
encuentra por debajo del Q, es probable que se hayan producido daos en el miocardio.
[50]
1. Toma de contacto
Previo al desarrollo de la plataforma, se realizar una toma de contacto con los
dispositivos a utilizar. Se probar el programa para obtencin de datos
proporcionado por Cooking Hacks. Adems, se comprobar si las libreras
proporcionadas por eHealth funcionan correctamente, y en el caso de que no se
introducirn en ellas los cambios necesarios.
3. Desarrollo de la solucin
[51]
4. Fase de pruebas
Al finalizar el desarrollo de las distintas soluciones planteadas, se proceder a probar
su correcto funcionamiento. Durante esta fase prepararemos a la plataforma para
afrontar los distintos problemas que puedan surgir durante su uso.
Estos hitos, as como todas las fases del proyecto, se representan en el diagrama de
Gantt que se adjunta en la siguiente pgina (ver Figura 40).
[52]
[53]
7 PRESUPUESTO
El presupuesto del Trabajo de Fin de Grado se dividir en tres partes: horas internas,
amortizaciones y gastos. El apartado de gastos se dividir a su vez en otras dos partes,
una de ellas incluir los gastos correspondientes a Arduino con el mdulo eHealth y los
sensores, y por otra parte la Raspberry Pi. Por ltimo, se incluir un resumen de estas
tres partes.
En las siguientes tablas se pueden observar las horas internas que corresponden al
nmero de horas trabajadas del ingeniero tcnico, y las amortizaciones, en las que se
incluye el ordenador usado para el desarrollo de la plataforma.
Concepto
Ingeniero tcnico
HORAS INTERNAS
Coste unitario (/h)
N unidades (h)
30
200
TOTAL
Coste
6.000,00
6.000,00
Concepto
Ordenador
AMORTIZACIONES
Precio adquisicin
Vida til (aos)
800
5
Utilizacin (h)
150
TOTAL
Coste
11,54
11,54
Tabla 9 Amortizaciones
[54]
Coste Total
20,00
75,00
1
1
20,00
75,00
55,00
35,00
30,00
20,00
1
1
1
1
55,00
35,00
30,00
20,00
16,00
2,00
1
1
TOTAL
16,00
2,00
253,00
Raspberry Pi
Coste Unitario
Hardware
Raspberry Pi 3 model B
Fuente de alimentacin
Tarjeta microSD (16 GB)
32,00
14,00
4,00
Unidades
Coste Total
1
1
1
TOTAL
32,00
14,00
4,00
50,00
Por ltimo, se presenta el coste total del proyecto, que queda desglosado en horas
internas, amortizaciones, y gastos, en los que se incluye el coste de la Raspberry Pi,
con todos sus accesorios y el coste de la plataforma Arduino + eHealth. El coste total
del proyecto asciende a 6.314,54 .
RESUMEN
Horas internas
Amortizaciones
Gastos
TOTAL
6.000,00
11,54
303,00
6.314,54
[55]
8 CONCLUSIONES
A lo largo de este proyecto, se ha ido desarrollando una plataforma para el anlisis de
seales fisiolgicas basada en plataformas low-cost. En este caso se ha decidido basar
esta plataforma en Arduino y Raspberry Pi, desarrollando la mayor parte del cdigo en
Python.
Una gran ventaja de la que dispone esta plataforma, es que las herramientas que se
han desarrollado tanto como para el anlisis de datos, u obtencin de los mismos, es
que son compatibles con prcticamente todos los sistemas operativos disponibles en la
actualidad, adems es totalmente portable debido a su reducido peso y tamao, no sin
ello renunciar a disponer de la informacin accesible en todo momento, gracias a que la
plataforma se encuentra conectada a internet.
[56]
9 FUENTES DE INFORMACIN
[1] Lutz, Mark. Programming Python. Cuarta edicin. OReilly Media. ISBN: 978-1-44930183-5. Wrox.
[2] McKinney, Wes. Python for Data Analysis. Primera edicin. OReilly Media. ISBN:
978-1-4493-1978-6.
[4] e-Health Sensor Platform V2.0 for Arduino and Raspberry Pi [Biometric/Medical
Applications].
Disponible
en:
https://www.cooking-hacks.com/documentation/tutorials/ehealth-
biometric-sensor-platform-arduino-raspberry-pi-medical/
[5] Tutorial Raspberry Pi 15. Instalacin de Apache + MySQL + PHP.
Disponible en: https://geekytheory.com/tutorial-raspberry-pi-15-instalacion-de-apachemysql-php/
[57]
ANEXOS
El sensor se colocar en el cuerpo del paciente, poniendo especial atencin en que zona
se coloca, ya que la temperatura corporal es dependiente del lugar donde se realice la
medicin. En este caso se colocar el sensor de temperatura en la axila, ejerciendo un
poco de presin mientras se realice la medicin, ya que sino, la temperatura medida se
vera afectada por la temperatura del exterior. Una vez colocado se sujetar mediante
cinta adhesiva para que se mueva o se desprenda.
[58]
Pulsioxmetro:
Sensor ECG
La conexin del ECG se har en las tres ranuras disponibles en la esquina inferior
izquierda del mdulo eHealth, y los electrodos se introducirn en el siguiente orden:
positivo, negativo y neutro. Es importante atornillarlos una vez introducidos en el mdulo
para evitar su desprendimiento.
Una vez conectados los electrodos al mdulo, habr que conectar estos al cuerpo del
paciente. Para ello se retirarn los plsticos que cubren el adhesivo de los electrodos,
se aplicar gel ECG (gel conductor que favorece la conduccin elctrica) en los lugares
en los que se vayan a colocar los electrodos y se colocarn de la siguiente manera en
el cuerpo del usuario (ver Tabla 13 y Figura 48).
Dcha. Trax
Izq. Trax
Izq. Abdomen
+
N
-
[60]
Una vez completadas las mediciones se desecharn los adhesivos, ya que son de un
nico uso.
Sensor GSR
La conexin del sensor GSR se har en las dos ranuras que ms arriba se encuentran
en el lado izquierdo de la paca eHealth. Para evitar su desprendimiento, una vez
conectado el sensor ser preciso atornillarlo. Tras haberlo atornillado, se proceder
colocar el sensor en el paciente. Para ello habr que disponer gel conductor en las
cavidades circulares de las que dispone el sensor. Despus de haber aplicado el gel, se
colocar el sensor en las yemas de los dedos ndice y anular.
[61]
Una vez terminadas las mediciones, se proceder a limpiar las cavidades del sensor del
gel sobrante, para posteriores utilizaciones del sensor. Para ello se utilizar un cepillo
fino.
[62]
cd /dev/tty*
ls
Aparecer una lista similar a la siguiente:
Este cdigo se ejecutar antes y despus de conectar la placa Arduino a la RPi. El nuevo
elemento que aparezca en la lista despus de haber conectado la placa Arduino, ser
su direccin. Para que los scripts de Python puedan leer datos de la placa Arduino
correctamente, bastar con editar la siguiente parte de la cabecera que aparece en ellos.
[63]
Se comenzar por abrir un puerto en el router para que la RPi sea accesible desde el
exterior. La configuracin del router se har en el portal Alejandra, que es la herramienta
ofrecida por Movistar para la configuracin de sus routers, para otros routers la
configuracin ser similar.
Se acceder a la web de Movistar, y habr que dirigirse al portal Alejandra, otros routers
podrn ser configurados introduciendo desde el navegador de un dispositivo conectado
a la misma red las direcciones IP 0.0.0.0 o 1.1.1.1. Al introducir alguna de estas
direcciones saldra una ventana en la que introducir un usuario y una contrasea, que
normalmente se encuentran en la parte inferior del router, y se podra configurar el router
de una manera similar a la que se describir a continuacin.
[64]
Para realizar la siguiente operacin antes habr que saber la direccin IP local de la
RPi, esto se puede saber simplemente colocando el ratn sobre el smbolo wifi en el
escritorio de la RPi y esperando unos segundos para que aparezca. Otra manera de
conocer la direccin IP de la RPi ser escribir el siguiente cdigo en la ventana de
comandos.
hostname I
Cuando ya se sepa cul es, se pinchar en la opcin puertos del men que muestra el
portal Alejandra y habr que rellenar el formulario de la siguiente manera. Se elegir
formato manual y abrir puerto nico, se introduce la direccin IP de la RPi, y se abre el
puerto 80 con el protocolo TCP. As ya se dispondr de un puerto abierto en el router
para que la RPi sea accesible desde el exterior.
[65]
Por ltimo, se obtendr un dominio para que la RPi sea accesible de una manera fcil
desde internet. Para ello se obtendr un dominio gratuito de la pgina web
www.noip.com.
Es importante realizar los siguientes pasos desde la RPi, ya que de esta manera la
pgina web reconocer de forma automtica la direccin IP externa de la RPi.
Una vez creado el usuario y se haya accedido a la cuenta de noip desde el navegador
web la RPi, aparecer el siguiente men.
Por ltimo, habr que resolver una cuestin, y es que, debido a que el dominio est
asociado a la direccin IP externa de la RPi, que se trata de una direccin IP dinmica
dinmica y como su propio nombre indica es dinmica y cambia cada cierto tiempo.
Habr que conseguir que de alguna manera el dominio direccione a la IP dinmica de
la RPi en todo momento.
[66]
Para solucionar este problema se instalar un programa ofrecido por la misma web que
proporciona el dominio. ste programa se encarga de realizar un seguimiento de la IP
externa de la RPi y redirigir el dominio cuando la IP externa de la RPi cambie.
Para instalarlo habr que introducir los siguientes comandos en el terminal de la RPi.
mkdir no-ip
cd no-ip
wget
http://www.no-ip.com/client/linux/noip-duclinux.tar.gz
tar -zxvf noip-duc-linux.tar.gz
cd noip-2.1.9-1/
make
sudo make install
Durante la instalacin pedir los datos de la cuenta de No-IP y los datos del dominio,
adems habr que elegir cada cuanto tiempo se comprueba si la IP externa ha
cambiado. En este caso se elegir que cada 5 minutos se realice esa comprobacin.
Finalmente se crear un archivo de inicio para que cuando se encienda la RPi, se inicie
el servicio de seguimiento de la IP externa tambin. Para ello se ejecutarn los
siguientes comandos.
sudo nano /etc/init.d/noip2
Se crear un archivo y en l se incluir:
#! /bin/bash
### BEGIN INIT INFO
# Provides: Servicio No-IP
# Required-Start: $syslog
# Required-Stop: $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: arranque automatico para no-ip
# Description:
#
### END INIT INFO
sudo /usr/local/bin/noip2
Se guardar el archivo, y habr que darle permiso de ejecucin y colocarlo en la cola de
arranque, ejecutando los siguientes comandos.
[67]
[68]