Proyecto Fin de Carrera Ingeniería de Telecomunicación Diseño e Implementación de un Dispositivo para la Detección de la Oxigenación en Sangre Autor: Luis Manuel Moreno Moruno Tutor: Laura M. Roa Romero Departamento de Ingeniería de Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2015 Proyecto Fin de Carrera Ingeniería de Telecomunicación Diseño e Implementación de un Dispositivo para la Detección de la Oxigenación en Sangre Autor: Luis Manuel Moreno Moruno Tutor: Laura M. Roa Romero Catedrática de Universidad Departamento de Ingeniería de Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2015 iii Proyecto Fin de Carrera: Diseño e Implementación de un Dispositivo para la Detección de la Oxigenación en Sangre Autor: Luis Manuel Moreno Moruno Tutor: Laura M. Roa Romero El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros: Presidente: Vocales: Secretario: Acuerdan otorgarle la calificación de: Sevilla, 2015 El Secretario del Tribunal v Agradecimientos Combinar la realización de este proyecto y la presente memoria con un trabajo a jornada completa que requiere mucha dedicación ha sido una complicada tarea que no podría haber llevado a cabo si no fuese por las personas que de forma directa o indirecta han colaborado conmigo. Por esta razón, me gustaría aprovechar para mostrar mi gratitud a estas personas que de alguna forma me han ayudado en este proceso. En especial al que ha sido mi tutor, David Naranjo, por todo su apoyo, su ayuda y, sobretodo, por el tiempo de su trabajo que ha dedicado en atender al mío, que no ha sido poco. Agradecerle también por todo lo que he aprendido en este tiempo. También a la Profesora Laura M. Roa Romero, por haberme dado la oportunidad de realizar este proyecto. Quisiera dedicar este proyecto a toda mi familia. A mis padres, Mariano y Paqui, a quienes en gran parte les debo haber conseguido ser lo que soy hoy en día, y por su incondicional apoyo, comprensión , esfuerzo y cariño. A Lucía, por haber sido mi confidente en muchas ocasiones, por reírme las gracias y por ser como es. A Nacho, por estar siempre ahí, por su ánimo, por su paciencia y por su increíble capacidad para sacar tiempo de su agitada vida para ayudarme siempre que lo he necesitado. Por último, y aunque no sean personas, sería injusto no mencionar a mis gatos, Neus y Richard, que siempre me acompañan y que, con lo aburrido que debe resultarles, no se han separado de mi mientras escribía esta memoria. Gracias también al resto de mi familia y a mis amigos, que me ofrecen los momentos de desconexión y diversión. A todos vosotros, mi mayor gratitud. vii Resumen Los signos vitales son mediciones de las funciones más básicas del cuerpo. Constituyen una herramienta de gran valor como indicadores del estado funcional de una persona, reflejando el estado fisiológico de los órganos vitales y expresando de forma inmediata los cambios funcionales en el organismo. Dos de los signos vitales más importantes son la frecuencia cardíaca y el nivel de oxigenación de la sangre. El propósito y objetivo de este proyecto es conseguir realizar una medición no invasiva y en tiempo real de estos signos vitales. Para conseguir que el sistema no sea invasivo se ha empleado una técnica de transmisión y recepción de dos señales con diferente longitud de onda a través del dedo, basada en la ley de Beer-Lambert y utilizando una técnica de cálculo conocida como “absorción delta” la cual difiere de la técnica estándar y que permitirá reducir los recursos software empleados. Para el desarrollo del primer prototipo del sensor de pulsioximetría se ha propuesto la utilización de un sistema de hardware y software libre, plataforma abierta Arduino, que será la base para obtener prestaciones como reducción del coste del dispositivo, modularidad y portabilidad del dispositivo. Este primer prototipo ha sido validado en primer lugar desde el punto de vista técnico, analizando la adecuación de las diferentes señales que conforman el proceso de detección respecto a los resultados esperados. También ha sido validado de forma funcional comparando los resultados obtenidos respecto a un dispositivo comercial estándar para la medida de la saturación de oxígeno en sangre y la frecuencia cardíaca, lo que pone de manifiesto la viabilidad del método y la técnica empleada. ix Índice Agradecimientos ............................................................................................................................... vii Resumen ............................................................................................................................................... ix Índice ..................................................................................................................................................... xi Índice de Figuras ............................................................................................................................. xiv Índice de Tablas .............................................................................................................................. xvii 1 Introducción ................................................................................................................................. 1 1.1 Objetivos .......................................................................................................................................................... 4 1.2 Estructura del proyecto ............................................................................................................................ 5 2 Fundamentos Médicos del Proyecto ..................................................................................... 6 2.1 HISTORIA ........................................................................................................................................................ 6 2.1.1 Gasometría arterial ...................................................................................................................... 6 2.1.2 Antecedentes históricos ............................................................................................................ 7 2.2 CONCEPTOS BÁSICOS ................................................................................................................................ 7 2.2.1 Oxígeno ............................................................................................................................................. 7 2.2.2 La sangre .......................................................................................................................................... 7 2.2.3 Hemoglobina .................................................................................................................................. 8 2.2.4 Pulso cardíaco ................................................................................................................................ 9 2.2.5 Oxigenación tisular ................................................................................................................... 10 2.2.6 Intercambio de oxígeno y dióxido de carbono .............................................................. 10 2.2.7 Transporte de oxígeno y dióxido de carbono en la sangre ...................................... 12 3 Fundamentos Científicos y Tecnológicos del Proyecto ................................................ 14 3.1 LEY DE BEER-­‐LAMBERT ....................................................................................................................... 15 3.1.1 Medida pulsátil ........................................................................................................................... 17 3.2 CÁLCULO DE LA SATURACIÓN DE OXÍGENO ............................................................................... 18 3.2.1 Métodos para calcular R ......................................................................................................... 21 4 Materiales y Métodos ............................................................................................................... 24 5 Resultados ................................................................................................................................... 27 5.1 INVESTIGACIÓN Y DESARROLLO DEL PROTOTIPO DE PULSIOXÍMETRO ...................... 27 5.1.1 Sensor Óptico .............................................................................................................................. 28 5.1.2 Microcontrolador ...................................................................................................................... 30 5.1.3 Circuito acondicionador de la señal .................................................................................. 31 5.1.4 Procesado software de las señales ..................................................................................... 42 5.2 EXPERIMENTOS DE VALIDACIÓN DEL PULSIOXÍMETRO ..................................................... 50 5.2.1 Validación técnica en laboratorio ....................................................................................... 50 5.2.2 Validación técnica en Arduino ............................................................................................. 55 5.2.3 Validación funcional del prototipo ..................................................................................... 57 6 Conclusiones ............................................................................................................................... 60 Bibliografía ......................................................................................................................................... 63 xi Anexos .................................................................................................................................................. 66 ANEXO A: CÓDIGOS DE PROGRAMACIÓN ................................................................................................. 66 § Código en Arduino para digitalización de una señal pulsátil ......................................... 66 § Código en Arduino para digitalización de dos señales pulsátiles ................................. 67 § Código en Arduino completo para cálculo de pulso cardíaco y saturación de oxígeno (método de absorción delta) .............................................................................................. 68 § Código en Arduino completo para cálculo de pulso cardíaco y saturación de oxígeno (método de picos y valles) ................................................................................................... 70 ANEXO B: Data Sheet LED rojo (LUMEX SSL-­‐LXA228SRC-­‐TR11) .................................................. 73 ANEXO C: Data Sheet LED infrarrojo (SHARP GL100MN1MP1) .................................................... 74 ANEXO C: Data Sheet fotodetector (OSRAM BP104S-­‐Z) .................................................................... 76 ANEXO D: Data Sheet Amplificador Operacional (LM1458) ............................................................ 80 ANEXO E: Data Sheet Interruptor Electrónico (TS5A1066DBVR) ................................................. 84 ANEXO F: Especificaciones técnicas Arduino Nano .............................................................................. 86 § Arduino Nano 3.0: Alimentación ................................................................................................ 86 § Arduino Nano 3.0: Memoria ......................................................................................................... 87 § Arduino Nano 3.0: Entrada y Salida .......................................................................................... 87 § Arduino Nano 3.0: Comunicación ............................................................................................... 88 § Arduino Nano 3.0: Reset Automático ....................................................................................... 89 Índice de Figuras Ilustración 2.1 Hemoglobina Ilustración 2.2 Sistema de conducción eléctrica del corazón Ilustración 2.3 Fisiología de la circulación pulmonar Ilustración 2.4 Curva de disociación del oxígeno en la hemoglobina Ilustración 2.5 Hemo, molécula de hemoglobina y glóbulo rojo Ilustración 3.1 Absorción de la luz transmitida a través de los tejidos Ilustración 3.2 Absorción de luz en función de la concentración de Hb Ilustración 3.3 Absorción de luz en función de la longitud del recorrido Ilustración 3.4 Absorción de HbO2 y RHb para diferentes longitudes de onda Ilustración 3.5 Absorción de luz debida a la sangre arterial pulsátil y a los tejidos circundantes Ilustración 3.6 Ley de Beer-Lambert Ilustración 3.7 Transmisión de luz durante la medición pletismográfica Ilustración 3.8 Método de picos y valles Ilustración 3.9 Curva de calibración Ilustración 5.1 Diagrama de bloques del pulsioxímetro Ilustración 5.2 Esquema del sensor óptico Ilustración 5.3 Arduino Nano Ilustración 5.4 Esquemático conexión LEDs emisores y fotodetector Ilustración 5.5 Señal recibida del LED rojo antes y después de interponer el dedo entre LED emisor y fotodetector Ilustración 5.6 Señal recibida del LED rojo con el dedo interpuesto entre emisor y fotodetector Ilustración 5.7 Circuito LED emisor Ilustración 5.8 Circuito conversor corriente a voltaje Ilustración 5.9 Circuito filtro paso banda Ilustración 5.10 Amplificador no inversor Ilustración 5.11 Circuito acondicionador de la señal Ilustración 5.12 Encendido de los LEDs emisores Ilustración 5.13 Circuito Sample & Hold Ilustración 5.14 Circuito para obtención de señales roja e infrarroja Ilustración 5.15 Placas de circuito impreso para el sensor óptico Ilustración 5.16 Placa de circuito impreso del circuito analógico para una de las dos longitudes de onda Ilustración 5.17 Circuito Sample & Hold Ilustración 5.18 Duración de un pulso cardíaco Ilustración 5.19 Medición de período de la señal roja Ilustración 5.20 Circuito conversor corriente a voltaje xiv 8 9 10 11 12 14 15 16 17 18 19 20 21 22 27 28 31 32 32 33 34 34 35 36 37 38 39 40 40 41 44 45 46 51 Ilustración 5.21 Señal obtenida en osciloscopio tras conversor de corriente a voltaje Ilustración 5.22 Circuito filtro paso banda Ilustración 5.23 Señal obtenida en osciloscopio tras filtro paso bajo Ilustración 5.24 Señal obtenida en osciloscopio tras filtro paso alto Ilustración 5.25 Etapa amplificadora: ganancia 101 Ilustración 5.26 Señal obtenida en osciloscopio tras etapa amplificadora Ilustración 5.27 Señal pulsátil digitalizada por Arduino (LED rojo encendido) Ilustración 5.28 Señal pulsátil digitalizada por Arduino (LED infrarrojo encendido) Ilustración 5.29 Señales pulsátiles roja e infrarroja digitalizadas por Arduino Ilustración 5.30 Valores obtenidos de pulso cardíaco y porcentaje saturación de oxígeno indiviuo 1 Ilustración 5.31 Valores obtenidos de pulso cardíaco y porcentaje saturación de oxígeno individuo 2 Ilustración A.1 Placa Arduino Nano 3.0 Ilustración A.2 Pines del Arduino Nano xv 51 52 52 53 54 54 55 56 56 57 58 86 88 Índice de Tablas Tabla 2.1 Valores de frecuencia cardíaca en reposo Tabla 5.1 Comparativa entre prototipo diseñado y dispositivo comercial Tabla 5.2 Tabla de precios de componentes Tabla 5.3 Comparativa de pulsioxímetros de mercado xvii 9 58 59 59 1 Introducción 1 Introducción La pulsioximetría es la medición de la saturación de oxígeno en sangre de forma no invasiva (1). Este método permite detectar hipoxemia arterial (disminución de la presión de oxígeno arterial). Estos dispositivos se utilizan generalmente para el diagnóstico de la apnea del sueño y enfermedades respiratorias tales como la neumonía, asma, enfermedad pulmonar obstructiva crónica (EPOC), bronquitis crónica, enfisema pulmonar, insuficiencia cardíaca congestiva y edema pulmonar (2). Tradicionalmente se ha utilizado la oximetría de pulso durante la anestesia general y se recomienda como una herramienta importante para recién nacidos y para el control de pacientes que estén siendo sometidos a cirugía (3). También para la detección de la hipoxemia inducida por el ejercicio en los atletas para evaluar el grado de desaturación arterial de oxígeno (4). La oximetría de pulso es un avance tecnológico relativamente nuevo, desarrollado para uso médico durante los últimos 30 años. Desde su introducción para la monitorización preoperatoria se ha convertido en un estándar de cuidado, por mandato de organismos como la Organización Mundial de la Salud (5). La pulsioximetría ha sido adoptada como un estándar de control y atención cardiovascular no invasivo debido a que es un método muy útil para evaluar la gravedad de la enfermedad y el control eficaz de las intervenciones terapéuticas. La presión parcial de oxígeno en sangre es un valor dependiente de la edad que varía de 100 mm/Hg a la edad de 20 años a aproximadamente 80 mm/Hg a la edad de 80 años a nivel del mar (6). En individuos sin enfermedades cardiopulmonares o anemia, no hay efectos clínicos notables hasta que la presión de oxígeno cae por debajo de 50 o 60 mm/hg, o por debajo de niveles de saturación de oxígeno en sangre del 85% o 90% (7). Por el contrario, si los pacientes tienen algún tipo de limitación cardiopulmonar o anemia, los efectos negativos de la hipoxemia se expresan a niveles más altos de la saturación de oxígeno. Las enfermedades no transmisibles son la principal causa de mortalidad en todo el mundo, se cobran más vidas que todas las demás causas combinadas. Las principales enfermedades no transmisibles son las cardiovasculares y las enfermedades pulmonares crónicas. El mayor ritmo de aumento de estas enfermedades corresponde a países subdesarrollados o en vías de desarrollo, en los que suponen enormes costos en términos humanos, sociales y económicos (8). Este tipo de enfermedades se deben en su mayor parte a cuatro factores de riesgo relacionados con el estilo de vida actual, que se han ido afianzando de forma generalizada como parte de los rápidos procesos de urbanización y los modos de vida del siglo XXI: el consumo de tabaco, malas dietas, inactividad física y el consumo abusivo del alcohol. Aproximadamente un cuarto de las muertes que se producen en el mundo están causadas por enfermedades cardíacas o respiratorias, según un informe de la Organización Mundial de la Salud (9). El porcentaje de muertes causadas por este tipo de enfermedades va en aumento y se prevé que en 2030, este tipo de enfermedades sean las causantes de tres de cada cuatro muertes. Enfermedades respiratorias como la EPOC 2 Introducción representan un grave problema de salud pública debido a que van en aumento principalmente a causa de un mayor consumo del tabaco. En 1990 la EPOC era la sexta causa de muerte y se prevé que sea la cuarta en 2030 (10). En muchos países subdesarrollados y en vías de desarrollo no se proporciona una atención adecuada a las personas con enfermedades crónicas por el acceso limitado a los medicamentos y a las tecnologías. También en los países desarrollados, cuyos sistemas sanitarios están llegando a límites insostenibles en términos económicos, ya que una población envejecida supone menos ingresos, a la vez que provoca más gastos. De ahí la importancia de fortalecer los sistemas de salud para conseguir que sean eficaces, económicos y accesibles a todo el mundo. Para conseguir una mejora en la salud de la ciudadanía y en su bienestar, se están realizando grandes avances en eSalud. El término eSalud hace referencia a la aplicación de las Tecnologías de la Información y Comunicación (TIC’s) a todos aquellos aspectos que afectan al cuidado de la salud, incluyendo el diagnóstico, el seguimiento de los pacientes y la gestión de las organizaciones implicadas en estas actividades (11). Gracias al nacimiento y aplicación de la eSalud, los pacientes tienen la oportunidad de acceder a la atención médica con independencia del lugar en el que se encuentren. De esta manera, se fomenta la prevención, el bienestar y la vida independiente y autónoma de las personas (12). Asimismo, supone un ahorro de costes y un aumento de la eficacia de los sistemas sanitarios, contribuyendo a impulsar la calidad asistencial, reduciendo los tiempos de respuesta y diagnóstico de los facultativos, mejorando la efectividad terapéutica y la implantación de alertas (13). En este sentido, los sistemas de eSalud junto a los dispositivos sensores inteligentes que permiten la supervisión en tiempo real de parámetros clínicos relevantes se consideran como un enfoque prometedor para la prevención y tratamiento de las enfermedades respiratorias (14), motivando a los pacientes a adoptar habilidades para su autotratamiento, mejorando así su calidad de vida y, por lo tanto, minimizando los costes en salud pública (15). Estudios demuestran que cuando los pacientes con enfermedades respiratorias como la EPOC son monitorizados de forma remota, los ingresos hospitalarios decrecen hasta en un 50% y los costes de hospitalización disminuyen un 17%, incluso incluyendo en éstos los costes asociados a la monitorización (16). Actualmente, los sistemas de eSalud se encuentran con un cuello de botella a la hora de implantarse: la sensorización biomédica (17). Los principales problemas que se encuentran hoy en día en este tipo de sensores son conseguir la portabilidad de los mismos, el uso sencillo y no obstructivo para el paciente y el consumo energético. Estos sistemas de eSalud tienden a un proceso de parametrización global, es decir, a tener la capacidad para obtener parámetros indicadores del entorno integral de salud de las pacientes y de su contexto vital (18). En un proceso de parametrización global, los indicadores paramétricos de salud son captados a través de sensores o redes de sensores, con sus áreas de actuación, comunicación, análisis y valoración, haciendo más sencillo el automatismo de las decisiones y actuaciones. Los sensores pueden operar bien de forma individualizada, o bien como redes de sensores, pudiendo un solo sensor obtener múltiples parámetros incluso de forma simultánea. La parametrización de estos indicadores permite que cuando estén fuera del 3 Introducción rango considerado normal puedan desencadenar actuaciones de alarma y demanda de intervención médica asistencial. Los dispositivos médicos portátiles deben ser capaces de vigilar de forma continuada los signos vitales de una persona en tiempo real. Este tipo de dispositivos se vuelven más importantes debido a que la población mundial está envejeciéndose y requiere que sus condiciones de salud sean evaluadas de forma constante o permanente (19). Las tres cuartas partes de las muertes por enfermedades crónicas cardiovasculares o pulmonares, se producen en personas mayores de 60 años, esto unido al envejecimiento cada vez mayor de la población, obliga a desarrollar dispositivos que sean de pequeño tamaño, fáciles de utilizar y con un consumo energético eficiente para ser utilizados en la vida diaria normal. Sin embargo, el problema actual que encontramos en estos dispositivos es su elevado coste, que en muchas ocasiones lo hace inaccesible para los pacientes o incluso para los sistemas de salud pública. Si además se hace necesario que el dispositivo posea capacidades de comunicación para telemonitorización, el precio del mismo se dispara. Por este motivo, se hace necesaria la investigación para conseguir desarrollar dispositivos con capacidades de comunicación de bajo coste, motivando de esta forma a los sistemas de salud pública y a los propios pacientes a implantarlos. Existe una creciente demanda de dispositivos de pequeño tamaño y bajo coste para ser utilizados, por ejemplo, para el monitoreo de atención domiciliaria para pacientes de avanzada edad o con enfermedades crónicas, por lo que se está convirtiendo en una buena alternativa a la costosa supervisión médica en los hospitales y centros de salud. También se les está buscando otro tipo de utilidades a estos sensores, como por ejemplo en el ámbito militar para la supervisión remota de la salud de los soldados, control de atletas y deportistas, etc. La reducción del consumo de estos sensores así como el tamaño y el coste son factores críticos. De modo que este tipo de dispositivos ofrecen un nuevo grado de independencia para aquellos que necesitan vigilancia frecuente de la salud (21). Los pulsioxímetros son dispositivos capaces de ofrecer información acerca del estado en cada momento de dos importantes parámetros para la salud: el pulso o frecuencia cardíaca y la saturación de oxígeno en sangre. La pulsioximetría es un método rápido y no invasivo para monitorizar la saturación de oxígeno en la sangre de un paciente. Actualmente, se considera éste como uno de los signos vitales más importantes del cuerpo junto a la frecuencia cardíaca. Los oxímetros de pulso proporcionan información anticipada sobre problemas en los sistemas respiratorio y circulatorio (20). De la gama de dispositivos médicos que pueden ser llevados a aplicaciones móviles o portables, el pulsioxímetro es de los más importantes, no sólo porque proporciona dos parámetros de salud extremadamente importantes, sino porque además no requiere contacto eléctrico con el tejido y funcionan muy bien a baja potencia (22). La utilización de la pulsioximetría es recomendable en situaciones en las cuales la oxigenación del paciente puede ser inestable, como en las áreas de cuidados intensivos, áreas de urgencias, anestesia y en atención primaria: • Evaluación inicial rápida de pacientes con patología respiratoria tanto en la consulta normal como urgente. 4 Introducción • • • Monitorización continua durante traslados a hospitales de pacientes inestables por su situación respiratoria y/o hemodinámica. En la atención domiciliaria de pacientes neumológicos. Es útil para valorar la severidad de una crisis asmática y permitir la monitorización continua. Los dispositivos actuales son muy fiables para valores comprendidos entre el 80% y el 100%, pero su fiabilidad disminuye por debajo de estas cifras. El punto crítico que debe dar la señal de alarma es el de saturaciones por debajo del 95% (inferiores al 90% ó 92% cuando existe patología pulmonar crónica previa). Estos pacientes deben recibir tratamiento de forma inmediata, lo que pone de relevancia la utilidad de un sistema de monitorización de pulsioximetría en tiempo real dentro del ámbito de la eSalud. Sin embargo, los dispositivos de mercado carecen de funciones de gestión de los datos, aspecto normalmente limitado por el tamaño y consumo de energía. El envío inalámbrico de la información es otra de las premisas para el desarrollo de un sistema de monitorización en tiempo real, sin embargo, en el mercado existe un número muy limitado de dispositivos capaces de ofrecer estas prestaciones. Además, su implantación práctica en un sistema de salud pública resulta inviable como consecuencia de sus elevados costes. 1.1 Objetivos El objetivo principal de este proyecto es diseñar e implementar un primer prototipo de dispositivo portable que sea capaz de medir el nivel de saturación de oxígeno en la sangre y de calcular la frecuencia cardíaca. El prototipo diseñado es una primera aproximación para tratar de resolver los problemas de sensorización y con capacidades de procesado propias. Para la consecución de este objetivo fundamental, se desarrollarán los siguientes objetivos secundarios: 1. Investigación y desarrollo de una etapa de sensorización sencilla y no invasiva, con hardware simplificado y con las mismas prestaciones que los dispositivos de mercado pero con una importante reducción del coste. El sensor deberá ser apto para el uso por personas con diferentes habilidades físicas y mentales. 2. Diseño del prototipo como un dispositivo autónomo con inteligencia para procesado de las señales biomédicas y cálculo de los parámetros en tiempo real, reduciendo los recursos software y hardware empleados y de bajo consumo. 3. Desarrollo de un sistema de comunicaciones para el prototipo del sensor para la transmisión de la información biomédica en tiempo real, por puerto USB o serie, ofreciendo la posibilidad de comunicaciones inalámbricas WIFI o Bluetooth, siempre bajo la premisa de reducción de costes. 5 Introducción 1.2 Estructura del proyecto Este proyecto está constituido por los siguientes capítulos: § § § § § § Capítulo 1 - Introducción: En el primer capítulo se trata la importancia de evaluar parámetros vitales como el pulso cardíaco y la saturación de oxígeno en sangre, sobre todo en el seguimiento de pacientes con enfermedades pulmonares y mostrando la importancia de la reducción de costes para la vigilancia de la salud. Capítulo 2 – Fundamentos médicos del proyecto: Se explican los principios y fundamentos médicos que afectan a la pulsioximetría. Se realiza una comparación con los antecedentes históricos como la gasometría arterial y se definen los conceptos médicos previos. También se trata acerca de las interpretaciones clínicas de la pulsioximetría. Capítulo 3 – Fundamentos científicos y tecnológicos del proyecto: En este capítulo, se estudian los fundamentos de la pulsioximetría pero desde el punto de vista técnico. Se profundiza en el método de cálculo de la saturación de oxígeno basado en la ley de Beer-Lambert y se explican diversas formas de cálculo de este parámetro: el método de picos y valles y el método de absorción delta. Capítulo 4 – Materiales y métodos: En este capítulo se detalla la metodología empleada para el diseño y la implementación del pulsioxímetro, así como los materiales empleados. Capítulo 5 - Resultados: En una primera parte de este capítulo se detalla el diseño y la implementación del pulsioxímetro dividiéndolo en tres bloques principales: sensor óptico, microcontrolador y circuito acondicionador de la señal. En un primer subapartado se explica el sensor óptico implementado, así como los principios teóricos de las señales que se van a producir. En el segundo subapartado, se trata acerca del microcontrolador elegido para digitalizar y procesar la señal, así como para calcular los parámetros. El último subapartado se centra en el diseño del circuito analógico que pondrá la señal a punto para poder ser interpretada correctamente por el microcontrolador. En la segunda parte de este capítulo se muestran las señales y los resultados obtenidos. Se realizarán las pruebas de validación técnica del dispositivo. Primeramente, se muestran los resultados obtenidos en el laboratorio, utilizando el osciloscopio se valida el funcionamiento del circuito etapa a etapa. Posteriormente, se muestran las señales capturadas y digitalizadas por Arduino, primero se muestra la forma de digitalizar una sola señal y después la forma de digitalizar las dos señales pulsátiles en paralelo, las cuales son la base de la sensorización mediante pulsioximetría. Finalmente se valida el funcionamiento del dispositivo completo comparando los resultados con los de un dispositivo de mercado. Capítulo 6 - Conclusiones: Se muestran las conclusiones del proyecto realizado y posibles líneas de mejoras y ampliaciones. 6 Fundamentos Médicos del Proyecto 2 Fundamentos Médicos del Proyecto 2.1 HISTORIA La pulsioximetría, u oximetría de pulso, es un método de medida no invasivo, que permite obtener el porcentaje de saturación de oxígeno en la hemoglobina de la sangre haciendo uso de métodos fotoeléctricos (23). La medida de la saturación de oxígeno de la hemoglobina se ha convertido en una práctica habitual en diversas áreas de la medicina, como puede ser la anestesia, el cuidado intensivo y terapias respiratorias en pacientes con problemas cardiopulmonares. El oxímetro de pulso nos da información no sólo de la saturación de oxígeno de la hemoglobina (SaO2), si no también de la frecuencia y ritmo cardíaco. El pulso oximétrico suele considerarse la quinta muestra vital, junto al ritmo cardíaco, la presión arterial, la temperatura y la frecuencia respiratoria. 2.1.1 Gasometría arterial Antes de la introducción de la pulsioximetría, la oxigenación de una persona sólo podía ser medida mediante la técnica de gasometría arterial. Ésta es una técnica invasiva que permite, mediante una muestra de sangre arterial, determinar el pH y las presiones parciales de oxígeno y dióxido de carbono. La gasometría requiere tomar una serie de precauciones para obtener unos valores fiables: reposo del paciente de al menos 10 minutos, prohibición de tomar algunos medicamentos o fumar el día de la prueba, realizar la prueba a temperatura conocida y ambiental, etc. Además, los resultados de la gasometría pueden tardar varios minutos, tiempo que puede ser crítico en casos graves de falta de oxigenación. Ventajas de la pulsioximetría frente a la gasometría: • Monitorización instantánea, continua y no invasiva. • Fácil de utilizar. • Fiable en el rango del 80% al 100% de saturación. • Informa acerca de la frecuencia cardíaca y alerta sobre disminuciones en la perfusión de los tejidos. • Técnica barata y con aparatos portátiles manejables. Asequible en atención primaria. Desventajas de la pulsioximetría frente a la gasometría: • La pulsioximetría no informa sobre el pH ni sobre la presión parcial de dióxido de carbono (PaCO2). • No puede detectar hiperoxemia ni hipoventilación. 7 • Fundamentos Médicos del Proyecto Los enfermos críticos suelen tener mala perfusión periférica. 2.1.2 Antecedentes históricos En 1935 Matthes desarrolló el primer dispositivo de longitud de onda para medir la saturación de oxígeno con filtros rojos y verdes, que después fueron sustituidos por filtros rojos e infrarrojos. Este fue el primer dispositivo para la medición de la saturación de oxígeno. En 1949 Wood utilizó una cápsula a presión para exprimir la sangre fuera de la oreja y así obtener la saturación absoluta de oxígeno cuando la sangre era readmitida. Este dispositivo no llegó a ser usado clínicamente. En 1964 Shaw ensambló el primer oxímetro de medición absoluta usando ocho longitudes de onda de luz. Su uso fue limitado a funciones pulmonares y a laboratorios de sueño, debido a su coste y tamaño. La pulsioximetría fue desarrollada en 1974, por Takuo Aoyagi y Michio Kishi, usando la relación de absorción de luz roja a infrarroja de componentes pulsantes en el sitio de medición. Este dispositivo fue comercializado por Biox en 1981. 2.2 CONCEPTOS BÁSICOS 2.2.1 Oxígeno Es un elemento químico que suele presentar la siguiente forma molecular: O2. Es un gas a temperatura ambiente, incoloro e inodoro. La atmósfera terrestre contiene un 20,9% de oxígeno. Participa de forma importante en el ciclo energético de los seres vivos y es esencial en la respiración celular de los organismos aeróbicos (24). 2.2.2 La sangre La sangre es un tejido conectivo líquido, que circula por capilares, venas y arterias de todos los vertebrados. Su color rojo característico es debido a la presencia del pigmento hemoglobínico contenido en los glóbulos rojos. Transporta oxígeno, alimentos y productos de desecho (25). Su función principal es la logística de distribución e integración sistémica, cuya contención en los vasos sanguíneos (espacio vascular) admite su distribución (circulación sanguínea) hacia prácticamente todo el organismo. Es un tipo de tejido conjuntivo especializado, con una matriz coloidal líquida y una constitución compleja. Tiene una fase sólida (elementos formes), que incluye a los eritrocitos (o glóbulos rojos), los leucocitos (o glóbulos blancos) y las plaquetas, y una fase líquida, representada por el plasma sanguíneo. 8 Fundamentos Médicos del Proyecto La sangre se compone de células y componentes extracelulares. Estas dos fracciones tisulares vienen representadas por: • Los elementos formes: son elementos semisólidos y corpúsculos representados por células y componentes derivados de células. • El plasma sanguíneo: un fluido traslúcido y amarillento que representa la matriz extracelular líquida en la que están suspendidos los elementos formes. Este representa un medio isotónico para las células sanguíneas. Los elementos formes constituyen alrededor del 45 % de la sangre. Tal magnitud porcentual se conoce con el nombre de hematocrito. El otro 55 % está representado por el plasma sanguíneo. Los elementos formes de la sangre son variados en tamaño, estructura y función, y se agrupan en: • Las células sanguíneas, que son los glóbulos blancos o leucocitos, células que "están de paso" por la sangre para cumplir su función en otros tejidos; • Los derivados celulares, que no son células estrictamente sino fragmentos celulares; están representados por los eritrocitos y las plaquetas; son los únicos componentes sanguíneos que cumplen sus funciones estrictamente dentro del espacio vascular. 2.2.3 Hemoglobina La hemoglobina (Ilustración 2.1) es una heteroproteína de la sangre, de color rojo característico, que se encarga de transportar el oxígeno en la sangre desde los órganos respiratorios hasta los tejidos y células del organismo, donde lo descarga y recoge el dióxido de carbono para transportarlo hasta los pulmones donde es eliminado. También participa en la regulación del pH (26). Ilustración 2.1 Hemoglobina Tiene una estructura cuaternaria, la cual le confiere las propiedades necesarias para realizar su función. Está formada por cuatro subunidades, cada una de las cuales está formada por un anillo férrico rodeado de una cadena peptídica. La molécula de la hemoglobina tiene cuatro cadenas peptídicas que existen en pares. En la hemoglobina normal de un adulto, dos de estas cadenas son de tipo alfa (α) y dos de tipo beta (β). Cada subunidad puede unirse de forma reversible con una molécula de oxígeno. Cada molécula de hemoglobina puede combinarse con cuatro moléculas de oxígeno como máximo. 9 Fundamentos Médicos del Proyecto Cuando la hemoglobina está unida al oxígeno se denomina oxihemoglobina o hemoglobina oxigenada (HbO2), dándole el aspecto rojo intenso característico de la sangre arterial. Cuando pierde el oxígeno, se llama hemoglobina reducida (Hb), presentando el color rojo oscuro o azulado de la sangre venosa. La diferencia entre la oxihemoglobina (HbO2) y la hemoglobina reducida (RHb) es lo que nos va a permitir calcular la saturación de oxígeno (SaO2). 2.2.4 Pulso cardíaco El pulso cardíaco, o frecuencia cardíaca, es el número de contracciones del corazón o pulsaciones por unidad de tiempo (27). El corazón, mostrado en la Ilustración 2.2 es un músculo miogénico, es decir, se excita a sí mismo, las contracciones rítmicas se producen espontáneamente. El impulso eléctrico que produce la secuencia de contracciones, se inicia en la pared superior de la aurícula derecha. Esta corriente, que es del orden de un microamperio, se transmite a lo largo de las aurículas y pasa a los ventrículos. Ilustración 2.2 Sistema de conducción eléctrica del corazón Debido a este impulso, la sangre se comporta como un fluido pulsátil, lo que nos permite realizar la medida utilizando el pulsioxímetro. A continuación se muestran valores de la frecuencia cardíaca tanto para hombres como para mujeres: Frecuencia cardíaca en reposo para hombres Edad 20-29 30-39 40-49 50-59 60 o más Mala 86 o más 86 o más 90 o más 90 o más 94 o más Normal 70-84 72-84 74-88 74-88 76-90 Buena 62-68 64-70 66-72 68-74 70-76 Muy buena 60 o menos 62 o menos 64 o menos 66 o menos 68 o menos Frecuencia cardíaca en reposo para mujeres Edad 20-29 30-39 40-49 50-59 60 o más Mala 96 o más 98 o más 100 o más 104 o más 108 o más Normal 78-94 80-96 80-98 84-102 88-106 Buena 72-76 72-78 74-78 76-82 78-88 Tabla 2.1 Valores de frecuencia cardíaca en reposo Muy buena 70 o menos 70 o menos 72 o menos 74 o menos 78 o menos 10 Fundamentos Médicos del Proyecto 2.2.5 Oxigenación tisular El transporte de oxígeno es vital para los órganos vivos, continuamente se necesita oxígeno para las reacciones metabólicas que liberan energía a partir de moléculas de nutrientes. Las células morirán en ausencia de suministro de oxígeno. Para entender cómo el oxígeno llega a las células, primero revisaremos cómo se transporta el oxígeno a los tejidos a través de los sistemas circulatorio y respiratorio (28). Ilustración 2.3 Fisiología de la circulación pulmonar La oxigenación de los tejidos puede ser descrita como un proceso en el que los sistemas respiratorio y cardiovascular cooperan para suministrar oxígeno (O2) y eliminar el dióxido de carbono (CO2) en el cuerpo por etapas. En el proceso de oxigenación de los tejidos presentado en la Ilustración 2.3, el sistema respiratorio se encarga del intercambio de gases en el cuerpo (respiración), mientras que el sistema cardiovascular porta el oxígeno y dióxido de carbono en la sangre. 2.2.6 Intercambio de oxígeno y dióxido de carbono En el proceso de oxigenación de los tejidos, la ventilación pulmonar (respiración) mueve el aire dentro y fuera de los alvéolos de los pulmones a través de una serie de cavidades y tubos del sistema respiratorio. El aire fluye entre la atmósfera y los pulmones debido a la alternancia de las diferencias de presión creadas por los músculos respiratorios (29). La tasa de ventilación está controlada por las neuronas respiratorias que obtienen retroalimentación de muchos receptores mecánicos y químicos. Por ejemplo, la tasa de ventilación se acelera durante el ejercicio debido a la mayor concentración de dióxido de carbono en la sangre. 11 Fundamentos Médicos del Proyecto La sangre desoxigenada entra en la circulación pulmonar del lado derecho del corazón. La respiración externa se ocupa de la difusión de oxígeno y dióxido de carbono entre los alvéolos y la sangre en los capilares pulmonares. Los gases se disuelven y reaccionan de acuerdo con su presión parcial, P, que se define como la presión que el gas tendría si fuera el único gas presente en el volumen. La diferencia en las presiones parciales entre dos regiones inicia la difusión del flujo de moléculas de gas a partir de una región de mayor presión parcial a una región de menor presión parcial. Mientras que el aire inspirado en los alvéolos tenga mayor presión parcial de oxígeno que en el capilar pulmonar, el oxígeno se difunde a través de la membrana alveolocapilar a la sangre desoxigenada hasta que se alcanza el equilibrio de las presiones parciales. Al mismo tiempo, el dióxido de carbono se difunde en la dirección opuesta para alcanzar el equilibrio. La tasa de cambio de gas depende de la diferencia de presión parcial, área superficial, la distancia de difusión y la solubilidad y el peso molecular de los gases. Después de la respiración externa, la circulación pulmonar transporta la sangre oxigenada al corazón izquierdo, de donde es bombeada a la circulación sistémica que cubre todos los tejidos corporales. A medida que la sangre rica en oxígeno alcanza los capilares internos (tejido), la respiración se encarga del intercambio de gas entre los capilares sistémicos y las células del tejido a través del fluido intersticial. La respiración interna no se produce antes de los capilares, incluso si la sangre oxigenada pasa por tejidos empobrecidos de oxígeno, debido a que la distancia de difusión es demasiado grande en las arterias más grandes. Como las células de los tejidos tienen menor presión parcial de oxígeno que la sangre oxigenada, el oxígeno se difunde en el tejido circundante. Después de la respiración, la sangre vuelve desoxigenada al corazón desde donde es bombeada a la circulación pulmonar y un nuevo bucle empieza. Ilustración 2.4 Curva de disociación del oxígeno en la hemoglobina 12 Fundamentos Médicos del Proyecto La curva de disociación de oxígeno se muestra en la Ilustración 2.4 y presenta el nivel de saturación de oxígeno de la hemoglobina como una función de la presión parcial de oxígeno (PO2) o, en otras palabras, la afinidad del oxígeno para la hemoglobina. La forma de la curva tiene ventajas fisiológicas. La parte superior plana significa que, a pesar de cambios relativamente altos en PO2 en la respiración externa el nivel de saturación será alto. Normalmente el nivel de PO2 de la sangre oxigenada en las arterias es de unos 100 mmHg. La parte inferior empinada significa que grandes cantidades de oxígeno pueden ser liberadas sin una gran caída en PO2 capilar durante la respiración interna. El PO2 de la sangre desoxigenada en venas es de aproximadamente 40 mmHg. Durante el ejercicio o la mayor actividad metabólica, la presión parcial puede disminuir a cerca de 20 mmHg. Muchos factores externos mueven la curva de disociación o bien hacia la izquierda (mayor afinidad) donde el oxígeno se une con más fuerza a la hemoglobina o a la derecha (menor afinidad) donde el oxígeno se libera más fácilmente. Estos cambios se ilustran en la Ilustración 2.4 con líneas de puntos verdes y rojos. El aumento de la acidez (pH decreciente) mueve la curva a la derecha debido a un aumento de la cantidad de iones de hidrógeno que altera la estructura de la molécula de hemoglobina y su capacidad de transporte de oxígeno disminuye. El mismo efecto se produce cuando la presión parcial de dióxido de carbono aumenta y más iones de hidrógeno están disponibles en la sangre. Además, el aumento de temperatura y de la concentración de 2,3-difosfoglicerato (DPG), producto de la glucólisis, ayuda a la descarga de oxígeno de la hemoglobina y la curva se mueve a la derecha. El aumento de las concentraciones de dishemoglobina mueve la curva a la izquierda. 2.2.7 Transporte de oxígeno y dióxido de carbono en la sangre El oxígeno y el dióxido de carbono se transportan en la sangre de diferentes maneras. El oxígeno se transporta ya sea en estado disuelto o en combinación química con la hemoglobina en las glóbulos rojos de la sangre. Sólo alrededor del 1,5% de oxígeno se disuelve en el plasma sanguíneo y el resto se une a la molécula de hemoglobina (29). La Ilustración 2.5 presenta la estructura de la molécula de hemoglobina. La estructura cuaternaria de la hemoglobina se compone de globina, una proteína compuesta de dos alfa y dos cadenas polipeptídicas beta y cuatro pigmentos no proteicos llamados hemos. Un hemo contiene un átomo de hierro (Fe2+) que está normalmente en el estado de oxidación ferroso para apoyar la unión de oxígeno. El cambio en la forma de la estructura cuaternaria con el nivel de oxigenación altera el espectro de absorción óptica. Ilustración 2.5 Hemo, molécula de hemoglobina y glóbulo rojo 13 Fundamentos Médicos del Proyecto El oxígeno y la hemoglobina se combinan en una reacción fácilmente reversible para formar oxihemoglobina (HbO2). Después de que la primera molécula de oxígeno se une a un hemo de la molécula de hemoglobina, es más fácil para otras moléculas de oxígeno unirse a los otros hemos. Esto es cierto también para la reacción inversa.  𝑅𝐻𝑏 ℎ𝑒𝑚𝑜𝑔𝑙𝑜𝑏𝑖𝑛𝑎 𝑟𝑒𝑑𝑢𝑐𝑖𝑑𝑎 + 𝑂! 𝑜𝑥í𝑔𝑒𝑛𝑜 ↔ 𝐻𝑏𝑂! (𝑜𝑥𝑖ℎ𝑒𝑚𝑜𝑔𝑙𝑜𝑏𝑖𝑛𝑎) La hemoglobina puede unirse a otros compuestos además del oxígeno, como el monóxido de carbono, cianuro, monóxido de azufre, dióxido de nitrógeno y sulfuro. Todos estos se unen al hierro en el hemo inhibiendo la unión a oxígeno. También el estado férrico (Fe3+), convierte la hemoglobina en metahemoglobina (HbMet), que no puede unirse al oxígeno. El dióxido de carbono es transportado en la sangre de tres maneras: alrededor del 7% se disuelve en el plasma sanguíneo, el 23% se combina con globina formando productos llamados compuestos carbaminos, y el resto como iones de bicarbonato dentro de las células rojas de la sangre. 14 Fundamentos Científicos y Tecnológicos del Proyecto 3 Fundamentos Científicos y Tecnológicos del Proyecto La pulsioximetría se basa fundamentalmente en dos principios: el primero de ellos corresponde a que la oxihemoglobina y la hemoglobina reducida presentan un nivel de absorción de luz roja e infrarroja diferente (espectrofotometría), y el otro es que el volumen de sangre arterial, y por tanto la absorción de luz por dicha sangre, varían con el pulso arterial (pletismografía). Para poder determinar la saturación de oxígeno se hace pasar luz roja e infrarroja a través de un tejido arterial midiendo las variaciones de la absorción de luz durante el ciclo pulsátil. Normalmente, el pulsioxímetro se coloca en un dedo de la mano o en el lóbulo de la oreja. Esto conlleva a que la luz tiene que atravesar, además de la sangre oxigenada y la reducida, otros tejidos como huesos, uñas y piel, como se muestra en la Ilustración 3.1 (27). Ilustración 3.1 Absorción de la luz transmitida a través de los tejidos Para distinguir la sangre arterial entre el resto de tejidos, el pulsioxímetro utiliza la técnica descubierta en 1974 por el japonés Takuo Aoyagi quien observó que la variación del volumen de la sangre arterial con cada pulso se podría usar para obtener una señal dependiente sólo de las características de dicho tipo de sangre. Sin la existencia de ritmo cardíaco no podríamos distinguir la sangre arterial, de ahí que se le agregue la palabra “pulso” al oxímetro. 15 Fundamentos Científicos y Tecnológicos del Proyecto 3.1 LEY DE BEER-LAMBERT En la oximetría de pulso se calcula el porcentaje de saturación de oxígeno utilizando la absorción de luz. La luz que emiten los dos diodos LED atraviesa el sensor y es recibida por el fotodetector. Cuando introducimos el dedo entre los emisores y el receptor, la luz tendrá que atravesarlo para alcanzar al detector. Una parte de la luz será absorbida por el dedo y otra parte llegará al fotodetector. La cantidad de luz que es absorbida por el dedo depende de tres propiedades: o La concentración de la sustancia que absorbe la luz o La longitud de la trayectoria en la sustancia que absorbe la luz o La hemoglobina reducida y la oxihemoglobina absorben luz roja e infrarroja de forma diferente * La cantidad de luz absorbida es proporcional a la concentración de la sustancia que absorbe la luz En la Ilustración 3.2 los vasos sanguíneos de los dedos tienen el mismo diámetro, pero uno de ellos tiene una baja concentración de hemoglobina y el otro tiene alta concentración. Cada molécula de hemoglobina absorbe parte de la luz, por lo que a más hemoglobina por unidad de superficie, mayor será la luz absorbida. Esa propiedad se describe en una ley física: Ley de Beer: La cantidad de luz absorbida es proporcional a la concentración de la sustancia que absorbe la luz (26). Al medir la cantidad de luz que llega al fotodetector, el pulsioxímetro estima cuánta luz ha sido absorbida. Ilustración 3.2 Absorción de luz en función de la concentración de Hb 16 Fundamentos Científicos y Tecnológicos del Proyecto * La cantidad de luz absorbida es proporcional a la longitud de la trayectoria de la luz En la Ilustración 3.3 se muestran dos dedos cuyas arterias tienen la misma concentración de hemoglobina. Sin embargo, en uno de ellos se aprecia que la arteria es más ancha que en el otro. Ilustración 3.3 Absorción de luz en función de la longitud del recorrido La luz de los emisores tiene que atravesar la arteria. La luz realiza un camino más corto en la arteria más estrecha y un camino más largo en la más ancha. Aunque la concentración de hemoglobina por unidad de superficie es la misma en ambas arterias, la luz se encuentra con más hemoglobina en la arteria más ancha, ya que viaja un recorrido más largo. Por tanto, cuanto más largo sea el camino a recorrer, mayor cantidad de luz se absorbe. Esta propiedad se describe en otra ley física: Ley de Lambert: La cantidad de luz absorbida es proporcional a la longitud del camino que la luz tiene que recorrer en la sustancia que absorbe (26). * La cantidad de luz absorbida depende de la longitud de onda y del tipo de hemoglobina La hemoglobina oxigenada y la hemoglobina reducida absorben luz de diferentes longitudes de onda de una manera específica y tienen distintas características de absorción en diferentes longitudes de onda. El sensor del pulsioxímetro emite luz en dos longitudes de onda. De acuerdo a los LEDs emisores mostrados en el apartado anterior, tendremos luz roja de 660 nm de longitud de onda y luz infrarroja de 940 nm. En el siguiente gráfico puede verse la comparación entre la absorción de ambos tipos de hemoglobina según la longitud de onda (29). Prestando atención a las dos longitudes de onda que nos interesan (660 nm y 940 nm), observamos que la oxihemoglobina absorbe más la luz infrarroja que la luz roja y la hemoglobina reducida absorbe más la luz roja que la luz infrarroja (líneas azul oscuro y verde del gráfico): 17 Fundamentos Científicos y Tecnológicos del Proyecto Ilustración 3.4 Absorción de HbO2 y RHb para diferentes longitudes de onda El fotodetector mida la cantidad de luz roja e infrarroja que pasa a través de los tejidos para determinar la cantidad de luz absorbida por la hemoglobina oxigenada y por la hemoglobina reducida. Cuando la proporción de HbO2 aumenta en sangre, la absorción de luz roja disminuye mientras que la absorción de luz infrarroja aumenta. Como se ha explicado en el Capítulo 2, se calcula la proporción entre la absorción de la luz roja y la de la luz infrarroja (relación de absorción). Usando esta relación, se puede calcular la saturación de oxígeno. 3.1.1 Medida pulsátil Existen dos problemas que impiden una correcta estimación de la saturación arterial de la hemoglobina cuando se mide a través de tejidos vivos: -­‐ Existen otras partes de los tejidos que también absorben luz, aparte de la hemoglobina. -­‐ Los tejidos vivos no sólo contienen sangre arterial, sino también piel, hueso y sangre venosa, la cual transporta hemoglobina reducida. El pulsioxímetro debe analizar la sangre arterial sin tener en cuenta la absorción de luz debida a los demás tejidos. En los casos en que el dedo sea delgado, los tejidos absorben poca luz, sin embargo con un dedo más grueso, la absorción de luz será mayor. El oxímetro de pulso será capaz de analizar sólo la sangre arterial, ya que es lo único pulsátil o variable en el dedo (AC). El resto es no pulsátil o constante (DC): 18 Fundamentos Científicos y Tecnológicos del Proyecto Ilustración 3.5 Absorción de luz debida a la sangre arterial pulsátil y a los tejidos circundantes La señal pulsátil es, en realidad, muy pequeña comparada con la parte constante. Es del orden del 1% o del 2% de la señal total (30). De toda la luz que pasa a través del dedo, es esta pequeña parte pulsátil la única que analiza el oxímetro de pulso. 3.2 CÁLCULO DE LA SATURACIÓN DE OXÍGENO La componente pulsátil de la luz recibida en cada longitud de onda está relacionada con la sangre arterial, tras excluir el efecto de la sangre venosa, piel, huesos, grasa, etc. Para cada longitud de onda se puede calcular la diferencia entre la luz emitida y la recibida, conociendo de esta manera la cantidad de luz que ha absorbido la sangre pulsátil (31). Esto nos sirve para calcular la razón de oxihemoglobina y hemoglobina reducida: 𝑅! = log (𝐼!" )𝜆! 𝑆𝑎𝑂! 𝛼 𝑅′ log (𝐼!" )𝜆! A partir de esta razón, utilizando métodos empíricos, puede realizarse una estimación de la saturación de oxígeno mediante la siguiente fórmula: 𝑆𝑎𝑂! = 𝐻𝑏𝑂! ∙ 100 𝐻𝑏𝑂! + 𝐻𝑏 La ley de Beer-Lambert relaciona la intensidad de luz entrante en un medio con la intensidad saliente después de que en dicho medio se produzcan fenómenos de absorción. Esta ley mostrada gráficamente en la Ilustración 3.6 es una combinación de las dos leyes descritas en el apartado anterior y declara que la absorbancia de una radiación monocromática a través de una sustancia en solución depende de la concentración del compuesto absorbente, de la distancia que recorre la radiación y del tipo de radiación monocromática (29). 19 Fundamentos Científicos y Tecnológicos del Proyecto Ilustración 3.6 Ley de Beer-Lambert Matemáticamente, se expresa como: 𝐼 = 𝐼! 𝑒 !!! !" donde I es la intensidad de luz transmitida, I0 es la intensidad de luz incidente, ελ es el coeficiente de extinción a la longitud de onda λ, c es la concentración del absorbente y l es la longitud óptica recorrida. En el caso en que existan varios absorbentes, la intensidad de luz total transmitida se corresponde con la superposición lineal de las intensidades de cada absorbente: 𝐼 = 𝐼! 𝑒 !!!,! !! ! ! = 𝐼! 𝑒 !! donde a representa a un absorbente. La oximetría está basada en el cambio en la absorción de energía electromagnética de la molécula de la hemoglobina cuando su química se ve alterada. Tanto la hemoglobina reducida como la oxihemoglobina tienen sus propios colores característicos que pueden ser descritos con los coeficientes de extinción. Estos coeficientes han sido representados en la Ilustración 3.5 en un rango de longitudes de onda comprendido entre los 570 y los 1000 nm. Las longitudes de onda que más se suelen utilizar en la pulsioximetría son 660 nm (rojo) y 940 nm (infrarrojo), que aparecen marcados en la Ilustración 3.4 con líneas verticales. Esta selección se basa en la gran diferencia entre las absorciones de la oxihemoglobina y la hemoglobina reducida. La absorbancia a cierta longitud de onda (A) se define como el negativo del logaritmo neperiano de la fracción de luz que pasa a través de la muestra, denominada transmisión T. Combinando esto con la ecuación anterior, la absorbancia puede escribirse como: 𝐴! = − ln 𝑇 = −𝑙𝑛 𝐼 = 𝐼! 𝜀!,! 𝑐! 𝑙! ! 20 Fundamentos Científicos y Tecnológicos del Proyecto donde a representa todos los componentes del tejido como sangre arterial, sangre venosa, piel y huesos. Ilustración 3.7 Transmisión de luz durante la medición pletismográfica La Ilustración 3.7 muestra cómo se forma la onda pletismográfica (PPG). La parte de abajo representa las capas del tejido y la parte de arriba la señal transmitida. La componente de continua (DC) de la señal transmitida se define como la transmisión cuando no hay pulsación sanguínea. Este nivel de continua varía sólo lentamente debido a la respiración, la actividad del sistema nervioso, termorregulación y cambios en el total de la concentración de hemoglobina. En los pulsioxímetros, separaremos la parte alterna de la señal, la que depende del tiempo (AC). Como ya se ha mencionado antes, la amplitud de la señal alterna es sólo del orden del 1% o el 2% del total de la señal transmitida. Vamos a calcular a continuación la derivada en el tiempo de la absorbancia total, donde la única variable dependiente del tiempo es la longitud recorrida, lart, a través de la sangre arterial: 𝑑𝐴! = 𝑑(𝐴! ) 𝑑𝑙!"# ∙ ∆𝑡 = ∙ 𝑑𝑡 𝑑𝑡 𝜀!,!"# ∙ 𝑐!"# ∙ ∆𝑡 Por otro lado, la absorción puede ser evaluada a través de la intensidad transmitida a través de la sangre arterial: 𝑑 −𝑙𝑛 𝑑𝐴! = 𝐼(𝑡) 𝐼! 𝑑𝑡 ∙ ∆𝑡 = 𝐼! 𝑡 𝐴𝐶! 𝐼!"# − 𝐼!"# ∙ ∆𝑡 ≅ = 𝐼 𝑡 𝐷𝐶! 𝐼!"# 21 Fundamentos Científicos y Tecnológicos del Proyecto Durante un pulso, la derivada de la absorción puede ser calculada mediante la intensidad de la componente de continua (DCλ) y la intensidad de la componente de alterna (ACλ), las cuales pueden ser calculadas desde el mínimo de transmisión en la sístole (Imin) y el máximo en la diástole (Imax). Los oxímetros de pulso convencionales usan LEDs con longitudes de onda de 660 nm (luz roja) y de 940 nm (luz infrarroja) y un fotodetector para obtener la señal pletismográfica de una extremidad, normalmente el dedo. Para obtener la saturación de oxígeno SaO2, necesitamos calcular la razón entre las absorciones de dos longitudes de onda diferentes (R). R se puede calcular utilizando la siguiente fórmula: 𝑅= 𝜀!"!! !"#" ∙ 𝑐!"#! + 𝜀!"#!"#" ∙ 𝑐!"# ∙ ∆𝑙 𝑑𝐴!"#" = 𝑑𝐴!"#$# 𝜀!"!! !"#$# ∙ 𝑐!"#! + 𝜀!"#!"#$# ∙ 𝑐!"# ∙ ∆𝑙 El espesor que añade la sangre arterial en el latido, Δl, supondremos que es igual para ambas longitudes de onda. Además, supondremos que los dos tipos de hemoglobina suman el total de la hemoglobina en sangre: cRHb+cHbO2= tHb. Con estas suposiciones, podemos reescribir la fórmula anterior: 𝑅= 𝜀!"!! !"#" ∙ 𝑆𝑎𝑂! + 𝜀!"#!"#" ∙ 1 − 𝑆𝑎𝑂! 𝜀!"!! !"#$# ∙ 𝑆𝑎𝑂! + 𝜀!"#!"#$# ∙ 1 − 𝑆𝑎𝑂! de donde podemos despejar SaO2: 𝑆𝑎𝑂! = − 𝜀!"#!"#" − 𝑅 ∙ 𝜀!"#!"#$# 𝜀!"!! !"#" − 𝜀!"#!"#" − 𝑅 ∙ 𝜀!"!! !"#$# − 𝜀!"#!"#$# 3.2.1 Métodos para calcular R Los dos métodos más comúnmente utilizados para calcular la razón entre las absorbancias de dos longitudes de onda R, son el método de picos y valles y el método de absorción delta (29). Ilustración 3.8 Método de picos y valles 22 Fundamentos Científicos y Tecnológicos del Proyecto En el primero de los métodos, que se muestra en la Ilustración 3.9, se reconocen los picos y valles de cada ciclo cardíaco y se calcula R mediante la siguiente ecuación: 𝑑𝐴!! 𝐴𝐶!! 𝐷𝐶!! = 𝑑𝐴!! 𝐴𝐶!! 𝐷𝐶!! En el método de absorción delta, dA se calcula dividiendo la diferencia entre las intensidades de dos medidas sucesivas entre la media de las dos intensidades medidas, para cada longitud de onda: 𝑅= 𝑑𝐴! = 𝐼! − 𝐼!!! 𝐼! + 𝐼!!! 2 donde Ii e Ii-1 son intensidades medidas en observaciones consecutivas. Como se verá más adelante, el método que se va a escoger para el cálculo del ratio R va a ser éste último, ya que va a requerir de menos cálculos y será más sencillo de implementar en el microcontrolador. Sin embargo, también podría utilizarse el primero de los métodos, buscando un algoritmo que permita reconocer los picos y los valles en la señal. Finalmente, para calcular el porcentaje de saturación de oxígeno en sangre, es necesario acudir a las curvas de calibración, para obtener la relación entre el ratio R y la saturación de oxígeno en sangre. Estas curvas pueden ser teóricas o empíricas. Las empíricas se generan calibrando el dispositivo en cuestión comparando las medidas con las de otro dispositivo ya calibrado (29). En nuestro caso, utilizaremos la curva de calibración teórica de Beer-Lambert: Ilustración 3.9 Curva de calibración 23 Fundamentos Científicos y Tecnológicos del Proyecto Atendiendo a la curva de la Ilustración 3.9, podemos ver que cuando R vale 1, la saturación de oxígeno es del 85%, y cuando R vale 0,6, la saturación de oxígeno es del 97%. Utilizando una aproximación mediante una recta: 𝑆𝑎𝑂! % = 𝑏 − 𝑎 ∙ 𝑅 Con los datos del párrafo anterior y resolviendo las dos ecuaciones con dos incógnitas llegamos a la ecuación que utilizaremos para calcular el porcentaje de saturación de oxígeno en función de R: 𝑆𝑎𝑂! (%) = 115 − 30 ∙ 𝑅 24 Materiales y Métodos 4 Materiales y Métodos El oxímetro de pulso debe ser diseñado como un dispositivo individual y autónomo, es decir, en el mismo dispositivo se realiza la medición y la visualización de los parámetros y sin que requiera la necesidad de un profesional sanitario, que sea el propio paciente el que pueda realizarse la medida. Esto obliga a que el pulsioxímetro diseñado reduzca en todo lo posible los recursos hardware utilizados, para conseguir que el dispositivo sea lo más portable posible. También obligará a dotar de inteligencia al aparato, simplificando al máximo los recursos software pues los cálculos deberá realizarlos el propio dispositivo de forma autónoma. Debido a que el dispositivo debe ser utilizado por cualquier tipo de persona, de forma independiente a sus condiciones físicas y mentales, la sencillez en su uso es algo esencial, así como que el coste del dispositivo sea reducido, para que sea accesible a todo el mundo y motive a los sistemas de salud pública a implantar este tipo de dispositivos a sus pacientes. También se hace importante el objetivo de que el dispositivo realice las mediciones en tiempo real sobre todo para casos de pacientes crónicos, pacientes de riesgo o en estado grave de su enfermedad. El diseño hardware y software propuesto en este proyecto permitirá realizar medidas en tiempo real sin necesidad de almacenar datos en el dispositivo. También conseguirá reducir el consumo al no tener que enviar gran cantidad de datos a una plataforma externa de cálculo, pues el propio dispositivo realizará los cálculos necesarios, reduciendo en gran medida el envío de datos al no tener que transmitir las señales pulsátiles. Esto es importante para los casos en los que el dispositivo tenga que estar funcionando de forma continuada, ya que el gasto energético de comunicación de los dispositivos en caso de existir, suele ser del 60%. Esta reducción del consumo permitirá disminuir el número de cargas o sustituciones de las baterías, consiguiendo un dispositivo menos obstructivo para la vida del paciente. Dotar de comunicaciones al dispositivo será importante para la transmisión en tiempo real de los parámetros, pero se reducirá el envío de datos gracias a que no se enviarán las señales, tan sólo los parámetros ya calculados. Uno de los objetivos como mejora respecto a los dispositivos de mercado es abaratar el coste empleando pocos recursos hardware y software, se realizará un diseño basado en hardware y software libre que además permitirá modularidad, posibilidades de expansión y mejoras. Los dispositivos de mercado carecen de funciones de gestión de los datos, normalmente limitado por el tamaño y el consumo de energía. Por esto podría ser útil, por ejemplo, poder enviar los datos de forma inalámbrica. Utilizar una plataforma de hardware libre para el diseño, nos permitirá decidir e implementar de forma sencilla si necesitamos un dispositivo que muestre los valores de forma autónoma en una pantalla, o si se necesita reducir aún más el tamaño eliminando la pantalla, se pueda sustituir ésta por un módulo inalámbrico para transmisión de los parámetros hacia aplicaciones de gestión de los datos. No obstante, como se ha dicho anteriormente, el envío de datos estaría limitado al envío de los valores calculados por el propio sensor de forma autónoma, reduciendo el consumo en comunicaciones enormemente. 25 Materiales y Métodos Durante el desarrollo del proyecto, se han utilizado los materiales y métodos descritos a continuación. En una primera fase, se ha realizado una contextualización del dispositivo estableciendo los fundamentos médicos y tecnológicos. Para ello se han revisado artículos y otros trabajos relacionados con la pulsioximetría bajo los puntos de vista indicados. Estos primeros estudios bibliográficos han establecido las bases de la medida de oxígeno en sangre tratada en este proyecto como una relación entre la cantidad de luz de dos longitudes de onda (roja e infrarroja) transmitida a través de un tejido. También han sido útiles para diseñar la estructura de que consta el pulsioxímetro: sensor óptico, microcontrolador y circuito acondicionador de la señal. Del estudio de los fundamentos médicos y técnicos se derivan una serie de requisitos que debe cumplir el dispositivo: 1) que sea portable; 2) autónomo; 3) económico; 4) no invasivo y sencillo de utilizar. Añadido a estas características principales, el dispositivo diseñado en este proyecto incluirá las siguientes prestaciones: 5. Reducción del consumo energético, para evitar recargas o sustituciones frecuentes de las baterías y de esta forma interferir lo menos posible en la vida del paciente. 6. Llevar al mínimo los recursos hardware y software empleados, lo que a su vez ayudará a conseguir el objetivo de reducción de costes y de tamaño. 7. Procesará las señales y realizará el cálculo de los parámetros en tiempo real, para conocer en cada momento el estado del paciente. De esta forma evitaremos almacenar datos en el dispositivo para cálculos posteriores, reduciendo aún más los recursos software. 8. En el prototipo diseñado, los valores se mostrarán por puerto serie hacia un ordenador, aunque también caben otras posibilidades. 9. Modularidad y posibilidades de ampliación, para dotar de flexibilidad al dispositivo. De esta forma, se podría cambiar el tipo de sensorización si fuese necesario, o añadir un display o un sistema de comunicaciones inalámbricas de forma fácil. Esta característica se conseguirá en gran medida gracias al uso de plataformas de hardware y software libre. Para el diseño del hardware del prototipo se ha empleado una metodología iterativa, diseñando el circuito de cada etapa en un ciclo espiral de diseño y desarrollo, aplicando correcciones y probando el funcionamiento de cada etapa. Para el diseño de los circuitos se ha hecho uso del programa informático ORCAD CAPTURE, y para el layout se ha utilizado ORCAD LAYOUT. La implementación de los circuitos se ha realizado mediante el uso de una fresadora PCB ProtoMat S62 de LPKF, soldando los componentes de manera manual. Para el microcontrolador, se ha optado por uno de plataforma hardware y software abierta, Arduino. La elección de esta plataforma se debe en gran medida a dos motivos. Uno de ellos es que dispone de un modelo, Arduino Nano, que se adapta a las especificaciones de tamaño. El otro motivo principal es que al tratarse de una plataforma de hardware abierta, existen diversos fabricantes por lo que es posible conseguirlo a bajo coste. Otra ventaja de esta plataforma es la versatilidad y 26 Materiales y Métodos modularidad que ofrece, así como la sencillez de programación y la compatibilidad con todos los sistemas operativos. Para el desarrollo software para la adquisición de las señales y el cálculo de los parámetros, se ha utilizado el programa propio de la plataforma, el IDLE de Arduino. Para la representación de las señales, nos hemos apoyado en Matlab. Se ha desarrollado un programa sobre el IDLE de Arduino para que el microcontrolador sea capaz de leer los aspectos clave de las señales en el cálculo del pulso cardíaco y la saturación de oxígeno. La representación de los parámetros finales se ha hecho en el ordenador utilizando el monitor serie del IDLE de Arduino. El dispositivo ha sido validado en primer lugar desde el punto de vista técnico, analizando la adecuación respecto a los resultados esperados de las diferentes señales que conforman el proceso de detección. También ha sido validado de forma funcional comparando los resultados obtenidos respecto a un dispositivo comercial modelo CMS50DL de la marca Quirumed para la medida de la saturación de oxígeno en sangre y la frecuencia cardíaca, lo que pone de manifiesto la viabilidad del método y la técnica empleada. 27 Resultados 5 Resultados En este capítulo se van a mostrar los resultados obtenidos. En una primera parte de este capítulo se detalla el diseño y la implementación del prototipo de pulsioxímetro dividiéndolo en tres bloques principales: sensor óptico, microcontrolador y circuito acondicionador de la señal. En la segunda parte de este capítulo se muestran las señales y los resultados obtenidos, realizando las pruebas de validación técnica del dispositivo. Primeramente, se muestran los resultados obtenidos en el laboratorio, utilizando el osciloscopio se valida el funcionamiento del circuito etapa a etapa. Posteriormente, se muestran las señales capturadas y digitalizadas por el microcontrolador. Se describen los códigos programados en el microcontrolador que realizan el cálculo de la frecuencia cardíaca y de la saturación de oxígeno y finalmente se valida el funcionamiento del dispositivo completo comparando los resultados con los de un dispositivo de mercado. 5.1 INVESTIGACIÓN PULSIOXÍMETRO Y DESARROLLO DEL PROTOTIPO DE La mayoría de los oxímetros de pulso actuales están formados por dos emisores de luz LED y por un fotodetector. Suelen utilizarse también otros componentes para acondicionar la señal de interés, como amplificadores operacionales, resistencias, condensadores, etc. Del procesamiento de la señal y del cálculo de los valores de saturación de oxígeno y frecuencia cardíaca se encargará un microcontrolador. Todos los componentes anteriores influirán en el coste total del dispositivo, así como en el tamaño y en el consumo energético del mismo, factores importantes en el diseño. El objetivo es implementar un pulsioxímetro de bajo coste, pequeño tamaño, sencillo de utilizar y que consuma poca energía. En este caso, la salida del sensor óptico se conectará a un circuito acondicionador de la señal y posteriormente se entregará la señal acondicionada al microcontrolador, como muestra la Ilustración 5.1: Ilustración 5.1 Diagrama de bloques del pulsioxímetro 28 Resultados 5.1.1 Sensor Óptico Existen sensores para diferentes partes del cuerpo, como por ejemplo los dedos, el lóbulo del oído, la nariz, los pies y la frente. Éstos pueden ser reutilizables o desechables. También hay sensores específicos para los neonatos o pediátricos, por tanto, es importante elegir el sensor adecuado según el caso. Sin embargo, los sensores que suelen ser más precisos, fáciles y cómodos de usar son los de dedo. Ilustración 5.2 Esquema del sensor óptico La extremidad escogida (usualmente el dedo) debe tener un ancho relativamente corto para ser suficientemente translúcido a las longitudes de onda utilizadas. Estas longitudes de onda deben escogerse de forma que presenten notables diferencias de absorción de las dos especies de hemoglobina (reducida y oxigenada). El mínimo número de longitudes de onda utilizadas debe ser igual o superior al número de incógnitas, por tanto, serán necesarias dos longitudes de onda. 5.1.1.1 Fuentes de luz del sensor óptico El pulsioxímetro utiliza como fuente de luz dos diodos LED, uno para cada longitud de onda. Los diodos LED son ideales para utilizarlos como emisores de luz en el pulsioxímetro debido a que pueden ser encendidos y apagados muy rápidamente, ya que no tienen la inercia térmica propia de las fuentes de luz incandescente. Esto permite utilizar una única célula fotoeléctrica (fotodetector) si los LEDs se encienden y apagan de forma rápida y alterna. Además de esto, el uso de LEDs ofrece otras ventajas: o Son baratos, lo que permite reducir el coste del dispositivo o Son muy compactos, por lo que se consigue reducir el tamaño del pulsioxímetro o Emiten luz en longitudes de onda muy precisas o Apenas se calientan durante su uso En el sensor del pulsioxímetro los LEDs emisores se montan de forma que su emisión está dirigida perpendicularmente a través del dedo al fotodetector, tal como se muestra en la Ilustración 5.2. Los emisores LED utilizados para el pulsioxímetro son del fabricante Farnell y tienen las siguientes características: 29 Resultados LED EMISOR ROJO (LUMEX SSL-LXA228SRC-TR11) LER ROJO Tamaño de bulbo 1,9 mm Corriente directa 20 mA Tensión directa 1,7 V Color Rojo Longitud de onda 660 nm Ángulo de visión 25° LED EMISOR INFRARROJO (SHARP GL100MN1MP1) LER INFRARROJO Tamaño de bulbo 1,5 mm Corriente directa 20 mA Tensión directa 1,2 V Color Infrarrojo Longitud de onda 940 nm Ángulo de visión 10° 5.1.1.2 Fotodetector Para detectar la intensidad luminosa que llegará de forma alterna proveniente de los dos emisores LED, utilizaremos un único fotorreceptor. Éste estará posicionado de forma perpendicular y opuesta a los emisores, de forma que el dedo quede en medio, entre los LEDs y el fotodetector. El receptor debe situarse en el mismo plano que los LEDs y a una pequeña distancia de ellos. El montaje debe estar protegido de luces externas, en especial de luces con longitudes de onda dentro del rango al cual sea sensible el fotodetector. El fotodetector utilizado en el montaje es: FOTODETECTOR (OSRAM BP104S-Z) FOTODETECTOR Longitud de onda de sensibilidad pico 850 nm Rango espectral 400 - 1100 nm Corriente oscura Tensión directa Ángulo de sensibilidad 2 nA 1,3 V 60° 30 Resultados 5.1.2 Microcontrolador El diseño del hardware que se propone en este proyecto tiene como objetivo minimizar tanto el precio del dispositivo como el tamaño. El elemento de hardware más importante y que más afecta a las dos características anteriores es el microcontrolador. Además, se buscaba un controlador que fuese sencillo de manejar y programar y que fuese flexible a la hora de realizar mejoras o ampliación de funciones del dispositivo. Estas características las ofrece una plataforma abierta, de hardware y software libre como Arduino. Finalmente, el microcontrolador elegido ha sido el Arduino Nano 3.0. 5.1.2.1 Arduino, plataforma electrónica abierta Arduino es una plataforma de electrónica abierta para la creación de prototipos basada en software y hardware flexibles y fáciles de utilizar. Se creó para los interesados en crear entornos u objetos interactivos. El hardware consiste en una placa con un microcontrolador Atmel AVR y puertos de entrada y salida. Los microcontroladores más utilizados son el Atmega168, Atmega328, Atmega1280 y Atmega8 por su sencillez y bajo coste que permiten el desarrollo de múltiples diseños. El microcontrolador de las placas Arduino se programa mediente el lenguaje de programación Arduino (basado en Wiring) y el entorno de desarrollo Arduino (basado en Processing). Los proyectos desarrollados con Arduino pueden ser ejecutados sin necesidad de conectar a un ordenador, aunque también tienen la posibilidad de hacerlo y comunicarse con diferentes tipos de software, como por ejemplo Flash, Processing, MaxMSP, Matlab, etc (32). Arduino puede tomar información del entorno a través de sus entradas analógicas y digitales conectadas a toda una gama de sensores y puede afectar a aquello que le rodea controlando luces, motores y otros actuadores. Las placas pueden ser hechas a mano o bien compradas montadas de fábrica. El software se puede descargar de forma gratuita y es compatible con los sistemas operativos Windows, Mac OS y Linux. Los ficheros de diseño de referencia (CAD) están disponibles bajo una licencia abierta para que cada uno pueda adaptarlo a sus necesidades. 31 Resultados Ilustración 5.3 Arduino Nano Actualmente Arduino dispone de más de 20 placas diferentes, cada una con sus propias características en cuanto a tamaño, número de entradas y salidas, funcionalidades y precio. Para el diseño del pulsioxímetro, se ha elegido la placa Arduino Nano 3.0, debido a que cubre las necesidades que el proyecto requiere siendo a su vez una de las placas de menor tamaño y también de menor coste. 5.1.3 Circuito acondicionador de la señal Como se describió anteriormente necesitamos un emisor de luz (diodos LED) para emitir luz a través de la zona de interés (dedo) y un fotodetector con el fin de convertir esta luz incidente transmitida en una señal eléctrica. También se discutió anteriormente que esta señal eléctrica será una corriente que corresponde a la intensidad de luz (a mayor intensidad de luz, más alto valor de corriente). Sin embargo, puesto que queremos trabajar con tensiones, tendremos que convertir esta corriente en una tensión. Esto se puede lograr fácilmente a través de un convertidor de corriente a voltaje. Este diseño nos puede dar una señal de salida que corresponde a una señal pulsátil que podemos utilizar para extraer la lectura de la saturación de oxígeno. A continuación se muestra un primer y sencillo diagrama esquemático de la circuitería para los LED involucrados en la transmisión de luz a través del dedo. La fuente de alimentación de 5 V para los LEDs emisores se saca de los pines D11 y D12 del Arduino, configurando dicho pines como salidas digitales, lo que provoca un flujo de corriente a través de la resistencia y el LED, el cual se encenderá y producirá luz. El propósito de la resistencia es regular la corriente a través del LED para proporcionar una intensidad lumínica adecuada sin dañarlo. El circuito del fotodetector detecta la luz transmitida a través del dedo y realiza la conversión de la corriente en una tensión. La luz incidente transmitida a través del dedo incide en el fotodiodo provocando que la corriente fluya. Esta corriente fluye entonces a través de una resistencia con un alto valor y crea una tensión en el pin de entrada analógico A2 del microcontrolador (mirar Anexo F). 32 Resultados Ilustración 5.4 Esquemático conexión LEDs emisores y fotodetector Para poder visualizar la señal recibida en el microcontrolador, vamos a conectarlo al ordenador mediante el puerto USB del Arduino. Utilizaremos Matlab para leer la señal y representarla gráficamente. La señal obtenida, cuando mantenemos el LED rojo encendido continuamente, es la siguiente: Ilustración 5.5 Señal recibida del LED rojo antes y después de interponer el dedo entre LED emisor y fotodetector Para obtener esta señal, se ha configurado el Arduino de forma que tome una muestra de la señal recibida por el fotodetector cada 10 ms. Se han tomado 500 muestras por lo que la gráfica muestra la señal recibida durante 5 segundos. Se puede observar que, cuando no interponemos el dedo entre el LED emisor y el fotodetector, el voltaje recibido ronda los 0,9 V. Sin embargo, al atravesar el dedo, la intensidad que recibe el detector baja considerablemente, de forma que obtenemos un voltaje inferior a los 0,01 V. Estos resultados se muestran de forma ampliada en la siguiente gráfica: 33 Resultados Ilustración 5.6 Señal recibida del LED rojo con el dedo interpuesto entre emisor y fotodetector La única ventaja de usar este sistema inicial (mostrado en la Ilustración 5.4) es que es muy simple y requiere pocos componentes. Nos ahorraría espacio y sería fácil de implementar. Pero en la señal que estamos obteniendo, es totalmente imposible leer la señal pulsátil de la que tenemos que obtener los datos. En primer lugar, sabemos que en la señal pulsátil tenemos una componente de continua mucho mayor (unas 100 veces) que la componente pulsátil. Si de por sí el valor DC obtenido es inferior a 10 mV, la componente AC es muy pequeña, entre 0,1 mV y 0,2 mV. Además, el Arduino digitaliza la señal utilizando 10 bits, esto es, un total de 1024 valores. Configurando como tensión de referencia 1,1 V (la más baja que permite Arduino), tenemos que la componente AC ocupa menos de 1 valor de los 1024 posibles. Incluso la componente DC ocupa menos de 10 valores. Como se comprueba en la Ilustración 5.6, la componente AC es tan pequeña que se hace indetectable. Es necesario amplificar la señal recibida por el fotodetector. Además, la amplificación es necesaria para que la señal tenga un nivel de amplitud de la componente pulsátil lo suficientemente grande como para poder diferenciarla del ruido. Éste puede atribuirse a muchas fuentes, como por ejemplo el ruido por movimiento del dedo del usuario y el ruido de cualquier fuente de luz del entorno. Por lo tanto debemos también eliminar de alguna manera el ruido antes de la transmisión de la señal a la placa. Tenemos el problema de que el orden de la amplitud de la señal es de menos de 1 mV y el ruido también está en ese mismo orden, por lo que se hace esencial amplificar la señal. Con una amplitud de señal baja en combinación con el ruido, obtendremos una baja SNR (relación señal a ruido), que no es deseable. Para evitar estos problemas, procesaremos la señal haciéndola pasar por un circuito acondicionador previo a transmitir la señal a la placa Arduino. 34 Resultados 5.1.3.1 Conversor de corriente a voltaje Como se ha descrito en apartados anteriores, será necesario disponer de un emisor de luz LED, el cual emitirá la luz a través del dedo del paciente, y de un fotodetector para poder convertir la luz incidente en una señal eléctrica. Esta señal eléctrica será proporcional a la intensidad de la luz incidente en el fotodetector. Sin embargo, dado que queremos trabajar con tensiones en lugar de corrientes, es necesario convertir esa corriente a voltaje. Para ello, utilizaremos un conversor de corriente a voltaje, con el que obtendremos una señal pulsátil que podremos usar para calcular la saturación de oxígeno. A continuación se muestran los esquemáticos de los circuitos involucrados en la transmisión de luz a través del dedo. Tendremos dos circuitos idénticos, uno por cada LED: rojo e infrarrojo (33). El primer esquemático muestra el circuito para la emisión de la luz LED que atravesará el dedo. La fuente de alimentación será la proporcionada por el PIN de 5 voltios del Arduino, que provocará un flujo de corriente a través de la resistencia y del LED emisor. Esta corriente alimentará el LED y provocará la producción de luz. La resistencia de 100 Ω se utiliza para regular la corriente a través del LED y se ha ajustado para la corriente típica del diodo LED de unos 50 mA. Ilustración 5.7 Circuito LED emisor En el siguiente esquemático mostramos el circuito anterior junto al circuito del fotodiodo y el conversor de corriente a voltaje. La luz incidente en el fotodetector provoca una corriente que fluye a través de la resistencia de 2 MΩ y crea una tensión en la salida del amplificador operacional, obteniendo de esta forma la señal deseada. Ilustración 5.8 Circuito conversor corriente a voltaje 35 Resultados El conversor de corriente a tensión también se conoce como amplificador de transimpedancia. Con la resistencia R como factor de proporcionalidad, la relación entre la intensidad de entrada y el voltaje de salida es: 𝑉!"#$%" = −𝑅 ∙ 𝐼!"#$%&% 5.1.3.2 Filtro paso de banda Aunque el circuito anterior es muy sencillo de implementar y produce una señal pulsátil, nos encontramos con los problemas del offset grande, ruido en la señal y, sobre todo, amplitud muy pequeña, que haría irreconocible la señal al transmitirla al Arduino para el cálculo de la saturación de oxígeno. Se hace necesario, por tanto, implementar un circuito que subsane las cuestiones anteriores y nos permita obtener una señal con mayor fidelidad (33). Como primer paso, se ha diseñado un circuito capaz de eliminar el ruido y el nivel de continua de la señal. Se utiliza para ello el siguiente filtro paso de banda: Ilustración 5.9 Circuito filtro paso banda El objetivo del filtro es mantener las frecuencias comprendidas entre 0 y 5 Hz, eliminando las frecuencias que están por encima y por debajo de dicho rango. La frecuencia de corte del filtro paso bajo es de unos 5 Hz, se logra combinando una resistencia de 330 KΩ y un condensador de 0.1 µF: 𝑓!"#$% !"#$%& = 1 2𝜋𝑅𝐶 Siguiendo la fórmula anterior, también obtenemos la frecuencia de corte del filtro paso alto. Combinando una resistencia de 25 KΩ y un condensador de 10 µF, conseguimos una frecuencia de corte de 0,6 Hz aproximadamente. Al eliminar la componente de continua (DC) con el filtrado paso alto, conseguiremos amplificar a posteriori la señal sin preocuparnos por la saturación del amplificador. Además, el filtro paso alto ayuda a eliminar el ruido de baja frecuencia producido por el movimiento del dedo Asimismo, al eliminar el resto de componentes de ruido con el filtrado paso bajo, conseguimos obtener una señal limpia. 36 Resultados Se ha introducido un seguidor de tensión entre el filtro paso bajo y el filtro paso alto para eliminar los efectos de carga. La tensión a la salida del seguidor es la misma que la tensión a la entrada del mismo. 5.1.3.3 Etapa amplificadora En este punto, tenemos la señal filtrada (sin ruido) y centrada alrededor de la tensión de referencia, por lo que hemos eliminado el offset o componente de continua, lo cual nos permite amplificar sólo la parte alterna de la señal. Ahora es necesario amplificar la señal todo lo posible, sin llegar a saturar los amplificadores. La amplitud actual de la señal es del orden de mV. Puesto que el ruido también está en el rango de los mV, la relación señal a ruido (SNR) es muy baja. En este caso, las medidas obtenidas no son fiables. Amplificando la señal, conseguimos aumentar la relación señal a ruido, por lo que disminuirá el error en las mediciones (33). Para esta etapa amplificadora, utilizaremos el siguiente circuito: Ilustración 5.10 Amplificador no inversor Se trata de una configuración de amplificador no inversor. La tensión de entrada se aplica al pin positivo del amplificador. Como conocemos que el voltaje en el pin positivo es el mismo que en el pin negativo, podemos obtener la siguiente relación entre la tensión de entrada y la tensión de salida aplicando un divisor de tensión: 𝑉!"#$%" = 𝑉!"#$%&% 1 + 𝑅! 𝑅! A la hora de implementar el circuito definitivo, vamos a fijar el valor de R1 siempre a 1 KΩ, y el valor de R2 lo dejaremos libre, sin definir, para ajustarlo después. El valor de la ganancia será por tanto el de R2 más uno (siempre y cuando expresemos el valor de R2 en KΩ). 37 Resultados Con la etapa amplificadora, se ha completado el circuito acondicionador de la señal pulsátil. A continuación, se muestra el circuito completo, no sin antes recordar que tendremos dos circuitos idénticos, uno para procesar cada tipo de señal: la del LED rojo y la del LED infrarrojo: Ilustración 5.11 Circuito acondicionador de la señal 5.1.3.4 Circuito “Sample & Hold” En el apartado anterior se ha realizado el diseño del circuito acondicionador para cada una de las señales pulsátiles (señal de luz roja y señal de luz infrarroja). Para ello, se había tenido en cuenta que cada LED emisor estaría encendido de forma constante, por lo que el fotodetector habría estado recibiendo continuamente la mezcla de las señales roja e infrarroja transmitidas a través del dedo. Debido a que es necesario que las muestras que se tomen de ambas señales se haga en el mismo instante de tiempo, hay que buscar la forma de hacerlo sin tener ambos LED emisores encendidos a la vez. Esto nos plantea un problema, pues no podemos tener ambos LED emisores encendidos al mismo tiempo, pues las señales se mezclarían y al recibirlas con el fotodetector no podríamos separar la parte roja de la infrarroja. Por tanto, esto nos obliga a encender los LED emisores de forma alterna, mientras uno de ellos está encendido, el otro tiene que estar necesariamente apagado. Dado que tenemos que tomar muestras en el mismo instante de tiempo de ambos tipos de señales, lo que haremos será reducir al máximo el tiempo de separación entre el encendido de cada LED. Además, el período de encendido y apagado de cada LED será lo suficientemente pequeño como para tomar el suficiente número de muestras para poder representar la señal correctamente. Un ejemplo de la alternancia en el encendido de los dos LED emisores podría ser el representado en la siguiente figura: 38 Resultados Ilustración 5.12 Encendido de los LEDs emisores Vemos que tanto el LED rojo como el infrarrojo se encienden una vez cada milisegundo, por lo que podemos tomar una muestra de cada tipo de señal en cada milisegundo, lo que nos permitiría obtener 1000 muestras de la señal en cada segundo. El tiempo de separación entre el encendido del LED rojo y el encendido del LED infrarrojo es de 500 microsegundos, por lo que podemos considerar que las muestras de cada tipo de señal se han obtenido en el mismo instante de tiempo y que la señal no ha variado entre la toma de la muestra roja y la toma de la muestra infrarroja. Por último, el tiempo que pasa encendido cada LED en el ejemplo anterior es de 50 microsegundos. El hecho de tener que ir alternando entre luz roja y luz infrarroja, nos plantea otro problema a tener en cuenta: el tiempo de carga del circuito desde que se enciende el LED y hasta que podemos tomar una muestra fiable, antes de apagar el LED y encender el otro. Y es que ocurre que, cuando apagamos uno de los LED, el circuito y sus condensadores, empiezan a descargarse, hasta que se enciende el LED contrario, con otra intensidad de luz diferente. Esto hace imposible tomar muestras de la señal roja e infrarroja lo suficientemente cercanas en el tiempo como para considerar que se han tomado en el mismo instante. El problema anterior nos obliga a dos cosas: por un lado, tenemos que crear dos circuitos iguales, uno para tratar la señal roja y otro para la infrarroja (como se comentaba en el apartado 3, en el diseño del circuito acondicionador). Por otro lado, en cada uno de los dos circuitos, tenemos que conseguir mantener la señal de cada luz durante los períodos en los que el LED emisor se encuentra apagado, para evitar la descarga de los condensadores. Para conseguir lo anterior, se propone la utilización de un circuito de muestreo y retención, también conocido como Sample & Hold. Este circuito muestrea la señal analógica de entrada y la mantiene durante un tiempo determinado, conteniendo el nivel de alterna y de continua para evitar la descarga del circuito posterior ante la falta de luz cuando se apaga el emisor. Esto va a permitir reducir en gran medida el consumo. 39 Resultados El circuito más habitual de muestreo y retención almacena la carga eléctrica en un condensador. Además, contiene un interruptor y dos amplificadores operacionales: Ilustración 5.13 Circuito Sample & Hold Para muestrear la señal de entrada se cierra el interruptor, por lo que queda conectado el condensador a la salida del amplificador operacional de entrada. La salida de este amplificador carga o descarga el condensador, según la señal de entrada analógica. Para mantener la señal se abre el interruptor, desconectando el condensador del amplificador operacional de entrada. Aunque el condensador presenta corrientes de fuga, la pérdida de voltaje es mínima dado que es muy poco el tiempo que se mantiene abierto el interruptor. El tiempo en el que se mantenga abierto el interruptor será el tiempo que esté apagado el LED de interés más el tiempo que esté encendido el LED contrario. Por tanto, sólo cerraremos el interruptor cuando esté encendido el LED de interés, momento en el cual tomaremos una muestra. En resumen, el circuito de muestreo y retención se usa para dar tiempo a los condensadores de la etapa de filtrado siguiente a que se carguen o descarguen, pues en el cambio de luz roja a infrarroja y viceversa se observa un retraso importante en la señal analógica hasta que se estabiliza. Por ello también la decisión de crear dos ramas de circuito, una para cada tipo de longitud de onda de la señal. El valor del condensador de este circuito, debe ser lo suficientemente pequeño como para que se cargue rápido y sea capaz de seguir a la señal de entrada, y a su vez, lo suficientemente grande como para mantener la tensión durante el tiempo en el que el interruptor está abierto. Para nuestro caso concreto, hemos elegido un valor de 10 uF. El circuito de muestreo y retención lo ubicaremos después de la etapa de conversión de corriente a voltaje, y antes del primer filtrado (paso bajo). De este modo, podemos aprovechar la primera parte del circuito (fotodetector y conversión de corriente a voltaje) para ambas longitudes de onda. 40 Resultados De este modo, el circuito definitivo queda de la siguiente manera: Ilustración 5.14 Circuito para obtención de señales roja e infrarroja 5.1.3.5 Placas de circuito impreso Haciendo uso de una fresadora ProtoMat S62 LPKF, se han implementado los circuitos descritos en los apartados anteriores en placas de circuito impreso. Por un lado, se realizaron dos placas para el sensor óptico, una de ellas para los LEDs emisores y la otra para el fotodetector: Ilustración 5.15 Placas de circuito impreso para el sensor óptico Estas dos placas se montaron enfrentadas la una frente a la otra dentro de una caja donde poder introducir el dedo entre medio de ellas. 41 Resultados Por otro lado, se construyó una placa con el circuito analógico acondicionador de la señal para cada longitud de onda. Se muestra a continuación una de las placas: Ilustración 5.16 Placa de circuito impreso del circuito analógico para una de las dos longitudes de onda Las funciones de los pines indicados son las siguientes: A. B. C. D. E. F. G. H. I. J. K. L. M. Alimentación de 5 V y tierra, se conecta a los pines de 5V y tierra del Arduino. Tensión de referencia de 3.3 V, se conecta al pin de 3.3V del Arduino. Control de encendido del LED IR, se conecta el pin D11 del Arduino. Conexión del LED IR. Control de encendido del LED R, se conecta el pin D12 del Arduino. Conexión del LED R. Conexión del fotodetector. Control de apertura y cierre del interruptor del “Sample & Hold”. Jumper que en una posición mantiene cerrado el interruptor y en la otra atiende a la señal de control. Conexión para condensador del circuito “Sample & Hold”. Conexión para resistencia de la etapa amplificadora. Señal procesada, se conecta al PIN A6 (señal roja) o A7 (señal infrarroja) del Arduino. PIN para unir los circuitos de cada longitud de onda en el punto común, después de la etapa de conversión de corriente a voltaje y antes del “Sample & Hold”. 42 Resultados 5.1.4 Procesado software de las señales En los apartados anteriores, hemos implementado los circuitos para emisión de luz roja e infrarroja, el fotodetector y el circuito para acondicionar la señal de forma que sea apta para el cálculo del pulso cardíaco y de la saturación de oxígeno en sangre. En los siguientes apartados, vamos a conectar la salida del circuito acondicionador a uno de los pines de entrada analógica de los que dispone el Arduino, el cual digitalizará la señal y realizará los cálculos para obtener el pulso cardíaco y la saturación de oxígeno en sangre. 5.1.4.1 Digitalización de la señal pulsátil El Arduino Nano posee 8 entradas analógicas, cada unas de ellas provee de 10 bits de resolución (1024 valores diferentes). Por defecto miden entre 5 voltios y masa, sin embargo, es posible cambiar el rango superior usando la función analogReference( ). Esta función configura el voltaje de referencia usado por la entrada analógica, de forma que asigna un valor de 1023 para aquella tensión de entrada que sea igual a la tensión de referencia. Los parámetros posibles para esta función son: -­‐ -­‐ -­‐ DEFAULT: es el valor de referencia por defecto, 5 V para el Arduino Nano. INTERNAL: es una referencia interna de 1.1 V para el Arduino Nano. EXTERNAL: se utiliza una tensión de referencia externa que tiene que se conectada al pin AREF del Arduino. En nuestro caso, utilizaremos la tensión de referencia por defecto de 5 V, por tanto, se devolverá el valor 0 para una tensión de 0 V y el valor 1023 para una tensión de 5V. Para realizar la lectura del valor de la señal analógica, se utiliza la función analogRead (pin), la cual lee el valor de tensión en el pin analógico especificado. El conversor analógico a digital, al ser de 10 bits, convertirá las tensiones entre 0 y 5 voltios a un número entero entre 0 y 1023. La resolución en la lectura es: 5 voltios/1024 unidades, es decir, 4.9 mV por unidad. El parámetro de la función analogRead (pin) es el número del pin de la entrada analógica que queremos leer (0 a 7 para el Arduino Nano). Mediante un sencillo código programado y cargado en el Arduino, podemos capturar fácilmente la señal pulsátil y enviarla al ordenador mediante la conexión USB, que en realidad se configura la transmisión como si de un puerto serie se tratase. Conforme se van recibiendo los datos en el ordenador, los trataremos con Matlab para representar la señal en tiempo real. 43 Resultados El siguiente código en Arduino mantiene encendido el LED emisor de forma constante (en este caso el rojo, para el infrarrojo sería equivalente) a la vez que va capturando y enviando por el puerto serie la señal digitalizada (captura una muestra de la señal y la envía cada 20 milisegundos): int LED_R = 12; // LED ROJO conectado en el P IN 12 int LED_IR = 11; // LED IR conectado en el PIN 11 int SENSOR = 2; // SENSOR conectado en el PIN analógico 2 int SENSOR_VALOR_R = 0; // Lectura del sensor para luz roja encendida int SENSOR_VALOR_IR = 0; // Lectura del sensor para luz infrarroja encendida void setup() { pinMode (LED_R, OUTPUT); // Configuración del P IN LED_R como salida pinMode (LED_IR, OUTPUT); // Configuración del P IN LED_IR como salida pinMode (SENSOR, INPUT); // Configuración del P IN SENSOR como entrada analogReference (DEFAULT); // Configuración de la tensión de referencia por defecto (5 V) Serial.begin(9600); // Configuración para la transmisión de los datos por el puerto serie } void loop() { digitalWrite (LED_R, HIGH); // Encendido del LED rojo SENSOR_VALOR_R = analogRead (SENSOR); // Lectura del pin analógico del sensor Serial.println (SENSOR_VALOR_R); // Envío del valor por el puerto serie delay (20); // Espera de 20 mseg antes de tomar la siguiente muestra de la señal } Además de las funciones explicadas anteriormente, se han utilizado estas otras: -­‐ -­‐ -­‐ -­‐ -­‐ pinMode (pin, modo): configura el pin especificado para que se comporte como una entrada (INPUT) o como una salida (OUTPUT). digitalWrite (pin, valor): escribe un valor alto (HIGH) o bajo (LOW) en el pin digital indicado. Si el pin ha sido configurado como salida, el voltaje del valor HIGH es de 5 voltios y el del valor LOW es de 0 voltios. delay (ms): pausa el programa durante el tiempo (en milisegundos) especificado en el parámetro. Serial.begin (rate): abre el puerto serie y fija la velocidad en baudios para la transmisión de datos en serie. El valor típico para comunicarse con el ordenador es 9600 baudios. Serial.println (datos): imprime los datos en el puerto serie, seguido por un retorno de carro y salto de línea. 5.1.4.2 Digitalización de dos señales pulsátiles En el apartado anterior se ha realizado la digitalización de sólo una de las señales pulsátiles. Sólo con una de estas señales ya digitalizada, podríamos calcular sin problemas el pulso cardíaco. Sin embargo, para calcular la saturación de oxígeno 44 Resultados tenemos que introducir la segunda señal, y además es necesario que las muestras que se tomen de ambas señales se haga en el mismo instante de tiempo. Como se explicó en el capítulo 3, el siguiente circuito de muestreo y retención nos permitirá obtener las dos señales de manera simultánea: Ilustración 5.17 Circuito Sample & Hold El circuito anterior nos va a permitir representar las dos señales pulsátiles de ambas longitudes de onda, de forma simultánea. Para ello, habrá que modificar el código introducido en Arduino en el apartado 4.1, de forma que no mantenga encendido de forma continua sólo uno de los LED emisores, si no que vaya encendiendo y apagando de forma alterna cada uno de ellos de la forma que se ha explicado en el apartado anterior. Básicamente, el programa a introducir en el microcontrolador debe seguir los siguientes pasos, partiendo de la situación en la que los LED emisores están apagados y los interruptores están abiertos: 1. Encender el LED rojo 2. Cerrar el interruptor del circuito de la señal roja 3. Esperar un tiempo para que la señal se estabilice 4. Leer muestra de la señal roja recibida 5. Abrir el interruptor del circuito de la señal roja 6. Apagar LED rojo 7. Esperar un tiempo con ambos LED apagados (opcional) 8. Encender el LED infrarrojo 9. Cerrar el interruptor del circuito de la señal infrarroja 10. Esperar un tiempo para que la señal se estabilice 11. Leer muestra de la señal infrarroja recibida 12. Abrir el interruptor del circuito de la señal infrarroja 13. Apagar LED infrarrojo 14. Esperar un tiempo con ambos LED apagados (opcional) De esta forma, mientras tenemos el interruptor de uno de los circuitos abierto, estamos aislando al circuito del resto, y manteniendo la señal que recibía mientras estaba cerrado gracias al condensador. Así, al tenerlo aislado, no se ve afectado por el encendido del LED opuesto o por la ausencia de luz en el caso que ambos LEDs estén apagados. 45 Resultados Para controlar la apertura y el cierre de los interruptores, utilizamos dos pines digitales del Arduino, configurados como salida (PIN 10 para el interruptor del circuito de la señal roja y PIN 9 para el de la señal infrarroja). Por otro lado, se han configurado los pines 6 y 7 como entrada analógica para recibir la señal roja y la señal infrarroja respectivamente. El código implementado en Arduino puede consultarse en el Anexo A. Ahora que se han digitalizado las dos señales pulsátiles con la calidad suficiente, estamos en condiciones de poder calcular tanto el pulso cardíaco como el porcentaje de saturación de oxígeno. Realizar estos cálculos va a requerir de un procesamiento de la señal que realizará el propio microcontrolador, para encontrar y medir los puntos claves de la señal y el instante en el que ocurren, y así disponer de los datos necesarios para calcular dichos parámetros. 5.1.4.3 Cálculo del pulso cardíaco Como definimos en el capítulo primero, el pulso cardíaco es el número de contracciones o pulsaciones del músculo cardíaco por unidad de tiempo. En nuestro caso, utilizaremos como unidad de tiempo el minuto, por tanto, mediremos el pulso cardíaco como el número de pulsaciones por minuto. Es sencillo ver cómo el pulso cardíaco está relacionado con el período de la señal pulsátil que hemos obtenido en el capítulo anterior. Un período completo de la señal pulsátil se corresponde con una pulsación del corazón. Midiendo el tiempo que dura un período, podemos conocer el número de pulsaciones por minuto. Ilustración 5.18 Duración de un pulso cardíaco Para calcular el tiempo que dura una pulsación, podemos hacerlo de diferentes formas: • • • Midiendo el tiempo entre dos máximos de la señal Midiendo el tiempo entre dos mínimos de la señal Midiendo el tiempo entre cruces por cero 46 Resultados Encontrar los máximos y mínimos de esta señal puede ser una tarea complicada y que implique más líneas de código en Arduino, lo que conlleva también más complejidad y un mayor tiempo de procesado. Sin embargo, si a la hora de calcular el porcentaje de saturación de oxígeno nos decantásemos por el método de picos y valles para el cálculo del ratio, entonces podríamos utilizar los máximos y mínimos encontrados para calcular el pulso cardíaco. No va a ser el caso, pues como veremos en el próximo apartado, utilizaremos el método de absorción delta para el cálculo del ratio. Visto esto, evitaremos por tanto buscar máximos y mínimos en la señal y calcularemos el pulso cardíaco buscando los pasos por cero de la señal. En concreto, como nuestra señal no está centrada en cero, será necesario calcular la media de la señal y buscar los puntos en los que la señal corta el valor medio. Para encontrar un período completo, buscaremos los momentos en los que la señal pase de estar por encima de la media a estar por debajo de la misma. Si se quisiera, también valdría buscar los puntos contrarios, es decir, los puntos en los que la señal pase de estar por debajo de la media a estar por encima de ella: Ilustración 5.19 Medición de período de la señal roja Necesitaremos una sola de las dos señales pulsátiles para realizar el cálculo de la frecuencia cardíaca, se ha elegido la señal roja. Debemos implementar en Arduino un código que sea capaz de realizar, por un lado, el cálculo de la media de la señal y, por otro lado, encuentre los momentos en que la señal pasa de estar por encima de la media a estar por debajo. Será capaz de medir el tiempo transcurrido entre dos de estos instantes que sean consecutivos. Arduino medirá este tiempo en milisegundos, por lo que la fórmula final para obtener la frecuencia cardíaca en pulsaciones por minuto será: 𝑃𝑢𝑙𝑠𝑜 𝐶𝑎𝑟𝑑í𝑎𝑐𝑜 = 60000 𝑀𝐸𝐷𝐼𝐴_𝑃𝐸𝑅𝐼𝑂𝐷𝑂𝑆 Tal y como se vio en el capítulo anterior, Arduino va a controlar el encendido y apagado alterno de los LEDs. Un ciclo completo durará 2 milisegundos en esta ocasión, durante el primer milisegundo se encenderá el LED rojo y se leerá el nivel de señal, y durante el 47 Resultados segundo milisegundo se hará lo mismo con el LED infrarrojo. Esto se hará de manera continuada, sin embargo, no obtendremos una muestra de cada señal pulsátil cada ciclo, si no que esperaremos 100 ciclos entre cada muestra de las señales. Por tanto, tendremos una muestra de cada señal cada 200 milisegundos. El código implementado en Arduino para esto se muestra a continuación: // Ciclos de encendido y apagado alterno de los LEDs emisores // Cada ciclo tiene una duración total de 2 milisegundos (100 ciclos = 200 milisegundos) for (CICLOS = 0; CICLOS <= 100; CICLOS++) { digitalWrite (LED_R, HIGH); // Encendido del LED rojo delayMicroseconds (10); // Espera para encendido completo del LED digitalWrite (INTERRUPTOR_R, HIGH); // Cierre del interruptor rojo delayMicroseconds (960); // Espera para estabilización de señal SENSOR_VALOR_R = analogRead (SENSOR_R); // Lectura del pin analógico del sensor rojo digitalWrite (INTERRUPTOR_R, LOW); // Apertura del interruptor rojo delayMicroseconds (10); // Espera para apertura completa del interruptor digitalWrite (LED_R, LOW); // Apagado del LED rojo delayMicroseconds (20); digitalWrite (LED_IR, HIGH); // Encendido del LED infrarrojo delayMicroseconds (10); // Espera para encendido completo del LED digitalWrite (INTERRUPTOR_IR, HIGH); // Cierre del interruptor infrarrojo delayMicroseconds (960); // Espera para estabilización de señal SENSOR_VALOR_IR = analogRead (SENSOR_IR); // Lectura del pin analógico del sensor IR digitalWrite (INTERRUPTOR_IR, LOW); // Apertura del interruptor infrarrojo delayMicroseconds (10); // Espera para apertura completa del interruptor digitalWrite (LED_IR, LOW); // Apagado del LED infrarrojo delayMicroseconds (20); } CICLOS = 0; NUM_MUESTRAS = NUM_MUESTRAS+1; // Se coge una muestra cada 200 milisegundos A continuación, se explica el código a implementar para la búsqueda de los cruces de la señal por el valor medio. El programa actualizará el valor de las pulsaciones por minuto cada siete segundos. Durante los primeros 3 segundos de proceso, se calculará sólo la media de la señal. A partir del tercer segundo, y durante 4 segundos más, además de seguir actualizando el valor de la media, comenzaremos a buscar los cruces por cero. Nos quedaremos con los cruces en los que la señal pasa de estar por encima de la media a estar por debajo. En el momento en que se detecte un cruce, iniciaremos el contador de tiempo y lo almacenaremos en una variable (TIEMPO_INI_PULSO). Cuando se encuentre el siguiente cruce por cero, se vuelve a capturar el tiempo en el que ha ocurrido y calcularemos el tiempo transcurrido desde el anterior cruce. Éste será el valor del período. Seguiremos calculando la período tras cada cruce durante los segundos de procesamiento antes de mostrar el valor de la frecuencia cardíaca, y calcularemos una 48 Resultados media de todo los períodos. Éste valor medio será el que utilicemos finalmente para el cálculo de las pulsaciones por minuto. El código en Arduino que hemos creado para encontrar los cruces y calcular la frecuencia cardíaca es el siguiente: // El valor del pulso se calcula y se m uestra cada 7 segundos if (NUM_MUESTRAS <= 35) { MEDIA = (MEDIA*(NUM_MUESTRAS-­‐1) + SENSOR_VALOR_R)/NUM_MUESTRAS; // Durante los primeros 3 segundos sólo se ha calculado la media de la señal roja // Si han pasado los 3 primeros segundos, empezamos a buscar los cruces if (NUM_MUESTRAS > 15) { if (SENSOR_VALOR_R_ANT > MEDIA && SENSOR_VALOR_R < MEDIA) { // Se detecta un cruce TIEMPO_INI_PULSO = millis(); // Se captura el tiempo en el que se produce el cruce if (NUM_CRUCES == 0) { // Si es el primer cruce encontrado TIEMPO_INI_PULSO_ANT = TIEMPO_INI_PULSO; } if (NUM_CRUCES >= 1) { // A partir del segundo cruce encontrado // Se calcula el período entre este cruce y el anterior PERIODO = TIEMPO_INI_PULSO -­‐ TIEMPO_INI_PULSO_ANT; TIEMPO_INI_PULSO_ANT = TIEMPO_INI_PULSO; // Se calcula una media entre los períodos encontrados hasta el momento MEDIA_PERIODOS = (MEDIA_PERIODOS*(NUM_CRUCES-­‐1) + PERIODO)/NUM_CRUCES; } NUM_CRUCES = NUM_CRUCES+1; } } } else { // Calculamos y mostramos el valor del pulso cardíaco PULSO_CARD = 60000/MEDIA_PERIODOS; Serial.print ("Pulso cardiaco = "); Serial.println (PULSO_CARD); } 5.1.4.4 Cálculo del porcentaje de saturación de oxígeno en sangre Recordamos de los capítulos 2 y 3 que la saturación de oxígeno en sangre es el porcentaje de hemoglobina oxigena frente a la cantidad de hemoglobina total (oxigenada más desoxigenada). También vimos que la hemoglobina oxigenada absorbe más la luz infrarroja, mientras que la hemoglobina reducida (o desoxigenada) absorbe más la luz roja. De la relación entre las intensidades de la señal transmitida a través del dedo para ambas longitudes de onda, obteníamos el ratio: 𝑑𝐴!! 𝑅= 𝑑𝐴!! 49 Resultados Este ratio se podía calcular por varios métodos, el más usual es el de picos y valles. Sin embargo, nos vamos a decantar por el método de absorción delta, pues es más sencillo de implementar en el microcontrolador y además requiere de menos carga computacional. Aprovechando que, como hemos dicho en la sección anterior, obtenemos una muestra de cada tipo de señal cada 200 milisegundos, tan sólo tendremos que ir almacenando la muestra anterior y la muestra actual para poder calcular la absorción delta de cada longitud de onda mediante la siguiente fórmula: 𝐼! − 𝐼!!! 𝑑𝐴! = 𝐼! + 𝐼!!! 2 Por tanto, cada 200 milisegundos, con cada muestra, iremos calculando un ratio. De esta forma, durante los 4 segundos que dura el proceso de cálculo, obtendremos muchos ratios, por lo que calcularemos la media de todos ellos y será esta media la que usaremos para el cálculo del porcentaje de saturación de oxígeno: 𝑆𝑎𝑂! (%) = 115 − 30 ∙ 𝑀𝐸𝐷𝐼𝐴_𝑅𝐴𝑇𝐼𝑂 Las líneas de código que serán cargadas en Arduino para realizar estos cálculos son las siguientes: // El valor de la saturación de oxígeno se calcula y se muestra cada 7 segundos if (NUM_MUESTRAS <= 35) { // Si han pasado los 3 primeros segundos, empezamos a buscar los cruces if (NUM_MUESTRAS > 15) { // Utilizamos el método de absorción delta para el cálculo del ratio dA_R = (SENSOR_VALOR_R-­‐SENSOR_VALOR_R_ANT)*2/(SENSOR_VALOR_R+SENSOR_VALOR_R_ANT); dA_IR = (SENSOR_VALOR_IR-­‐SENSOR_VALOR_IR_ANT)*2/(SENSOR_VALOR_IR+SENSOR_VALOR_IR_ANT); RATIO_PROV = dA_IR/dA_R; // Si el ratio provisional sale infinito, no se tiene en cuenta y se usa el ratio anterior para la media if (RATIO_PROV != INFINITY) { RATIO = R ATIO_PROV; } // Se calcula una media entre los ratios calculados hasta el momento MEDIA_RATIO = (MEDIA_RATIO*(NUM_MUESTRAS-­‐16)+RATIO)/(NUM_MUESTRAS-­‐15); SENSOR_VALOR_R_ANT = SENSOR_VALOR_R; SENSOR_VALOR_IR_ANT = SENSOR_VALOR_IR; } } else { // Calculamos y mostramos el valor del porcentaje de saturación de oxígeno SAO2 = 115-­‐(30*MEDIA_RATIO); Serial.print ("Saturacion de oxigeno = "); Serial.println (SAO2); } 5.1.4.5 Otros métodos de cálculo Durante el desarrollo del programa en Arduino, aunque como se ha visto se decidió utilizar el método de absorción delta para el cálculo de la saturación de oxígeno, 50 Resultados también se desarrolló un programa utilizando el método de picos y valles. Pasamos a explicarlo brevemente y se puede consultar el código en el Anexo A. Fundamentalmente, el programa va a analizar cada muestra de la señal roja. Si la muestra está por encima de la media de la señal y es superior al valor almacenado como máximo provisional, se almacena como nuevo máximo provisional. Si la muestra está por debajo de la media de la señal y es inferior al valor almacenado como mínimo provisional, se almacena como nuevo mínimo provisional. Tendremos dos variables auxiliares, cuando una de ellas está a 1, la otra estará a 0. Van a indicar si estamos buscando un máximo o si estamos buscando un mínimo, según cuál esté a 1 y cuál a 0. Si detectamos un cruce y pasamos de estar por encima de la media a estar por debajo, y está activa la variable que indica que buscamos un máximo, almacenamos como máximo definitivo el último valor de máximo provisional. Hacemos lo mismo para guardar un mínimo, cuando detectemos que la señal cruza de estar por debajo de la media a estar por encima y la variable de buscar mínimo está activa. Cada vez que encontremos un máximo o mínimo de la señal roja, almacenaremos también el valor de la señal infrarroja, pues en ella los máximos y mínimos se producen a la vez que en la señal roja. Una vez encontrados los máximos y mínimos, y habiendo almacenado los instantes en que ocurren, podemos calcular el período de igual forma que hemos visto para el método de absorción delta, midiendo la distancia temporal entre ellos. Con esto obtenemos el pulso cardíaco. Para la saturación de oxígeno, al tener los máximos y los mínimos, podemos calcular fácilmente el valor de las amplitudes de las señales roja e infrarroja, dividirlas entre sí para obtener el ratio y con éste, calcular la saturación de oxígeno. 5.2 EXPERIMENTOS DE VALIDACIÓN DEL PULSIOXÍMETRO En este apartado se presentarán los resultados obtenidos del diseño del pulsioxímetro visto en el capítulo anterior. Representaremos las señales pulsátiles obtenidas tanto en el laboratorio (utilizando el osciloscopio) como las señales obtenidas en Arduino tras digitalizarlas (representadas con Matlab). Se realizará una validación técnica de las señales obtenidas en las diferentes etapas, comparándolas con las señales esperadas de acuerdo al esquema de sensorización propuesto. Finalmente, se realizará una validación funcional del dispositivo, comparando los valores obtenidos con un pulsioxímetro comercial. 5.2.1 Validación técnica en laboratorio Utilizando el osciloscopio, vamos a representar las señales obtenidas tras cada etapa del circuito. De esta forma, iremos comprobando que cada sección del circuito cumple con las modificaciones de la señal que se esperan. Para ello, vamos a mostrar los resultados obtenidos en las pruebas con la señal de la luz roja. 51 Resultados En el siguiente esquemático mostramos de nuevo la primera etapa del circuito, que consiste en la conversión de corriente a voltaje: Ilustración 5.20 Circuito conversor corriente a voltaje El circuito anterior tiene la ventaja de que es muy sencillo de implementar, requiere de pocos componentes, por lo que además nos ahorra espacio. Sin embargo, aunque se está obteniendo la señal pulsátil, ésta es muy débil (amplitud pico a pico de 12 mV aproximadamente). La señal medida en el osciloscopio, con el dedo interpuesto entre el LED emisor y el fotodetector, se muestra a continuación: Ilustración 5.21 Señal obtenida en osciloscopio tras conversor de corriente a voltaje 52 Resultados Como podemos comprobar, la señal pulsátil se superpone a una componente de continua que es aproximadamente 200 veces mayor que la amplitud de la señal alterna. Esto supone un problema a la hora de amplificar la señal, pues también se amplificaría el nivel de continua, saturando rápidamente el amplificador operacional. Es necesario eliminar el nivel de continua antes de realizar la amplificación y transmisión de la señal. Además, existe gran cantidad de ruido, que puede atribuirse a varias fuentes: ruido de la línea de energía, movimiento del dedo, ruidos por fuentes de luz del entorno, etc. Por tanto, para evitar que el ruido corrompa la señal, y para evitar amplificarlo, será necesario eliminarlo antes de las etapas de amplificación y transmisión. Para realizar esto, recordamos la etapa de filtrado paso de banda diseñada en el capítulo anterior: Ilustración 5.22 Circuito filtro paso banda La señal obtenida en el osciloscopio tras pasar el filtrado paso bajo es la siguiente: Ilustración 5.23 Señal obtenida en osciloscopio tras filtro paso bajo 53 Resultados Se puede comprobar cómo el filtro paso bajo está eliminando el ruido, obteniendo una señal mucho más limpia en la que se aprecia perfectamente la componente pulsátil (se están eliminando todas las frecuencias por encima de 5 Hz). Antes de pasar a ver la señal obtenida tras el filtro paso alto, vamos a indicar que la tensión de referencia que hemos utilizado en todo momento para este circuito no ha sido tierra, si no 3.3 voltios. Esta tensión la obtenemos de un PIN del microcontrolador Arduino, que nos da directamente este valor. La razón para utilizar esta tensión de referencia en lugar de tierra es que nos sitúa la señal de interés alrededor de 3.3 V en todo momento, en lugar de alrededor de 0 V, tras eliminar el offset. Como estamos alimentando los amplificadores operacionales con una tensión de +5 V, la tensión máxima que son capaces de sacar ronda los 4.5 V, y la mínima de unos 2 V, por tanto, si eliminamos la componente de continua y la señal de interés se mueve alrededor de 0 V, la señal no se amplifica. Esta es la razón de centrar la señal en el punto medio entre el valor máximo y mínimo que son capaces de sacar los amplificadores operacionales, eligiendo el valor 3.3 V porque podemos obtenerlo fácilmente directamente de un PIN del Arduino. Esto nos permite una amplitud pico a pico máxima de la señal de interés de 2 V aproximadamente, suficiente para realizar lecturas correctas, teniendo en cuenta que la entrada analógica del Arduino digitaliza en 1024 valores (10 bits) una señal de entrada entre 0 y 5 voltios, una señal de 2 V de amplitud tiene una resolución de unos 410 valores (cada valor representa 4,8 mV). Una vez aclarado esto, pasamos a mostrar la señal obtenida en el osciloscopio tras aplicar el filtrado paso alto: Ilustración 5.24 Señal obtenida en osciloscopio tras filtro paso alto 54 Resultados El resultado del filtrado es el mismo, independientemente de la tensión que se utilice como referencia, con la única diferencia que la señal de salida estará centrada en el valor que se esté utilizando como referencia (con algún desplazamiento provocado por lo propios componentes del circuito y por los amplificadores operacionales). Se ha optado por utilizar la de 3.3 V por dos motivos ya explicados: se puede obtener fácilmente de un PIN del Arduino y además es la tensión media entre las tensiones máxima y mínima que soportan los amplificadores operacionales con una alimentación de 5V, lo que permite que podamos amplificar lo máximo posible antes de que se llegue a saturar por arriba o por abajo. Por último, podemos comprobar que la amplitud de la señal a la salida del filtro paso banda sigue siendo pequeña, en torno a 9 o 10 mV, por lo que será necesario añadir una etapa amplificadora. A continuación se muestra de nuevo el circuito de la etapa amplificadora. En el laboratorio, se utilizaron los siguientes valores en el circuito para representar la señal amplificada en el osciloscopio: R1=1 KΩ y R2=100 KΩ. Con estos valores, se consigue una ganancia de 101: Ilustración 5.25 Etapa amplificadora: ganancia 101 La señal obtenida fue: Ilustración 5.26 Señal obtenida en osciloscopio tras etapa amplificadora 55 Resultados Podemos comprobar que hemos pasado a obtener una amplitud pico a pico de la señal de unos 1.20 V. Tras esta etapa, ya disponemos de una señal pulsátil con calidad suficiente como para poder realizar los cálculos del pulso cardíaco y de la saturación de oxígeno. 5.2.2 Validación técnica en Arduino Las señales mostradas hasta el momento, han sido obtenidas en el laboratorio con el osciloscopio, midiendo directamente a las salidas de los diferentes bloques que forman el circuito acondicionador. A continuación vamos a conectar la salida del circuito acondicionador a uno de los pines de entrada analógica de los que dispone el Arduino, el cual digitalizará la señal y comprobaremos que la nueva señal digital se corresponde con la señal pulsátil a la entrada del microcontrolador. Mediante el código programado y cargado en el Arduino mostrado en el apartado 5.1.4.1, podemos capturar fácilmente la señal pulsátil y enviarla al ordenador mediante la conexión USB. Se reciben muestras de la señal cada 20 milisegundos en el ordenador, utilizando un código en Matlab que permite leer los valores que se reciben en modo serie por el puerto USB vamos a representar la señal digitalizada. La señal pulsátil obtenida encendiendo el LED rojo es la siguiente: Ilustración 5.27 Señal pulsátil digitalizada por Arduino (LED rojo encendido) 56 Resultados La señal pulsátil obtenida encendiendo el LED infrarrojo es la siguiente: Ilustración 5.28 Señal pulsátil digitalizada por Arduino (LED infrarrojo encendido) Con sólo una de estas señales ya digitalizada, podríamos calcular sin problemas el pulso cardíaco. Sin embargo, para calcular la saturación de oxígeno tenemos que introducir la segunda señal, y además es necesario que las muestras que se tomen de ambas señales se haga en el mismo instante de tiempo. Haciendo uso del código software explicado en el apartado 5.1.4.2 y gracias a la implementación de la etapa “Sample & Hold”, mediante una rutina en Matlab podemos representar las dos señales digitalizadas (roja e infrarroja) a la vez. Se muestran a continuación: Ilustración 5.29 Señales pulsátiles roja e infrarroja digitalizadas por Arduino Ahora que se han obtenido las dos señales pulsátiles con la calidad suficiente, estamos en condiciones de poder calcular tanto el pulso cardíaco como el porcentaje de saturación de oxígeno. Realizar estos cálculos va a requerir de un procesamiento de la 57 Resultados señal que realizará el propio microcontrolador y que han sido explicados en los apartados 5.1.4.3 y 5.1.4.4, para encontrar y medir los puntos claves de la señal y el instante en el que ocurren, y así disponer de los datos necesarios para calcular dichos parámetros. 5.2.3 Validación funcional del prototipo El dispositivo ha sido validado de forma funcional comparando los resultados obtenidos respecto a un dispositivo comercial estándar modelo CMS50DL de la marca Quirumed para la medida de la saturación de oxígeno en sangre y la frecuencia cardíaca, lo que pone de manifiesto la viabilidad del método y la técnica empleada. Introduciendo el dedo en el sensor óptico, entre los LEDs emisores y el fotodetector, obtenemos los valores de estos parámetros que se actualizan cada 7 segundos y son mostrados por pantalla en un ordenador a través del monitor serie incorporado en el IDLE de Arduino. La conexión al ordenador ha sido mediante cable USB, transmitiendo los datos en modo serie, como ya se ha descrito en otros capítulos. Si se quisiera, se podría modificar el tiempo de actualización de los datos, pudiéndose incrementar o disminuir. En cualquier caso, con el código que se ha creado, sería recomendable actualizar los datos como mínimo cada 4 o 5 segundos, para dar tiempo a leer varios pulsos o poder calcular una media de los valores y dar de esta forma datos más fiables. A continuación se muestran algunos de estos valores obtenidos en pruebas realizadas en dos individuos, el valor de pulso cardíaco son pulsaciones por minuto y el de la saturación de oxígeno es en porcentaje: Ilustración 5.30 Valores obtenidos de pulso cardíaco y porcentaje saturación de oxígeno individuo 1 58 Resultados Podemos ver que los valores habituales de saturación de oxígeno en sangre para personas sin afecciones pulmonares suele estar alrededor del 99%. A continuación, mostramos los valores obtenidos en las pruebas con el segundo individuo: Ilustración 5.31 Valores obtenidos de pulso cardíaco y porcentaje saturación de oxígeno individuo 2 Comprobamos de nuevo que los valores de saturación de oxígeno se encuentran dentro de los valores normales. Si comparamos los valores obtenidos con el prototipo diseñado en ambas pruebas con los valores que se obtienen del dispositivo comercial CMS50DL de la marca Quirumed, observamos que los valores obtenidos son prácticamente los mismos: Individuo 1 Dispositivo comercial Pulso SaO2 (%) 85 99 84 99 86 99 92 99 Individuo 2 Dispositivo comercial Pulso SaO2 (%) 73 99 68 98 65 99 64 99 Prototipo diseñado Pulso 86,43 86,43 86,43 92,59 SaO2 (%) 99,79 98,43 99,65 99,62 Prototipo diseñado Pulso 72,01 69,14 64,82 64,82 SaO2 (%) 99,48 97,80 98,91 99,41 Tabla 5.1 Comparativa entre prototipo diseñado y dispositivo comercial Los experimentos realizados ponen de manifiesto la validez y viabilidad del sistema en la estimación de la frecuencia cardíaca y la saturación de oxígeno en la sangre. El coste en componentes del prototipo diseñado es muy reducido, y se muestra en la siguiente tabla. Se incluye también el coste que supondría desarrollar un dispositivo con capacidades inalámbricas de bajo consumo (Bluetooth Low Energy o BLE): 59 Resultados COMPONENTE MODELO UNIDADES PRECIO UNITARIO PRECIO LED EMISOR ROJO LUMEX SSL-LXA228SRC-TR11 1 0,29 € 0,29 € LED EMISOR INFRARROJO SHARP GL100MN1MP1 1 1,22 € 1,22 € FOTODETECTOR OSRAM BP104S-Z 1 0,73 € 0,73 € OPERACIONALES LM1458 4 0,31 € 1,24 € INTERRUPTORES TS5A1066DBVR 2 0,12 € 0,24 € RESISTENCIAS Y CONDENSADORES RESISTENCIAS Y CONDENSADORES 1 0,90 € 0,90 € MICROCONTROLADOR ARDUINO NANO 3.0 1 7,00 € 7,00 € MÓDULO INALÁMBRICO CC2541 Serial Bluetooth 4.0 BLE Transceiver 1 3,00 € 3,00 € PRECIO TOTAL DE COMPONENTES 14,62 € Tabla 5.2 Tabla de precios de componentes Añadiendo costes de fabricación y distribución, podríamos conseguir un dispositivo con capacidad de comunicación inalámbrica por un precio inferior a 50 Euros. Este precio está muy por debajo de los precios de los dispositivos de mercado sin capacidad de comunicación inalámbrica, y su coste sería hasta 10 veces inferior que el de los pulsioxímetros con comunicaciones inalámbricas. A continuación se muestran algunos modelos de mercado y sus precios: MODELO COMUNICACIONES PRECIO Nonin Go2 LED NO 156 € OXYM6000USB USB 80 € OXYM6100 USB 143 € OXYM7500 WIFI 250 € 866-NONIN3230 Bluetooth 475 € NONIN WristOx2 3150 Bluetooth 700 € Tabla 5.3 Comparativa de pulsioxímetros de mercado 60 Conclusiones 6 Conclusiones El objetivo del presente proyecto ha sido el diseño e implementación de un dispositivo portable para medir el porcentaje de saturación de oxígeno y poder detectar alteraciones en el nivel de oxígeno en sangre del paciente. Se buscaba que este dispositivo, además de portable, fuese sencillo de manejar y sobretodo de bajo coste. Por tanto, se seleccionó una plataforma de hardware y software libre, Arduino, lo que ha permitido que el dispositivo que se ha diseñado sea completamente autónomo y modular. El diseño de este primer prototipo está formado por tres módulos principales: el sensor óptico que produce las señales pulsátiles, el circuito analógico acondicionador para mejorar la calidad de las señales y el microcontrolador para realizar el procesado software y el cálculo de los parámetros. Se han cumplido los objetivos principales que se marcaron a la hora de diseñar el pulsioxímetro. Se ha diseñado un dispositivo autónomo que dispone de capacidades de sensorización, procesado y está dotado de la inteligencia necesaria como para calcular y mostrar por sí mismo los parámetros. Respecto a los sistemas genéricos de mercado para la captura de señales de pulsioximetría, el prototipo propuesto tiene una serie de características propias y diferenciadoras respecto al resto. Por una parte, la utilización del circuito Sample & Hold permite reducir el consumo energético ya que los LEDs pueden ser encendidos durante espacios más breves de tiempo, pudiéndolos mantener apagados la mayor parte del tiempo. Por otro lado, y teniendo en cuenta que el dispositivo está ideado para su uso en un sistema de monitorización en tiempo real, se consigue un importante ahorro energético evitando tener que enviar las señales oximétricas para calcular los parámetros en unidades de procesamiento externas, enviando tan sólo los parámetros ya calculados cada cierto tiempo en caso necesario, aprovechando la inteligencia de la que hemos dotado al dispositivo. Teniendo en cuenta que el consumo de energía en comunicaciones puede suponer un 60% del total, el ahorro energético que conseguimos es importante. En relación al punto anterior, también gracias a la utilización del circuito de muestreo y retención, se consigue obtener las señales biomédicas en tiempo real, pudiendo por tanto calcular el pulso y la saturación de oxígeno también en tiempo real, evitando la necesidad de disponer de capacidades de almacenamiento en el dispositivo, reduciendo hardware y abaratando costes. Otra conclusión del presente trabajo es que respecto a otros dispositivos se ha conseguido obtener señales pulsátiles de calidad diseñando circuitos analógicos que requieren de pocos y sencillos componentes, reduciendo por tanto los recursos hardware utilizados. A su vez, tener estas señales con buena calidad implica que el microcontrolador no necesita grandes prestaciones y los algoritmos de procesamiento software necesarios son sencillos, lo que posibilita su implementación en dispositivos de bajo consumo y coste. Además, gracias al empleo de un algoritmo más sencillo que 61 Conclusiones el método genérico para el cálculo de la saturación de oxígeno, se consigue un menor tiempo de procesado software y se posibilita el procesado en tiempo real. Destacan también la modularidad y posibilidades de ampliación que ofrece el dispositivo, gracias a la utilización de una plataforma de hardware y software abierto. Si se quisiera dotar de comunicación inalámbrica al dispositivo, existen módulos para esto de sencilla instalación, existiendo incluso librerías predefinidas para hacer más fácil la integración software de estos módulos. Al igual que módulos de comunicación inalámbrica, existe la posibilidad de añadir una pantalla o display, conexión USB, otros tipos de sensores como acelerómetros para la monitorización de la actividad física, etc. Finalmente, lo más importante es que se ha conseguido una gran reducción del coste gracias a lo explicado en párrafos anteriores. Además, el componente que suele encarecer más este tipo de dispositivos es el microcontrolador utilizado, que en este caso, al tratarse de hardware libre, lo implementan muchos fabricantes a costes muy competitivos, entre 6 y 7 Euros aproximadamente para el Arduino Nano. Para el resto de componentes (resistencias, condensadores, amplificadores operacionales, diodos y fotodetector) se han empleado componentes genéricos de bajo coste. De este modo aseguramos la sostenibilidad económica del dispositivo desarrollado y una diferenciación importante en coste respecto a los dispositivos actuales de mercado. Incluso dotándole de comunicaciones inalámbricas, el coste del prototipo diseñado está muy por debajo del precio de otros dispositivos, aproximadamente 50 € para nuestro prototipo (incluyendo costes de fabricación y distribución) frente a 500 € para los de mercado. Siguiendo un proceso de desarrollo iterativo, se ha realizado este primer prototipo de pulsioxímetro, el cual ha sido finalmente validado de forma experimental en una serie de experimentos en comparación con un pulsioxímetro comercial, que ponen de manifiesto la viabilidad del dispositivo en la estimación de los valores de frecuencia cardíaca y saturación de oxígeno en sangre. Se pueden proponer una serie de mejoras. Aparte de la ya mencionada de implementar los circuitos analógicos sobre una placa de pequeño tamaño (similar al del Arduino Nano) utilizando componentes SMD, se propone añadir una pantalla o display al controlador, para que muestre los datos y de esta forma el dispositivo sea completamente autónomo y portable. En el prototipo, al no disponer del display, se han mostrado los resultados por puerto serie en un ordenador. Por otro lado, se propone también añadir un módulo para transmisión inalámbrica de los dos parámetros calculados. Éste podría ser un módulo WIFI o bien Bluetooth. De esta forma, además de consultar los parámetros en el display del pulsioxímetro, se podrían enviar los datos a un ordenador, a un centro médico o a una aplicación de móvil por ejemplo. Así el paciente podría llevar un seguimiento o bien se podría alertar al médico en caso de que se detectasen niveles anormales en el nivel de oxígeno. Además, el hecho de haber optado por una plataforma de hardware y software libre, ofrece muchas posibilidades de mejoras y ampliación, pues existen diferentes módulos para conectar a Arduino como los comentados anteriormente. 62 Conclusiones El prototipo diseñado posee las mismas limitaciones que los dispositivos de mercado, como pueden ser: -­‐ -­‐ -­‐ -­‐ -­‐ -­‐ -­‐ -­‐ Anemia severa: niveles de hemoglobina inferiores a 5 mg/dl pueden causar lecturas falsas. Interferencias con otros aparatos electrónicos. Los movimientos del dispositivo, que se suele colocar en un dedo de la mano, afectan a la fiabilidad. Contrastes intravenosos. Luz ambiental intensa. Mala perfusión periférica debida a frío ambiental, hipotensión, vasoconstricción, etc. Obstáculos a la absorción de la luz: lacas de uñas, pigmentación de la piel. Dishemoglobinemias: la carboxihemoglobina (intoxicación por monóxido de carbono) y la metahemoglobina absorben longitudes de onda similares a la oxihemoglobina. Sin embargo, no entra dentro de los objetivos del proyecto ofrecer un manual de utilización del dispositivo. Bibliografía [1] Ateş, G., & Polat, K. (2012). Measuring of Oxygen Saturation Using Pulse Oximeter Based on Fuzzy Logic. [2] http://www.yaramazadam.com/pulse-oksimetre- ve-probu/. Último acceso el 25 de Septiembre de 2015, de http://www.yaramazadam.com/pulse-oksimetre- ve-probu/ [3] Di, G., Tang, X., & Liu, W. (2007). A Reflectance Pulse Oximeter Design Using the MSP430OF149. IEEE/ICME International Conference on Complex Medical Engineering. [4] JH, W., SK, P., & MK, S. (1986). Hemo- globin desaturation in highly trained athletes during heavy exercise. Med Sci Sports Exerc . [5] Shah, A., & Shelley, K. H. (2013). Is pulse oximetry an essential tool or just another distraction? The role of the pulse oximeter in modern anesthesia care. Springer Science+Business Media New York . [6] Marini, J. (1987). Respiratory Medicine for the House Oficer. Williams & Wilkins [7] Mengelkoch, L. J., Lawler, J., & Martin, D. (1994). A Review of the Principles of Pulse Oximetry and Accuracy of Pulse Oxitneter Estimates During Exercise. Journal of the American Physical Therapy Association . [8] Lu, Z., & Chen, X. (2015). A Prototype of Reflection Pulse Oximeter Designed for Mobile Healthcare. IEEE Journal of Biomedical and Health Informatics . [9] Organización Mundial de la Salud. (2010). Informe sobre la situación mundial de las enfermedades no transmisibles. [10] Mathers, C., & Loncar, D. (2006). Projections of global mortality and burden of disease from 2002 to 2030. PLoS Med . [11] COM SALUD. (2014). ¿Qué es la eSalud? Obtenido de laeSalud.com: http://laesalud.com/que-es-esalud/. Último acceso el 25 de Septiembre de 2015. [12] Bai, Y.-W., Li, W.-T., & Chen, Y.-W. (2010). Design and implementation of an embedded monitor system for detection of a patient's breath by double Webcams. IEEE International Workshop on Medical Measurements and Applications Proceedings , 171 (6). [13] Patel, S., Mancinelli, C., & Bonato, P. (2009). Using Wearable Sensors to Monitor Physical Activities of Patients with COPD: A Comparison of Classifier Performance. Sixth International Workshop on Wearable and Implantable Body Sensor Networks , 234 (9). [14] Dinesen, B., Grann, O., & Nielsen, C. (2011). elerehabilitation across sectors: The experiences of chronic obstructive pulmonary disease (COPD) patients and healthcare professionals. Proc 2nd International Conference on Wireless Communication, Vehicular Technology, Information Theory and Aerospace & Electronic Systems Technology. [15] Cao, Z., Zhu, R., & Que, R.-Y. (2012). A Wireless Portable System With Microsensors for Monitoring Respiratory Diseases. IEEE Trans Biomed Eng , 59 (11). [16] Hebert, M. A., Korabek, B., & Scott, R. E. (2006). A Decision Framework for Integrating Home Telehealth into Chronic Illness Care. International Journal of Medical Informatics , 75 (786). [17] Hernández, D. N. (2014). Plataforma para el desarrollo de sensores biomédicos inteligentes en sistemas de e-Salud y su aplicación en pacientes crónicos y personas mayores. Tesis doctoral. [18] Barriuso, J. (2010). Análisis y evolución de los servicios de Atención Primaria, en los tiempos de la e-Salud. [19] Yan, Y.-S., & Zhang, Y.-T. (2008). An Efficient Motion-Resistant Method for Wearable Pulse Oximeter. IEEE Transactions on Information Technology in Biomedicine , 12. [20] Tavakoli, M., Turicchia, L., & Sarpeshkar, R. (2010). An Ultra-Low-Power Pulse Oximeter Implemented With an Energy-Efficient Transimpedance Amplifier. IEEE Transactions on Biomedical Circuits and Systems , 4 (1). [21] Li, K., Warren, S., & Natarajan, B. (2012). Onboard Tagging for Real-Time Quality Assessment of Photoplethysmograms Acquired by a Wireless Reflectance Pulse Oximeter. IEEE Transactions on Information Technology in Biomedicine , 6 (1). [22] Li, K., & Warren, S. (2012). A Wireless Reflectance Pulse Oximeter With Digital Baseline Control for Unfiltered Photoplethysmograms. IEEE Transactions on Information Technology in Biomedicine , 6 (3). [23] Venema, B., Gehring, H., Michelsen, I., Blanik, N., Blazek, V., & Leonhardt, S. (2013). Robustness, Specificity and Reliability of an In-ear Pulse Oximetric Sensor in Surgical Patients. IEEE Journal of Biomedical and Health Informatics . [24] Valencia, L. F. (2007). Diseño y construcción de un oxímetro de pulso mediante la utilización de una plataforma de automatización Momemtum. Proyecto de Grado . [25] Agustino, AM., Piqueras, R., Pérez, M. (2002). Recuento de plaquetas y vloumen plaquetario medio en una población sana. Rev Diagn Biol. [26] Gómez Vizcaíno, S., & Suntasig Soria, F. (2011). Diseño y construcción de un prototipo de oxímetro de pulso. Proyecto Fin de Carrera . [27] Ventosinos Alonso, S. (2010). Sistema óptico autónomo para la medida de parámetros biomédicos. Trabajo Final de Carrera . [28] Millán Lozano, A. (2014). Sistema inalámbrico de monitorización de constantes vitales con plataforma Arduino y visualización en aplicación móvil. Proyecto Final de Carrera . [29] Urpalainen, K. (2011). Development of a fractional multi-wavelength pulse oximetry algorithm. Thesis submitted for examination for the degree of Master of Science in Technology . [30] Borbonés Acosta, C. Diseño e implementación de un pulsioxímetro. Trabajo Fin de Grado . [31] Kennedy, S. M. An introduction to pulse oximeters: equations and theory. ECE/BME 462 Biomedical Instrumentation . [32] Arduino. Obtenido de Arduino: www.arduino.cc. Último acceso el 25 de Septiembre de 2015 [33] Qureshi, H. (Abril de 2009). Design of a Wireless Pulse Oximeter for use in a Clinical Diagnostic System. EE 4BI6 Electrical Engineering Biomedical . Anexos ANEXO A: CÓDIGOS DE PROGRAMACIÓN § Código en Arduino para digitalización de una señal pulsátil int LED_R = 12; int LED_IR = 11; int SENSOR = 6; int SENSOR_VALOR_R = 0; int SENSOR_VALOR_IR = 0; // LED ROJO conectado en el PIN 12 // LED IR conectado en el PIN 11 // SENSOR conectado en el PIN analogico 2 // Lectura del sensor para luz roja encendida // Lectura del sensor para luz infrarroja encendida void setup() { pinMode (LED_R, OUTPUT); pinMode (LED_IR, OUTPUT); pinMode (SENSOR, INPUT); analogReference (DEFAULT); Serial.begin(9600); // Configuración del PIN LED_R como salida // Configuración del PIN LED_IR como salida // Configuración del PIN SENSOR como entrada // Configuración de la tensión de referencia por defecto (5 V) // Configuración para la transmisión de los datos por el puerto serie } void loop() { digitalWrite (LED_R, HIGH); // Encendido del LED rojo SENSOR_VALOR_R = analogRead (SENSOR); // Lectura del pin analógico del sensor Serial.println (SENSOR_VALOR_R); // Envío del valor por el puerto serie delay (20); // Espera de 20 mseg antes de tomar la siguiente muestra de la señal } § Código en Arduino para digitalización de dos señales pulsátiles int LED_R = 12; int LED_IR = 11; int SENSOR_R = 6; int SENSOR_IR = 7; int SENSOR_VALOR_R = 0; int SENSOR_VALOR_IR = 0; int INTERRUPTOR_R = 10; int INTERRUPTOR_IR = 9; int MILISEG = 0; // LED ROJO conectado en el PIN 12 // LED IR conectado en el PIN 11 // SENSOR rojo conectado en el PIN analogico 6 // SENSOR infrarrojo conectado en el PIN analogico 7 // Lectura del sensor para luz roja encendida // Lectura del sensor para luz infrarroja encendida // Controla el interruptor rojo por el PIN 10 // Controla el interruptor infrarrojo por el PIN 9 // Contador de milisegundos void setup() { pinMode (LED_R, OUTPUT); // Configuración del PIN LED_R como salida pinMode (LED_IR, OUTPUT); // Configuración del PIN LED_IR como salida pinMode (SENSOR_R, INPUT); // Configuración del PIN SENSOR rojo como entrada pinMode (SENSOR_IR, INPUT); // Configuración del PIN SENSOR infrarrojo como entrada pinMode (INTERRUPTOR_R, OUTPUT); // PIN INTERRUPTOR_R como salida pinMode (INTERRUPTOR_IR, OUTPUT); // PIN INTERRUPTOR_IR como salida analogReference (DEFAULT); Serial.begin (9600); // Configuración de la tensión de referencia por defecto (5 V) // Configuración para la transmisión de los datos por el puerto serie } void loop() { // Encendido alterno de los LEDs rojo e infrorrojo digitalWrite (LED_R, HIGH); // Encendido del LED rojo delayMicroseconds (10); // Espera para encendido completo del LED digitalWrite (INTERRUPTOR_R, HIGH); // Cierre del interruptor rojo delayMicroseconds (460); // Espera para estabilización de señal SENSOR_VALOR_R = analogRead (SENSOR_R); // Lectura del pin del sensor rojo digitalWrite (INTERRUPTOR_R, LOW); // Apertura del interruptor rojo delayMicroseconds (10); // Espera para apertura completa del interruptor digitalWrite (LED_R, LOW); // Apagado del LED rojo delayMicroseconds (20); digitalWrite (LED_IR, HIGH); // Encendido del LED infrarrojo delayMicroseconds (10); // Espera para encendido completo del LED digitalWrite (INTERRUPTOR_IR, HIGH); // Cierre del interruptor infrarrojo delayMicroseconds (460); // Espera para estabilización de señal SENSOR_VALOR_IR = analogRead (SENSOR_IR); // Lectura del pin del sensor infrarrojo digitalWrite (INTERRUPTOR_IR, LOW); // Apertura del interruptor infrarrojo delayMicroseconds (10); // Espera para apertura completa del interruptor digitalWrite (LED_IR, LOW); // Apagado del LED infrarrojo delayMicroseconds (20); // El ciclo completo anterior tarta 1 milisegundo, cada 20 milisegundos enviamos las muestras MILISEG = MILISEG + 1; // Incrementa en 1 los milisegundos transcurridos if (MILISEG == 20) // Tras 20 milisengudos imprimimos las muestras de ambas señales { Serial.print (SENSOR_VALOR_R); Serial.print (","); Serial.println (SENSOR_VALOR_IR); MILISEG = 0; } } § Código en Arduino completo para cálculo de pulso cardíaco y saturación de oxígeno (método de absorción delta) int LED_R = 12; // LED ROJO conectado en el PIN 12 int LED_IR = 11; // LED IR conectado en el PIN 11 int SENSOR_R = 6; // SENSOR rojo conectado en el PIN analogico 6 int SENSOR_IR = 7; // SENSOR infrarrojo conectado en el PIN analogico 7 float SENSOR_VALOR_R = 0; // Lectura del sensor para luz roja encendida float SENSOR_VALOR_IR = 0; // Lectura del sensor para luz infrarroja encendida int INTERRUPTOR_R = 10; // Controla el interruptor rojo por el PIN 10 int INTERRUPTOR_IR = 9; // Controla el interruptor infrarrojo por el PIN 9 int CICLOS = 0; // Contador de ciclos de encendido LEDs emisores int NUM_MUESTRAS = 0; // Contador de muestras float MEDIA = 0; // Media de la señal float SENSOR_VALOR_R_ANT = 0; // Valor anterior de la señal roja float SENSOR_VALOR_IR_ANT = 0; // Valor anterior de la señal infrarroja float TIEMPO_INI_PULSO = 0; // Tiempo en que se produce un cruce float TIEMPO_INI_PULSO_ANT = 0; // Tiempo en que se produjo el cruce anterior float NUM_CRUCES = 0; // Contador de cruces float MEDIA_PERIODOS = 0; // Media de los períodos medidos float PERIODO = 0; // Valor de un período float PULSO_CARD = 0; // Pulso cardíaco float dA_R = 0; // Absorción delta roja float dA_IR = 0; // Absorción delta infrarroja float RATIO = 0; // Ratio de absorción float RATIO_PROV = 0; // Ratio de absorción provisional float MEDIA_RATIO = 0; // Media de ratios calculados float SAO2 = 0; // Porcentaje de saturación de oxígeno void setup() { pinMode (LED_R, OUTPUT); // Configuración del PIN LED_R como salida pinMode (LED_IR, OUTPUT); // Configuración del PIN LED_IR como salida pinMode (SENSOR_R, INPUT); // Configuración del PIN SENSOR rojo como entrada pinMode (SENSOR_IR, INPUT); // Configuración del PIN SENSOR infrarrojo como entrada pinMode (INTERRUPTOR_R, OUTPUT); // Configuración del PIN INTERRUPTOR_R como salida pinMode (INTERRUPTOR_IR, OUTPUT); // Configuración del PIN INTERRUPTOR_IR como salida analogReference (DEFAULT); Serial.begin (9600); // Configuración de la tensión de referencia por defecto (5 V) // Configuración para la transmisión de los datos por el puerto serie } void loop() { // Ciclos de encendido y apagado alterno de los LEDs emisores // Cada ciclo tiene una duración total de 2 milisegundos (100 ciclos = 200 milisegundos) for (CICLOS = 0; CICLOS <= 100; CICLOS++) { digitalWrite (LED_R, HIGH); // Encendido del LED rojo delayMicroseconds (10); // Espera para encendido completo del LED digitalWrite (INTERRUPTOR_R, HIGH); // Cierre del interruptor rojo delayMicroseconds (960); // Espera para estabilización de señal SENSOR_VALOR_R = analogRead (SENSOR_R); // Lectura del pin analógico del sensor rojo digitalWrite (INTERRUPTOR_R, LOW); // Apertura del interruptor rojo delayMicroseconds (10); // Espera para apertura completa del interruptor digitalWrite (LED_R, LOW); // Apagado del LED rojo delayMicroseconds (20); digitalWrite (LED_IR, HIGH); // Encendido del LED infrarrojo delayMicroseconds (10); // Espera para encendido completo del LED digitalWrite (INTERRUPTOR_IR, HIGH); // Cierre del interruptor infrarrojo delayMicroseconds (960); // Espera para estabilización de señal SENSOR_VALOR_IR = analogRead (SENSOR_IR); // Lectura del pin analógico del sensor infrarrojo digitalWrite (INTERRUPTOR_IR, LOW); // Apertura del interruptor infrarrojo delayMicroseconds (10); // Espera para apertura completa del interruptor digitalWrite (LED_IR, LOW); // Apagado del LED infrarrojo delayMicroseconds (20); } CICLOS = 0; // Se reinicia el contador de ciclos NUM_MUESTRAS = NUM_MUESTRAS+1; // Se coge una muestra cada 200 milisegundos // Los valores del pulso y de la saturación de oxígeno se calculan y se muestran cada 7 segundos if (NUM_MUESTRAS <= 35) { MEDIA = (MEDIA*(NUM_MUESTRAS-1) + SENSOR_VALOR_R)/NUM_MUESTRAS; // Durante los primeros 3 segundos sólo se ha calculado la media de la señal roja // Si han pasado los 3 primeros segundos, empezamos a buscar los cruces por la media y a calcular el ratio if (NUM_MUESTRAS > 15) { if (SENSOR_VALOR_R_ANT > MEDIA && SENSOR_VALOR_R < MEDIA) { // Se detecta un cruce TIEMPO_INI_PULSO = millis(); // Se captura el tiempo en el que se produce el cruce if (NUM_CRUCES == 0) { // Si es el primer cruce encontrado TIEMPO_INI_PULSO_ANT = TIEMPO_INI_PULSO; } if (NUM_CRUCES >= 1) { // A partir del segundo cruce encontrado // Se calcula el período entre este cruce y el anterior PERIODO = TIEMPO_INI_PULSO - TIEMPO_INI_PULSO_ANT; TIEMPO_INI_PULSO_ANT = TIEMPO_INI_PULSO; // Se calcula una media entre los períodos encontrados hasta el momento MEDIA_PERIODOS = (MEDIA_PERIODOS*(NUM_CRUCES-1) + PERIODO)/NUM_CRUCES; } NUM_CRUCES = NUM_CRUCES+1; } // Utilizamos el método de absorción delta para el cálculo del ratio dA_R = (SENSOR_VALOR_R-SENSOR_VALOR_R_ANT)*2/(SENSOR_VALOR_R+SENSOR_VALOR_R_ANT); dA_IR = (SENSOR_VALOR_IR-SENSOR_VALOR_IR_ANT)*2/(SENSOR_VALOR_IR+SENSOR_VALOR_IR_ANT); RATIO_PROV = dA_IR/dA_R; // Si el ratio provisional sale infinito, no se tiene en cuenta y se usa el ratio anterior para la media if (RATIO_PROV != INFINITY) { RATIO = RATIO_PROV; } // Se calcula una media entre los ratios calculados hasta el momento MEDIA_RATIO = (MEDIA_RATIO*(NUM_MUESTRAS-16)+RATIO)/(NUM_MUESTRAS-15); SENSOR_VALOR_R_ANT = SENSOR_VALOR_R; SENSOR_VALOR_IR_ANT = SENSOR_VALOR_IR; } } else { //Calculamos y mostramos por pantalla los valores de pulso y saturación de oxígeno PULSO_CARD = 60000/MEDIA_PERIODOS; SAO2 = 115-(30*MEDIA_RATIO); Serial.print ("Pulso cardiaco = "); Serial.println (PULSO_CARD); Serial.print ("Saturacion de oxigeno = "); Serial.println (SAO2); Serial.println (); NUM_MUESTRAS = 0; MEDIA = 0; SENSOR_VALOR_R_ANT = 0; SENSOR_VALOR_IR_ANT = 0; TIEMPO_INI_PULSO = 0; TIEMPO_INI_PULSO_ANT = 0; NUM_CRUCES = 0; MEDIA_PERIODOS = 0; PERIODO = 0; MEDIA_RATIO = 0; RATIO = 0; RATIO_PROV = 0; } } § Código en Arduino completo para cálculo de pulso cardíaco y saturación de oxígeno (método de picos y valles) int LED_R = 12; // LED ROJO conectado en el PIN 12 int LED_IR = 11; // LED IR conectado en el PIN 11 int SENSOR_R = 6; // SENSOR rojo conectado en el PIN analogico 6 int SENSOR_IR = 7; // SENSOR infrarrojo conectado en el PIN analogico 7 float SENSOR_VALOR_R = 0; // Lectura del sensor para luz roja encendida float SENSOR_VALOR_IR = 0; // Lectura del sensor para luz infrarroja encendida int INTERRUPTOR_R = 10; // Controla el interruptor rojo por el PIN 10 int INTERRUPTOR_IR = 9; // Controla el interruptor infrarrojo por el PIN 9 int CICLOS = 0; // Contador de milisegundos int NUM_MUESTRAS = 0; float MEDIA = 0; float SENSOR_VALOR_R_ANT = 0; float SENSOR_VALOR_IR_ANT = 0; float MAXIMO_R_PROV = 0; float MINIMO_R_PROV = 0; float MAXIMO_R = 0; float MAXIMO_IR = 0; float MINIMO_R = 0; float MINIMO_IR = 0; float TIEMPO_INI_PULSO_PROV = 0; float TIEMPO_INI_PULSO = 0; float TIEMPO_INI_PULSO_ANT = 0; float NUM_MAXIMOS = 0; float MEDIA_PERIODOS = 0; float AMPLITUD_R = 0; float AMPLITUD_IR = 0; float MEDIA_AMPLITUD_R = 0; float MEDIA_AMPLITUD_IR = 0; float PERIODO = 0; float PULSO_CARD = 0; int BUSCA_MAXIMO = 1; int BUSCA_MINIMO = 1; float dA_R = 0; float dA_IR = 0; float RATIO = 0; float RATIO_PROV = 0; float MEDIA_RATIO = 0; float SAO2 = 0; void setup() { pinMode (LED_R, OUTPUT); // Configuración del PIN LED_R como salida pinMode (LED_IR, OUTPUT); // Configuración del PIN LED_IR como salida pinMode (SENSOR_R, INPUT); // Configuración del PIN SENSOR rojo como entrada pinMode (SENSOR_IR, INPUT); // Configuración del PIN SENSOR infrarrojo como entrada pinMode (INTERRUPTOR_R, OUTPUT); // Configuración del PIN INTERRUPTOR_R como salida pinMode (INTERRUPTOR_IR, OUTPUT); // Configuración del PIN INTERRUPTOR_IR como salida analogReference (DEFAULT); Serial.begin (9600); // Configuración de la tensión de referencia por defecto (5 V) // Configuración para la transmisión de los datos por el puerto serie } void loop() { // Cálculo de la media de la señal durante 2 segundos for (CICLOS = 0; CICLOS <= 50; CICLOS++) { digitalWrite (LED_R, HIGH); // Encendido del LED rojo delayMicroseconds (10); // Espera para encendido completo del LED digitalWrite (INTERRUPTOR_R, HIGH); // Cierre del interruptor rojo delayMicroseconds (960); // Espera para estabilización de señal SENSOR_VALOR_R = analogRead (SENSOR_R); // Lectura del pin analógico del sensor rojo digitalWrite (INTERRUPTOR_R, LOW); // Apertura del interruptor rojo delayMicroseconds (10); // Espera para apertura completa del interruptor digitalWrite (LED_R, LOW); // Apagado del LED rojo delayMicroseconds (20); digitalWrite (LED_IR, HIGH); // Encendido del LED infrarrojo delayMicroseconds (10); // Espera para encendido completo del LED digitalWrite (INTERRUPTOR_IR, HIGH); // Cierre del interruptor infrarrojo delayMicroseconds (960); // Espera para estabilización de señal SENSOR_VALOR_IR = analogRead (SENSOR_IR); // Lectura del pin analógico del sensor infrarrojo digitalWrite (INTERRUPTOR_IR, LOW); // Apertura del interruptor infrarrojo delayMicroseconds (10); // Espera para apertura completa del interruptor digitalWrite (LED_IR, LOW); // Apagado del LED infrarrojo delayMicroseconds (20); } CICLOS = 0; // Se reinicia el contador de ciclos NUM_MUESTRAS = NUM_MUESTRAS+1; // Se coge una muestra cada 200 milisegundos // Los valores del pulso y de la saturación de oxígeno se calculan y se muestran cada 7 segundos if (NUM_MUESTRAS <= 70) { MEDIA = (MEDIA*(NUM_MUESTRAS-1) + SENSOR_VALOR_R)/NUM_MUESTRAS; // Durante los primeros 3 segundos sólo se ha calculado la media de la señal roja // Si han pasado los 3 primeros segundos, empezamos a buscar los cruces por la media y a calcular el ratio if (NUM_MUESTRAS > 30) { // Igualamos al valor medio las variables del máximo y mínimo provisional if (NUM_MUESTRAS == 31) { MAXIMO_R_PROV = MEDIA; MINIMO_R_PROV = MEDIA; } // Siempre que estemos por encima de la media, actualizamos el valor del máximo provisional si encontramos un valor superior // También almacenamos el momento en que ocurre de forma provisional if (SENSOR_VALOR_R >= MAXIMO_R_PROV && SENSOR_VALOR_R > MEDIA) { MAXIMO_R_PROV = SENSOR_VALOR_R; TIEMPO_INI_PULSO_PROV = millis (); } // Siempre que estemos por debajo de la media, actualizamos el valor del mínimo provisional si encontramos un valor inferior if (SENSOR_VALOR_R <= MINIMO_R_PROV && SENSOR_VALOR_R < MEDIA) { MINIMO_R_PROV = SENSOR_VALOR_R; } // Se detecta un cruce por la media de arriba a abajo y se estaba buscando un máximo if (SENSOR_VALOR_R_ANT > MEDIA && SENSOR_VALOR_R < MEDIA && BUSCA_MAXIMO == 1) { MAXIMO_R = MAXIMO_R_PROV; // Almacenamos el valor del máximo encontrado MAXIMO_R_PROV = MEDIA; // Reiniciamos el máximo provisional al valor de la media MAXIMO_IR = SENSOR_VALOR_IR; // Almacenamos el valor del máximo infrarrojo (se produce a la vez que el máximo rojo) TIEMPO_INI_PULSO = TIEMPO_INI_PULSO_PROV; // Almacenamos el momento en que se produjo el máximo TIEMPO_INI_PULSO_PROV = 0; // Si es el primer máximo encontrado if (NUM_MAXIMOS == 0) { TIEMPO_INI_PULSO_ANT = TIEMPO_INI_PULSO; } // A partir del segundo máximo encontrado if (NUM_MAXIMOS >= 1) { // Se calcula el período entre este máximo y el anterior PERIODO = TIEMPO_INI_PULSO - TIEMPO_INI_PULSO_ANT; TIEMPO_INI_PULSO_ANT = TIEMPO_INI_PULSO; // Se calcula una media entre los períodos encontrados hasta el momento MEDIA_PERIODOS = (MEDIA_PERIODOS*(NUM_MAXIMOS-1) + PERIODO)/NUM_MAXIMOS; } NUM_MAXIMOS = NUM_MAXIMOS+1; BUSCA_MINIMO = 1; // Pasamos a buscar un mínimo BUSCA_MAXIMO = 0; // Dejamos de buscar un máximo } // Se detecta un cruce por la media de abajo a arriba y se estaba buscando un mínimo if (SENSOR_VALOR_R_ANT < MEDIA && SENSOR_VALOR_R > MEDIA && BUSCA_MINIMO == 1) { MINIMO_R = MINIMO_R_PROV; // Almacenamos el valor del mínimo encontrado MINIMO_R_PROV = MEDIA; // Reiniciamos el mínimo provisional al valor de la media MINIMO_IR = SENSOR_VALOR_IR; // Almacenamos el valor del mínimo infrarrojo (se produce a la vez que el mínimo rojo) BUSCA_MAXIMO = 1; // Pasamos a buscar un máximo BUSCA_MINIMO = 0; // Dejamos de buscar un mínimo // Al encontrar un mínimo, calculamos las amplitudes siempre que previamente hayamos encontrado algún máximo if (NUM_MAXIMOS >= 1) { AMPLITUD_R = MAXIMO_R - MINIMO_R; // Cálculo de amplitud roja AMPLITUD_IR = MAXIMO_IR - MINIMO_IR; // Cálculo de amplitud infrarroja // Cáclulo de las medias de las amplitudes encontradas hasta el momento MEDIA_AMPLITUD_R = (MEDIA_AMPLITUD_R*(NUM_MAXIMOS-1)+AMPLITUD_R)/NUM_MAXIMOS; MEDIA_AMPLITUD_IR = (MEDIA_AMPLITUD_IR*(NUM_MAXIMOS-1)+AMPLITUD_IR)/NUM_MAXIMOS; } } } } else { //Calculamos y mostramos por pantalla los valores de pulso y saturación de oxígeno PULSO_CARD = 60000/MEDIA_PERIODOS; MEDIA_RATIO = MEDIA_AMPLITUD_IR/MEDIA_AMPLITUD_R; SAO2 = 115-(30*MEDIA_RATIO); Serial.print ("Pulso cardiaco = "); Serial.println (PULSO_CARD); Serial.print ("Saturacion de oxigeno = "); Serial.println (SAO2); Serial.println (); NUM_MUESTRAS = 0; MEDIA = 0; SENSOR_VALOR_R_ANT = 0; MAXIMO_R_PROV = 0; MINIMO_R_PROV = 0; MAXIMO_R = 0; MAXIMO_IR = 0; MINIMO_R = 0; MINIMO_IR = 0; TIEMPO_INI_PULSO_PROV = 0; TIEMPO_INI_PULSO = 0; TIEMPO_INI_PULSO_ANT = 0; NUM_MAXIMOS = 0; MEDIA_PERIODOS = 0; AMPLITUD_R = 0; AMPLITUD_IR = 0; MEDIA_AMPLITUD_R = 0; MEDIA_AMPLITUD_IR = 0; PERIODO = 0; BUSCA_MAXIMO = 1; BUSCA_MINIMO = 1; MEDIA_RATIO = 0; RATIO = 0; RATIO_PROV = 0; SAO2 = 0; } } ANEXO B: Data Sheet LED rojo (LUMEX SSL-LXA228SRC-TR11) ANEXO C: Data Sheet LED infrarrojo (SHARP GL100MN1MP1) ANEXO C: Data Sheet fotodetector (OSRAM BP104S-Z) ANEXO D: Data Sheet Amplificador Operacional (LM1458) ANEXO E: Data Sheet Interruptor Electrónico (TS5A1066DBVR) ANEXO F: Especificaciones técnicas Arduino Nano El Arduino Nano es una pequeña y completa placa basada en el controlador ATmega328. Se puede conectar a una placa de prototipado. Funciona con un cable mini-USB en lugar del cable USB estándar. Ilustración A.1 Placa Arduino Nano 3.0 Las especificaciones técnicas son: • Microcontrolador • Tensión de Operación • Tensión de Entrada (recomendado) • Tensión de Entrada (límites) • Pines E/S Digitales • Entradas Analógicas • Corriente máx. por cada pin de E/S • Memoria Flash • SRAM • EEPROM • Frecuencia de reloj • Dimensiones ATmega328 5V 7-12 V 6-20 V 14 (6 proveen salida PWM) 8 40 mA 32 KB 2 KB 1 KB 16 MHz 18,5 mm x 43,2 mm § Arduino Nano 3.0: Alimentación El Arduino Nano puede ser alimentado utilizando el cable mini-USB, con una fuente externa no regulada de 6-20 V (pin 30) o con una fuente externa regualada de 5 V (pin 27). La fuente de alimentación es seleccionada de manera automática a aquella con mayor tensión. El chip FTDI FT232RL que posee el Arduino Nano sólo es alimentado si la placa está siendo alimentada usando el cable USB. Cuando se utiliza una fuente externa (no USB), la salida de 3,3 V (la cual es proporcionada por el chip FTDI) no está disponible y los pines 1 y 0 parpadearán si los pones digitales 0 ó 1 están a nivel alto. § Arduino Nano 3.0: Memoria El ATmega328 posee 32 KB de memoria flash para almacenar el código (de los cuales 2 KB son utilizados por el bootloader). Además, tiene 2 KB de SRAM y 1 KB de EEPROM (la cual puede ser leída y escrita con la librería EEPROM). § Arduino Nano 3.0: Entrada y Salida Cada uno de los 14 pines digitales del Arduino Nano puede ser usado como entrada o salida, utilizando para ellos funciones como pinMode ( ), digitalWrite ( ) y digitalRead ( ). Todos operan a 5 V y cada pin puede proveer o recibir un máximo de 40 mA. Poseen una resistencia de pull-up (desconectada por defecto) de 20 a 50 kOhms. Algunos pines poseen funciones especializadas: • • • • • Serial: 0 (RX) y 1 (TX). (RX) usado para recibir y (TX) usado para transmitir datos TTL vía serie. Estos pines están conectados a los pines correspondientes del chip USB a TTL de FTDI. Interrupciones Externas: pines 2 y 3. Estos pines pueden ser configurados para activar una interrupción por paso a nivel bajo, por flanco de bajada o flanco de subida, o por un cambio de valor. PWM: pines 3, 5, 6, 9, 10, y 11. Proveen de una salida PWM de 8 bits cuando se usa la función analogWrite ( ). SPI: pines 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Estos pines soportan la comunicación SPI, la cual, a pesar de poseer el hardware, no está actualmente soportada en el lenguaje Arduino. LED: Pin 13. Existe un LED conectado al pin digital 13. Cuando el pin se encuentra en nivel alto, el LED está encendido, cuando el pin está a nivel bajo, el LED estará apagado. El Arduino Nano posee 8 entradas analógicas, cada unas de ellas provee de 10 bits de resolución (1024 valores diferentes). Por defecto miden entre 5 voltios y masa, sin embargo, es posible cambiar el rango superior usando la función analogReference( ). También, algunos de estos pines poseen funciones especiales: • I2C: Pines 4 (SDA) y 5 (SCL). Soporta comunicación I2C (TWI) usando la librería Wire. Hay algunos otros pines en la placa: • AREF: Tensión de referencia por las entradas analógicas. Se configura con la función analogReference ( ). • Reset: Poniendo esta línea a nivel bajo se resetea el microcontrolador. Normalmente se usa para añadir un botón de reset que mantiene a nivel alto el pin reset mientras no es pulsado. Ilustración A.2 Pines del Arduino Nano NÚM. PIN NOMBRE 1-2, 5-16 D0-D13 3, 28 RESET 4, 29 GND 17 3V3 18 AREF 19-26 A7-A0 TIPO I/O Entrada PWR Salida Entrada Entrada 27 +5V Entrada o Salida 30 VIN PWR DESCRIPCIÓN Entrada/salida digital (puertos 0 al 13) Reset Tierra Salida +3,3 V (del FTDI) Tensión de referencia Entradas analógicas (canales del 0 al 7) +5V de salida (desde el regulador de la placa) +5V (entrada de alimentación externa) Tensión de alimentación § Arduino Nano 3.0: Comunicación El Arduino Nano tiene algunos métodos para la comunicación con un PC, con otro Arduino u otros microcontroladores. El ATmega328 posee un módulo UART que funciona con TTL (5 V) que permite una comunicación vía serie, la cual está disponible a través de USB para la comunicación serial y los controladores FTDI (incluidos en el software de Arduino) provee al PC de un puerto COM virtual para el software en el PC. El software de Arduino incluye un monitor serial que permite visualizar en forma de texto los datos enviados desde y hacia la placa Arduino. Los LEDs RX y TX en la placa parpadearán cuando los datos se estén enviando a través del chip FTDI y la conexión USB con el PC (pero no para la comunicación directa a través de los pines 0 y 1). La librería SoftwareSerial permite llevar a cabo una comunicación serie usando cualquiera de los pines digitales de la placa. El ATmega328 también soporta comunicación I2C (TWI) y SPI. El software de Arduino incluye la librería Wire para simplificar el uso del bus I2C. § Arduino Nano 3.0: Reset Automático En lugar de necesitar pulsar un botón físico de reset, el Arduino Nano ha sido diseñado de tal manera que permite ser reseteado por el software del PC al que está conectado. Una de las líneas de control de flujo por hardware (DTR) del chip FT232RL está conectada a la línea de reset del ATmega328 a través de un condensador de 100 nanofaradios. Cuando esta línea se pone a nivel bajo, la línea de reset se mantiene a nivel bajo el suficiente tiempo para causar el reset del chip. El software de Arduino usa esta capacidad para permitir cargar código en el Arduino pulsando simplemente el botón "upload" en el entorno software de Arduino. Esto significa que el tiempo de espera del bootloader es más pequeño, ya que el tiempo en el que se encuentra a nivel bajo el DTR puede ser coordinado bien con el inicio de la carga del código. Esta configuración tiene otras implicaciones. Cuando el Nano se conecta a un PC que funciona con Mac OS X o Linux, se resetea cada vez que se hace la conexión con el software (a través del USB). Durante el siguiente medio segundo más o menos, el bootloader está corriendo en el Nano. El bootloader ha sido para programado para ignorar cualquier dato erróneo (cualquier dato que no sea la carga de nuevo código), por lo tanto ignorará los primeros bytes que se reciban justo después de hacer la conexión. Si un sketch cargado en la placa recibe algún tipo de configuración o algún otro tipo de dato importante nada más iniciarse, hay que asegurarse de que el software con el que se comunique espere al menos un segundo antes de enviar datos para que no sean ignorados por el bootloader.