- MAX30100 सेंसर
- आवश्यक घटक
- ESP32 के साथ MAX30100 ऑक्समीटर को इंटरसेप्ट करना
- हृदय गति की निगरानी के लिए ESP32 के साथ प्रवेश IO
- कोड स्पष्टीकरण
- आईओटी आधारित पल्स ऑक्समीटर प्रदर्शन
पल्स ऑक्सीमेट्री एक व्यापक रूप से उपयोग किया जाने वाला चिकित्सा माप उपकरण है और यह एक गैर-आक्रामक और दर्द रहित परीक्षण है जो हमारे रक्त में ऑक्सीजन संतृप्ति स्तर को मापता है जो आसानी से ऑक्सीजन में छोटे परिवर्तनों का पता लगा सकता है। वर्तमान कोविद -19 स्थिति में, रोगी के संपर्क में आए बिना एक ही समय में कई रोगियों के ऑक्सीजन स्तर को ट्रैक करना महत्वपूर्ण हो गया है।
तो, इस परियोजना में, हम MAX30100 पल्स ऑक्सीमीटर और ESP32 का उपयोग करके एक पल्स ऑक्सीमीटर बनाते हैं जो रक्त ऑक्सीजन स्तर को ट्रैक करेगा और वाई-फाई नेटवर्क से कनेक्ट करके इंटरनेट के माध्यम से डेटा भेजेगा । इस तरह, हम रोगियों के साथ सामाजिक दूरी बनाए रखकर दूरस्थ रूप से कई रोगियों की निगरानी कर सकते हैं । प्राप्त आंकड़ों को एक ग्राफ के रूप में दिखाया जाएगा जो रोगी की स्थिति को ट्रैक करने और उसका विश्लेषण करने में आसान बनाता है। पहले, हमने पल्स सेंसर का उपयोग करके अन्य हृदय गति मॉनिटर भी बनाए हैं। और यदि आप अन्य कोविद -19 संबंधित परियोजनाओं में रुचि रखते हैं, तो आप बुखार की निगरानी के लिए मानव शरीर थर्मामीटर, स्मार्ट आईआर थर्मामीटर और वॉल-माउंट तापमान स्कैनर की जांच कर सकते हैं जो हम पहले बनाते हैं।
कोविद -19 आवेदन के अलावा, इस परियोजना को व्यापक रूप से पुरानी प्रतिरोधी फुफ्फुसीय रोग (सीओपीडी), अस्थमा, निमोनिया, फेफड़ों के कैंसर, एनीमिया, दिल के दौरे या दिल की विफलता या जन्मजात हृदय दोष में भी व्यापक रूप से इस्तेमाल किया जा सकता है।
ध्यान दें कि, इस परियोजना में इस्तेमाल किया गया सेंसर चिकित्सकीय रूप से रेट नहीं किया गया है, और प्रोजेक्ट को असफल-प्रूफ अनुप्रयोगों के लिए परीक्षण नहीं किया गया है। रोगी की नाड़ी और ऑक्सीजन के स्तर को निर्धारित करने के लिए हमेशा चिकित्सकीय रूप से रेट किए गए पल्स ऑक्सीमीटर का उपयोग करें और चिकित्सा चिकित्सक से चर्चा करें। यहां चर्चा की गई परियोजना केवल शैक्षिक उद्देश्यों के लिए है।
MAX30100 सेंसर
MAX30100 सेंसर एकीकृत पल्स ऑक्सीमेट्री और हृदय गति मॉनिटर मॉड्यूल है। यह I2C डेटा लाइन के साथ संचार करता है और मेजबान माइक्रोकंट्रोलर यूनिट को SpO2 और पल्स जानकारी प्रदान करता है । यह फोटोडेटेक्टर्स, ऑप्टिकल तत्वों का उपयोग करता है जहां लाल, हरे आईआर एलईडी एलईडी दालों को संशोधित करता है। एलईडी वर्तमान 0 से 50mA से विन्यास योग्य है। नीचे की छवि MAX30100 सेंसर दिखा रही है।
उपरोक्त सेंसर मॉड्यूल 1.8V से 5.5V रेंज के साथ काम करता है। I2C पिंस के लिए पुल-अप प्रतिरोधों को मॉड्यूल में शामिल किया गया है।
आवश्यक घटक
- एक वाईफाई कनेक्शन
- ईएसपी 32
- MAX30100 सेंसर
- प्रवेश IO उपयोगकर्ता आईडी और एक कस्टम बनाया गया डैशबोर्ड (इसे आगे बनाएगा)
- कम से कम 1 ए के रेटेड वर्तमान के साथ 5 वी पर्याप्त बिजली आपूर्ति इकाई
- यूएसबी केबल माइक्रो यूएसबी से यूएसबी
- ESP32 प्रोग्रामिंग वातावरण के साथ Arduino IDE के साथ एक पीसी।
ESP32 के साथ MAX30100 ऑक्समीटर को इंटरसेप्ट करना
ES332 के साथ MAX30100 के लिए पूरा सर्किट आरेख नीचे दिया गया है।
यह एक बहुत ही सरल योजनाबद्ध है। ESP32 देवकिट C का पिन 21 और 22 SDA और SCL पिन के साथ पल्स ऑक्सीमीटर सेंसर MAX30100 से जुड़ा है। ESP32 डेवलपमेंट बोर्ड में 5V पिन द्वारा ओमेमीटर भी संचालित किया जाता है। मैंने एक ब्रेडबोर्ड का उपयोग करके और तारों को जोड़कर अपना कनेक्शन बनाया और मेरा परीक्षण सेटअप इस तरह दिखता है-
हृदय गति की निगरानी के लिए ESP32 के साथ प्रवेश IO
हमने पहले अलग-अलग IoT अनुप्रयोगों के लिए कई Adafruit IO प्रोजेक्ट बनाए हैं। Adafruit IO एक उत्कृष्ट मंच है जहां एक कस्टम डैशबोर्ड बनाया जा सकता है। IoT आधारित पल्स-ओसेमीटर सेंसर के लिए कस्टम डैशबोर्ड बनाने के लिए, नीचे दिए गए चरणों का उपयोग करें-
चरण 1: सबसे पहले Faf नाम, अंतिम नाम, ईमेल पता, उपयोगकर्ता नाम और पासवर्ड देने के बाद प्रवेश IO में साइन अप करें।
चरण 2: साइन-इन प्रक्रिया पूरी होने के बाद रिक्त डैशबोर्ड विंडो खुलेगी। इस सेगमेंट में, हमें विभिन्न तरीकों से डेटा दिखाने के लिए एक डैशबोर्ड बनाना होगा। इस प्रकार, नया डैशबोर्ड बनाने और डैशबोर्ड का नाम और विवरण प्रदान करने का समय आ गया है।
चरण 3: उपरोक्त फॉर्म भरने के बाद, सेंसर के लिए ग्राफ और नियंत्रण अनुभाग बनाने का समय आ गया है।
स्विच ब्लॉक का चयन करें। यह पल्स-ऑक्सीमीटर सेंसर को चालू या बंद करने के लिए आवश्यक होगा।
चरण 4: ब्लॉक नाम लिखें। जैसा कि हम उपरोक्त छवि में देख सकते हैं, टॉगल फ़ंक्शन दो राज्य प्रदान करेगा, चालू और बंद। उसी प्रक्रिया में, ग्राफ़ ब्लॉक का चयन करें।
इस ग्राफ़ अनुभाग को दो बार चयनित करने की आवश्यकता है क्योंकि दो ग्राफ़ प्रदर्शित किए जाएंगे, हार्ट बिट और SpO2। दोनों खंड निर्मित हैं। जैसा कि हम देख सकते हैं, हमने सभी इनपुट और आउटपुट कार्यक्षमता का चयन किया है।
चरण 5: अगले और अंतिम चरण में प्रवेश की कुंजी है। जैसा कि हम देख सकते हैं, हमें विज्ञापन की कुंजी मिलती है और इसे कोड में जोड़ना होगा।
Adafruit IO अब कॉन्फ़िगर किया गया है। यह हार्डवेयर तैयार करने और इस परियोजना के लिए फर्मवेयर बनाने का समय है।
कोड स्पष्टीकरण
यह कोड कई पुस्तकालयों का उपयोग करता है और सभी महत्वपूर्ण हैं। पुस्तकालयों MAX30100 पल्स आक्सीमीटर सेंसर पुस्तकालय, कर रहे हैं Wire.h I2C के लिए, WiFi.h ESP32, में वाईफाई संबंधित समर्थन के लिए Adafruit MQTT , और MQTT ग्राहक पुस्तकालय। पूरा कार्यक्रम इस पृष्ठ के नीचे पाया जा सकता है।
ऊपर उल्लिखित उन पुस्तकालयों को कोड की शुरुआत में शामिल किया गया है।
#शामिल
अगली दो परिभाषाएँ WLAN SSID और WLAN पासवर्ड हैं। यह सटीक होना चाहिए और इसका उपयोग ईएसपी 32 द्वारा वाईफाई नेटवर्क से जुड़ने के लिए किया जाएगा।
#define WLAN_SSID "xxxxxxxxx" #define WLAN_PASS "2581xxxxx2"
इसके बाद, हमने Adafruit io की परिभाषाएं दीं।
#define AIO_UPDATE_RATE_SEC 5 #define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 #define AIO_SERNAME "xxxxxxxxxxxxx" #define AIO_KEY "abcdefgh"
अद्यतन दर हर 5 सेकंड पर डेटा को अपडेट करेगी, सर्वर 1883 के सर्वर पोर्ट के साथ io.adafruit.com होगा । उपयोगकर्ता नाम और पासवर्ड, विज्ञापन IO डैशबोर्ड से उत्पन्न उपयोगकर्ता नाम और पासवर्ड होगा। यह सभी के लिए अलग-अलग होगा और जरूरत के अनुसार तैयार किया जाना चाहिए जैसा कि एडैफोर्स सेटअप सेक्शन में बताया गया है।
I2C बंदरगाहों को बाद में परिभाषित किया गया है जैसा कि योजनाबद्ध में दिखाया गया है।
#define I2C_SDA 21 #define I2C_SCL 22
अगला, अंतिम रिपोर्ट और बीपीएम और खराब 2 मूल्य को संग्रहीत करने के लिए तीन चर का उपयोग किया जाता है।
uint32_t tsLastReport = 0; फ्लोट bpm_dt = 0; float spo2_dt = 0;
MQTT एक पब-सब मॉडल (प्रकाशित और सदस्यता) के साथ काम करता है । इस कार्य मॉडल में, वह डिवाइस जो डेटा को Adafruit सर्वर के लिए सबमिट करता है, वह प्रकाशन मोड में रहता है जहां Adafruit IO सर्वर उसी डेटा बिंदुओं की सदस्यता लेता है। इस तरह के प्रभाव में, जब भी डिवाइस किसी भी नए डेटा को प्रकाशित करता है, सर्वर, जैसा कि इसे सदस्यता लिया जाता है, डेटा प्राप्त करता है और आवश्यक कार्रवाई प्रदान करता है।
जब सर्वर डेटा प्रकाशित करता है, और डिवाइस इसकी सदस्यता लेता है, तो यही बात होती है। हमारे आवेदन में, डिवाइस SPO2 और BPM के डेटा को सर्वर को भेजता है, इसलिए यह उसी को प्रकाशित करता है और यह सर्वर से ON-OFF स्थिति प्राप्त करता है, इस प्रकार इस की सदस्यता लेता है। इस चीज़ को नीचे वर्णित कोड स्निपेट में कॉन्फ़िगर किया गया है-
WiFiClient क्लाइंट; Adafruit_MQTT_Client mqtt (और ग्राहक, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); Adafruit_MQTT_Subscribe sw_sub = Adafruit_MQTT_Subscribe (& mqtt, AIO_USERNAME "/ feeds / switch"); AIO के लिए // नोटिस MQTT पथ फॉर्म का पालन करें:
में सेटअप समारोह, हम, I2C शुरू करने से पूर्व-निर्धारित SSID और पासवर्ड के साथ वाईफाई को जोड़ने, और स्विच राज्य (स्विच बटन Adafruit आईओ डैशबोर्ड में बनाया गया) के लिए MQTT सदस्यता प्रक्रिया शुरू कर रहे हैं।
शून्य सेटअप () {Serial.begin (115200); वायर.बेगिन (I2C_SDA, I2C_SCL); WiFi.begin (WLAN_SSID, WLAN_PASS); जबकि (WiFi.status ()! = WL_CONNECTED) {विलंब (500); सीरियल.प्रिंट ("।"); } Serial.println (); Serial.println ("वाईफाई कनेक्ट"); Serial.println ("आईपी पता:"); Serial.println (WiFi.localIP ()); mqtt.subscribe (& sw_sub); Serial.print ("प्रारंभिक पल्स ऑक्सीमीटर.."); // प्रारंभिक पल्सओसेमीटर का उदाहरण। // विफलताएं आमतौर पर एक अनुचित I2C वायरिंग, लापता बिजली की आपूर्ति के कारण होती हैं // या गलत लक्ष्य चिप अगर (pox.begin ()) {Serial.println ("FAILED); के लिये(;;); } और {Serial.println ("SUCCESS"); } // आईआर एलईडी के लिए डिफ़ॉल्ट वर्तमान 50mA है और इसे बदला जा सकता है // निम्नलिखित पंक्ति को अनियंत्रित करके। सभी // उपलब्ध विकल्पों के लिए MAX30100_Registers.h की जाँच करें। चेचक।setIRLedCurrent (MAX30100_LED_CURR_7_6MA); // बीट डिटेक्शन pox.setOnBeatDetectedCallback (onBeatDetected) के लिए कॉलबैक रजिस्टर करें; stopReadPOX (); }
इस सब के बाद, एक अधिकतम वर्तमान सेटिंग के साथ अधिकतम 30100 शुरू किया जाता है। अलग-अलग कॉन्फ़िगरेशन के लिए MAX30100 हेडर फ़ाइलों में विभिन्न वर्तमान सेटिंग्स भी उपलब्ध हैं। एक दिल की धड़कन का पता लगाने के कॉल बैक फ़ंक्शन भी शुरू किया गया है। इन सभी सेटअपों के बाद, ऑक्सीमीटर सेंसर बंद हो जाता है।
में पाश समारोह, MQTT कनेक्शन शुरू कर दिया है और सदस्यता मॉडल में चेक किया गया है कि हर 5000 मिलीसेकंड । इस स्थिति में, यदि स्विच चालू किया जाता है, तो यह ऑक्सीमीटर सेंसर को पढ़ना शुरू कर देता है और हार्टबीट और एसपी 2 मान का डेटा प्रकाशित करता है । यदि स्विच बंद कर दिया जाता है, तो यह पल्स ऑक्सीमीटर सेंसर से संबंधित सभी कार्यों को निलंबित कर देता है।
शून्य लूप () {MQTT_connect (); Adafruit_MQTT_Subscribe * सदस्यता; जबकि ((सदस्यता = mqtt.readSubscription (5000))) {if (सदस्यता == & sw_sub) {Serial.print (F ("Got:")); सिरियल.प्रिंट ((चार *) sw_sub.lastread); अगर (strcmp ((char *) sw_sub.lastread, "ON")) {Serial.print (("शुरू POX…")); startReadPOX (); BaseType_t xReturned; if (poxReadTaskHld == NULL) {xReturned = xTaskCreate (poxReadTask, / * फ़ंक्शन जो कार्य को कार्यान्वित करता है। * / "pox_read", / / कार्य के लिए पाठ नाम। * / 1024 * 3, / * शब्दों में ढेर आकार, नहीं। बाइट्स। * / NULL, / * कार्य में पारित पैरामीटर। * / 2, / * प्राथमिकता जिस पर कार्य बनाया गया है। * / & poxReadTaskHld); / * बनाए गए कार्य के हैंडल को पास करने के लिए उपयोग किया जाता है। * /} विलंब (100); अगर (mqttPubTaskHld == NULL) {xRurnurned = xTaskCreate (mqttPubTask,/ * फ़ंक्शन जो कार्य को कार्यान्वित करता है। * / "mqttPub", / * कार्य के लिए पाठ का नाम। * * 1024 * 3, / * शब्दों में ढेर आकार, बाइट्स नहीं। * * NULL, / * पैरामीटर कार्य में पारित हुआ। * (2, / * प्राथमिकता जिस पर कार्य बनाया गया है। * / & mqttPubTaskHld); / * बनाए गए कार्य के हैंडल को पास करने के लिए उपयोग किया जाता है। * /}} और {Serial.print (("POX रोक रहा है…")); // Detele POX पढ़े गए कार्य (अगर poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld); poxReadTaskHld = NULL; } // MQTT पब टास्क को हटा दें यदि (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld); mqttPubTaskHld = NULL; } stopReadPOX (); }}}}}/ * बनाए गए कार्य के हैंडल को पास करने के लिए उपयोग किया जाता है। * /}} और {Serial.print (("POX रोक…")); // Detele POX पढ़े गए कार्य (अगर poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld); poxReadTaskHld = NULL; } // MQTT पब टास्क को हटा दें यदि (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld); mqttPubTaskHld = NULL; } stopReadPOX (); }}}}}/ * बनाए गए कार्य के हैंडल को पास करने के लिए उपयोग किया जाता है। * /}} और {Serial.print (("POX रोक रहा है…")); // Detele POX पढ़े गए कार्य (अगर poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld); poxReadTaskHld = NULL; } // MQTT पब टास्क को हटा दें यदि (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld); mqttPubTaskHld = NULL; } stopReadPOX (); }}}}}
आईओटी आधारित पल्स ऑक्समीटर प्रदर्शन
सर्किट एक ब्रेडबोर्ड में ठीक से जुड़ा हुआ है और नीचे दिए गए प्रोग्राम को ESP32 पर अपलोड किया गया है। सुनिश्चित करें कि आप अपने कोड में अपने अनुसार वाई-फाई और Adafruit क्रेडेंशियल्स को बदल दें ताकि यह आपके लिए काम कर सके।
WiFi और Adafruit IO सर्वर के साथ कनेक्शन के बाद, यह उम्मीद के मुताबिक काम करना शुरू कर दिया।
जैसा कि हम देख सकते हैं कि SPO2 का स्तर 96% दिखाई दे रहा है और दिल की धड़कन 78 से 81 बिट प्रति मिनट दिखाई दे रही है। यह उस समय को भी प्रदान कर रहा है जब डेटा पर कब्जा कर लिया गया है।
जैसा कि हम उपरोक्त छवि में देख सकते हैं, स्विच बंद कर दिया गया है और डेटा 0. है। परियोजना का पूरा कार्य वीडियो भी इस पृष्ठ के निचले भाग में पाया जा सकता है।
आशा है कि आपने लेख का आनंद लिया है और कुछ उपयोगी सीखा है, यदि आपके कोई प्रश्न हैं, तो कृपया उन्हें नीचे टिप्पणी अनुभाग में छोड़ दें या उन्हें हमारे मंचों पर पोस्ट करें ।