Monitore SpO2/BPM com ESP32 e oxímetro de pulso MAX30100 em Blynk

Tempo de leitura: 6 minutes

Neste projeto DIY IoT, tentaremos fazer um dispositivo de monitoramento de saúde inteligente que pode medir SpO2 (porcentagem de oxigênio no sangue) e frequência cardíaca em BPM (batimento por minuto). Este dispositivo vestível pode ser usado por atletas para monitorar sua frequência cardíaca e níveis de oxigênio no sangue durante um treino. A melhor parte deste projeto é que você pode conectar este dispositivo a um aplicativo Android Blynk que gravará e atualizará regularmente os dados de SPO2 e BPM na internet. Mesmo qualquer pessoa pode monitorar os dados de qualquer parte do mundo à medida que os dados são carregados no servidor.

Como há disponibilidade de dados online, este projeto pode ser utilizado para monitorar a saúde de um paciente online. O oxímetro de pulso disponível no mercado é muito caro, mas com este módulo de oxímetro de pulso simples e de baixo custo, podemos fazer nosso próprio dispositivo. Então, vamos aprender como fazer o oxímetro de pulso MAX30100 com ESP32.

Você pode passar pela versão anterior deste projeto com ESP8266:
1. Oxímetro de pulso MAX30100 com ESP8266 no aplicativo Blynk IoT

Lista de Materiais

A seguir estão os componentes necessários para fazer este projeto. Todos os componentes podem ser adquiridos na Amazon. O link dos componentes adquiridos é fornecido abaixo.

Nome dos ComponentesDescriçãoQuantidade
1ESP32 BoardPlaca de desenvolvimento ESP32 ESP-32S (ESP-WROOM-32)1https://amzn.to/38W7f6U
2Pulse Oximeter SensorMAX30100/MAX30102 Sensor de Oxímetro de Pulso I2C1No ML (Link)
3Fios de conexãoFios de Ligação5https://amzn.to/35QH7bF
4ProtoBoard1https://amzn.to/3iuKXvW

Oxímetro de pulso MAX30100

O sensor é uma solução integrada de sensor de oximetria de pulso e monitor de frequência cardíaca. Ele combina dois LEDs, um fotodetector, óptica otimizada e processamento de sinal analógico de baixo ruído para detectar sinais de pulso e frequência cardíaca. Ele opera com fontes de alimentação de 1,8 V e 3,3 V e pode ser desligado por meio de software com corrente de espera insignificante, permitindo que a fonte de alimentação permaneça conectada o tempo todo.

 

Características

1. Consome energia muito baixa (opera de 1,8 V e 3,3 V)
2. Corrente de desligamento ultrabaixa (0,7 µA, típico)
3. Capacidade de saída rápida de dados

 

Funcionamento do oxímetro de pulso MAX30100 e do sensor de frequência cardíaca

O aparelho possui dois LEDs, um emitindo luz vermelha e outro emitindo luz infravermelha. Para a taxa de pulso, apenas a luz infravermelha é necessária. Tanto a luz vermelha quanto a infravermelha são usadas para medir os níveis de oxigênio no sangue.

Quando o coração bombeia sangue, há um aumento no sangue oxigenado como resultado de ter mais sangue. Conforme o coração relaxa, o volume de sangue oxigenado também diminui. Conhecendo o tempo entre o aumento e a diminuição do sangue oxigenado, a taxa de pulso é determinada.

Acontece que o sangue oxigenado absorve mais luz infravermelha e passa mais luz vermelha, enquanto o sangue desoxigenado absorve a luz vermelha e passa mais luz infravermelha. Esta é a principal função do MAX30100: ele lê os níveis de absorção de ambas as fontes de luz e os armazena em um buffer que pode ser lido via I2C.

 

Interface do oxímetro de pulso MAX30100 com ESP32

Agora faremos a interface do oxímetro de pulso MAX30100 com ESP32. O diagrama do circuito e a conexão são fornecidos abaixo. Você pode montar o dispositivo exatamente como mostrado na figura abaixo.

O MAX30100 possui pinos I2C. Portanto, conecte seu pino SDA ao D21 e o pino SCL ao D22 da Placa ESP32. A fonte de alimentação exigida pelo MAX30100 é de 3,3V. Portanto, conecte seu terminal VCC a 3,3 V de ESP32.

 

Configurando o aplicativo Blynk Android

Blynk é um aplicativo que roda em dispositivos Android e IOS para controlar qualquer aplicativo baseado em IoT usando smartphones. Ele permite que você crie sua interface gráfica de usuário para o aplicativo IoT. Aqui, configuraremos o aplicativo Blynk para monitorar BPM e SPO2 por Wi-Fi usando NodeMCU ESP32.

Portanto, baixe e instale o aplicativo Blynk da Google Play Store. Os usuários do IOS podem fazer o download na App Store. Assim que a instalação for concluída, abra o aplicativo e inscreva-se usando seu ID de e-mail e senha.

