PFC - Luis Manuel Moreno - 2015

Anuncio
 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.
Descargar