Appearance
MAX30102 – Dokumentace a použití
Popis
MAX30102 je optický senzor pro měření srdeční frekvence (HR) a saturace kyslíkem (SpO₂). Používá červenou (RED) a infračervenou (IR) LED + fotodiodu. Komunikuje přes I2C (adresa 0x57).
Používané knihovny / protokoly
- I2C
- Wire.h
- MAX30105.h (SparkFun)
- heartRate.h
Zapojení
Inicializace (I2C + senzor)
cpp
#include <Wire.h>
#include "MAX30105.h"
MAX30105 sensor;
void setup() {
Serial.begin(115200);
Wire.begin();
if (!sensor.begin(Wire)) {
Serial.println("MAX30102 nenalezen");
while (1);
}
sensor.setup();
}Základní příkazy
Kontrola zařízení:
cpp
Wire.beginTransmission(0x57);
if (Wire.endTransmission() == 0) {
Serial.println("Senzor nalezen");
}Čtení hodnot:
cpp
long ir = sensor.getIR();
long red = sensor.getRed();Kontrola prstu:
cpp
if (ir < 50000) {
Serial.println("Přilož prst");
}Nastavení LED:
cpp
sensor.setPulseAmplitudeRed(0x0A);
sensor.setPulseAmplitudeIR(0x0A);FIFO práce se vzorky
cpp
sensor.check();
while (sensor.available()) {
long ir = sensor.getFIFOIR();
sensor.nextSample();
}Měření srdeční frekvence (BPM)
cpp
#include <Wire.h>
#include "MAX30105.h"
#include "heartRate.h"
MAX30105 sensor;
const byte RATE_SIZE = 4;
byte rates[RATE_SIZE];
byte rateSpot = 0;
long lastBeat = 0;
float bpm;
int avg;
void setup() {
Serial.begin(115200);
Wire.begin();
if (!sensor.begin(Wire)) {
while (1);
}
sensor.setup();
sensor.setPulseAmplitudeRed(0x0A);
sensor.setPulseAmplitudeIR(0x0A);
}
void loop() {
long ir = sensor.getIR();
if (checkForBeat(ir)) {
long delta = millis() - lastBeat;
lastBeat = millis();
bpm = 60 / (delta / 1000.0);
if (bpm > 20 && bpm < 255) {
rates[rateSpot++] = (byte)bpm;
rateSpot %= RATE_SIZE;
avg = 0;
for (byte i = 0; i < RATE_SIZE; i++)
avg += rates[i];
avg /= RATE_SIZE;
}
}
Serial.print("BPM=");
Serial.print(bpm);
Serial.print(" AVG=");
Serial.println(avg);
}Výpočet SpO₂
cpp
R = (AC_red / DC_red) / (AC_ir / DC_ir)
SpO₂ ≈ 110 - 25 * RTypické použití
- chytré hodinky
- zdravotnické IoT
- fitness zařízení
Poznámky
- prst musí být v klidu
- minimalizuj okolní světlo
- stabilní napájení (ideálně 3.3V)
Debug
- hodnoty 0 → špatný kontakt
- šum → špatné zapojení
- nenalezen → problém I2C
I2C Scanner
cpp
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(115200);
for (byte i = 1; i < 127; i++) {
Wire.beginTransmission(i);
if (Wire.endTransmission() == 0) {
Serial.print("Found: 0x");
Serial.println(i, HEX);
}
}
}
void loop() {}Související
- I2C komunikace
- biosignály
- digitální filtrace