MAX30102: monitor de frequência cardíaca e módulo de oxímetro para Arduino

MAX30102

Durante todo esse tempo, mostramos um grande número de componentes eletrônicos compatível com placas como Arduino ou compatíveis, bem como para muitos outros trabalhos de fabricante ou DIY. Agora vamos apresentar o módulo MAX30102, que inclui um sensor para medir o pulso e o oxigênio no sangue.

Dessa forma, você também pode criar wearables, como pulseiras de atividades feitas por você mesmo ou hardware para monitorar o estado de saúde de uma pessoa, fornecendo dados biométricos ou telemétricos dessa pessoa graças à integração do monitor de frequência cardíaca e do oxímetro neste dispositivo...

O que é um monitor de frequência cardíaca? Como funciona?

Un sensor de pulso ou monitor de frequência cardíaca É um dispositivo eletrônico usado para medir a frequência cardíaca de uma pessoa em tempo real. É utilizado principalmente na área esportiva para monitorar o desempenho e o esforço durante o treinamento ou no dia a dia. Os monitores de frequência cardíaca são populares entre os atletas, mas também são um dispositivo fundamental nos centros médicos para saber a frequência cardíaca, ou seja, a frequência cardíaca ou batimentos por minuto:

  • Relações Públicas: mostra a frequência cardíaca, ou seja, os batimentos por minuto.

Em todos os casos, o Sensores capturam variação no volume sanguíneo a cada batimento cardíaco. Essa variação é traduzida em um sinal elétrico que é processado para obter a frequência cardíaca. Alguns monitores de frequência cardíaca também incluem circuitos de amplificação e cancelamento de ruído para melhorar a precisão das leituras.

O que é um oxímetro? Como funciona?

Un oxímetro é um dispositivo médico ou esportivo que é usado para medir a saturação de oxigênio no sangue. Este aparelho oferece dados de saturação de oxigênio no sangue com valores de 0 a 100%. É comum que um mesmo aparelho inclua também a opção de frequência cardíaca, indicando todas as informações para monitoramento ou registro.

Los Datos Que mede um oxímetro é:

  • % SpO2: refere-se à porcentagem de saturação de oxigênio no sangue.

O oxímetro é colocado em forma de pinça de forma a se adaptar à morfologia do nosso dedo ou também pode ser colocado noutros locais do corpo, como é o caso do monitor de frequência cardíaca, como o pulso, como pode ser visto em muitas pulseiras de atividades. ,

Quanto ao seu funcionamento, os oxímetros emitem diferentes comprimentos de onda de luz que passam pela pele. Quem atua sobre essa luz é a hemoglobina, molécula sanguínea responsável pelo transporte de oxigênio, absorvendo diferentes quantidades de luz dependendo do nível de oxigênio que transporta. O processo detalhado é o seguinte:

  1. emissão de luz- O oxímetro emite dois comprimentos de onda de luz, um vermelho e outro infravermelho, que passam pelo dedo colocado no aparelho.
  2. Absorção de luz: A hemoglobina, uma molécula dos glóbulos vermelhos que transporta oxigênio, absorve diferentes quantidades dessas luzes. A hemoglobina carregada de oxigênio (oxihemoglobina) e a hemoglobina livre de oxigênio (desoxihemoglobina) têm diferentes propriedades de absorção de luz.
  3. Detecção de luz: Um detector no lado oposto do emissor de luz coleta a luz que passou pelo dedo.
  4. Cálculo da saturação de oxigênio- O dispositivo calcula a proporção de oxiemoglobina em relação à quantidade total de hemoglobina presente, tanto oxiemoglobina quanto desoxihemoglobina. Essa proporção é apresentada como o percentual de saturação de oxigênio no sangue (%SpO2). Isto é feito através de um processador capaz de interpretar esses sinais elétricos para traduzi-los em um valor numérico.

O que é o módulo MAX30102?

O sensor MAX30102, produzido pela Maxim Integrated, é um dispositivo integrado que combina as funcionalidades de um monitor de frequência cardíaca e de um oxímetro. Este sensor pode ser facilmente usado com um microcontrolador como o Arduino. O MAX30102 pertence à série MAX3010x de sensores ópticos desta empresa.

Seu funcionamento baseia-se na variação da absorção de luz pelo sangue, dependendo de sua nível de saturação de oxigênio e pulso como mencionei nas duas seções anteriores. Este sensor está equipado com dois LEDs, um vermelho e um infravermelho. Ele é colocado na pele, como no dedo ou no pulso, e detecta a luz refletida para determinar o grau de saturação de oxigênio.

