Aplikace senzoru MAX30100 – detektor srdečního tepu

Aplikace senzoru MAX30100


Článek nám zaslal František Hruška, děkujeme.
Zajímavým senzorem v nabídce Arduino je senzor MAX30100 vedle podobných, např. Max30102. Je určen pro měření tepu srdce a okysličení krve. Používá principy shodné s profesionálními snímači u zařízení v nemocnicích nebo také u chytrých hodinek.

Princip měření

Měření probíhá neinvazivně optickou metodou pulzní oxymetrie. Tkáň prstu se střídavě prosvěcuje impulzně paprskem světla Red o vlnové délce 650 nm a paprskem IR o vlnové délce 950 nm. Velikost odražených paprsků je různá podle velikosti okysličení hemoglobinu a podle vlnové délky. Rozdíly absorbance jsou patrné na obr.1. Vyhodnocení se provádí v programu aplikace, eliminují se rušivé vlivy a provádí se i kalibrace.

Obr.1: Princip měření okysličení krve, snímání paprsků Red a IR z prstu, a) velikost absorpce z teply (okysličený hemoglobin), b) velikost absorpce ze žíly (hemoglobin bez kyslíku)


Obr.1: Princip měření okysličení krve, snímání paprsků Red a IR z prstu, a) velikost absorpce z tepny (okysličený hemoglobin), b) velikost absorpce ze žíly (hemoglobin bez kyslíku)

Rekonstrukce senzoru

Nakupovaný senzor MAX30100 má konstrukční vadu. Signály SCL, SDA, INT jsou napájeny v nakoupeném stavu napětím 1,8V přes odporu R1, R2, R3, což je velmi nízké napětí pro vytvoření signálů pro kvalitního propojení I2C a pro přerušovací systém. Viz schéma.

Obr. 1: Schéma senzoru MAX30100 (1)


Obr. 1: Schéma senzoru MAX30100 (1)

Oprava se týká rekonstrukce obvodu senzoru. Nabízí se dvě možnosti. Jedna možnost je přerušit napojení napájení odporů R1, R2, R3 napětím 1,8V a napojit je na napětí 3,3V. Toto vyžaduje provést přerušení a přepojení na plošném spoji velmi jemným způsobem a se zkušenostmi.

Druhá možnost znamená vyletování SMD odporů R1, R2, R3 z plošného spoje senzoru, obvod senzoru s vyletovanými odpory napojit podle původního zapojení a vyletované odpory nahradit standardními odpory 4,7 K vně zapojení senzoru. Tak je zajištěna funkčnost senzoru celkem jednoduchým způsobem. (Doporučuje se vyletování SMD odporu provést způsobem vhodným pro zapojení SMD plošného spoje a osobou se zkušenostmi pro tuto operaci).

Umístění SMD odporů R1, R2, R3 je na obr. 2a. v části b) obrázku 2 je uvedeno nové zapojení senzoru na Arduino s vnějšími odpory R1, R2, R3.

Obr.2: a) označené odpory R1,R2,R3 pro vyletování, b) náhradní zapojení senzoru a vnějších odporů na desku Arduino.


Obr.2: a) označené odpory R1,R2,R3 pro vyletování, b) náhradní zapojení senzoru a vnějších odporů na desku Arduino.

Programování aplikace

Po otevření vývojového prostředí IDE a zapojení senzoru na Arduino a zapojení sestavy na USB lze postupovat v těchto krocích:

  • Zkontroluje se nainstalování knihovny MAX30100lib by OXullo Intersecans. Chybí li, provede se její instalace.
  • Programy pro otestování jsou v různém provedení k dispozici na webu, viz seznam v kapitole použitá literatura v závěru. Po zkušenostech s testováním programů na webu jsem napsal univerzální program MAX30100_FH.ino. Zdrojový text je přiložen.
  • Po jeho vložení do IDE do New Sketch se zkontroluje a přeloží v položce Sketch/Ověřit/Kompilovat.
  • Program má možnost řídit výpisy na obrazovce podle hodnot dvou proměnných, flag_HR=1 nebo 0 a flag_SpO2=1/0. Po spuštění dodaného programu jsou nastaveny obě hodnoty =1. Jsou vypisovány všechny hodnoty (viz výpis) pro situaci přiloženého prstu na LED senzoru:
    10:36:18.190 -> HP(bpm) 52.88, SpO2(%) 97, red 16358 ,ir 16256
  • Ve výpisu hodnoty času je uveden první údaj tepu srdce: HP(bpm) jako hodnota HR, dále je hodnota okysličení, SpO2 v %, a dále snímané primární hodnoty absorpce red a ir paprsků Red a IR .
  • Hodnoty absorbance lze vypisovat na grafu při hodnotě flag_plot=1.
  • Hodnoty flagů lze měnit ve zdrojovém programu v úvodní časti deklarace a výpisy sledovat po nahrátí přeloženého programu do modulu.
  • Jako centrální jednotku lze použít všechny typy již od nejjednodušších.

Zdrojový text programu MAX30100_FH

/*  upravený program podle návodů na webu pro MAX30100  */

// výstup přímo HP a SPO2, a nebo IR a LED, a nebo graf

#include <Wire.h>

#include „MAX30100_PulseOximeter.h“

#define REPORTING_PERIOD_MS     1000

// Create a PulseOximeter object

PulseOximeter pox;

MAX30100 sensor;

byte flag_HP=1; byte flag_plot=0;byte flag_redIr=1;  // nastavení flagů

void onBeatDetected() {

    Serial.println(„♥ Beat!“); }

void setup() {

    Serial.begin(115200);delay(2000);

    Serial.print(„Initializing pulse oximeter..“);

    // Initialize sensor

    if (!pox.begin()) {

        Serial.println(„FAILED“);

        for(;;);

    } else {

        Serial.println(„SUCCESS“);

    }

    pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);  // konfiguruje senzor pro 7,6 mA odběru LED

   pox.setOnBeatDetectedCallback(onBeatDetected);  // nastavení rutiny Callback

}

void loop() {

    uint16_t ir, red;

    pox.update();

   if (flag_HP==1) {

       Serial.print(„HP(bpm) „);

       Serial.print(pox.getHeartRate());

       Serial.print(„, SpO2(%) „);

       Serial.print(pox.getSpO2());

       if (flag_redIr==0) { Serial.println(“ „);}

    }

    if (flag_redIr==1)  {

       sensor.getRawValues(&ir, &red);

       Serial.print(„, red „);Serial.print(red);

       Serial.print(“ ,ir „);

       Serial.println(ir);

       if (flag_plot==0) { Serial.println(“ „);}

    }

   if (flag_plot==1)  {

       Serial.print(„, „);Serial.print(pox.getHeartRate());

        Serial.print(„, „);

        Serial.print(pox.getSpO2());

        if (flag_HP==0||flag_redIr==0) { Serial.println(“ „);}

    }

}

Použitá literatura:

  1. Interface MAX30100 Pulse Oximeter Sensor with Arduino
  2. Interfacing MAX30100 Pulse Oximeter and Heart Rate Sensor with Arduino (lastminuteengineers.com)
  3. Detektor srdečního tepu MAX30100 | LaskaKit
  4. Interface MAX30100 Pulse Oximeter Sensor with Arduino (microcontrollerslab.com)
  5. Interface MAX30100 Pulse Oximeter Sensor with Arduino (microcontrollerslab.com)

Článek nám zaslal František Hruška, děkujeme.

Sdílet článek

Jedna odpověď

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Mohlo by se také líbit

Nejčtenější články