DISPOSITIVOS DE MONITORIZACIÓN DE SEÑALES BIOMÉDICAS EMPLEANDO SISTEMAS EMPOTRADOS DE BAJO COSTE Tiago Frederico Ferreira Gonçalves Trabajo de fin de grado Grado en Ingeniería Informática Facultad de Informática Universidad Complutense de Madrid Curso 2018 / 2019 Director Joaquín Recas Piorno Agradecimientos A mi familia, quien me ha animado en este periodo de aprendizaje y gran trabajo,de quien he recibido su apoyo durante toda esta etapa y ha hecho posible que me sienta orgulloso de mi esfuerzo. A mi director de proyecto, Joaquín, quien me dio la oportunidad de llevar adelante este trabajo y cedió parte del material utilizado. Resumen El propósito de este proyecto es crear un sistema de monitorización de señales biomédicas para personas que se exponen a un alto nivel de estrés y esfuerzo en sus funciones profe- sionales como los pilotos de aviones de combate y pilotos de Formula 1 entre otros. Estos profesionales precisan de una mucha concentración en sus funciones mientras están someti- dos a un gran esfuerzo, además, un nivel alto de estrés podría hacerles cometer un error fatal. Para controlar el estado de estos profesionales, se hará la monitorización de diferentes seña- les, lo primordial es monitorizar el estado cardiaco, para ello se usa un electrocardiográma (ECG), esta señal es un claro indicador del esfuerzo al que está siendo sometido, además se complementa con una capnografía para medir el nivel de CO2 en aire exhalado, con ello además de complementar el ECG para saber al esfuerzo que se somete, se puede alertar de alguna insuficiencia respiratoria, en conjunto con estos dos se examina la actividad electro- dérmica (EDA), con ello podemos observar cambios en los niveles de sudoración inusuales provocados por el sistema nervioso autónomo (SNA) ante una situación de estrés y por último una sonda que mida la temperatura corporal, con ello, se podría detectar altas temperaturas que podrían deberse a un golpe de calor y ello provocar un desvanecimiento poniendo en peligro su vida. Palabras clave: ECG, CO2, EDA, Capnografía, Sistema empotrado, Ar- duino, señal, sensor Abstract The purpose of this project is to create a monitoring system for biomedical signals for people who are exposed to a high level of stress and effort in their professional functions such as fighter pilots and Formula 1 pilots among others. These professionals need a lot of concentration in their functions while they are subjected to a great effort, in addition, a high level of stress could make a fatal error. To monitor the condition of these professionals a control of different signals will be done, focusing mainly on the cardiac status through the use of an electrocardiogram (ECG). This signal is a clear indicator of the effort to which the professional is being subjected. It is complemented with a capnography to measure the level of CO2 in exhaled air, with this in addition to complement the ECG to know the effort, it may indicate respiratory problems. In conjunction with these, electrodermal activity (EDA) is examined. thanks to this we can observe changes in the unusual levels of sweating caused by the autonomic nervous system (SNA) before a stress situation and finally a probe that measures the body temperature, this can help us detect high temperatures that could be due to a heatstroke and this cause a fading endangering your life. Keywords: ECG, CO2, EDA, capnography, embedded system, Arduino, signal, sensor Índice general Índice i List of Figures iii 1. Introducción 1 1.1. Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3. Plan de trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2. Introduction 5 2.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2. Objectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3. Workplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3. Antecedentes 9 3.1. Electrocardiograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.1.1. Derivaciones cardiacas del Electrocardiograma . . . . . . . . . . . . . 9 3.1.2. Interpretación de un electrocardiograma . . . . . . . . . . . . . . . . 10 3.2. Capnografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.2.1. ¿Qué es la capnografía? . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.2.2. Intercambio de gases en la respiración . . . . . . . . . . . . . . . . . . 12 3.2.3. Usos clínicos de la capnografía . . . . . . . . . . . . . . . . . . . . . . 13 3.3. Temperatura corporal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.3.1. Patologías por incremento de la temperatura corporal . . . . . . . . . 15 3.3.2. Patologías por descenso de la temperatura corporal . . . . . . . . . . 15 3.4. Actividad electrodérmica (EDA) y conductancia de la piel . . . . . . . . . . 16 4. Entorno de desarrollo 17 4.1. Entorno Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.1.1. Arduino Uno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4.1.2. Arduino Nano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.1.3. Raspberry Pi 3 b+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.1.4. Monitor de frecuencia cardíaca AD8232 . . . . . . . . . . . . . . . . . 24 4.1.5. TechPatient CARDIO ECG Simulator . . . . . . . . . . . . . . . . . 26 4.1.6. ExplorIR-W CO2 Sensor . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.1.7. Sonda de temperatura DS18b20 . . . . . . . . . . . . . . . . . . . . . 28 4.2. Entorno Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 i 4.2.1. Arduino IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.2.2. Fritzing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.2.3. Processing IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5. Desarrollo 32 5.1. Desarrollo de electrocardiograma . . . . . . . . . . . . . . . . . . . . . . . . 32 5.1.1. Componentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 5.1.2. Esquema de montaje . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 5.1.3. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 5.2. Desarrollo de monitor de CO2 . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.2.1. Componentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.2.2. Esquema de montaje . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.2.3. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.3. Desarrollo de sensor de temperatura . . . . . . . . . . . . . . . . . . . . . . . 38 5.3.1. Componentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.3.2. Esquema de montaje . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.3.3. Librerías . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 5.3.4. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 5.4. Desarrollo de sensor de actividad electrodérmica (EDA) . . . . . . . . . . . . 41 5.4.1. Componentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.4.2. Esquema de montaje . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.4.3. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.5. Acoplar los sensores en una sola placa . . . . . . . . . . . . . . . . . . . . . . 44 5.5.1. Esquema de montaje . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5.6. Desarrollo de interfaz gráfica . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 6. Resultados y conclusiones 47 6.1. Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 6.2. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 7. Results and conclusions 50 7.1. Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 7.2. Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Bibliography 54 A. Código fuente del programa para Arduino 55 B. Código fuente de la interfaz gráfica 57 ii Índice de figuras 3.1. Derivaciones bipolares de extremidades.(Sparkfun1) . . . . . . . . . . . . . . 10 3.2. Representación de un ECG etiquetado con de ondas e intervalos (Wikipedia11) 11 3.3. Fases respiratorias en una capnografía.(Zonates.com13) . . . . . . . . . . . . 12 3.4. Intercambio de gases en el ciclo respiratorio. (Genomasur.com3) . . . . . . . 13 3.5. Alteraciones más comunes en capnografías (Zonates.com13) . . . . . . . . . . 14 4.1. Arduino Uno y datasheet (Electrontools.com18) . . . . . . . . . . . . . . . . 18 4.2. Arduino Nano y datasheet (Theengineeringprojects.com5) . . . . . . . . . . 20 4.3. Raspberry Pi 3 b+ (Raspberrypi.org4) . . . . . . . . . . . . . . . . . . . . . 22 4.4. Circuito AD8232 (Sparkfun1) . . . . . . . . . . . . . . . . . . . . . . . . . . 24 4.5. Simulador ECG (He Instruments2) . . . . . . . . . . . . . . . . . . . . . . . 26 4.6. Sensor de CO2 (co2meters.com16) . . . . . . . . . . . . . . . . . . . . . . . . 27 4.7. Patillaje ds18b20 (Programafacil.com12) . . . . . . . . . . . . . . . . . . . . 28 4.8. Arduino IDE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.9. Fritzing con esquema de sensor de temperatura. . . . . . . . . . . . . . . . . 30 4.10. Processing IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.1. Esquema conexiones electrocardiograma . . . . . . . . . . . . . . . . . . . . 33 5.2. Conexiones en simulador de paciente. . . . . . . . . . . . . . . . . . . . . . . 34 5.3. Monitor electrocardiograma . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 5.4. Esquema conexiones para sensor de CO2. . . . . . . . . . . . . . . . . . . . . 36 5.5. Conexiones para sensor de CO2 . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.6. Monitor CO2 en aire exhalado. . . . . . . . . . . . . . . . . . . . . . . . . . . 37 5.7. Esquema conexiones para sensor de temperatura . . . . . . . . . . . . . . . . 39 5.8. Conexiones para sensor de temperatura . . . . . . . . . . . . . . . . . . . . . 39 5.9. Lectura de temperatura corporal . . . . . . . . . . . . . . . . . . . . . . . . 40 5.10. Esquema conexiones para sensor de EDA . . . . . . . . . . . . . . . . . . . . 42 5.11. Conexiones para sensor EDA . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 5.12. Simulación de cambio en los niveles de sudoración . . . . . . . . . . . . . . . 43 5.13. Esquema general de conexiones con Arduino Nano. . . . . . . . . . . . . . . 45 5.14. Interfaz gráfica del monitor de señales. . . . . . . . . . . . . . . . . . . . . . 46 6.1. Visión general del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 7.1. Project overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 iii Capítulo 1 Introducción En este trabajo se pretende crear un sistema de monitorización de señales biomédicas para profesionales con grandes niveles de esfuerzo, donde un fallo podría ser fatal. Para el desarrollo de este sistema se van a realizar las siguientes pruebas: electrocardiograma, niveles de CO2 en aire exhalado, actividad electrodérmica y temperatura corporal. Para ello se usarán placas de Arduino y los siguientes sensores: AD8232 4.1.4 para realizar el electrocardiograma, ExplorIR-W 4.1.6 para la capnografía, unos electrodos conectados a la placa para ver la actividad electrodérmica y la sonda ds18b20 4.1.7 para medir la temperatura corporal. Para finalizar se envía la información a una Raspberry y esta lo muestra a través de una interfaz gráfica. 1 1.1. Motivación La informática a día de hoy está presente en todos los sectores; si nos paramos a contar la cantidad de elementos que usamos en el día a día y en nuestros trabajos, seguramente nos sorprenderíamos. El mundo ha cambiado totalmente y es posible que cualquier traba- jador pudiera mejorar sus labores gracias a esto, algo que para mí es maravilloso, ya que me permite trabajar en diferentes sectores realizando proyectos muy diversos. En este caso, esta idea nace del interés por usar la informática junto a otras disciplinas de la ciencia. Mi especial interés hacia la medicina, hizo que me decantara por un proyecto que relacionase ambas y en consecuencia, me permitiera aprender sobre una nueva rama, dando un salto a los sistemas empotrados y el uso de sensores creando un nuevo interfaz lleno de posibilidades entre el mundo real y los conocimientos obtenidos hasta ahora. Tenía una idea muy clara acerca de la temática a desarrollar en el proyecto, me parecía interesante, diferente y además me brindaría la oportunidad de ampliar mis conocimientos. Tras trasmitir mi idea a Joaquín, el que más adelante sería el director del proyecto, decidimos utilizar diferentes sensores para obtener señales biomédicas, cumpliendo las expectativas del trabajo que deseaba realizar. 2 1.2. Objetivos El objetivo de este proyecto es desarrollar un monitor de diferentes señales biomédicas obtenidas a través de sensores conectados a un Arduino y enviarlas a una Raspberry para mostrar la información. Las señales a monitorizar son las siguientes: ECG: Recoger en tiempo real la señal cardíaca de una persona o de un simulador de paciente, calcular los BPM y graficar el electrocardiograma. CO2: Medir los niveles de CO2 en aire exhalado en una escala de partes por millón (ppm), mostrar la información obtenida y realizar un gráfico. Temperatura Corporal: Usando una sonda pegada al cuerpo y conectada al sistema empotrado, recoger la temperatura del paciente y mostrar los datos obtenidos en grados Celsius ( oC). EDA: Obtener la actividad electrodérmica. El objetivo es detectar cambios en la conductividad de la piel que indiquen distintos niveles de sudoración que alerten de una situación inusual. 3 1.3. Plan de trabajo Una vez marcados los objetivos se han seguido las siguientes tareas: 1. Búsqueda y lectura de documentación para la selección de los sistemas empotrados a utilizar. 2. Estudio de viabilidad y alcance de los diferentes objetivos marcados. 3. Formación de uso en las diferentes placas de Arduino a emplear. 4. Aprendizaje sobre el electrocardiograma, su funcionamiento, sus usos e interpretación de resultados. 5. Investigación acerca de la placa AD8232 Heart Monitor. 6. Utilización del simulador cardiaco TechPatient Cardio. 7. Programar placa Arduino conectada con la placa AD8232. 8. Redactar breve borrador con el proceso realizado y los resultados obtenidos. 9. Formación sobre capnografía, así como sus usos y lectura de resultados. 10. Estudio acerca del sensor ExplorIR-W CO2 Sensor para adaptación al proyecto. 11. Programar placa Arduino conectada con el sensor ExplorIR-W. 12. Realizar un resumen con el proceso realizado y sus resultados alcanzados. 13. Obtener de patologías relacionadas con la temperatura corporal. 14. Lectura y estudio de la documentación de la sonda de temperatura DS18b20. 15. Programar placa Arduino conectada con la sonda DS18b20. 16. Escribir un borrador con el proceso realizado y resultados logrados. 17. Recoger información relacionada con la actividad electrodérmica. 18. Desarrollar un método para obtener la actividad electrodérmica. 19. Anotar los resultados obtenidos y el proceso realizado. 20. Unificar el desarrollo de todos los sensores en una sola placa de Arduino. 21. Crear una interfaz gráfica que muestre la información monitorizada de todas las seña- les. 22. Unificación de los borradores y desarrollo de la memoria completa. 4 Capítulo 2 Introduction This work aims to create a biomedical signal monitoring system for professionals with high levels of estress, where a failure could be fatal. For the development of this system, the following tests will be carried out: electrocardiogram, CO2 levels in exhaled air, electrodermal activity and body temperature. For this, Arduino boards and the following sensors will be used: AD8232 to perform the electrocardiogram, ExplorIR-W for capnography, electrodes connected to the Arduino board to see the electrodermal activity and the ds18b20 probe to measure body temperature. Finally, the information is sent to a Raspberry and it shows it through a graphical interface. 5 2.1. Motivation Today’s computer science is there in all sectors; if we count the amount of elements we use on a daily basis and in our work, we would surely be surprised. The world has changed completely and it is possible that any worker could improve their work thank to this, something wonderful to me, since it allows me to work in different sectors carrying out very diverse projects. In this case, this idea is born from the interest to use computer science together with other disciplines of science. My special interest in medicine, made me opt for a project that relates both and consequently, allowed me to learn about a new branch, making a leap to embedded systems and the use of sensors creating a new interface full of possibilities between the real world and the knowledge obtained so far. I had a very clear idea about the theme to develop in the project, it seemed interesting, different and also it would give me the opportunity to expand my knowledge. After transmitting my idea to Joaquín, who would later be the project director, we decided to use different sensors to obtain biomedical signals, fulfilling the expectations of the work we wanted to perform 6 2.2. Objectives The goal of this project is to develop a monitor of different biomedical signals obtained through sensors connected to an Arduino and send them to a Raspberry in order to show the information. The signals to monitor are the following: ECG:Collect in real time the cardiac signal of a person or a patient simulator, calculate the BPM and graph the electrocardiogram. CO2: Measure the levels of CO2 in exhaled air on a scale of parts per million (ppm), show the information obtained and make a graph. Body temperature: Using a probe attached to the body and connected to the em- bedded system, collect the patient’s temperature and display the data obtained in degrees Celsius (oC). GRS: Obtain the galvanic response skin. The objective is to detect changes in the conductivity of the skin that indicate different levels of sweating that will alert of an unusual situation. 7 2.3. Workplan Once the objectives have been marked, the following tasks have been followed: 1. Researching and reading documentation for the selection of embedded systems to be used. 2. Feasibility study and scope of the different objectives set. 3. Use training in the different Arduino boards to be used. 4. Learning about the electrocardiogram, its operation, its uses and interpretation of results. 5. Research about the sensor AD8232 Heart Monitor. 6. Use of the cardiac simulator TechPatient Cardio. 7. Program Arduino board connected to the board AD8232. 8. Compile of a brief draft with the process carried out and results obtained. 9. Training on capnography, as well as its uses and reading results. 10. Study about the sensor ExplorIR-W CO2 Sensor to adapt its functions to the project. 11. Program Arduino board connected with the ExplorIR-W sensor. 12. Make a summary of the process performed and its results achieved. 13. Obtain pathologies related to body temperature. 14. Reading and studying of the documentation of the temperature probe DS18b20. 15. Program Arduino board connected with the probe DS18b20. 16. Write a draft with the process and the results obtained. 17. Collect information related to the electrodermal activity. 18. Develop a method to obtain the electrodermal activity. 19. Record the results obtained and the process performed. 20. Unify the development of all sensors on a single Arduino board. 21. Create a graphical interface that shows the monitored information of all the signals. 22. Unification of the drafts and development of the complete memory. 8 Capítulo 3 Antecedentes 3.1. Electrocardiograma Un electrocardiograma (ECG) representa gráficamente la actividad eléctrica que se pro- duce en cada latido cardiaco. Esta actividad eléctrica se obtiene de electrodos adheridos a la superficie corporal del paciente y dibuja una representación gráfica o trazado, donde se observan diferentes ondas que representan los estímulos eléctricos de las aurículas y los ven- trículos. El uso del ECG frente a otras pruebas de medición cardiacas, como un pulsómetro, es la mayor cantidad de información que se puede obtener de las señales eléctricas frente a únicamente el pulso, para detectar enfermedades del corazón. 3.1.1. Derivaciones cardiacas del Electrocardiograma Las derivaciones cardiacas son el registro de la diferencia de potenciales eléctricos entre dos puntos, ya sea entre dos electrodoshttps://es.overleaf.com/project/5cc89cdaab992b58cf084abe (derivación bipolar) o entre un punto virtual y un electrodo (derivaciones monopolares). Las derivaciones clásicas o bipolares, registran la diferencia de potencial entre dos electrodos ubicados en extremidades diferentes. D1 ó I: mide la diferencia de potencial entre el electrodo del brazo derecho y el iz- quierdo. D2 ó II: mide la diferencia de potencial entre el electrodo del brazo derecho a la pierna derecha. D3 ó III: mide la diferencia de potencial entre el electrodo del brazo izquierdo a la pierna derecha. 9 Figura 3.1: Derivaciones bipolares de extremidades.(Sparkfun1) Las tres derivaciones bipolares forman, en su conjunto, lo que se denomina el triángulo de Einthoven ver figura 3.1. 3.1.2. Interpretación de un electrocardiograma Para comprender a grandes rasgos la lectura de un electrocardiograma, explicaremos los conceptos esenciales y el significado de las ondas generadas. El ECG se divide en dos intervalos básicos, el intervalo PR y el intervalo QT (Figura 3.2) EL intervalo PR es la onda inicial generada por un impulso eléctrico que se desplaza desde la aurícula derecha hacia la izquierda. La aurícula derecha recibe un impulso eléctrico hace que las cámaras se despolaricen y obliga a que se contraiga y drene la sangre desoxigenada de la vena cava superior e inferior al ventrículo derecho. Cuando el impulso eléctrico viaja a través de la parte superior del corazón, activa la aurícula izquierda para contraerse. La aurícula izquierda es responsable de recibir sangre recién oxigenada de los pulmones al ven- trículo izquierdo a través de las venas pulmonares izquierda y derecha. En el intervalo QT sucede el proceso QRS, que es la representación gráfica de la despolarización de los ventrículos del corazón. Durante elQRS ambos ventrículos comienzan a bombear. El ventrículo derecho bombea sangre desoxigenada a los pulmones a través de las arterias pulmonares izquierda y derecha, mientras que el ventrículo izquierdo bombea sangre recién oxigenada a través de la aorta y al resto del cuerpo. Después de la contracción inicial viene el segmento ST que es bastante silencioso eléctricamente, ya que es el momento hasta que los ventrículos vuelves a ser polarizados. Por último, la onda T representa en el momento de relajación de los ventrículos. 10 Figura 3.2: Representación de un ECG etiquetado con de ondas e intervalos (Wikipedia11) Para más información consultar referencias.11 1 En la figura 3.2 podemos ver la representación de un electrocardiograma con los tipos de onda y los intervalos descritos en el este apartado. 11 3.2. Capnografía 3.2.1. ¿Qué es la capnografía? La capnografía es la monitorización no invasiva de concentraciones de dióxido de car- bono (CO2) en la vía aérea de un paciente durante su ciclo respiratorio. Esta aporta un importante papel en la detección temprana de enfermedades respiratorias y en el control del ciclo de eliminación del CO2 durante intervenciones médicas que requieran del uso de anestesia. Figura 3.3: Fases respiratorias en una capnografía.(Zonates.com13) 3.2.2. Intercambio de gases en la respiración Las células de nuestro organismo necesitan un aporte continuo de oxígeno (O2) para llevar a cabo la respiración celular. El sistema respiratorio es el conjunto de órganos que permite el intercambio de gases, en este procedimiento se elimina el dióxido de carbono (CO2) generado por las células y las alimenta de oxígeno (O2) . 12 Figura 3.4: Intercambio de gases en el ciclo respiratorio. (Genomasur.com3) Los procesos que se realizan durante el desarrollo del ciclo respiratorio son los siguientes: Ventilación: flujo de entrada y salida de aire entre el exterior y los pulmones. Hematosis o respiración externa: propagación de oxígeno (O2) y dióxido de car- bono (CO2) entre los alvéolos pulmonares y la sangre. Transporte de gases en sangre: traslado de oxígeno (O2) desde los pulmones hasta las células y de dióxido de carbono (CO2) desde las células hasta los pulmones. Respiración interna o tisular: propagación de oxígeno (O2) y de dióxido de carbono (CO2) entre la sangre y los tejidos. Respiración celular: proceso por el cual las células degradan las moléculas de ali- mento por oxidación para obtener energía. 3.2.3. Usos clínicos de la capnografía Esta monitorización en conjunto con la pulsiometría nos permitirá detectar precozmente los problemas respiratorios graves que surjan durante la asistencia sanitaria como la ap- nea, obstrucción de la vía respiratoria o hipoventilación del paciente. La detección de estos eventos graves puede demorarse (incluso entre 2-4 minutos) cuando se emplea únicamente pulsioximetría. 13 Figura 3.5: Alteraciones más comunes en capnografías (Zonates.com13) En la figura 3.5 podemos ver lecturas de las alteraciones más comunes al realizar una capnografía. Para más información del sistema respiratorio consultar las referencias10 13 3 14 3.3. Temperatura corporal En condiciones normales, la temperatura corporal se encuentra entre 35,8 y 37,2 oC, con variaciones durante el día que hacen que esta temperatura sea más elevada por la tarde. El hipotálamo es el responsable de la regulación de la temperatura corporal usando los siguientes mecanismos: El sudor: cuando la temperatura es elevada, las glándulas sudoríparas producen sudor y este se evapora en la superficie del cuerpo eliminando el calor. La circulación cutánea: cuando la temperatura es elevada las arterias cutáneas se dilatan, permitiendo que llegue mayor cantidad de sangre a la superficie de la piel y haciendo con ello que se enfríe, sin embargo, cuando la temperatura es baja, realiza el proceso inverso. Contracción muscular: el frío produce contracciones musculares involuntarias (tem- blores), que aumentan el tono muscular y consumen energía que se transforma en calor. Piloerección: el pelo cutáneo se eriza a la contracción de unos pequeños músculos que hay en la base de cada pelo, esto produce lo que comúnmente se conoce como “piel de gallina”. En los humanos al carecer de una gran cantidad de pelo su efecto es nulo, pero en especies con pelo tupido permite que quede atrapada una capa de aire debajo del pelo aislando y disminuyendo con ello la pérdida de calor. Aumento del metabolismo: se incrementa la secreción de hormonas en la glándula tiroides, estas estimulan la producción de calor en todas las células del organismo. 3.3.1. Patologías por incremento de la temperatura corporal Existen dos situaciones caracterizadas por aumento de temperatura corporal que con- viene diferenciar: Fiebre: es el aumento temporal en la temperatura del cuerpo en respuesta a alguna enfermedad o padecimiento. Hablamos de febrícula si la temperatura está por encima de lo normal pero es menor de 38o C y de fiebre si se superan los 38 oC Hipertermia: producido por el mal funcionamiento del centro termorregulador, con temperaturas iguales o superiores a 41 oC. El aumento descontrolado de la temperatura origina importantes lesiones orgánicas, por lo que la hipertermia implica un importante riesgo para la salud, de ahí la importancia de un diagnóstico y tratamiento temprano. 3.3.2. Patologías por descenso de la temperatura corporal Hipotermia: es el descenso involuntario de la temperatura corporal (por debajo de 35oC). El corazón, el sistema nervioso y otros órganos no pueden funcionar normalmen- te. Si no se trata a tiempo, puede provocar una parada cardiorespiratoria y finalmente, la muerte. 15 3.4. Actividad electrodérmica (EDA) y conductancia de la piel En la lectura de la actividad electrodérmica (EDA) se monitoriza las características eléctricas de la piel, por ejemplo, la conductancia, causada por la variación de la sudoración del cuerpo humano. La respuesta eléctrica está relacionada con la activación del sistema nervioso, con ello pode- mos detectar cambios emocionales, como un estado de ansiedad o de estrés, estas situaciones provocan un aumento de la sudoración en las manos y esto refleja una mayor conductividad de la piel. Para obtener una señal EDA se colocan electrodos en los dedos índice y corazón de una mano. Como medida de la actividad electrodérmica se usa la la variación de una corriente de bajo voltaje aplicada entre los dos electrodos. La monitorización de la actividad electrodérmica también se ha realizado para otros fines distintos como el polígrafo de la verdad, medir el esfuerzo psicofisiológico de los pilotos del ejercito del aire, actividades de investigación en el campo de la neurociencia, estudio en varios campos de la psicología y mucho más. 16 Capítulo 4 Entorno de desarrollo 4.1. Entorno Hardware Para del desarrollo del proyecto se ha hecho uso de dos sistemas empotrados de la familia Arduino, estos son; Arduino UNO y Arduino Nano para la conexión con los diferentes sensores y una Raspberry pi 3 b+ para recoger la información y mostrarla a través de un monitor desarrollado en Java. La elección del uso de Arduino como plataforma para la conexión de los sensores, se debe a su respuesta inmediata, este dispone de un microcontrolador que ejecuta cíclicamente una rutina previamente cargada en memoria sin necesidad de un sistema operativo, lo que lo convierte en una opción idónea para obtener resultados en tiempo real. Para mostrar la información a través de una interfaz gráfica en un monitor, necesitamos un ordenador que además sea compacto, por ello se ha elegido la Raspberry al tratarse de un mini ordenador de bajo consumo y bajo coste. 17 4.1.1. Arduino Uno Es el más popular de la familia Arduino, idóneo para iniciarse en la programación de sistemas empotrados y muy usado en el ámbito educativo. Además, se trata de una placa de hardware libre, lleva el microcontrolador Atmega328, dispone de alimentación externa y se conecta con un cable usb tipo A-B. Figura 4.1: Arduino Uno y datasheet (Electrontools.com18) Características Microcontrolador: ATmega328 Voltaje Operativo: 5v Voltaje de Entrada (Recomendado): 7 – 12 v Pines de Entradas/Salidas Digital: 14 (De las cuales 6 son salidas PWM) Pines de Entradas Análogas: 6 Memoria Flash: 32 KB (ATmega328) con 0,5 KB destinados al Bootloader. SRAM: 2 KB (ATmega328) 18 EEPROM: 1 KB (ATmega328) Velocidad del Reloj: 16 MHZ. Dimensiones: 2,1"x 2,3" Longitud: 68,6 mm Ancho: 53,3 mm Peso: 24 g 19 4.1.2. Arduino Nano El Arduino Nano es una pequeña placa con un microprocesador ATmega168 . En funcio- nalidad es muy parecido al Arduino UNO pues tiene el mismo número de entradas y salidas disponibles pero más compactas, No posee conector para alimentación externa y funciona con un cable USB Mini-B en vez del cable estándar. Figura 4.2: Arduino Nano y datasheet (Theengineeringprojects.com5) Características Microcontrolador: Atmel ATmega168 Tensión de funcionamiento (nivel lógico): 5 V Voltaje de entrada (recomendado): 7-12 V Voltaje de entrada (límites): 6-20 V E / S digitales: 14 (de los cuales 6 proporcionan salida PWM) Pines de entrada analógica: 8 20 Corriente continua para Pin I / O: 40 mA Memoria flash: 16 KB ATmega168 de los cuales 2 KB utilizado por el gestor de arranque SRAM: 1 KB ( ATmega168 ) EEPROM: 512 bytes ( ATmega168 ) Velocidad de reloj: 16 MHz Dimensiones: 0,73 "x 1,70" Longitud: 45 mm Ancho: 18 mm Peso: 5 g 21 4.1.3. Raspberry Pi 3 b+ La Raspberry Pi 3 b+ es una placa computadora de bajo coste y reducidas dimensio- nes fabricada por la Fundación Raspberry Pi, posee los componentes principales que llevaría cualquier ordenador y dispone de su propio sistema operativo oficial basado en Debian llamado Raspbian. Es muy popular en el ámbito educativo por su versatilidad y caracte- rísticas, tiene una multitud de pines GPIO (General Purpose Input/Output), tratándose de una interfaz más que aumenta las capacidades para crear diversos proyectos que podremos encontrar en su comunidad de creadores. Figura 4.3: Raspberry Pi 3 b+ (Raspberrypi.org4) Características CPU + GPU: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz RAM: 1GB LPDDR2 SDRAM Wi-Fi + Bluetooth: 2.4GHz y 5GHz IEEE 802.11.b/g/n/ac, Bluetooth 4.2, BLE Ethernet: Gigabit Ethernet sobre USB 2.0 (300 Mbps) GPIO de 40 pines HDMI 4 puertos USB 2.0 22 Puerto CSI y DSI para conectar una cámara y una pantalla táctil Salida de audio estéreo y vídeo compuesto Micro-SD Power-over-Ethernet (PoE) 23 4.1.4. Monitor de frecuencia cardíaca AD8232 La placa SparkFun AD8232 monitor de frecuencia cardíaca, se utiliza para medir la actividad eléctrica del corazón. Esta actividad eléctrica se puede graficar como un ECG o un electrocardiograma y emitirse como una lectura analógica. Está diseñado para extraer, amplificar y filtrar pequeñas señales biopotenciales en presencia de condiciones ruidosas, como las creadas por el movimiento o la colocación remota de electrodos, y así, ayudar a obtener una señal clara de los intervalos de PR y QT fácilmente. Figura 4.4: Circuito AD8232 (Sparkfun1) El monitor de ritmo cardíaco AD8232 dispone de nueve conexiones en el circuito inte- grado a las que puede soldar pines, cables y otros conectores, también dispone de un conector jack de 3.5mm que permite conectar los electrodos que captarán las señales y un LED que parpadea con el ritmo de un latido del corazón. Conexiones del lateral izquierdo de la figura 4.4. GND: Toma de tierra. 3.3V: Fuente de alimentación. OUTPUT: Señal de salida. LO-: Detección de derivaciones - LO+: Detección de derivaciones + 24 SDN: Desconectar la placa. En la parte superior 4.4 están las conexiones: RA (Right Arm): Conexión del brazo derecho. LA (Left Arm): Conexión del brazo izquierdo. RL (Right Leg) Conexión de la pierna derecha. 25 4.1.5. TechPatient CARDIO ECG Simulator TechPatient cardio es un simulador ECG portátil que reproduce patrones de onda de un sujeto humano sano para generar nuevas ondas cardíacas realistas, con control de la amplitud, la frecuencia y la variabilidad latido a latido. Figura 4.5: Simulador ECG (He Instruments2) Las posibilidades de ensayo que permite son de 12, 5 y 3 derivaciones. Pueden seleccio- narse diferentes modos de onda con parámetros específicos para cada modo. El Modo ECG produce ondas cardíacas realistas en 12 deriva- ciones parametrizadas en amplitud y frecuencia cardíaca. El Ritmic Module simula arritmias, dispone de 45 arritmias prefijadas con amplitud configurable. LasOndas de Performance están diseñadas para ensayo y me- dición. Posibilidad de definir parámetros de amplitud, frecuencia y nivel. 26 4.1.6. ExplorIR-W CO2 Sensor El sensor de dióxido de carbono ExplorIR-W brinda mediciones de CO2 a 20Hz, 10 veces la velocidad de un sensor NDIR (NonDispersive InfraRed) normal de 2Hz, es el sensor de CO2 más preciso del mercado. Dispone de un microcontrolador que permite la comunicación con la placa a través de co- mandos en Serial UART (normally high) a 9600 baudios. Figura 4.6: Sensor de CO2 (co2meters.com16) La comunicación en serie a través de comandos17 nos permite definir parámetros de con- figuración u obtener las lecturas del sensor. A continuación se muestra la función y orden de cada pin de conexión en la placa, para más información consultar datasheet16. 1 1Esquema de pinout obtenido en datasheet17 27 4.1.7. Sonda de temperatura DS18b20 El DS18B20 puede medir temperaturas entre -55oC y 125oC, dado que es un sensor digital, la señal leída no se degrada debido a la distancia del cableado.Incorpora una memoria de 64-bit para almacenar el identificador o dirección única de cada sensor, esta dirección es necesaria dentro del bus 1-Wire para identificar cada uno de los sensores de temperatura DS18B20 conectados al bus de comunicación, esto permite dos cosas, por un lado robustez en la transmisión de los datos ya que trabaja con datos digitales, mucho menos sensibles a los efectos adversos del ruido que las señales analógicas y por otro lado, permite conectar muchos sensores de temperatura con un único pin digital. Ver datasheet14. Figura 4.7: Patillaje ds18b20 (Programafacil.com12) Características técnicas del DS18B20 Rango de temperatura: -55 a 125oC Resolución: de 9 a 12 bits (configurable) Interfaz 1-Wire (Puede funcionar con un solo pin) Identificador interno único de 64 bits Múltiples sensores puede compartir el mismo pin Precisión: ±0.5oC (de -10oC a +85oC) Tiempo de captura inferior a 750ms Alimentación: 3.0V a 5.5V 28 4.2. Entorno Software 4.2.1. Arduino IDE El entorno de desarrollo integrado (IDE) de Arduino disponible en las prin- cipales plataformas proporciona las herramientas para el desarrollo de rutinas en Arduino y también para la comunicación bidireccional con las placas. Figura 4.8: Arduino IDE. Con este entorno de desarrollo se ha realizado la programación de todas las rutinas para las placas, con ello tenemos a disposición herramientas de validación del código, carga de los programas en memoria, disponibilidad de una gran variedad de Librerías con sus ejemplos de uso y dos tipos de monitores del puerto serie, un monitor bidireccional donde podemos enviar datos a la placa o mostrar los datos recibidos por la misma 5.9 y otro que realiza una gráfica en tiempo real de los datos que se recibe de la placa 5.3. 29 4.2.2. Fritzing Fritzing es un programa de software libre disponible en las principales plata- formas, con la finalidad de automatizar el diseño electrónico, esta herramienta ayuda a los diseñadores a pasar de prototipos a productos finales. También permite documentar prototipos basados en Arduino y crear esquemas de cir- cuitos impresos para su posterior fabricación. Figura 4.9: Fritzing con esquema de sensor de temperatura. En el desarrollo de este proyecto se ha utilizado esta herramienta para el diseño de los esquemas de conexión de los sensores con las placas, ya que dispone de multitud de componentes usualmente utilizados en Arduino y sus propias placas, lo que nos ha ofrecido una buena solución para realizar esta tarea. 30 4.2.3. Processing IDE Processing IDE es un entorno de desarrollo con capacidad para programar en diferentes lenguajes, pero principalmente en su propio lenguaje basado en Java. Sus herramientas nos permite aplicaciones gráficas siguiendo una estruc- tura predefinida en la que cíclicamente ejecuta la función draw() que dibuja los componentes. Figura 4.10: Processing IDE Este entorno de desarrollo se ha empleado para desarrollar la interfaz gráfica del monitor, donde se muestra la información de todos los sensores. Se ha escogido esta opción por su facilidad de aprendizaje y su uso del lenguaje Java. 31 Capítulo 5 Desarrollo Una vez determinada la temática, se marcó un plan de trabajo a seguir 1.3, después, se fue trabajando y documentando cada uno de los objetivos marcados 1.2, donde primero se estudian los dispositivos a utilizar, se realiza un análisis de la materia que se abarca, se investiga como funciona cada placa o sensor y se hace el desarrollo y documentación de cada hito. En último lugar, se unifican los desarrollos a una sola placa, se crea la interfaz gráfica y se documenta el proceso al completo. 5.1. Desarrollo de electrocardiograma Para el uso del electrocardiograma únicamente usamos los pines esenciales, GND, VCC (3,3V) y salida de datos (Output). Para obtener las señales, usamos el puerto jack de 3.5mm con tres electrodos y la lectura de resultados se puede realizar tanto en el simulador de paciente como en una persona. 5.1.1. Componentes Los materiales usados para este proyecto son: Arduino UNO 4.1. Placa AD8232. 4.4. Electrodos con conexión jack 3.5mm. Simulador de paciente Tech Cardio 4.5. 32 Adhesivos corporales (En pruebas reales). Cables. 5.1.2. Esquema de montaje En este esquema se detalla como realizar las conexiones, tanto en Arduino, como en una persona. Arduino AD8232 3.3V 3.3V GND GND A0 OUTPUT AD8232 Señal RA (Negro) Brazo derecho LA (Azul) Brazo izquierdo RL (Rojo) Pierna derecha Figura 5.1: Esquema conexiones electrocardiograma 33 Figura 5.2: Conexiones en simulador de paciente. 5.1.3. Resultados Una vez realizadas las conexiones y cargado en memoria el programa, la in- formación se envía por el puerto serie al ordenador y éste muestra los resultados. Figura 5.3: Monitor electrocardiograma 34 5.2. Desarrollo de monitor de CO2 Para las pruebas de medición de CO2 se hará uso del sensor ExplorIR-W CO2 4.1.6, con el que es necesario mantener una conexión bidireccional para enviar comandos al sensor y recibir la información solicitada. Para ello se conecta a una placa Arduino a través de los pines de transmisión, lo que permitirá la comunicación con el puerto Serial de Arduino. Para el desarrollo final con la unificación de todos los sensores, se usará un puerto Serial virtual exclusivo con este sensor, ya que de lo contrario saturaría el canal. 5.2.1. Componentes Los materiales usados para este proyecto son: Arduino Uno 4.1. ExplorIR-W CO2 Sensor 4.6. Cables. 5.2.2. Esquema de montaje Para conectar el sensor ExplorIR-W con Arduino realizamos las siguientes conexiones, con ello podemos comunicar la placa con el sensor a través de co- mandos por el UART standard. Arduino ExplorIR-W GND Pin 1 GND 3.3V Pin 3 3.3v TX (D1) Pin 5 RX (IN) RX (D0) Pin 7 TX (OUT) 35 Figura 5.4: Esquema conexiones para sensor de CO2. Figura 5.5: Conexiones para sensor de CO2 36 5.2.3. Resultados Antes de realizar las conexiones debemos cargar primero la rutina en la me- moria del Arduino, ya que de lo contrario, al tener conectado el sensor en los pines de transmisión, no se cargaría en la memoria. Cuando ya tengamos la rutina cargada realizamos las conexiones. Figura 5.6: Monitor CO2 en aire exhalado. 37 5.3. Desarrollo de sensor de temperatura Para el desarrollo del sensor de temperatura, en primer lugar se usó un termistor ntc de uso médico, el problema de éste, es que se desconocía el fa- bricante, por lo tanto no se encontró documentación. Finalmente, tras varios intentos fallidos para obtener resultados, se sustituyo por la sonda ds18b20, con la que finalmente se logró el objetivo. 5.3.1. Componentes Los materiales usados para este proyecto son: Arduino Nano 4.2. Sonda DS18B20 4.7. Resistencia de 4.7KΩ. Protoboard. Cables. 5.3.2. Esquema de montaje La sonda tiene 3 cables de conexión, el rojo de VCC, el negro de GND y el amarillo de datos. Conectamos VCC a 5V, GND a uno de las conexiones GND de arduino y el cable de datos a una de las entradas digital, en este caso usaremos la número 8, por último, conectamos la resistencia Pull-UP de 4.7K entre la conexión de datos y VCC. 38 Figura 5.7: Esquema conexiones para sensor de temperatura Figura 5.8: Conexiones para sensor de temperatura 39 5.3.3. Librerías Para programar el uso del DS18b20 en Arduino se han utilizado dos librerías: Librería OneWire: el DS18b20 hace usa el protocolo del bus one-wire, por lo tanto hacemos uso de esta librería diseñada para el uso de este protocolo. Librería DallasTemperature: necesaria para realizar las lecturas o con- figuraciones del DS18b20. 5.3.4. Resultados Una vez realizadas las conexiones y cargado en memoria el programa, la información se envía por el puerto serie al ordenador, donde podremos mostrar las lecturas de temperatura. Figura 5.9: Lectura de temperatura corporal 40 5.4. Desarrollo de sensor de actividad electrodérmica (EDA) Usando la ley de voltaje de Kirchhoff en mallas, con electrodos conectados a dos dedos de la mano y una resistencia, se podrían detectar cambios en la conductividad debido a la sudoración de los electrodos conectados a los dedos. (Ver figura 5.11). 5.4.1. Componentes Los materiales usados para este proyecto son: Arduino Nano 4.2. Dos electrodos con velcro. Resistencia de 10KΩ. Protoboard. Cables. 5.4.2. Esquema de montaje Uno de los electrodos se conecta a 5V de Arduino, en una de las patillas de la resistencia se conecta GND, en la otra se conecta el otro electrodo y la salida de lectura analógica que irá conectado al pin A0 analógico de Arduino y por último, se coloca un electrodo a cada dedo. 41 Figura 5.10: Esquema conexiones para sensor de EDA Figura 5.11: Conexiones para sensor EDA 42 5.4.3. Resultados Una vez realizadas las conexiones y cargado en memoria el programa, la in- formación se envía por el puerto serie al ordenador, donde podemos mostrarla. Figura 5.12: Simulación de cambio en los niveles de sudoración En esta prueba se observa el inicio de conexión, cuando se colocan los dedos en los electrodos, se realiza un muestreo en el que se mantiene estable en un valor, después de esto, se humedecen los dedos simulando la sudoración, por ello se ve otro valle a cero, momento de desconexión y después una lectura con valores mayores, esto se debe a que ahora hay mayor conductividad. 43 5.5. Acoplar los sensores en una sola placa Para unificar todo lo anterior se han tenido que realizar varios cambios, tanto en las conexiones, como en la estructura del código, lo que ha supuesto varios problemas a solucionar. Uno principal es la ejecución monoproceso, el contener una única rutina secuen- cial supone un problema para la comunicación con todos los sensores, dado que cada uno precisa de diferentes tiempos de espera, esto genera un retardo mayor por la espera de todos los componentes y este retardo es especialmente relevan- te para obtener buenos resultados del ECG. Como solución, el mayor tiempo de espera se intercala con las lecturas del sensor cardíaco evitando que afecte a su funcionamiento y simulando una ejecución multiproceso. //Pseudocodigo de ejemplo r eadAl lSenso r s ( ) ; sendAllData ( ) ; //Cincuenta i t e r a c i o n e s con de lay 1ms for ( int i =0; i <50; i++){ readECG() ; sendAllData ( ) ; de lay (1 ) ; } Otro problema importante era que los pines TX y RX usados en el sensor ExplorIR-W 4.1.6 comparten la conexión del puerto serie por USB. Esto es un problema dado que ahora la comunicación no es exclusiva con este sensor, si no que también se necesita la comunicación en serie con la Raspberry para mostrar la información de todos los sensores y el canal queda bloqueado. Como solución se han usado los pines digitales 10 y 11 para simular un puerto serie vía software, para ello se ha utilizado la librería SoftwareSerial así disponemos de un canal para la comunicación con este sensor y otro canal para la comunicación con la Raspberry. Un último problema menor es el envío de la información distinguiendo a quien pertenece cada dato, que se soluciona enviando todos los datos simultáneamente separados por comas. Una vez desarrollado el nuevo programa a cargar en la memoria de la placa y solucionados los problemas descritos, ya podemos conectar todos los sensores siguiendo el siguiente esquema de conexión. 44 5.5.1. Esquema de montaje Figura 5.13: Esquema general de conexiones con Arduino Nano. Con los sensores ExplorIR-W 4.1.6 y AD8232 4.1.4 se realiza una conexión directa sin necesidad de más componentes siguiendo las siguientes tablas. Arduino AD8232 3.3V 3.3V GND GND A0 OUTPUT Arduino ExplorIR-W GND GND pin 1 3.3V 3.3V pin 3 D10 (STX) RX pin 5 D11 (SRX) TX pin 7 Para conectar la sonda ds18b20 4.1.7, se conecta el cable negro a GND, el cable rojo a 5V y el amarillo a pin D2 de Arduino, además, se debe añadir una resistencia de 4.7kΩ entre el cable de datos (amarillo) y el de tensión (rojo). Para la conexión de los electrodos destinados a la lectura de la actividad elec- trodérmica (EDA) 5.4, conectamos uno de los electrodos a 5V y para el otro se emplea una resistencia de 10kΩ, conectando una pata de la misma a GND y la otra al electrodo restante y al pin A3 de Arduino. 45 5.6. Desarrollo de interfaz gráfica La información de todas las señales se obtiene en la placa Arduino y se envía a la Raspberry, donde se procesa y se muestran los datos haciendo uso de una aplicación desarrollada en Precessing basada en Java, se presenta una interfaz gráfica que consta de una sola ventana dividida en 4 secciones que muestra en cada una los datos de cada señal junto con un gráfico en tiempo real. Figura 5.14: Interfaz gráfica del monitor de señales. Para el diseño se dibujan figuras geométricas. La ventana forma un rectán- gulo con dos lineas divisorias a la mitad de cada eje, donde se crean patrones de dibujo para los cuadrantes, de forma que únicamente cambiando los valores de altura y anchura de la ventana, no se descuadre la imagen. En cada cuadrante se crea un rectángulo en la esquina superior izquierda donde mostrar los datos numéricos correspondientes. Al realizar las gráficas se escalan los valores de las señales para poder mostrarlos en el espacio correspondiente. Los gráficos son lineas de puntos entre cada valor y para mantener la continui- dad, una vez el éste llega al final, limpia la pantalla y continua en el principio. 46 Capítulo 6 Resultados y conclusiones 6.1. Resultados Como resultado del trabajo se ha obtenido un monitor compacto que cumple con los objetivos marcados inicialmente. En la siguiente imagen podemos ver el resultado de la implementación del trabajo usando una tablet conectada a la Raspberry por VNC. Figura 6.1: Visión general del proyecto 47 El monitor es capaz de mostrar un gráfico del electrocardiograma en tiem- po real, así como los BPM correspondientes. Puede medir los niveles de CO2 en aire exhalado y mostrar un gráfico del mismo. Controla la temperatura corporal. En este caso, ante cambios bruscos, el tiempo de respuesta es mayor, pero mantiene lecturas estables. Permite monitorizar la actividad electrodérmica. Además del gráfico, in- dica si los electrodos están conectados, si se encuentra en valores normales y una alerta en caso de detectar valores de sudoración elevados. Finalmente se logra que todos los sensores estén acoplados a una sola placa de Arduino. Ejecución de interfaz gráfica a través de una Raspberry, lo que lo hace más compacto y permite conectarse a través de VNC o conectando un monitor. Entre los posibles casos de uso aplicados a la realidad está, la monitorización de señales biomédicas con las que se puede detectar alguna posible anomalía o un estado de estrés en un individuo. Al tratarse de un dispositivo bastante compacto en comparación con los aparatos médicos profesionales, puede resul- tar una opción donde alguna anomalía pueda ocasionar un problema grave. Un ejemplo donde se usan dispositivos similares es en pilotos de aviones de combate del ejército español, y podría extrapolarse a otros ámbitos como la Fórmula 1. 48 6.2. Conclusiones Una vez finalizado el desarrollo del proyecto llega el momento de realizar una valoración de lo conseguido y lo aprendido. El objetivo de este proyecto era implementar diferentes dispositivos que obtengan señales biomédicas, ante lo que podemos afirmar que se ha logrado midiendo un total de cuatro señales. Además, se ha conseguido unificar la co- nexión de todos los sensores en una sola placa y se ha desarrollado una interfaz gráfica que facilita la visualización de los datos. En consecuencia, se han ampliado los conocimientos sobre la materia de los sistemas empotrados así como sus capacidades y posibles usos en otros ámbitos. Aunque se trate de un sistema funcional, no debe usarse para fines de diag- nóstico médico ya que no se utiliza material profesional, si no de sensores que en su mayoría están pensados para otro propósito y han sido adaptados, es decir, no se garantiza fiabilidad en los resultados. Por ello y para que se trate de un sistema, además de funcional, también fiable, deberían usarse sensores profe- sionales desarrollados para este fin y que dispongan de una calidad garantizada. En resumen y a pesar de las dificultades, se ha logrado realizar el proyec- to planteado, lo que nos ha permitido ampliar y plasmar los conocimientos adquiridos en esta etapa haciéndonos sentir con ello muy satisfechos. 49 Capítulo 7 Results and conclusions 7.1. Results As a result of the work, a compact monitor has been obtained that meets the objectives initially marked. In the following image we can see the result of the work implementation using a tablet connected to the Raspberry by VNC. Figura 7.1: Project overview 50 The monitor is able to show a graph of the electrocardiogram in real time as well as the corresponding BPM. You can measure the CO2 levels in exhaled air and display a graph of it. Controls body temperature. In this case, in the face of sudden changes, the response time is longer, but it keeps stable readings. It allows to monitor the electrodermal activity. In addition to the graph it indicates if the electrodes are connected, if it is in normal values and an alert in case of detecting high sweat values. Finally, all the sensors are coupled to a single Arduino board. Graphical interface execution through a Raspberry which makes it more compact and allows to connect through VNC or connecting a monitor. Among the possible cases of use applied to reality is the monitoring of biomedical signals with which a possible anomaly or a state of stress can be detected in an individual. As it is a fairly compact device compared to pro- fessional medical devices, it may be an option where an anomaly can cause a serious problem. An example where similar devices are used is in fighter pilots of the Spanish army, and could be extrapolated to other areas such as Formula 1. 51 7.2. Conclusions Once the development of the project is finished, the moment arrives to make an assessment of what has been achieved and what has been learned. The objective of this project was to implement different devices that obtain biomedical signals, which we can affirm has been achieved by measuring a total of four signals. In addition, it has been possible to unify the connection of all the sensors in a single board and a graphic interface has been developed that facilitates the visualization of the data. As a result, knowledge on the subject of embedded systems has been expan- ded, as well as their capabilities and possible uses in other areas. Although it is a functional system, it should not be used for medical diagnos- tic purposes since it does not use professional material, but rather sensors that are mostly intended for another purpose and have been adapted. This means that reliability is not guaranteed in the results. For this reason and for it to be a system, as well as functional, also reliable, professional sensors developed for this purpose and with guaranteed quality should be used. In summary and despite the difficulties, it has been possible to carry out the proposed project, which has allowed us to expand and capture the knowledge acquired in this stage, making us feel very satisfied with it. 52 Bibliografía [1] Sparkfun, AD8232 Heart Rate Monitor Hookup Guide. [2] He Instruments | TechPatient Cardio. [3] Genomasur.com, Capítulo 14: Sistema Respiratorio. [4] Raspberry Pi 3 Model B+. [5] Introduction to Arduino Nano, www.theengineeringprojects.com. [6] Trastornos de la temperatura corporal, 2007. [7] La capnografía en los servicios de emergencia médica — www.elsevier.es, 2009. [8] Capnografía, la evolución en la monitorización del paciente crítico, 2013. [9] GSR con Adruino, 2017. [10] Capnografía — Wikipedia, The Free Encyclopedia, 2019. [11] Electrocardiograma — Wikipedia, The Free Encyclopedia, 2019. [12] Luis del Valle. ds18b20 sensor de temperatura para líquidos con arduino. programarfacil.com, 2018. [13] Gregorio Patón Morales y Jorge Sánchez Carro Luis Barrado Mu- ñoz, Santiago Barroso Matilla. capnografía, la evolución en la monitorización del paciente crítico. zonates.com, 2013. [14] Inc Maxim Integrated Products. DS18B20 Datasheet Sonda de temperatura, 2018. [15] Dr. F. Javier Montero Pérez. APRENDER A INTERPRETAR EL ELEC- TROCARDIOGRAMA. ELSEVIER, 2015. 53 https://learn.sparkfun.com/tutorials/ad8232-heart-rate-monitor-hookup-guide/all https://www.heinstruments.com/tpcv4-ecg-simulator.html http://www.genomasur.com/BCH/BCH_libro/capitulo_14.htm https://www.raspberrypi.org/products/raspberry-pi-3-model-b-plus/ https://www.theengineeringprojects.com/2018/06/introduction-to-arduino-nano.html https://www.elsevier.es/es-revista-offarm-4-articulo-trastornos-temperatura-corporal-13108301 https://www.elsevier.es/es-revista-semergen-medicina-familia-40-articulo-la-capnografia-los-servicios-emergencia-13135238 http://media.zonates.com/02-01/PDF/7-Capnografia.pdf http://thomaskosch.com/index.php/2017/12/17/galvanic-skin-response-powered-by-arduino/ https://es.wikipedia.org/wiki/Capnograf%C3%ADa https://es.wikipedia.org/wiki/Electrocardiograma https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ https://programarfacil.com/blog/arduino-blog/ds18b20-sensor-temperatura-arduino/ http://www.zonates.com/es/revista-zona-tes/menu-revista/numeros-anteriores/vol-2--num-1--enero-marzo-2013/articulos/capnografia,-la-evolucion-en-la-monitorizacion-del-paciente-critico.aspx http://www.zonates.com/es/revista-zona-tes/menu-revista/numeros-anteriores/vol-2--num-1--enero-marzo-2013/articulos/capnografia,-la-evolucion-en-la-monitorizacion-del-paciente-critico.aspx https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf [16] SprintIR. SprintIRTM Datasheet High Speed Carbon Dioxide Sensor. [17] SprintIR. GSS Sensor User’s Manua. [18] Cristian Veloso. www.electrontools.com, ARDUINO UNO PINOUT DIA- GRAMA. 2016. 54 http://co2meters.com/Documentation/Datasheets/DS_GC_0017_18_Revised8.pdf http://co2meters.com/Documentation/Datasheets/DS_GC_0017_18_Revised8.pdf http://co2meters.com/Documentation/Manuals/Manual_GSS_Cozir_SprintIR_LP_GSS_Revised8.pdf https://www.electrontools.com/Home/WP/2016/06/14/arduino-uno-pinout-diagramas/ https://www.electrontools.com/Home/WP/2016/06/14/arduino-uno-pinout-diagramas/ Apéndice A Código fuente del programa para Arduino 1 2 #inc lude 3 #inc lude 4 #inc lude 5 // so f tware s e r i e : RX = pin d i g i t a l 10 , TX = pin d i g i t a l 11 6 So f twa r eSe r i a l portOne (10 , 11) ; 7 char bu f f e r [ 5 0 ] ; 8 i n t co2 = 0 ; 9 10 //Temperatura 11 f l o a t temp = 0 ; 12 OneWire ourWire (2 ) ; //Se e s t ab l e c e e l pin 2 como bus OneWire 13 DallasTemperature s en so r s (&ourWire ) ; 14 15 //ECG 16 i n t _ecg = 350 ; // va lo r base 17 18 //EDA 19 i n t eda = 0 ; 20 21 void setup ( ) { 22 delay (1000) ; 23 S e r i a l . begin (9600) ; 24 //CO2 25 portOne . begin (9600) ; // Star t so f tware s e r i a l port 26 //Temperatura 27 s en so r s . begin ( ) ; //Se i n i c i a e l s enso r 28 } 29 30 void loop ( ) { 31 //Temperatura 32 s en so r s . requestTemperatures ( ) ; 33 temp = sen so r s . getTempCByIndex (0 ) ; 55 34 //EDA 35 eda = analogRead (A3) ; 36 //CO2 37 portOne . l i s t e n ( ) ; 38 // Lectura de r e spue s ta s e r i a l 39 // empty bu f f e r 40 bu f f e r [ 0 ] = ’ \0 ’ ; 41 42 /∗∗ 43 ∗ El senso r de CO2 t i e n e mayor re ta rdo por su comunicacion pa r a l e l a 44 ∗ y a l no tener opcion de mult iproceso , ocas iona que se r e t r a s e l a obtenc ion 45 ∗ de datos de l r e s t o de sensore s , unicamente r e l e van t e para e l ECG, por l o que 46 ∗ se i n t e r c a l a su e j e cu c i on en l a espera de l s en so r de CO2, obteniendo un r e su l t ado 47 ∗ de mayor cont inu idad de l ECG. 48 ∗∗/ 49 f o r ( i n t i = 0 ; i <=50; i++){ 50 _ecg = analogRead (A0) ; 51 showData ( ) ; 52 delay (1 ) ; 53 } 54 i n t idx = 0 ; 55 whi le ( portOne . a v a i l a b l e ( ) ) { 56 bu f f e r [ idx++] = portOne . read ( ) ; 57 } 58 bu f f e r [ idx ] = ’ \0 ’ ; 59 co2 = a to i (&bu f f e r [ 3 ] ) ; 60 61 // pide medida 62 portOne . p r i n t ( "Z" ) ; 63 portOne . p r i n t ( "\ r \n" ) ; 64 65 _ecg = analogRead (A0) ; 66 showData ( ) ; 67 } 68 69 void showData ( ) { 70 S e r i a l . p r i n t (_ecg ) ; 71 S e r i a l . p r i n t ( " , " ) ; 72 S e r i a l . p r i n t ( temp) ; 73 S e r i a l . p r i n t ( " , " ) ; 74 S e r i a l . p r i n t ( co2 ) ; 75 S e r i a l . p r i n t ( " , " ) ; 76 S e r i a l . p r i n t l n ( eda ) ; 77 } 56 Apéndice B Código fuente de la interfaz gráfica 1 import p ro c e s s i ng . s e r i a l . ∗ ; 2 3 S e r i a l myPort ; // The s e r i a l port 4 5 // panta l l a 6 s t a t i c f i n a l i n t screenH = 600 ; 7 s t a t i c f i n a l i n t screenW = 800 ; 8 9 // cuadrante , posX , posY , va l o r min y max de l a v a r i ab l e 10 Cuadrante c1 = new Cuadrante (1 , screenW /2 , screenH /2 , 100 , 700) ; 11 Cuadrante c2 = new Cuadrante (2 , 0 , screenH /2 , 20 , 60) ; 12 Cuadrante c3 = new Cuadrante (3 , 0 , 0 , 0 , 1000) ; 13 Cuadrante c4 = new Cuadrante (4 , screenW /2 , 0 , 0 , 200) ; 14 PFont font ; 15 16 // c a l c u l o BPM 17 f l o a t currentBPM=0; 18 i n t beat_old = 0 ; 19 f l o a t th r e sho ld = 440 . 0 ; // Threshold at which BPM ca l c u l a t i o n occurs 20 boolean belowThreshold = true ; 21 22 void setup ( ) { 23 // s e t the window s i z e : 24 s i z e (800 , 600) ; 25 26 // L i s t a l l the a v a i l a b l e s e r i a l por t s 27 p r i n t l n ( S e r i a l . l i s t ( ) ) ; 28 // Open whatever port i s the one you ’ re us ing . 29 myPort = new S e r i a l ( th i s , S e r i a l . l i s t ( ) [ 0 ] , 9600) ; 30 // don ’ t generate a s e r i a lEven t ( ) un l e s s you get a newl ine cha rac t e r : 31 myPort . bu f f e rUn t i l ( ’ \n ’ ) ; 32 // c o l o r fondo negro 33 background (0) ; 34 // c o l o r l i n e a s b lancas 35 s t r oke (0 x f f ) ; 36 f ont = createFont ( " Ar i a l " , 12 , t rue ) ; 57 37 // font = createFont (" S e r i f . bold " , 12 , t rue ) ; 38 } 39 40 41 void draw ( ) { 42 // d i v i s i o n panta l l a 43 l i n e (0 , screenH /2 , screenW , screenH /2) ; 44 l i n e ( screenW/2 , 0 , screenW /2 , screenH ) ; 45 46 i f ( myPort . a v a i l a b l e ( ) > 0) { 47 St r ing i nS t r i n g = myPort . r eadSt r i ngUnt i l ( ’ \n ’ ) ; 48 49 i f ( i nS t r i n g != nu l l ) 50 { 51 // trim o f f any whitespace : 52 i nS t r i n g = trim ( i nS t r i n g ) ; 53 St r ing va l o r e s [ ] = s p l i t ( inSt r ing , ’ , ’ ) ; 54 t ry { 55 //ECG 56 calculateBPM ( f l o a t ( v a l o r e s [ 0 ] ) ) ; 57 c1 . update ( f l o a t ( v a l o r e s [ 0 ] ) ) ; 58 c2 . update ( f l o a t ( v a l o r e s [ 1 ] ) ) ; //Temperatura 59 c3 . update ( f l o a t ( v a l o r e s [ 2 ] ) ) ; //CO2 60 c4 . update ( f l o a t ( v a l o r e s [ 3 ] ) ) ; //EDA 61 } catch ( Exception e ) { 62 p r i n t l n ( "Error de l e c t u r a " ) ; 63 } 64 } 65 } 66 c1 . drawLine ( ) ; 67 c2 . drawLine ( ) ; 68 c3 . drawLine ( ) ; 69 c4 . drawLine ( ) ; 70 71 c1 . drawScale ( ) ; 72 c2 . drawScale ( ) ; 73 c3 . drawScale ( ) ; 74 c4 . drawScale ( ) ; 75 76 c1 . drawData ( ) ; 77 c2 . drawData ( ) ; 78 c3 . drawData ( ) ; 79 c4 . drawData ( ) ; 80 81 delay (1 ) ; 82 } 83 84 85 void calculateBPM ( f l o a t va lue ) { 86 i f ( va lue > thre sho ld && belowThreshold == true ) 87 { 58 88 i n t beat_new = m i l l i s ( ) ; // get the cur rent m i l l i s e c ond 89 i n t d i f f = beat_new − beat_old ; // f i nd the time between the l a s t two beats 90 currentBPM = 60000 / d i f f ; // convert to beats per minute 91 beat_old = beat_new ; 92 belowThreshold = f a l s e ; 93 } 94 e l s e i f ( va lue < thre sho ld ) 95 { 96 belowThreshold = true ; 97 } 98 } 99 100 101 102 pub l i c c l a s s Cuadrante { 103 i n t cuadrante =0; //numero de cuadrante 104 i n t posX=0; //pos X de l cuadrante 105 i n t posY=0; //pos Y de l cuadrante 106 i n t time=0; // l i n e a de tiempo en pos X 107 f l o a t va lue =0; //Valor s ena l e s ca l ado ( pos Y) 108 f l o a t old_value=0;// va l o r an t e r i o r s ena l e s ca l ado ( pos Y) 109 f l o a t data ; //Valor o r i g i n a l de l a s ena l 110 i n t min , max ; // va l o r e s maximos y minimos de l a s ena l 111 112 Cuadrante ( i n t _cuadrante , i n t _posX , i n t _posY , i n t _min , i n t _max) { 113 cuadrante = _cuadrante ; 114 value = 0 ; 115 old_value = 0 ; 116 posX = _posX ; 117 posY = _posY ; 118 time = posX ; 119 min =_min ; 120 max = _max; 121 } 122 void update ( f l o a t _data ) { 123 i f (_data<=max && _data>=min 124 ) { 125 old_value = value ; 126 t ry { 127 value = map(_data , min , max , 0 , 300) ; // Esca la va l o r 128 } catch ( Exception e ) { 129 p r i n t l n ( "Error de l e c t u r a " ) ; 130 } 131 data = _data ; 132 } 133 } 134 void drawLine ( ) { 135 switch ( cuadrante ) { 136 case 1 : 137 s t r oke (240 , 50 , 0) ; 59 138 break ; 139 case 2 : 140 s t r oke (0 , 255 , 255) ; 141 break ; 142 case 3 : 143 s t r oke (0 , 255 , 0) ; 144 break ; 145 case 4 : 146 s t r oke (255 , 255 , 0) ; 147 break ; 148 } 149 l i n e ( time−1, screenH − posY − old_value , time , screenH − posY − value ) ; 150 s t r oke (0 x f f ) ; 151 i f ( time >= posX + screenW/2) { 152 time = posX ; 153 background (0) ; 154 } 155 e l s e { 156 // increment the ho r i z on t a l p o s i t i o n : 157 time++; 158 } 159 } 160 161 void drawData ( ) { 162 163 f i l l ( 0 ) ; 164 r e c t ( posX+screenW/2−90 , ( ( posY−screenH /2) ∗(−1) ) , 90 , 50) ; 165 f i l l (0 x f f ) ; 166 t e x t S i z e (12) ; 167 switch ( cuadrante ) { 168 case 1 : 169 t ex t ( "BPM:\ n"+currentBPM , posX+screenW/2−90+5, ( ( posY−screenH /2) ∗(−1) )+20) ; 170 break ; 171 case 2 : 172 t ex t ( data+"C" , posX+screenW/2−90+5, ( ( posY−screenH /2) ∗(−1) )+20) ; 173 break ; 174 case 3 : 175 t ex t ( data+"ppm" , posX+screenW/2−90+5, ( ( posY−screenH /2) ∗(−1) )+20) ; 176 break ; 177 case 4 : 178 St r ing s t a t e="" ; 179 i f ( data <10){ 180 s t a t e="Disconnected " ; 181 } e l s e i f ( data>10 && data <75){ 182 s t a t e="OK" ; 183 } e l s e { 184 s t a t e="Warning ! " ; 185 } 186 t ex t ( s t a t e+"\n"+data , posX+screenW/2−90+5, ( ( posY−screenH /2) ∗(−1) ) +20) ; 60 187 break ; 188 } 189 } 190 void drawScale ( ) { 191 i n t div = 8 ; //numero de d i v i s i o n e s en l a e s c a l a 192 f l o a t va l o r = min ; 193 f o r ( i n t i=screenH−posY ; i>screenH/2−posY ; i−=screenH /2/ div ) { 194 l i n e ( posX+18, i , posX+22, i ) ; 195 textFont ( f ont ) ; 196 t e x t S i z e (9 ) ; 197 t ex t ( pa r s e In t ( va l o r ) , posX , i +3) ; 198 va lo r += (max−min) / div ; 199 } 200 } 201 } 61 Portada Acknowledgements Resumen Abstract Índice List of Figures Introducción Motivación Objetivos Plan de trabajo Introduction Motivation Objectives Workplan Antecedentes Electrocardiograma Derivaciones cardiacas del Electrocardiograma Interpretación de un electrocardiograma Capnografía ¿Qué es la capnografía? Intercambio de gases en la respiración Usos clínicos de la capnografía Temperatura corporal Patologías por incremento de la temperatura corporal Patologías por descenso de la temperatura corporal Actividad electrodérmica (EDA) y conductancia de la piel Entorno de desarrollo Entorno Hardware Arduino Uno Arduino Nano Raspberry Pi 3 b+ Monitor de frecuencia cardíaca AD8232 TechPatient CARDIO ECG Simulator ExplorIR-W CO2 Sensor Sonda de temperatura DS18b20 Entorno Software Arduino IDE Fritzing Processing IDE Desarrollo Desarrollo de electrocardiograma Componentes Esquema de montaje Resultados Desarrollo de monitor de CO2 Componentes Esquema de montaje Resultados Desarrollo de sensor de temperatura Componentes Esquema de montaje Librerías Resultados Desarrollo de sensor de actividad electrodérmica (EDA) Componentes Esquema de montaje Resultados Acoplar los sensores en una sola placa Esquema de montaje Desarrollo de interfaz gráfica Resultados y conclusiones Resultados Conclusiones Results and conclusions Results Conclusions Bibliography Código fuente del programa para Arduino Código fuente de la interfaz gráfica