Monitoreando ritmo cardíaco y oxígeno en sangre con MAX30100 y Arduino

 

Introducción 

En el mundo de la salud y el fitness, los sensores de pulso y oxígeno en sangre se han vuelto indispensables. En este blog, exploraremos cómo puedes hacer tu propio monitor de ritmo cardíaco y de oxígeno en sangre utilizando el sensor MAX30100 y una placa Arduino, cabe destacar que es sólo para fines educativos y no está destinado a usos médicos.

Pulsioximetría

La pulsioximetría es un método utilizado para la estimar el porcentaje de oxígeno en la sangre, así como el ritmo cardiaco de una persona, este método se caracteriza por ser un método económico y en lo principal un método no invasivo. En particular, la pulsioximetría es un método de transiluminación, el cual científicamente basa su funcionamiento en dos principios físicos :

  • La presencia de una señal de pulso que se genera por la sangre arterial la cual se podría decir que es independiente a la sangre venosa y capilar, así como otros tejidos.
  • La característica que presenta la hemoglobina de mostrar diferente espectro de absorción según se encuentre en un estado oxigenado o más reducido.

Lo que trabaja sobre la luz es la hemoglobina, la cual es una molécula presente en la sangre cuya función es transportar el oxígeno. Esta molécula absorbe diferentes cantidades de luz según el nivel de oxígeno que posee en ese momento.

¿Qué es el sensor MAX30100?

El MAX30100 es un sensor integrado de ritmo cardíaco y de oxígeno en la sangre (SpO2) diseñado para dispositivos de salud y fitness portátiles. Este sensor, fabricado por la empresa Maxim Integrated, combina la tecnología de fotodetección de pulsos y un algoritmo de procesamiento de señal de alta calidad para dar una solución precisa y con poco ruido de ritmo cardíaco y oxígeno en la sangre.

Características del MAX30100:

  • Sensor de ritmo cardíaco y oxígeno en sangre: Puede monitorear simultáneamente el ritmo cardíaco y el nivel de SpO2.

  • Tecnología de fotodetección de pulsos: Incorpora un LED rojo e infrarrojo para la fotodetección de pulsos.

  • Conversión Analógico a Digital (ADC): Incorpora un conversor ADC de alta resolución que permite una detección precisa de los pulsos.

  • Interfaz I2C: Se comunica con el microcontrolador a través de la interfaz I2C, ahorrando pines en la placa y facilitando la comunicación con otros dispositivos digitales.

Puedes ver la hoja de datos completa aquí.

Diagrama

Los pines SDA y SCL del sensor se conectan a los pines correspondientes en el Arduino, y los pines de alimentación (VCC y GND) se conectan a la fuente de alimentación de la placa. Se usa una configuración PULL-UP en las lineas de datos con dos resistencias de 4.7k ohms.

Programación

Una vez que hayas conectado el sensor, deberás programar tu Arduino para comunicarse con él. Esto implica la lectura de los datos del sensor y su conversión en valores útiles.

Como primer paso hay que importar la librería "MAX30100_milan". Desde el IDE de Arduino ve a Sketch -> Include Library -> Manage Libraries, luego busca "MAX30100_milan" en la barra de búsqueda y haz clic en "Install".

 

 El primer código que te proporcionaremos lee los datos en bruto del sensor. En un nuevo sketch incluye las bibliotecas necesarias:

#include <Wire.h>

#include "MAX30100.h"

Se definen varias constantes para configurar el sensor. Estas incluyen la tasa de muestreo, la corriente de los LEDs infrarrojo y rojo, el ancho del pulso y el modo de alta resolución, explicaremos cada una a continuación:

#define SAMPLING_RATE MAX30100_SAMPRATE_100HZ

 

 Define la velocidad de muestreo efectiva, con una muestra que consta de un pulso de conversión IR y un pulso de conversión ROJO.
La frecuencia de muestreo y el ancho del pulso están relacionados, en el sentido de que la frecuencia de muestreo establece un límite superior en el tiempo del ancho del pulso.

#define IR_LED_CURRENT MAX30100_LED_CURR_50MA

#define RED_LED_CURRENT MAX30100_LED_CURR_27_1MA

 Establece el nivel actual del LED rojo e infrarrojo. 

Las corrientes de los LED se deben configurar a un nivel que evite el recorte y maximice el rango dinámico.

#define PULSE_WIDTH MAX30100_SPC_PW_1600US_16BITS

Establece el ancho de pulso del LED (el IR y el ROJO tienen el mismo ancho de pulso) y, por lo tanto, establece indirectamente el tiempo de integración del ADC en cada muestra. La resolución del ADC está directamente relacionada con el tiempo de integración.

#define HIGHRES_MODE true

Establece HIGHRES_MODE en verdadero (true) solo cuando se configura PULSE_WIDTH en MAX30100_SPC_PW_1600US_16BITS.

 

Se crea una instancia del sensor MAX30100 utilizando la biblioteca:

MAX30100 sensor; 

En la función setup(), se inicia la comunicación Serial con una velocidad de 115200 baudios. Luego, se inicia el sensor y se configuran los parámetros descritos anteriormente.

  Serial.begin(115200);
  sensor.begin();
  sensor.setMode(MAX30100_MODE_SPO2_HR);
  sensor.setLedsCurrent(IR_LED_CURRENT, RED_LED_CURRENT);
  sensor.setLedsPulseWidth(PULSE_WIDTH);
  sensor.setSamplingRate(SAMPLING_RATE);
  sensor.setHighresModeEnabled(HIGHRES_MODE);

 

En la función loop(), se actualiza continuamente el sensor y se leen los valores IR y rojo del sensor. Estos valores se obtienen utilizando la función getRawValues y se imprimen en el Monitor Serial. El bucle continuará ejecutándose hasta que se detenga el programa, leyendo y mostrando valores del sensor de manera continua.

El código completo queda de la siguiente forma:

Sube  el código a tu Arduino y abre el monitor serial a 115200 baudios. Coloca el dedo y obten las lecturas.

 

Ahora veamos un ejemplo simplificado de código que lee y muestra los datos del sensor de ritmo cardíaco y oxígeno en sangre (SpO2):

Coloca el dedo por unos segundos para obtener mejores lecturas.

Conclusión

En este tutorial, has aprendido cómo utilizar el sensor MAX30100 con una placa Arduino. Te has familiarizado con las funcionalidades y características de este sensor integrado de ritmo cardíaco y oxígeno en sangre. Hemos explicado cómo interpretar los datos que el sensor genera y cómo visualizarlos utilizando la comunicación serial. Con este conocimiento, estás equipado para incluir la monitorización del ritmo cardíaco y del oxígeno en sangre en tus propios proyectos de Arduino. Las posibilidades son enormes: desde construir tu propio monitor de ritmo cardíaco para ejercicios, crear un sistema de seguimiento de sueño, hasta diseñar un dispositivo portátil de salud con otras funciones.

¡Estamos emocionados de ver lo que crearás con el sensor MAX30100 y Arduino!

 

Productos Relacionados

Ver artículo

Ver artículo

Pulsioximetría

Deja un comentario