A comunicação com o MAX30102 é realizada via barramento I2C, facilitando a conexão a um microcontrolador como o Arduino. O MAX30102 necessita de alimentação dupla: 1.8V para a lógica e 3.3V para os LEDs. Normalmente encontrado em módulos de 5V que já incluem a correspondência de nível necessária.

O MAX30102 é um sensor utilizado em projetos residenciais ou esportivos, ou seja, pode não ter confiabilidade e sensibilidade suficientes para uso médico profissional.

La oximetria de pulso óptica É um método não invasivo para determinar a porcentagem de saturação de oxigênio no sangue. Como mencionei antes, baseia-se na diferença nos coeficientes de absorção de luz da hemoglobina (Hb) e da oxiemoglobina (HbO2) para diferentes comprimentos de onda. O sangue rico em oxigênio absorve mais luz infravermelha, enquanto o sangue com baixo teor de oxigênio absorve mais luz vermelha. Em áreas do corpo onde a pele é suficientemente fina e existem vasos sanguíneos por baixo, esta diferença pode ser usada para determinar o grau de saturação de oxigénio.

Características do módulo MAX30102 com sensor de pulso e oxigênio no sangue

O MAX30102 inclui:

  • 2x LEDs, um vermelho (660nm) e um infravermelho (880nm)
  • 2x fotodiodos para medir a luz refletida
  • Conversor ADC de 18 bits com taxa de amostragem de 50 a 3200 amostras por segundo.
  • Além disso, possui a eletrônica necessária para amplificação e filtragem de sinal, cancelamento de luz ambiente, rejeição de frequências de 50-60Hz (luz artificial) e compensação de temperatura.

Consumo do módulo pode atingir até 50mA durante a medição, embora a intensidade possa ser ajustada programaticamente, com um modo de baixa potência de 0.7µA durante as medições.

Preço e onde comprar

Os sensores MAX30102 para medir pulso e oxigênio no sangue eles são muito baratos. Estes módulos podem ser seus por apenas alguns euros em sites como eBay, Aliexpress ou Amazon. Você verá que existem vários tipos e recomendamos o seguinte:

Conexões e exemplo com Arduino

Arduino IDE, tipos de dados, programação

Para testar o MAX30102 com Arduino, a primeira coisa é conectar este módulo à placa Arduino. Está a conexão é muito simples, você só precisa conectar o seguinte:

  1. O Vcc do módulo deve estar conectado na saída de 5V da placa Arduino.
  2. O GND do módulo deve ser conectado ao soquete GND da placa Arduino.
  3. O SCL do módulo deve estar conectado a uma das entradas analógicas da placa Arduino, como A5.
  4. O SDA do módulo deve ser conectado a outra das entradas analógicas da placa Arduino, como A4.

Uma vez estabelecidas as conexões apropriadas entre a placa MAX30102 e a placa Arduino, o próximo passo será escrever um código-fonte ou esboço para fazê-lo funcionar e começar a receber dados biométricos da pessoa em questão. Isso é tão fácil quanto escrever o seguinte código em Arduino IDE e programe a placa:

Você também precisa instalar uma biblioteca no Arduino IDE para usá-lo. A biblioteca foi desenvolvida pela SparkFun e está disponível em https://github.com/sparkfun/SparkFun_MAX3010x_Sensor_Library.
#include <Wire.h>
#include "MAX30105.h"
#include "spo2_algorithm.h"

MAX30102 pulsioximetro;


#define MAX_BRIGHTNESS 255


#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
//Arduino Uno no tiene suficiente SRAM para almacenar 100 muestreos, por lo que hay que truncar las muestras en 16-bit MSB.
uint16_t pulsoBuffer[100]; //infrared LED sensor data
uint16_t oxiBuffer[100];  //red LED sensor data

#else
uint32_t pulsoBuffer[100]; //Sensores
uint32_t oxiBuffer[100];  

#endif

int32_t BufferLongitud; //Longitud de datos
int32_t spo2; //Valor de SPO2
int8_t SPO2valido; //Indicador de validez del valor SPO2
int32_t rangopulsacion; //PR BPM o pulsaciones
int8_t validrangopulsacion; //Indicador de validez del valor PR BPM

byte pulsoLED = 11; //Pin PWM
byte lecturaLED = 13; //Titila con cada lectura

