Ensinando a Conectar Um Oxímetro No Arduino UNO
by marceloantoniofernandes2006 in Circuits > Arduino
1330 Views, 1 Favorites, 0 Comments
Ensinando a Conectar Um Oxímetro No Arduino UNO
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.
Supplies
1- Arduino UNO (1 un);
2- Potenciômetro 10k (1 un);
3- Display LCD 16x2 (1 un);
4- Oxímetro Max30100 (1 un);
5- Protoboard (1 un);
6- Jumper Macho-Macho (20 un);
Adicionar Biblioteca Max30100
Vá até a aba "Ferramentas" do programa Arduino IDE, depois "Gerenciar Bibliotecas" e pesquise por Max30100 na aba de pesquisa. Instale o link da OXullo Intersellans.
Identificar Pinagem Display
Primeiramente, identifique qual modelo é o seu Display e sua respectiva pinagem, para que não corra o risco de queimá-lo ou danificá-lo de alguma forma.
Pinagem Max30100
Certifique-se de saber todos os pinos do Max30100 e conectar os corretos, pelos mesmos motivos do passo anterior.
Conectar Oxímetro/arduino
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 em anexo.
Conecte o pino Vin do MAX30100 ao pino do Arduino 5V ou 3,3V, GND ao GND.
Pinos Analógicos Max30100/Arduino
Conecte o pino I2C, SCL e SDA do MAX30100 ao A5 e A4 do Arduino.
Conectar LCD/Arduino
Da mesma forma, conecte os pinos 1, 5, 16 do LCD ao GND do Arduino e 2, 15 ao 5V VCC e os pinos 4, 6, 11, 12, 13, 14 do LCD aos pinos 13, 12, 11, 10, 9, 8 do Arduino.
Controlar Contraste LCD
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();
}
}