fbpx

Como utilizar o sensor de frequência cardíaca e oxímetro MAX30100 com Arduino

O sensor de frequência cardíaca e oxímetro MAX30100 é um dispositivo biométrico integrado capaz de medir a frequência cardíaca e a concentração de oxigênio no sangue, sendo aplicado em projetos de monitoramento de médico e condicionamento físico.

Imagem ilustrativa do sensor de frequência cardíaca e oxímetro MAX30100.
Figura 1: Sensor de frequência cardíaca e oxímetro MAX30100.

O sensor de frequência cardíaca e oxímetro MAX30100 possui um par de LEDs de alta intensidade (um vermelho e um infravermelho) e um fotodetector. Para realizar as medições os LEDs iluminam o dedo, lóbulo da orelha ou qualquer outra área em que a pele não seja muito grossa, e o fotodetector mede a quantidade de luz refletida.

Quando o coração bombeia sangue ocorre um aumento no nível de sangue oxigenado. Por sua vez, quando o coração relaxa o volume de sangue diminui. O sensor mede a frequência cardíaca com base no tempo entre o aumento e diminuição do sangue oxigenado.

O sangue oxigenado absorve mais luz infravermelha e permite maior passagem da luz vermelha. Ao contrário, o sangue desoxigenado absorve mais a luz vermelha e permite maior passagem da luz infravermelha. Com base na quantidade de absorção de ambas as luzes, o sensor consegue determinar o nível de oxigênio do sangue.

Imagem ilustrativa do modo de funcionamento do sensor de frequência cardíaca e oxímetro MAX30100.
Figura 2: Modo de funcionamento do sensor de frequência cardíaca e oxímetro MAX30100.

O sensor de frequência cardíaca e oxímetro MAX30100 opera com tensão de alimentação entre 3,3V a 5,5V e uma das suas vantagens é seu baixo consumo de energia, consumindo menos de 600 μA durante a medição e 0,7 μA em modo de espera.

O sensor de frequência cardíaca e oxímetro MAX30100 usa a interface I2C para comunicação com o microcontrolador. Seus pinos são ilustrados na Figura 3 e serão detalhados a seguir.

Imagem ilustrativa dos pinos do Pinos sensor de frequência cardíaca e oxímetro MAX30100.
Figura 3 : Pinos do Pinos sensor de frequência cardíaca e oxímetro MAX30100.

Funções dos pinos:

Vin: Pino de alimentação com tensão entre 3,3V e 5V;

SCL: Serial clock para sincronização da comunicação;

SDA: Serial data para envio e recebimento de dados;

INT: Pino que pode ser programado para gerar interrupções de pulso. Está em nível lógico alto. Quando ocorre uma interrupção, o pino é colocado em nível lógico baixo até que a interrupção seja parada;

IRD: Pino para acionamento do LED infravermelho;

RD: Pino para acionamento do LED vermelho;

GND: Aterramento do sensor.

Agora que já conhecemos algumas características do sensor de frequência cardíaca e oxímetro MAX30100, vamos aprender como utilizá-lo com o Arduino.

OBSERVAÇÃO: O sensor foi desenvolvido para placas microcontroladores que possuam nível lógico de 3,3 V. Para utilizar no Arduino (Nível lógico = 5V) será necessário retirar os resistores pull-up, ilustrados na Figura 4.

Figura ilustrativa dos resistores pull-up do sensor de frequência cardíaca e oxímetro MAX30100
Figura 4: Resistores pull-up do sensor de frequência cardíaca e oxímetro MAX30100.

O sensor ficará como na Figura 5.

Imagem ilustrativa do sensor de frequência cardíaca e oxímetro MAX30100 sem os resistores pull-up.
Figura 5: Sensor de frequência cardíaca e oxímetro MAX30100 sem os resistores pull-up.

O sensor ficará como na Figura 5.

MATERIAIS NECESSÁRIOS

ESQUEMÁTICA DE LIGAÇÃO

Monte o circuito da Figura 6 utilizando o sensor de frequência cardíaca e oxímetro MAX30100, os resistores e os jumpers.

Imagem ilustrativa do circuito para utilização do sensor de frequência cardíaca e oxímetro MAX30100.
Figura 6: Circuito para utilização do sensor de frequência cardíaca e oxímetro MAX30100.

Ao montar o circuito observe os seguintes pontos:

  • O pino Vin do sensor deve ser conectado à entrada 3.3V do Arduino;
  • Conecte os resistores de 4,7 kΩ como pull-up nos pinos SCL, SDA e INT.
  • O pino SCL deve ser ligado à entrada SCL do Arduino;
  • O pino SDA deve ser conectado à entrada SDA do Arduino;
  • O pino INT deve ser conectado à porta digital 2 do Arduino.
  • O pino GND do sensor deve ser conectado ao GND do Arduino.

ELABORANDO O CÓDIGO

Após a montagem do circuito, vamos programação do Sketch no Arduino IDE. Nesse projeto, vamos utilizar o sensor de frequência cardíaca e oxímetro MAX30100 em conjunto com o Arduino para medir a frequência cardíaca (batimentos por minuto – BPM) e o nível de oxigênio no sangue (SpO2) de uma pessoa.

