Monitore SpO2/BPM com ESP32 e oxímetro de pulso MAX30100 em Blynk
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
Conteudo
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 Componentes | Descrição | Quantidade | ||
---|---|---|---|---|
1 | ESP32 Board | Placa de desenvolvimento ESP32 ESP-32S (ESP-WROOM-32) | 1 | https://amzn.to/38W7f6U |
2 | Pulse Oximeter Sensor | MAX30100/MAX30102 Sensor de Oxímetro de Pulso I2C | 1 | No ML (Link) |
3 | Fios de conexão | Fios de Ligação | 5 | https://amzn.to/35QH7bF |
4 | ProtoBoard | – | 1 | https://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.