Agora clique em “Novo Projeto”. No pop-up, defina os parâmetros como Nome do projeto, Placa e tipo de conexão conforme mostrado na foto acima. Para este projeto MAX30100 ESP32, selecione o dispositivo como ESP32 e o tipo de conexão como Wi-Fi. Em seguida, clique em Criar.

Agora clique no sinal “+” para adicionar os widgets. Precisamos ler o valor de BPM e SpO2. Portanto, selecione um par de widgets chamado Value Display & Gauge.

Após arrastar os widgets, defina seus parâmetros conforme mostrado na imagem acima. Clique em Value Display e defina o pino para “V3” e “V4“. Da mesma forma, nas configurações do medidor, defina o pino de saída para “V3” e “V4”.

Após a criação do projeto com sucesso, volte às configurações e clique em Enviar e-mail. Você receberá um Authenticate ID no correio registrado. Salve a ID de autenticação para referência futura.

 

Código Fonte / Programa

Assim que a configuração do hardware estiver concluída, agora precisamos fazer o upload do código para a placa ESP32. Mas antes disso você precisa instalar algumas bibliotecas.

Os arquivos da biblioteca podem ser baixados aqui:
1. Biblioteca Arduino MAX30100
2. Biblioteca BlynkSimpleEsp32.h

#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#define BLYNK_PRINT Serial
#include <Blynk.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
 
#define REPORTING_PERIOD_MS 1000
 
char auth[] = "w2yoZ3qIQpfq1DmTMYUcEB1Nd3s_HnwO";              // Você deve obter o Auth Token no aplicativo Blynk.
char ssid[] = "Alexahome";                                     // Suas credenciais de WiFi.
char pass[] = "12345678";
 
// Conexões: SCL PIN - D1, SDA PIN - D2, INT PIN - D0
PulseOximeter pox;
 
float BPM, SpO2;
uint32_t tsLastReport = 0;
  
void onBeatDetected()
{
    Serial.println("Batida detectada!");
}
 
void setup()
{
    Serial.begin(115200);
    
    pinMode(19, OUTPUT);
    Blynk.begin(auth, ssid, pass);
 
    Serial.print("Inicializando o oxímetro de pulso..");
 
    if (!pox.begin())
    {
         Serial.println("FAILED");
         for(;;);
    }  else  {
         Serial.println("SUCCESS");
         pox.setOnBeatDetectedCallback(onBeatDetected);
    }
 
    // A corrente padrão para o LED IR é 50mA e pode ser alterada removendo o comentário da seguinte linha.
        pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
 
}
 
void loop()
{
    pox.update();
    Blynk.run();
 
    BPM = pox.getHeartRate();
    SpO2 = pox.getSpO2();
    if (millis() - tsLastReport > REPORTING_PERIOD_MS)
    {
        Serial.print("Heart rate:");
        Serial.print(BPM);
        Serial.print(" bpm / SpO2:");
        Serial.print(SpO2);
        Serial.println(" %");
 
        Blynk.virtualWrite(V3, BPM);
        Blynk.virtualWrite(V4, SpO2);
 
        tsLastReport = millis();
    }
}

Observação de saída e valor de leitura em Blynk de MAX30100 ESP32

Assim que o código for carregado, você pode abrir o monitor serial e ver o seguinte, pois os valores de BPM e SpO2 são exibidos após o NodeMCU se conectar ao wi-fi.

No aplicativo Android, o valor de BPM e SpO2 é carregado após um segundo e você pode ver uma mudança no medidor e nos parâmetros de exibição.

 

 

MAX30100 não funciona solução de problemas

Se você adquiriu o módulo MAX30100 mostrado abaixo, ele pode não funcionar, pois tem um sério problema de design. O MAX30100 IC usa 1,8 V para VDD e este módulo em particular usa dois reguladores para atingir essa tensão. Nada de errado com isso. No entanto, se você olhar de perto, os pinos SCL e SDA são puxados para cima através dos resistores de 4,7 k ohm para 1,8 V! Isso significa que não funcionará bem com microcontroladores com níveis lógicos mais altos.

1º Método

A solução é remover os resistores da placa (circulados na imagem abaixo) e conectar resistores externos de 4,7k ohms ao SDA, SCL e pino INT.

Depois de remover todo o resistor de 4,7 K, conecte o pino INT, SDA, SCL ao resistor externo de 4,7 K pull up, conforme mostrado na imagem abaixo.

2º Método

Da mesma forma, você pode usar o segundo método para corrigir esse problema se não gostar do primeiro. Basta cortar o caminho no lugar da cruz vermelha e fazer um salto como mostra a linha amarela. O jumper não precisa de fio isolado. Você pode retirar um fio estanhado do fio trançado. A placa é coberta com uma máscara protetora e não há curto-circuito para o vazamento de cobre.

Explicação feita por outro site.