Monitor de oxigênio no sangue e frequência cardíaca com MAX30100 no Arduino
Conteudo
Monitor de oxigênio no sangue e frequência cardíaca com oxímetro de pulso MAX30100 e Arduino
Neste projeto, faremos um dispositivo que pode medir o oxigênio no sangue e a frequência cardíaca usando o oxímetro de pulso MAX30100 e o Arduino. A concentração de oxigênio no sangue denominada SpO2 é medida em porcentagem e os batimentos cardíacos/frequência de pulso são medidos em BPM. O MAX30100 é uma solução para sensor de oximetria de pulso e monitor de frequência cardíaca. Você também pode usar MAX30102, que é uma versão atualizada do MAX30100.
Exibiremos o valor de SpO2 e BPM em tela OLED de 0,96″. A cada batida, o valor de exibição é alterado na tela OLED. Usando o módulo Bluetooth HC-05/HC-06 (operando em modo escravo), podemos enviar dados para o aplicativo Android sem fio e monitorar os dados no aplicativo, bem como manter um registro dos dados em formato de texto. Desta forma, podemos enviar os dados lidos do dispositivo para outro dispositivo ou para a Internet. 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.
Lista de Materiais
A seguir estão os componentes necessários para este projeto, ou seja, monitor de oxigênio no sangue e frequência cardíaca com oxímetro de pulso MAX30100 e Arduino. Todos os componentes podem ser adquiridos no Amazon ou MercadoLivre.
Nome dos Componentes | Descrição | Quantidade | ||
---|---|---|---|---|
1 | Arduino Board | Arduino Nano | 1 | https://amzn.to/39pOOqh |
2 | Pulse Oximeter Sensor | Módulo MAX30100 | 1 | No ML (Link) |
4 | OLED Display | 0.96″ I2C OLED Display | 1 | https://amzn.to/3oJQVf4 |
5 | Bluetooth Module | HC-05/HC-06 Bluetooth | 1 | https://amzn.to/39pQa4l |
6 | Connecting Wires | Jumper Wires | 10 | https://amzn.to/3i9YI37 |
7 | ProtoBoard | – | 1 | https://amzn.to/3snWphs |
Como funciona o oxímetro de pulso?
O oxigênio entra nos pulmões e é passado para o sangue. O sangue transporta oxigênio para os vários órgãos do nosso corpo. O principal meio pelo qual o oxigênio é transportado em nosso sangue é por meio da hemoglobina. Durante uma leitura de oximetria de pulso, um pequeno dispositivo semelhante a uma pinça é colocado em um dedo, lóbulo da orelha ou dedo do pé.
Pequenos feixes de luz passam pelo sangue no dedo, medindo a quantidade de oxigênio. Ele faz isso medindo as mudanças na absorção de luz no sangue oxigenado ou desoxigenado.
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.
Diagrama de circuito e conexões
O diagrama de circuito e a conexão para fazer a interface do oxímetro de pulso MAX30100 com o Arduino junto com o módulo Bluetooth HC-05 e display OLED são fornecidos abaixo.
MAX30100 e display OLED funcionam no protocolo de comunicação I2C. Portanto, seu pino SDA e SCL é conectado ao pino I2C do Arduino, ou seja, A4 e A5. Da mesma forma, o módulo Bluetooth é um módulo UART e precisa ser conectado aos pinos Tx e Rx do Arduino.
O aplicativo Android
A frequência de pulso e a concentração de oxigênio no sangue que são exibidas no display OLED podem ser transferidas sem fio para o dispositivo Android usando o aplicativo Android por meio de uma conexão Bluetooth.
Este aplicativo foi desenvolvido usando o MIT App Inventor. O link para ambos os arquivos, ou seja, arquivos APK e arquivos .aia, é fornecido abaixo. Você pode editar e modificar o aplicativo Android no MIT App inventor após importar o arquivo .aia. O aplicativo pode ser instalado em qualquer dispositivo Android e pode ser conectado ao Módulo Bluetooth HC-05.
Baixe o aplicativo Android: Download
Baixar arquivo .aia: Baixar
Código Fonte/Programa
O código/Programa-fonte para fazer a interface do oxímetro de pulso MAX30100 e do sensor de frequência cardíaca com o Arduino é fornecido abaixo. Copie este código e carregue-o na placa Arduino.
Os arquivos da biblioteca podem ser baixados aqui:
1. Biblioteca Arduino MAX30100
2. Biblioteca OkaOLED
3. Biblioteca Adafruit GFX
#include <Wire.h> #include "MAX30100_PulseOximeter.h" #include "Wire.h" #include "Adafruit_GFX.h" #include "OakOLED.h" #define REPORTING_PERIOD_MS 1000 OakOLED oled; PulseOximeter pox; uint32_t tsLastReport = 0; const unsigned char bitmap [] PROGMEM= { 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x18, 0x00, 0x0f, 0xe0, 0x7f, 0x00, 0x3f, 0xf9, 0xff, 0xc0, 0x7f, 0xf9, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xf7, 0xff, 0xf0, 0xff, 0xe7, 0xff, 0xf0, 0xff, 0xe7, 0xff, 0xf0, 0x7f, 0xdb, 0xff, 0xe0, 0x7f, 0x9b, 0xff, 0xe0, 0x00, 0x3b, 0xc0, 0x00, 0x3f, 0xf9, 0x9f, 0xc0, 0x3f, 0xfd, 0xbf, 0xc0, 0x1f, 0xfd, 0xbf, 0x80, 0x0f, 0xfd, 0x7f, 0x00, 0x07, 0xfe, 0x7e, 0x00, 0x03, 0xfe, 0xfc, 0x00, 0x01, 0xff, 0xf8, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; void onBeatDetected() { Serial.println("Beat!"); oled.drawBitmap( 60, 20, bitmap, 28, 28, 1); oled.display(); } void setup() { Serial.begin(9600); oled.begin(); oled.clearDisplay(); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0, 0); oled.println("Inicializando oxímetro de pulso.."); oled.display(); Serial.print("Inicializando oxímetro de pulso.."); if (!pox.begin()) { Serial.println("Falhou"); oled.clearDisplay(); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0, 0); oled.println("Falhou"); oled.display(); for(;;); } else { oled.clearDisplay(); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0, 0); oled.println("Sucesso"); oled.display(); Serial.println("Sucesso"); } pox.setOnBeatDetectedCallback(onBeatDetected); } void loop() { pox.update(); if (millis() - tsLastReport > REPORTING_PERIOD_MS) { Serial.print("Heart BPM:"); Serial.print(pox.getHeartRate()); Serial.print("-----"); Serial.print("Oxygen Percent:"); Serial.print(pox.getSpO2()); Serial.println("\n"); oled.clearDisplay(); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0,16); oled.println(pox.getHeartRate()); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0, 0); oled.println("Heart BPM"); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0, 30); oled.println("Spo2"); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0,45); oled.println(pox.getSpO2()); oled.display(); tsLastReport = millis(); } }
Projeto de trabalho do Arduino MAX30100
O projeto é testado na placa de ensaio. Inicialmente, quando nenhum dedo é colocado sobre MAX30100, os valores de SPO2 e BPM são zero. Quando o dedo é colocado, os valores de BPM e SPO2 começam a aparecer. Mas o valor mostrado não está correto inicialmente, depois de alguns segundos, o display OLED começa a mostrar o valor correto.
Aqui está uma demonstração de trabalho do dispositivo funcionando quando montado na placa de ensaio.
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.