- MAX30100 érzékelő
- Szükséges alkatrészek
- A MAX30100 oximéter és az ESP32 összekapcsolása
- Adafruit IO ESP32-vel a pulzusméréshez
- Kód Magyarázat
- IoT alapú impulzus-oximéter bemutatása
A pulzus-oximetria széles körben alkalmazott orvosi mérőműszer, és ez egy nem invazív és fájdalommentes teszt, amely méri a vér oxigéntelítettségi szintjét, és amely könnyen észlelheti az oxigén kis változásait. A jelenlegi Covid-19 helyzetben fontossá vált, hogy egyszerre több beteg oxigénszintjét távolról kövessék nyomon, anélkül, hogy kapcsolatba kerülnének a pácienssel.
Tehát ebben a projektben a MAX30100 Pulse oximeter és az ESP32 felhasználásával pulzoximétert építünk, amely nyomon követi a vér oxigénszintjét, és az adatokat interneten keresztül, Wi-Fi hálózathoz csatlakozva küldi el. Így több beteget távolról figyelhetünk úgy, hogy fenntartjuk a szociális távolságot a betegekkel. A kapott adatok grafikonként jelennek meg, amely megkönnyíti a beteg állapotának nyomon követését és elemzését. Korábban pulzusérzékelők segítségével más pulzusmérőket is építettünk. És ha más, a Covid-19-hez kapcsolódó projektek érdeklik, megnézheti az emberi test hőmérőjét, az intelligens IR hőmérőt a láz monitorozásához és a falra szerelhető hőmérséklet szkennert, amelyet korábban készítettünk.
A Covid-19 alkalmazáson kívül ez a projekt széles körben alkalmazható krónikus obstruktív tüdőbetegség (COPD), asztma, tüdőgyulladás, tüdőrák, vérszegénység, szívroham vagy szívelégtelenség esetén, vagy veleszületett szívhibák esetén is.
Ne feledje, hogy a projektben használt érzékelő nincs orvosilag minősítve, és a projektet nem tesztelték hibamentes alkalmazások szempontjából. Mindig használjon orvosilag minősített pulzoximétert a beteg pulzusának és oxigénszintjének meghatározásához, és beszélje meg azt orvosával. Az itt tárgyalt projekt csak oktatási célokat szolgál.
MAX30100 érzékelő
A MAX30100 érzékelő beépített pulzus oximetriás és pulzusmérő modul. Kommunikál az I2C adatvezetékkel, és az SpO2 és a Pulse információkat továbbítja a gazdamikrovezérlő egységnek. Fotodetektorokat használ, optikai elemeket, ahol a piros, zöld IR LED modulálja a LED impulzusait. A LED áram 0 és 50 mA között állítható be. Az alábbi képen látható a MAX30100 érzékelő.
A fenti érzékelő modul 1,8 V és 5,5 V tartományban működik. Az I2C csapok felhúzási ellenállásait a modul tartalmazza.
Szükséges alkatrészek
- WiFi kapcsolat
- ESP32
- MAX30100 érzékelő
- Adafruit IO felhasználói azonosító és egy személyesen létrehozott irányítópult (tovább fogja fejleszteni)
- 5 V megfelelő tápegység, legalább 1 A névleges árammal
- USB kábel Micro USB - USBA
- Számítógép Arduino IDE-vel ESP32 programozási környezettel.
A MAX30100 oximéter és az ESP32 összekapcsolása
Az ESP32-vel rendelkező MAX30100 teljes kapcsolási rajza alább látható.
Ez egy nagyon egyszerű sematikus ábra. Az ESP32 devkit C 21. és 22. csapja a MAX30100 impulzusmérő érzékelőhöz csatlakozik az SDA és az SCL csapokkal. Az Oximetert az ESP32 fejlesztőkártya 5 V-os tűje is táplálja. A csatlakozást kenyérlap és csatlakozó vezetékek segítségével hoztam létre, és a tesztelési beállításom így néz ki-
Adafruit IO ESP32-vel a pulzusméréshez
Korábban számos Adafruit IO projektet építettünk különböző IoT alkalmazásokhoz. Az Adafruit IO kiváló platform, ahol egyedi irányítópultot lehet létrehozni. Az IoT alapú impulzus-oximéter érzékelő egyedi irányítópultjának létrehozásához hajtsa végre az alábbi lépéseket:
1. lépés: Először regisztráljon az Adafruit IO-ba, miután megadta az Fist nevet, vezetéknevet, e-mail címet, felhasználónevet és jelszót.
2. lépés: Az üres irányítópult ablaka megnyílik a bejelentkezési folyamat befejezése után. Ebben a szegmensben létre kell hoznunk egy irányítópultot, amely az adatokat különféle módon jeleníti meg. Ideje tehát létrehozni az új irányítópultot, és megadni az irányítópult nevét és leírását.
3. lépés: A fenti űrlap kitöltése után ideje elkészíteni az érzékelő grafikonját és vezérlő szakaszát.
Válassza ki a kapcsoló blokkot. Erre szükség lesz a pulzus-oximéter érzékelő be- vagy kikapcsolásához.
4. lépés: Írja le a blokk nevét. Amint a fenti képen láthatjuk, a váltás funkció két állapotot biztosít, BE és KI. Ugyanebben a folyamatban válassza ki a grafikonblokkot.
Ezt a grafikonszakaszt kétszer kell kiválasztani, mivel két grafikon jelenik meg, a Szív bit és az SpO2. Mindkét szakasz létrejön. Mint láthatjuk, az összes bemeneti és kimeneti funkciót kiválasztottuk.
5. lépés: A következő és egyben utolsó lépés az adafruit kulcs megszerzése. Mint láthatjuk, megkapjuk az adafruit kulcsot, és ezt hozzá kell adni a kódhoz.
Az Adafruit IO konfigurálva van. Ideje elkészíteni a hardvert és létrehozni a firmware-t ehhez a projekthez.
Kód Magyarázat
Ez a kód sok könyvtárat használ, és mindegyik fontos. A könyvtárak a MAX30100 Pulse oximeter szenzortár, a Wire.h az I2C-hez, a WiFi.h a WiFi-hez kapcsolódó támogatáshoz az ESP32-ben, az Adafruit MQTT és az MQTT Client könyvtárban. A teljes program az oldal alján található.
A fent említett könyvtárak a kód elején találhatók.
#include
A következő két meghatározás a WLAN SSID és a WLAN jelszó. Ennek pontosan kell lennie, és az ESP32 használni fogja a kapcsolatot a WiFi hálózattal.
#define WLAN_SSID "xxxxxxxxx" #define WLAN_PASS "2581xxxxx2"
Ezután meghatároztuk az Adafruit io definíciókat.
#define AIO_UPDATE_RATE_SEC 5 #define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 #define AIO_USERNAME "xxxxxxxxxxxxx" #define AIO_KEY "abcdefgh"
A frissítési sebesség 5 másodpercenként frissíti az adatokat, a szerver az io.adafruit.com lesz, 1883-as kiszolgáló porttal. A felhasználónév és a jelszó lesz az adafruit IO műszerfalából létrehozott felhasználónév és jelszó. Ez mindenki számára más lesz, és az adafruit beállítása szakaszban leírtak szerint kell létrehozni.
Az I2C portokat később definiáljuk, amint azt a vázlat mutatja.
#define I2C_SDA 21 #define I2C_SCL 22
Ezután három változót használunk az utolsó jelentés, valamint a bpm és spo2 érték tárolására.
uint32_t tsLastReport = 0; úszó bpm_dt = 0; úszó spo2_dt = 0;
Az MQTT egy pub-sub modellel működik (közzététel és feliratkozás). Ebben a munkamodellben az az eszköz, amely az adatokat elküldi az Adafruit kiszolgálónak, közzétételi módban marad, ahol az Adafruit IO szerver feliratkozik ugyanazokra az adatpontokra. Ilyen hatással, amikor az eszköz bármilyen új adatot közzétesz, a kiszolgáló, amint arra feliratkozott, megkapja az adatokat és megteszi a szükséges intézkedéseket.
Ugyanez történik, amikor a szerver közzéteszi az adatokat, és az eszköz feliratkozik rá. Alkalmazásunkban az eszköz elküldi az SPO2 és a BPM adatait a szervernek, így ezeket közzéteszi, és a szervertől kapja az ON-OFF állapotot, így feliratkozik erre. Ez a dolog az alább leírt kódrészletben van konfigurálva-
WiFiClient kliens; Adafruit_MQTT_Client mqtt (& kliens, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); Adafruit_MQTT_Subscribe sw_sub = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / switch"); // Figyelje meg, hogy az AIO MQTT elérési útjai a következő formát követik:
A beállítási funkcióban elindítjuk az I2C-t, összekapcsoljuk a WiFi-t az előre definiált SSID-vel és Jelszóval, és elindítjuk az MQTT előfizetés folyamatát a kapcsolási állapotra (Az Adafruit IO műszerfalon létrehozott kapcsoló gomb).
void setup () {Soros.kezdés (115200); Wire.begin (I2C_SDA, I2C_SCL); WiFi.begin (WLAN_SSID, WLAN_PASS); while (WiFi.status ()! = WL_CONNECTED) {késleltetés (500); Soros.nyomtatás ("."); } Soros.println (); Serial.println ("WiFi csatlakoztatva"); Serial.println ("IP-cím:"); Serial.println (WiFi.localIP ()); mqtt.subscribe (& sw_sub); Serial.print ("Pulzusoximéter inicializálása.."); // A PulseOximeter példány inicializálása // A hibákat általában nem megfelelő I2C vezetékezés, hiányzó tápegység // vagy hibás cél chip okozza, ha (! Pox.begin ()) {Serial.println ("FAILED"); for (;;); } else {Serial.println ("SIKER"); } // Az IR LED alapértelmezett árama 50mA, és a következő sor megjegyzésének mellőzésével meg lehet változtatni //. Ellenőrizze a MAX30100_Registers.h fájlt az összes // elérhető lehetőségnél. himlő.setIRLedCurrent (MAX30100_LED_CURR_7_6MA); // visszahívás regisztrálása a beat Detection pox.setOnBeatDetectedCallback (onBeatDetected); stopReadPOX (); }
Mindezek után a max30100 elindul egy vezetett áram beállítással. Különböző aktuális beállítások állnak rendelkezésre a MAX30100 fejlécfájlokban a különböző konfigurációkhoz. Szívverés érzékelés visszahívási funkció is elindul. Mindezen beállítások után az oximéter-érzékelő leáll.
A hurok funkcióban az MQTT kapcsolat elindul, és az előfizetés modelljét 5000 milliszekundumban ellenőrizzük. Ebben a helyzetben, ha a kapcsoló be van kapcsolva, elkezdi olvasni az oximéter-érzékelőt, és közzéteszi a Heartbeat és az SPO2 érték adatait. Ha a kapcsolót kikapcsolják, akkor felfüggeszti az összes impulzus-oximéter-érzékelővel kapcsolatos feladatot.
void loop () {MQTT_csatlakozás (); Adafruit_MQTT_Subscribe * előfizetés; while ((subscription = mqtt.readSubscription (5000))) {if (subscription == & sw_sub) {Serial.print (F ("Got:")); Soros.println ((char *) sw_sub.lastread); if (! strcmp ((char *) sw_sub.lastread, "ON")) {Serial.print (("POX indítása…")); startReadPOX (); BaseType_t xReturned; if (poxReadTaskHld == NULL) {xReturned = xTaskCreate (poxReadTask, / * A feladatot megvalósító függvény. * / "pox_read", / * A feladat szövege. * / 1024 * 3, / * Verem mérete szavakban, nem bájt. * / NULL, / * A paraméter átkerül a feladatba. * / 2, / * A feladat létrehozásának prioritása. * / & poxReadTaskHld); / * A létrehozott feladat fogantyújának átadására szolgál. * /} késés (100); if (mqttPubTaskHld == NULL) {xReturned = xTaskCreate (mqttPubTask,/ * A feladatot megvalósító funkció. * / "mqttPub", / * A feladat szövegneve. * / 1024 * 3, / * Verem mérete szavakban, nem bájtokban. * / NULL, / * A paraméter átkerült a feladatba. * / 2, / * A feladat létrehozásának prioritása. * / & mqttPubTaskHld); / * A létrehozott feladat fogantyújának átadására szolgál. * /}} else {Serial.print (("POX leállítása…")); // POX olvasási feladat detele, ha (poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld); poxReadTaskHld = NULL; } // Törölje az MQTT kocsmafeladatot, ha (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld); mqttPubTaskHld = NULL; } stopReadPOX (); }}}}/ * A létrehozott feladat fogantyújának átadására szolgál. * /}} else {Serial.print (("POX leállítása…")); // A POX olvasási feladat detele, ha (poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld); poxReadTaskHld = NULL; } // Törölje az MQTT Pub Feladatot, ha (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld); mqttPubTaskHld = NULL; } stopReadPOX (); }}}}/ * A létrehozott feladat fogantyújának átadására szolgál. * /}} else {Serial.print (("POX leállítása…")); // A POX olvasási feladat detele, ha (poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld); poxReadTaskHld = NULL; } // Törölje az MQTT kocsmafeladatot, ha (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld); mqttPubTaskHld = NULL; } stopReadPOX (); }}}}
IoT alapú impulzus-oximéter bemutatása
Az áramkör megfelelően van csatlakoztatva a kenyérlapon, és az alább megadott program feltöltésre kerül az ESP32-be. Győződjön meg róla, hogy a kódban megfelelően módosította a Wi-Fi és az Adafruit hitelesítő adatait, hogy az az Ön számára megfelelő legyen.
A WiFi és az Adafruit IO szerverrel való kapcsolat után a várt módon kezdett működni.
Amint láthatjuk, hogy az SPO2 szint 96% -ot mutat, a szívverés pedig 78-81 bit / perc. Ez biztosítja az adatok rögzítésének idejét is.
Amint a fenti képen láthatjuk, a kapcsoló ki van kapcsolva, és az adatok 0. A projekt teljes munkavideója szintén az oldal alján található.
Remélem, tetszett a cikk, és valami hasznosat tanult. Ha bármilyen kérdése van, kérjük, hagyja őket az alábbi megjegyzés részben, vagy tegye fel fórumunkra.