Interface do sensor oxímetro de pulso MAX30100 com Arduino
Conteudo
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 Componentes | Descrição | Quantidade | ||
---|---|---|---|---|
1 | Arduino Board | Arduino UNO R3 ou Genérica | 1 | https://amzn.to/2Kfzwfc |
2 | Pulse Oximeter Sensor | MAX30100 Module | 1 | |
4 | LCD Display | LCD Display 16X2 | 1 | https://amzn.to/2XBZOLE |
5 | Potenciômetro | 10K | 1 | https://amzn.to/3qeY8UE |
6 | Fios Jumper | Fios Jumper | 10 | https://amzn.to/3soSsJo |
7 | ProtoBoard | – | 1 | https://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.