fbpx
ArduinoNovidade

Como utilizar o Sensor Frequência Cardíaca Max30100 Oxímetro com ESP8266

Em post anterior apresentamos como utilizar 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 com o sensor de frequência cardíaca e oxímetro MAX30100.

Neste tutorial, recriaremos o mesmo projeto utilizando a placa NODEMCU ESP8266 Amica (Figura 1).

Imagem ilustrativa da placa NODEMCU ESP8266 Amica.
Figura 1: Placa NODEMCU ESP8266 Amica.

MATERIAIS NECESSÁRIOS

ESQUEMÁTICA DE LIGAÇÃO

Monte o circuito da Figura 2 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 com a placa NODEMCU ESP8266 Amica.
Figura 2: Circuito para utilização do sensor de frequência cardíaca e oxímetro MAX30100 com a placa NODEMCU ESP8266 Amica.

Ao montar o circuito observe os seguintes pontos:

  • O pino VIN do sensor deve ser conectado à entrada 3,3V da NODEMCU ESP8266;
  • O pino GND do sensor deve ser conectado ao GND da NODEMCU ESP8266;
  • O pino SCL deve ser conectado à porta digital D1 (SCL da NODEMCU ESP8266);
  • O pino SDA deve ser conectado à porta digital D2 (SDA da NODEMCU ESP8266).

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 a placa NODEMCU ESP8266 para medir a frequência cardíaca (batimentos por minuto – BPM) e o nível de oxigênio no sangue (SpO2) de uma pessoa.

Caso seja a primeira vez que você esteja programando a NODEMCU ESP8266 pelo Arduino IDE acesse o tutorial de instalação e configuração da placa clicando aqui!

Neste tutorial, 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 3.

Imagem ilustrativa da biblioteca MAX30100lib no gerenciador de bibliotecas do Arduino IDE.
Figura 3: 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:

#include <Wire.h> // Declaração das bibliotecas
#include "MAX30100_PulseOximeter.h"

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

PulseOximeter pox; //Declaração objeto pox.

uint32_t tsLastReport = 0; // Tempo da ultima amostra dectada

void onBeatDetected() {
     Serial.println("Batimento detectado");
}

void setup() {
     Serial.begin(9600);
     Serial.print("Inciando funcionamento do sensor ");

   
     if (!pox.begin())  //Incializa o funcionamento do sensor
        {
           Serial.println("Falhou ! "); // se a comunicação não for realizada da maneira errada será mostrado no monitor serial que a incialização falhou
           for (;;);
       
  } else
        {
             Serial.println("Sucesso ! "); // se a comunicação for realizada da maneira correta será mostrado no monitor serial que a incialização foi um sucesso
         
    }
    pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA); // Define que o sensor use uma corrente de 7,8 mA para o led
  pox.setOnBeatDetectedCallback(onBeatDetected); // Sinalizará no monitor serial todas as vezes em que um batimento for detectado
}

void loop() {
     pox.update(); // inicia a leitura do sensor
     if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
           Serial.print("Taxa de Batimento : ");
           Serial.print(pox.getHeartRate()); // Faz a leitura de batimento
           Serial.print("bpm / Saturacao sangue(SP02) : ");
           Serial.print(pox.getSpO2()); // faz a leitura da saturação do sangue
           Serial.println("%");

           tsLastReport = millis();
       
  }  
}

Espero ter ajudado,

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

Att. Jonas Souza

Graduando em Engenharia Elétrica.

Jonas Souza

Graduando em Engenharia Elétrica.