Pulsioxímetros al desnudo con Arduino
Aloha pandémicos! Ya esta aquí de nuevo el pesado del Covid-19. Y es que la venta de pulsioxímetros u oxímetros se ha disparado desde la llegada del coronavirus.
Dentro de los síntomas habituales producidos por este virus encontramos, fiebre, tos y dificultad para respirar. Esta última puede o no ser algo evidente (A veces el afectado no nota esa falta de aire) por lo que muchas personas han decidido comprar pulsioxímetros para ser capaces de medir su estado de salud y saber si tienen síntomas.
Así que… ¡Veamos de que va esto!
Pulsíoxímetro = BPM+SpO2
Los pulsioxímetros sirven de pulsímetros y oxímetros. Un pulsímetro mide la frecuencia cardíaca del corazón. Eso que nos indicaban de pequeños cuando nos medíamos con los dedos sobre la arteria radial (en la muñeca) o sobre la arteria carótida (en el lateral del cuello). Contábamos el número de pulsaciones durante 6 segundos, multiplicábamos por 10 y ya teníamos el número de pulsaciones por minuto.
Si tienes un pulsímetro, veras que el resultado aparece en BMP, Beats Per Minute (Pulsaciones Por Minuto). Un valor entre 60 y 100 BPM parece normal. Uno inferior a 60BPM en reposo podría indicar una persona muy deportista que necesita menos latidos para bombear en reposo o alguien con problemas cardíacos.
Hemoglobina, oxihemoglobina y cosas médicas
Si miramos el pulsioxímetro, el otro dato que nos ofrece es el SpO2 (Saturación porcentual de O2), que es el porcentaje de saturación de oxígeno. Este valor sí nos sirve para detectar síntomas debidos al Covid-19.
La sangre pasa por los pulmones y la hemoglobina (Hb), proteína en los glóbulos rojos que transportan el oxígeno por el cuerpo, toma oxígeno pasando a ser oxihemoglobina (HbO2).
Esta oxihemoglobina dónde mejor se ve es en el dedo y en el lóbulo de la oreja ya que las paredes de los capilares son más finas y hay más intercambio de nutrientes. Es por eso, que el pulsioxímetro se pone en el dedo.
El pulsioxímetro está formado por dos leds. Uno rojo, que emite a 660nm y que podemos ver y otro infrarrojo, que emite a 940nm y que NO podemos ver (Por la misma definición de infrarrojo).
La oxihemoglobina absorbe la radiación infrarroja y la hemoglobina la radiación roja. Conocemos cuánto hemos radiado y con un fotodiodo, al que llega la luz que no se absorbe, conoceremos la diferencia.
Así conocemos SpO2 que será:
Así, tenemos el porcentaje de saturación de oxígeno que buscábamos. Que es diferente a la presión de oxígeno (Por si te preguntan…)
No todo vale cuando medimos con un pulsioxímetro…
¿Qué niveles son normales? Normalmente tendremos un SpO2 mayor al 95% (Sí,mirando la ecuación de antes ya deberías saber que estamos hablando de un porcentaje).
Del 90 al 95% es momento de empezar a revisar a la persona aunque enfermos crónicos pueden tolerar bien saturaciones en estos valores. Sobretodo es importante estar atentos a una saturación por debajo del 90% ya que nos habla de una falta de oxígeno.
Eso sí, cuidado porque hay algunos factores que pueden hacer que las medidas no sean las correctas. Uno de ellos es llevar las uñas pintadas. La pintura no dejará absorber correctamente la luz y nos dará valores no adecuados.
Otro caso en el que podemos recibir resultados que no son del todo correctos es en personas con problemas de circulación. Yo lo que he experimentado en este caso es que al pulsioxímetro le cuesta tomar el valor porque la falta de circulación de sangre no le deja datos para el cálculo y necesita más tiempo hasta encontrar esos datos.
Un tercer caso es el movimiento. Hay que utilizar el pulsioxímetro con el dedo sin movimiento alguno para que la medida no se vea afectada. Esto es importante cuando utilizamos smartwatch que hacen este cálculo.
La muñeca se mueve mucho más y tal vez no debamos de fiarnos mucho de sus medidas. De hecho, los fabricantes de estos gadgets siempre avisan de que no son un aparato médico y sus datos no deben de tomarse a ‘pies juntillas‘.
Información básica sobre Proteción de datos
Responsable ➥ Sergio Luján Cuenca
Finalidad ➥ Gestionar el envío de correos electrónicos con artículos, noticias y publicidad. Todo relacionado con los temas de rufianenlared.com
Legitimación ➥ Consentimiento del interesado
Destinatarios ➥ Estos datos se comunicarán a MailRelay para gestionar el envío de los correos electrónicos
Derechos ➥ Acceder, rectificar y suprimir los datos, así como otros derechos, como se explica en la política de privacidad
Plazo de conservación de los datos ➥ Hasta que se solicite la supresión por parte del interesado
Información adicional ➥ Puedes encontrarla en la política de privacidad y el aviso legal
Pulsioxímetro=MAX30102+Arduino
Pero vamos a lo que nos interesa. Apliquemos todo esto a Arduino. Para ello necesitaremos el sensor MAX30100, MAX30101 o MAX30102. Los tres son de la compañía Maxim Integrated y la verdad es que no hay diferencias significativas entre ellos. El tamaño y poco más. Eso sí, MAX30101 y MAX30102 parecen tener más precisión, así que podríamos utilizar el MAX30102.
El MAX30102 es un chip, un integrado, que es capaz de medir el pulso y el porcentaje de saturación de oxígeno ya que dispone de un led rojo y de uno infrarrojo. Es decir, es perfecto para el diseño de un pulsioxímetro.
Debido a estos leds, necesita una alimentación extra de 3.3V, además de los 1.8V que necesita el chip para hacer sus cálculos. Aunque esto no es realmente un problema ya que venden tarjetas montadas con el chip que solo necesitarán de una alimentación de 5V desde nuestro Arduino para gestionarlo todo.
Los pines que encontramos en estas tarjetas son:
- VIN: Que es la alimentación de 5V de la que hablábamos. Con su circuito electrónico ya adapta los voltajes de 3.3V y 1.8V que necesita el chip para funcionar.
- GND: Sin GND no funcionamos, así que debemos conectar el GND de Arduino al GND de la tarjeta con el MAX30102 para que puedan retornar los 5V.
- SCL: Serial Clock
- SDA: Serial Data
Como puedes ver, el MAX30102 se comunica por I2C, y es por eso que aparecen el Serial Clock, que contiene la señal de reloj que nos indica cuándo leer; y el Serial Data, que contiene los datos a leer.
Programando el MAX30102
El conexionado es sorprendentemente fácil, comparado con la programación. Una forma más sencilla de funcionar puede ser utilizar librerías ya hechas. En este caso, SparkFun (El típico, el que nunca falla) ha desarrollado esta.
La librería en sí se encuentra aquí y los ejemplos de uso se encuentran aquí. Al final, siempre que utilizamos librerías, disponemos de unas funciones básicas que nos hacen el trabajo más arduo.
Por ejemplo, tenemos la de inicialización que encenderá el sensor y lo pondrá en funcionamiento:
#include "MAX30105.h" #include "spo2_algorithm.h" MAX30105 Sensor setup(){ Sensor.setup(ledBrightness, sampleAverage, ledMode, sampleRate, pulseWidth, adcRange); }
Dónde todos estos parámetros tienen unos valores:
byte ledBrightness = 60; //Options: 0=Off to 255=50mA byte sampleAverage = 4; //Options: 1, 2, 4, 8, 16, 32 byte ledMode = 2; //Options: 1 = Red only, 2 = Red + IR, 3 = Red + IR + Green byte sampleRate = 100; //Options: 50, 100, 200, 400, 800, 1000, 1600, 3200 int pulseWidth = 411; //Options: 69, 118, 215, 411 int adcRange = 4096; //Options: 2048, 4096, 8192, 16384
Como ves, esto está sacado del ejemplo 8 de la librería, el del SpO2. Y podemos elegir el brillo del led, el número de segundos de muestreo (4), el modo del led (En nuestro caso no hay led verde, eso es para otro modelo), el número de muestras tomadas (100), el ancho de pulso utilizado y el rango del ADC.
Pero si no nos queremos complicar, podemos poner:
Sensor.setup();
Que inicializará al sistema con los valores predeterminados. Estos valores deben de trabajar con la mayoría de sistemas sin que nos preocupemos demasiado. Luego, también hay una función para revisar si hay nuevos datos a leer:
Sensor.check();
Y para luego leer estos valores obtenidos de led rojo y de infrarrojo:
Sensor.getRed(); Sensor.getIR();
Una vez obtenidos esos datos, pasamos a la siguiente muestra:
Sensor.nextSample();
Finalmente, podremos calcular el valor del SpO2 y del BPM con:
maxim_heart_rate_and_oxygen_saturation(irBuffer, bufferLength, redBuffer, &spo2, &validSPO2, &heartRate, &validHeartRate);
¡Oyga! Que no soy el médico de la sala…
Y llegamos al final. Solo decirte que no es necesario que todos tengamos un pulsioxímetro en casa para medirnos el oxígeno cada día como si nos pesásemos. Sobretodo para no sugestionarnos y acabar en urgencias por nada.
Como ya sabes, soy ingeniero, no médico. Todos los valores referentes a medicina que he expuesto arriba los he sacado de los siguientes links (Link 1, Link 2, Link 3 ) y he intentado hacer un resumen explicativo de cómo funciona y qué cosas debemos de tener en cuenta al utilizar un pulsioxímetro.
Espero te de un poco de luz en tiempos pandémicos y/o con personas mayores.
Déjame un comentario que en el fondo soy buen chaval
Rufián, excelente blog. Conecté uno de esos a internet por medio de un Esp-01 y luego la miraba desde un dashboard. Saludos, lince.