void setup()
{
  Serial.begin(115200); // Inicia la comunicación con el microcontrolador a 115200 bits/segundo

  pinMode(pulsoLED, OUTPUT);
  pinMode(lecturaLED, OUTPUT);

  // Inicializar sensores
  if (!pulsioximetro.begin(Wire, I2C_SPEED_FAST)) //Usar el bus I2C a 400kHz 
  {
    Serial.println(F("MAX30102 no encontrado. Por favor, comprueba la conexión y alimentación del módulo."));
    while (1);
  }

  Serial.println(F("Pon el sensor en contacto con tu dedo y presiona cualquier tecla para iniciar la conversión."));
  while (Serial.available() == 0) ; //Esperar hasta que se pulsa una tecla
  Serial.read();

  byte brilloLED = 60; //Opciones: 0=Apagado hasta 255=50mA
  byte mediaMuestreo = 4; //Opciones: 1, 2, 4, 8, 16, 32
  byte ModoLED = 2; //Opciones: 1 = Rojo solo, 2 = Rojo + IR, 3 = Rojo + IR + Verde
  byte rangoMuestreo = 100; //Opciones: 50, 100, 200, 400, 800, 1000, 1600, 3200
  int anchoPulso = 411; //Opciones: 69, 118, 215, 411
  int rangoADC = 4096; //Opciones: 2048, 4096, 8192, 16384

  pulsioximetro.setup(brilloLED, mediaMuestreo, ModoLED, rangoMuestreo, anchoPulso, rangoADC); //Configuración del módulo
}

void loop()
{
  BufferLongitud = 100; //10 almacenamientos en el buffer con 4 segundos corriendo a 25sps

  //Leer las primeras 100 muestras
  for (byte i = 0 ; i < BufferLongitud ; i++)
  {
    while (pulsioximetro.available() == false) //Comprobar nuevos datos
      pulsioximetro.check(); 
    oxiBuffer[i] = pulsioximetro.getRed();
    pulsoBuffer[i] = pulsioximetro.getIR();
    pulsioximetro.siguienteMuestreo(); //Muestreo terminado, ir al siguiente muestreo

    Serial.print(F("red="));
    Serial.print(oxiBuffer[i], DEC);
    Serial.print(F(", ir="));
    Serial.println(pulsoBuffer[i], DEC);
  }

  //Calcular el valor del pulso PM y SpO2 tras los primeros 100 samples
  maxim_heart_rate_and_oxygen_saturation(pulsoBuffer, BufferLongitud, oxiBuffer, &spo2, &SPO2valido, &rangopulsacion, &validrangopulsacion);

  //Calcular muestreos continuos
  while (1)
  {
    //Volcar los 25 primeros valores en memoria y desplazar los últimos 75 arriba
    for (byte i = 25; i < 100; i++)
    {
      oxiBuffer[i - 25] = oxiBuffer[i];
      pulsoBuffer[i - 25] = pulsoBuffer[i];
    }

    for (byte i = 75; i < 100; i++)
    {
      while (pulsioximetro.available() == false) //Comprobar si existen nuevos datos
        pulsioximetro.check(); 

      digitalWrite(lecturaLED, !digitalRead(lecturaLED)); //Parpadea el LED on-board con cada dato

      oxiBuffer[i] = pulsioximetro.getRed();
      pulsoBuffer[i] = pulsioximetro.getIR();
      pulsioximetro.siguienteMuestreo(); //Al finalizar, moverse al siguiente muestreo

      Serial.print(F("Oxígeno="));
      Serial.print(oxiBuffer[i], DEC);
      Serial.print(F(", Pulso="));
      Serial.print(pulsoBuffer[i], DEC);

      Serial.print(F(", HR="));
      Serial.print(rangopulsacion, DEC);

      Serial.print(F(", HRvalid="));
      Serial.print(validrangopulsacion, DEC);

      Serial.print(F(", SPO2="));
      Serial.print(spo2, DEC);

      Serial.print(F(", SPO2 válido="));
      Serial.println(SPO2valido, DEC);
    }

    //Recalcular tras los primeros muestreos
    maxim_heart_rate_and_oxygen_saturation(pulsoBuffer, BufferLongitud, oxiBuffer, &spo2, &SPO2valido, &rangopulsacion, &validrangopulsacion);
  }
}

Claro, você pode modificar o código de acordo com suas necessidades, isso é apenas um exemplo...


Seja o primeiro a comentar

Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.