Interface do sensor oxímetro de pulso MAX30100 com Arduino

Tempo de leitura: 6 minutes

Interface do sensor oxímetro de pulso MAX30100 com Arduino

Neste projeto, faremos a interface do sensor de oxímetro de pulso MAX30100 com o Arduino, que pode medir o oxigênio no sangue e a frequência cardíaca e exibi-los em um display LCD 16×2. A concentração de oxigênio no sangue denominada SpO2 é medida em porcentagem e os batimentos cardíacos/freqüência de pulso são medidos em BPM. O MAX30100 é uma solução para sensor de oximetria de pulso e monitor de freqüência cardíaca.

 

Lista de Materiais

A seguir estão os componentes necessários para este projeto, ou seja, a interface do sensor de oxímetro de pulso MAX30100 com o Arduino. Todos os componentes podem ser adquiridos no MercadoLivre ou Amazon. O nome dos componentes, bem como o link adquirido, são fornecidos abaixo.

Nome dos ComponentesDescriçãoQuantidade
1Arduino BoardArduino UNO R3 ou Genérica1https://amzn.to/2Kfzwfc
2Pulse Oximeter SensorMAX30100 Module1
4LCD DisplayLCD Display 16X21https://amzn.to/2XBZOLE
5Potenciômetro10K1https://amzn.to/3qeY8UE
6Fios JumperFios Jumper10https://amzn.to/3soSsJo
7ProtoBoard1https://amzn.to/3bNWTrJ

 

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.

Interface do sensor oxímetro de pulso MAX30100 com Arduino

Agora vamos fazer a interface do Sensor Oxímetro de Pulso MAX30100 com o Arduino e exibir o valor no monitor serial. Portanto, o diagrama do circuito e a conexão são fornecidos abaixo. Você pode seguir o mesmo.

Conecte o pino Vin do MAX30100 ao pino do Arduino 5V ou 3,3V, GND ao GND. Conecte o pino I2C, SCL e SDA do MAX30100 ao A5 e A4 do Arduino.

 

Código Fonte / Programa

O código / programa fonte para fazer a interface do oxímetro de pulso MAX30100 com o Arduino é fornecido abaixo. Este código exibirá o valor no monitor serial. Copie este código e carregue-o na placa Arduino.

Os arquivos da biblioteca podem ser baixados aqui:
Arduino MAX30100

#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
 
#define REPORTING_PERIOD_MS     1000
 
PulseOximeter pox;
uint32_t tsLastReport = 0;
 
void onBeatDetected()
{
    Serial.println("Beat!");
}
 
void setup()
{
    Serial.begin(115200);
    Serial.print("Initializing pulse oximeter..");
 
    //Inicializa a instância do PulseOximeter
    //As falhas são geralmente devido a uma fiação I2C inadequada, fonte de alimentação ausente
    //ou chip alvo errado
    if (!pox.begin()) {
        Serial.println("Falhou");
        for(;;);
    } else {
        Serial.println("SUCESSO");
    }
    pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
 
    //Registre um retorno de chamada para a detecção de batida
    pox.setOnBeatDetectedCallback(onBeatDetected);
}
 
void loop()
{
    //Certifique-se de chamar update o mais rápido possível
    pox.update();
    if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
        Serial.print("Heart rate:");
        Serial.print(pox.getHeartRate());
        Serial.print("bpm / SpO2:");
        Serial.print(pox.getSpO2());
        Serial.println("%");
 
        tsLastReport = millis();
    }
}

Assim que o código for carregado, você pode colocar o dedo no sensor MAX30100 e abrir o monitor serial para ver os valores conforme mostrado na foto abaixo

 

Interface do sensor oxímetro de pulso MAX30100 com Arduino e display LCD

Agora vamos usar o monitor LCD 16X2 para ver o valor de BPM e SpO2 em vez do monitor serial. Monte o circuito conforme mostrado no diagrama de circuito abaixo.

Conecte o pino Vin do MAX30100 ao pino do Arduino 5V ou 3,3V, GND ao GND. Conecte o pino I2C, SCL e SDA do MAX30100 ao A5 e A4 do Arduino. Da mesma forma, conecte os pinos 1, 5, 16 do LCD ao GND do Arduino e 2, 15 a 5V VCC. Da mesma forma, conecte o pino 4, 6, 11, 12, 13, 14 do LCD ao pino 13, 12, 11, 10, 9, 8 do Arduino. Use o potenciômetro de 10K no pino 3 do LCD para ajustar o contraste do LCD.

 

Código Fonte / Programa

#include <LiquidCrystal.h>
#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
 
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
 
#define REPORTING_PERIOD_MS     1000
 
PulseOximeter pox;
uint32_t tsLastReport = 0;
 
void onBeatDetected()
{
    Serial.println("Beat!");
}
 
void setup()
{
    Serial.begin(115200);
    Serial.print("Initializing pulse oximeter..");
    lcd.begin(16,2);
    lcd.print("Initializing...");
    delay(3000);
    lcd.clear();
 
    // Inicializa a instância do PulseOximeter
    // As falhas são geralmente devido a uma fiação I2C inadequada, fonte de alimentação ausente
    // ou chip alvo errado
    if (!pox.begin()) {
        Serial.println("FAILED");
        for(;;);
    } else {
        Serial.println("SUCCESS");
    }
    pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
 
    // Registra um retorno de chamada para a detecção de batida
    pox.setOnBeatDetectedCallback(onBeatDetected);
}
 
void loop()
{
    // Certifique-se de chamar update o mais rápido possível
    pox.update();
    if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
        Serial.print("Heart rate:");
        Serial.print(pox.getHeartRate());
        Serial.print("bpm / SpO2:");
        Serial.print(pox.getSpO2());
        Serial.println("%");
 
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("BPM : ");
        lcd.print(pox.getHeartRate());
        
        lcd.setCursor(0,1);
        lcd.print("SpO2: ");
        lcd.print(pox.getSpO2());
        lcd.print("%");
 
        tsLastReport = millis();
    }
}

Assim que o código for carregado, você pode colocar o dedo no sensor MAX30100 e o LCD começará a exibir a porcentagem de oxigênio e o valor de BPM.

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.