Para tal, vamos fazer uso da biblioteca “MAX30100_PulseOximeter.h”. Para instalá-la, acesse o gerenciador de bibliotecas (Ctrl+Shift+I) e busque por MAX30100lib, conforme a Figura 7.

Imagem ilustrativa da biblioteca MAX30100lib no gerenciador de bibliotecas do Arduino IDE.
Figura 7: Biblioteca MAX30100lib no gerenciador de bibliotecas do Arduino IDE.

Vamos entender a lógica de programação desse projeto a partir dos seguintes passos:

1. Incluir as bibliotecas

Iniciamos o código incluindo as bibliotecas wire.h e MAX30100_PulseOximeter.h.

2. Criar as variáveis

Usamos a variável REPORTING_PERIOD_MS para armazenar o intervalo de tempo entre as medições (1000 milissegundos ou 1 segundo).

Em seguida, criamos a variável tcLastReport para armazenar a hora em que ocorreu o último batimento cardíaco em milissegundos.

3. Declarar o objeto pox

O objeto pox é do tipo PulseOximeter que é nativo da biblioteca MAX30100_PulseOximeter.h.

4. Criar função de retorno onBeatDetected()

A função onBeatDetected() exibirá a mensagem “Batimento detectado” no monitor serial quando ocorrer um batimento cardíaco.

5. Inicialização da comunicação serial e do sensor

Na função setup() inicializamos a comunicação serial com taxa de transmissão de 9600. Em seguida, inicializamos o sensor e verificamos se houve sucesso ou não na comunicação.

6. Configurar o LED infravermelho e registrar a função de retorno

Ainda na função setup() configuramos em 7,6 mA a corrente do LED infravermelho por meio da instrução pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);. Vale a pena lembrar que quanto maior a corrente, mais brilhante será o LED e mais profundamente ele atinge a pele.

Logo após, registramos a função de retorno pox.setOnBeatDetectedCallback(onBeatDetected);.

7. Realizar a leitura de batimento e Saturação do sangue.

Para atualizar a leitura do sensor usamos o comando “pox.update()”.

Os comandos “pox.getHeartRate()” e “pox.getSpO2()” serão responsáveis por fazer a leitura do batimento e saturação do sangue, respectivamente.

Ao final, o Sketch desse projeto ficará da seguinte maneira:

/*
  - SENSOR DE FREQUÊNCIA CARDÍACA E OXÍMETRO MAX30100 -
  =====================================================
  ===== BLOG DA ROBOTICA - www.blogdarobotica.com =====
  =====================================================
  Autor: Jonas Souza
  E-mail: contato@blogdarobotica.com
  Facebook: facebook.com/blogdarobotica
  Instagram:@blogdarobotica
  YouTube: youtube.com/user/blogdarobotica
  =====================================================
  ===== CASA DA ROBOTICA - www.casadarobotica.com =====
  =====================================================
  Facebook: facebook.com/casadaroboticaoficial
  Instagram:@casadarobotica
  =====================================================
*/

#include <Wire.h> //Biblioteca para comunicação I2C
#include "MAX30100_PulseOximeter.h" //Biblioteca para uso do sensor de frequência cardíaca e oxímetro MAX30100 

#define REPORTING_PERIOD_MS     1000 // Intervalo entre a medição de cada amostra

uint32_t tsLastReport = 0; // Tempo da última amostra dectada

PulseOximeter pox; //Declaração objeto pox

void onBeatDetected() { //Função executada quando um pulso é detectado
  Serial.println("Batimento detectado");
}

void setup() {
  Serial.begin(9600); //Inicialização da comunicação serial
  Serial.print("Iniciando funcionamento do sensor ");

  if (!pox.begin())  //Testa a comunicação com o sensor
  {
    Serial.println("Falhou ! "); //Se a comunicação não foi realizada corretamente exibe a mensagem "Falhou"
    for (;;);
  } else
  {
    Serial.println("Sucesso ! "); //Se a comunicação foi realizada com sucesso exibe a mensagem "Sucesso !"
  }
  pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA); // Define que o sensor use 7,6 mA para o led
  pox.setOnBeatDetectedCallback(onBeatDetected); // Registra todas as vezes em que um batimento for detectado
}

void loop() {
  pox.update(); //Atualiza a leitura do sensor

  if (millis() - tsLastReport > REPORTING_PERIOD_MS) { //Imprime a leitura em intervalos de 1000ms
    Serial.print("Taxa de Batimento : ");
    Serial.print(pox.getHeartRate()); // Faz a leitura de batimento cardíaco
    Serial.print("bpm / Saturacao sangue(SP02) : ");
    Serial.print(pox.getSpO2()); //Realiza a leitura da saturação do sangue
    Serial.println("%");

    tsLastReport = millis();
  }
}

O funcionamento deste projeto pode ser visualizado no Vídeo 1.

Espero ter ajudado,

Obrigado a todos e em caso de dúvidas deixe seu comentário abaixo!

Att. Jonas Souza

Dúvidas? Deixe seu comentário

Jonas Souza

Graduando em Engenharia Elétrica. Atua no setor desenvolvimento de tutoriais para o Blog da Robótica.

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.