- MAX30100-anturi
- Vaaditut komponentit
- MAX30100-oksimetrin ja ESP32: n liitäntä
- Adafruit IO ESP32: lla sydämen sykemittaukseen
- Koodin selitys
- IoT-pohjainen pulssioksimetrin esittely
Pulssioksimetria on laajalti käytetty lääketieteellinen mittauslaite, ja se on ei-invasiivinen ja kivuton testi, joka mittaa veren happisaturaatiotasoa ja jolla voidaan helposti havaita pienet hapen muutokset. Nykyisessä Covid-19-tilanteessa on tullut tärkeätä seurata useiden potilaiden happitasoa samanaikaisesti etänä ilman, että hän joutuu kosketuksiin potilaan kanssa.
Joten tässä projektissa rakennamme pulssioksimetrin MAX30100-pulssioksimetrillä ja ESP32: lla, joka seuraa veren happitasoa ja lähettää tietoja Internetin kautta muodostamalla yhteyden Wi-Fi-verkkoon. Tällä tavoin voimme seurata useita potilaita etänä pitämällä sosiaalista etäisyyttä potilaiden kanssa. Saadut tiedot näytetään kaaviona, joka helpottaa potilaan tilan seuraamista ja analysointia. Aikaisemmin olemme rakentaneet myös muita sykemittareita pulssiantureilla. Ja jos olet kiinnostunut muista Covid-19: een liittyvistä projekteista, voit tutustua ihmiskehon lämpömittariin, Smart IR -lämpömittariin kuumeen seurantaan ja seinälle asennettavaan lämpötilaskanneriin, jonka rakennamme aiemmin.
Covid-19 -sovelluksen lisäksi tätä projektia voidaan käyttää laajasti myös kroonisessa obstruktiivisessa keuhkosairaudessa (COPD), astmassa, keuhkokuumeessa, keuhkosyövässä, anemiassa, sydänkohtauksessa tai sydämen vajaatoiminnassa tai synnynnäisissä sydämen vajaatoiminnoissa.
Huomaa, että tässä projektissa käytettyä anturia ei ole lääketieteellisesti arvioitu, eikä projektia testata vikaturvallisten sovellusten suhteen. Käytä aina lääketieteellisesti mitoitettua pulssioksimetriä potilaan pulssin ja happitason määrittämiseen ja keskustele siitä lääkärin kanssa. Tässä käsitelty projekti on tarkoitettu vain koulutustarkoituksiin.
MAX30100-anturi
MAX30100-anturi on integroitu pulssioksimetria- ja sykemittarimoduuli. Se kommunikoi I2C-tietolinjan kanssa ja toimittaa SpO2- ja pulssitiedot isäntämikrokontrolleriyksikölle. Se käyttää valonilmaisimia, optisia elementtejä, joissa punainen, vihreä IR-LED moduloi LED-pulsseja. LED-virta on konfiguroitavissa välillä 0-50 mA. Alla olevassa kuvassa on MAX30100-anturi.
Yllä oleva anturimoduuli toimii 1,8 V: n ja 5,5 V: n välillä. I2C-nastojen vetovastukset sisältyvät moduuliin.
Vaaditut komponentit
- WiFi-yhteys
- ESP32
- MAX30100-anturi
- Adafruit IO -käyttäjätunnus ja mukautettu luotu koontinäyttö (tekee siitä edelleen)
- 5 V: n virtalähde, jonka nimellisvirta on vähintään 1 A
- USB-kaapeli Micro USB - USBA
- PC, jossa on Arduino IDE ja ESP32-ohjelmointiympäristö.
MAX30100-oksimetrin ja ESP32: n liitäntä
ESP32: n MAX30100: n täydellinen kytkentäkaavio on annettu alla.
Tämä on hyvin yksinkertainen kaavio. ESP32 devkit C: n tapit 21 ja 22 on kytketty pulssioksimetri-anturiin MAX30100 SDA- ja SCL-nastoilla. Oximeter toimii myös ESP32-kehityskortin 5 V: n napalla. Tein yhteyden käyttämällä leipälautaa ja liitäntäjohtoja, ja testausasetukset näyttävät tältä -
Adafruit IO ESP32: lla sydämen sykemittaukseen
Olemme aiemmin rakentaneet monia Adafruit IO -projekteja erilaisille IoT-sovelluksille. Adafruit IO on erinomainen foorumi, johon voidaan luoda oma kojelauta. Luo mukautettu kojelauta IoT-pohjaiselle pulssioksimetri-anturille seuraavasti:
Vaihe 1: Rekisteröidy ensin Adafruit IO: een, kun olet antanut Fist-nimen, sukunimen, sähköpostiosoitteen, käyttäjänimen ja salasanan.
Vaihe 2: Tyhjä koontinäyttöikkuna avautuu, kun kirjautumisprosessi on valmis. Tässä segmentissä meidän on luotava koontinäyttö, joka näyttää tiedot eri tavoin. Siksi on aika luoda uusi kojelauta ja antaa kojelaudan nimi ja kuvaus.
Vaihe 3: Edellä olevan lomakkeen täyttämisen jälkeen on aika luoda kaavio ja ohjausosa anturille.
Valitse kytkinlohko. Sitä tarvitaan pulssioksimetri-anturin kytkemiseen päälle tai pois päältä.
Vaihe 4: Kirjoita lohkon nimi muistiin. Kuten voimme nähdä yllä olevasta kuvasta, vaihtotoiminto antaa kaksi tilaa, ON ja OFF. Valitse samassa prosessissa kaavion lohko.
Tämä kaavioosa on valittava kahdesti, koska kaksi kuvaajaa näytetään, Heart bit ja SpO2. Molemmat osat on luotu. Kuten näemme, olemme valinneet kaikki tulo- ja lähtötoiminnot.
Vaihe 5: Seuraava ja viimeinen vaihe on saada adafruit-avain. Kuten näemme, saamme adafruit-avaimen ja se on lisättävä koodiin.
Adafruit IO on nyt määritetty. On aika valmistaa laitteisto ja luoda laiteohjelmisto tälle projektille.
Koodin selitys
Tämä koodi käyttää monia kirjastoja ja kaikki ovat tärkeitä. Kirjastot ovat MAX30100 pulssioksimetrianturikirjasto, Wire.h I2C: lle, WiFi.h WiFi-tuelle ESP32: ssa, Adafruit MQTT ja MQTT Client -kirjasto. Koko ohjelma löytyy tämän sivun alaosasta.
Edellä mainitut kirjastot sisältyvät koodin alkuun.
#sisältää
Seuraavat kaksi määritelmää ovat WLAN SSID ja WLAN-salasana. Tämän on oltava tarkka, ja ESP32 käyttää sitä muodostamaan yhteyden WiFi-verkkoon.
#define WLAN_SSID "xxxxxxxxx" #define WLAN_PASS "2581xxxxx2"
Seuraavaksi määriteltiin Adafruit io -määritykset.
#define AIO_UPDATE_RATE_SEC 5 #define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 #define AIO_USERNAME "xxxxxxxxxxxxx" #define AIO_KEY "abcdefgh"
Päivitysnopeus päivittää tiedot viiden sekunnin välein, palvelin on io.adafruit.com palvelinportilla 1883. Käyttäjänimi ja salasana ovat luotu käyttäjänimi ja salasana adafruit IO -hallintapaneelista. Se on erilainen kaikille ja se on luotava adafruit-asetukset-osassa kuvatulla tavalla.
I2C-portit määritetään jälkikäteen kaavion mukaisesti.
#define I2C_SDA 21 #define I2C_SCL 22
Seuraavaksi kolmea muuttujaa käytetään viimeisen raportin sekä bpm- ja spo2-arvon tallentamiseen.
uint32_t tsLastReport = 0; kelluva bpm_dt = 0; kelluva spo2_dt = 0;
MQTT toimii pub-sub-mallin kanssa (julkaise ja tilaa). Tässä työmallissa laite, joka lähettää tiedot Adafruit-palvelimelle, pysyy julkaisutilassa, jossa Adafruit IO -palvelin tilaa samat datapisteet. Tällöin aina kun laite julkaisee uutta dataa, palvelin vastaanottaa sen tilattuaan tiedot ja suorittaa tarvittavat toimenpiteet.
Sama tapahtuu, kun palvelin julkaisee tiedot ja laite tilaa ne. Sovelluksessamme laite lähettää SPO2: n ja BPM: n tiedot palvelimelle, joten se julkaisee saman ja vastaanottaa palvelimelta PÄÄLLE-POIS-tilan ja tilaa tämän. Tämä asia on määritetty alla kuvatussa koodinpätkässä-
WiFiClient-asiakas; Adafruit_MQTT_Client mqtt (& asiakas, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); Adafruit_MQTT_Subscribe sw_sub = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / switch"); // Huomaa, että AIO: n MQTT-polut seuraavat muotoa:
Vuonna setup toiminto, aloitamme I2C, joka yhdistää WiFi kanssa ennalta SSID ja salasana, ja aloittamalla MQTT tilaus prosessi kytkentätila (kytkinnuppia luotu Adafruit IO kojelautaan).
void setup () {Sarja.alku (115200); Wire.begin (I2C_SDA, I2C_SCL); WiFi.begin (WLAN_SSID, WLAN_PASS); while (WiFi.status ()! = WL_CONNECTED) {viive (500); Sarjaprintti ("."); } Sarja.println (); Serial.println ("WiFi kytketty"); Serial.println ("IP-osoite:"); Serial.println (WiFi.localIP ()); mqtt.subscribe (& sw_sub); Serial.print ("Pulssioksimetrin alustus.."); // Alusta PulseOximeter-ilmentymä // Virheet johtuvat yleensä väärästä I2C-johdotuksesta, virtalähteen puuttumisesta // tai väärästä kohdesirusta, jos (! Pox.begin ()) {Serial.println ("FAILED"); varten (;;); } else {Serial.println ("MENESTYS"); } // IR-LED: n oletusvirta on 50 mA ja sitä voidaan muuttaa // poistamalla seuraava rivi. Tarkista MAX30100_Registers.h kaikista // käytettävissä olevista vaihtoehdoista. rukko.setIRLedCurrent (MAX30100_LED_CURR_7_6MA); // Rekisteröi takaisinkutsu beat detection pox.setOnBeatDetectedCallback (onBeatDetected); stopReadPOX (); }
Kaiken tämän jälkeen max30100 käynnistetään led-virran asetuksella. Eri nykyiset asetukset ovat saatavilla myös MAX30100-otsikkotiedostoissa eri kokoonpanoille. Myös syketunnistuksen soita-toiminto käynnistetään. Kaikkien näiden asetusten jälkeen oksimetrianturi pysäytetään.
Vuonna silmukka toiminnon, MQTT yhteys käynnistetään ja tilausmallin tarkistetaan jokaisessa 5000 millisekuntia. Tässä tilanteessa, jos kytkin on kytketty päälle, se alkaa lukea oksimetri-anturia ja julkaista Heartbeat- ja SPO2-arvon tiedot. Jos kytkin on kytketty pois päältä, se keskeyttää kaikki pulssioksimetrin anturiin liittyvät tehtävät.
void loop () {MQTT_connect (); Adafruit_MQTT_Subscribe * -tilaus; while ((subscription = mqtt.readSubscription (5000))) {if (subscription == & sw_sub) {Serial.print (F ("Selvä:")); Sarja.println ((char *) sw_sub.lastread); jos (! strcmp ((char *) sw_sub.lastread, "ON")) {Serial.print (("POX: n aloitus…")); startReadPOX (); BaseType_t xReturned; if (poxReadTaskHld == NULL) {xReturned = xTaskCreate (poxReadTask, / * Tehtävä, joka toteuttaa tehtävän. * / "pox_read", / * Tehtävän tekstin nimi. * / 1024 * 3, / * Pinon koko sanoin, ei tavua. * / NULL, / * Parametri siirretty tehtävään. * / 2, / * Prioriteetti, jolla tehtävä luodaan. * / & poxReadTaskHld); / * Käytetään luoman tehtävän kahvan välittämiseen. * /} viive (100); jos (mqttPubTaskHld == NULL) {xReturned = xTaskCreate (mqttPubTask,/ * Tehtävä, joka toteuttaa tehtävän. * / "mqttPub", / * Tehtävän tekstin nimi. * / 1024 * 3, / * Pinon koko sanoin, ei tavuina. * / NULL, / * Parametri siirretty tehtävään. * / 2, / * Prioriteetti, jolla tehtävä luodaan. * / & mqttPubTaskHld); / * Käytetään luoman tehtävän kahvan välittämiseen. * /}} else {Sarja.tulostus (("POX-pysäytys…")); // Poista POX-lukutehtävä if (poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld); poxReadTaskHld = NULL; } // Poista MQTT Pub -tehtävä, jos (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld); mqttPubTaskHld = NULL; } stopReadPOX (); }}}}/ * Käytetään luoman tehtävän kahvan välittämiseen. * /}} else {Sarja.tulos (("POX-pysäytys…")); // Poista POX-lukutehtävä if (poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld); poxReadTaskHld = NULL; } // Poista MQTT Pub -tehtävä, jos (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld); mqttPubTaskHld = NULL; } stopReadPOX (); }}}}/ * Käytetään luoman tehtävän kahvan välittämiseen. * /}} else {Sarja.tulos (("POX-pysäytys…")); // Poista POX-lukutehtävä if (poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld); poxReadTaskHld = NULL; } // Poista MQTT Pub -tehtävä, jos (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld); mqttPubTaskHld = NULL; } stopReadPOX (); }}}}
IoT-pohjainen pulssioksimetrin esittely
Piiri on kytketty oikein leipälautaan ja alla oleva ohjelma ladataan ESP32: een. Varmista, että vaihdat Wi-Fi- ja Adafruit-kirjautumistiedot vastaavasti koodissasi, jotta se toimii sinulle.
Yhteyden muodostamisen jälkeen WiFi- ja Adafruit IO -palvelimeen se alkoi toimia odotetusti.
Kuten voimme nähdä, että SPO2-taso näyttää 96% ja syke näyttää 78-81 bittiä minuutissa. Se tarjoaa myös ajan, jolloin tiedot kaapataan.
Kuten yllä olevasta kuvasta voidaan nähdä, kytkin on kytketty pois päältä ja data on 0. Projektin täydellinen videovideo löytyy myös tämän sivun alareunasta.
Toivottavasti pidit artikkelista ja opit jotain hyödyllistä. Jos sinulla on kysyttävää, jätä ne alla olevaan kommenttiosioon tai lähetä ne foorumeillemme.