- مستشعر MAX30100
- المكونات المطلوبة
- ربط مقياس التأكسج MAX30100 بـ ESP32
- Adafruit IO مع ESP32 لمراقبة معدل ضربات القلب
- شرح الكود
- عرض توضيحي لمقياس التأكسج القائم على إنترنت الأشياء
مقياس التأكسج النبضي هو أداة قياس طبية مستخدمة على نطاق واسع وهو اختبار غير جراحي وغير مؤلم يقيس مستوى تشبع الأكسجين في دمنا ويمكنه بسهولة اكتشاف التغيرات الصغيرة في الأكسجين. في الوضع الحالي لـ Covid-19 ، أصبح من المهم تتبع مستوى الأكسجين للعديد من المرضى في نفس الوقت عن بُعد دون الاتصال بالمريض.
لذلك ، في هذا المشروع ، قمنا ببناء مقياس التأكسج النبضي باستخدام مقياس الأكسجة النبضي MAX30100 و ESP32 الذي سيتتبع مستوى الأكسجين في الدم ويرسل البيانات عبر الإنترنت عن طريق الاتصال بشبكة Wi-Fi. بهذه الطريقة ، يمكننا مراقبة العديد من المرضى عن بُعد من خلال الحفاظ على مسافة اجتماعية مع المرضى. سيتم عرض البيانات التي تم الحصول عليها على شكل رسم بياني مما يسهل تتبع حالة المريض وتحليلها. في السابق ، قمنا أيضًا ببناء أجهزة أخرى لمراقبة معدل ضربات القلب باستخدام مستشعرات النبض. وإذا كنت مهتمًا بالمشاريع الأخرى ذات الصلة بـ Covid-19 ، فيمكنك التحقق من مقياس حرارة جسم الإنسان ، وميزان الحرارة الذكي بالأشعة تحت الحمراء لمراقبة الحمى ، والماسح الضوئي لدرجة حرارة الحائط الذي أنشأناه سابقًا.
بخلاف تطبيق Covid-19 ، يمكن أيضًا استخدام هذا المشروع على نطاق واسع في مرض الانسداد الرئوي المزمن (COPD) أو الربو أو الالتهاب الرئوي أو سرطان الرئة أو فقر الدم أو النوبة القلبية أو قصور القلب أو عيوب القلب الخلقية.
هل لاحظ أن المستشعر المستخدم في هذا المشروع غير مصنف طبيًا ، ولا يتم اختبار المشروع للتطبيقات المقاومة للفشل. استخدم دائمًا مقياس التأكسج النبضي المصنف طبياً لتحديد النبض ومستوى الأكسجين للمريض ومناقشته مع ممارس طبي. المشروع الذي تمت مناقشته هنا هو فقط للأغراض التعليمية.
مستشعر MAX30100
مستشعر MAX30100 عبارة عن وحدة قياس تأكسد النبض المدمجة ووحدة مراقبة معدل ضربات القلب. يتصل بخط بيانات I2C ويوفر معلومات SpO2 و Pulse لوحدة التحكم الدقيقة المضيفة. يستخدم أجهزة الكشف الضوئية ، العناصر البصرية حيث يعدل LED الأحمر والأخضر نبضات LED. يمكن تكوين تيار LED من 0 إلى 50mA. تُظهر الصورة أدناه مستشعر MAX30100.
تعمل وحدة المستشعر أعلاه مع 1.8 فولت إلى نطاق 5.5 فولت. يتم تضمين مقاومات السحب الخاصة بدبابيس I2C في الوحدة.
المكونات المطلوبة
- اتصال WiFi
- ESP32
- مستشعر MAX30100
- معرف مستخدم Adafruit IO ولوحة معلومات مخصصة (ستجعلها أكثر)
- وحدة إمداد طاقة كافية 5 فولت مع التيار المقدر 1 أمبير على الأقل
- كابل USB Micro USB إلى USBA
- جهاز كمبيوتر مع Arduino IDE مع بيئة برمجة ESP32.
ربط مقياس التأكسج MAX30100 بـ ESP32
يرد أدناه مخطط الدائرة الكاملة لـ MAX30100 مع ESP32.
هذا تخطيطي بسيط للغاية. يتم توصيل السن 21 و 22 من ESP32 devkit C بمستشعر مقياس التأكسج النبضي MAX30100 مع دبابيس SDA و SCL. يتم تشغيل مقياس التأكسج أيضًا بواسطة دبوس 5 فولت على لوحة تطوير ESP32. لقد أجريت اتصالي باستخدام لوحة توصيل وأسلاك توصيل ويبدو إعداد الاختبار الخاص بي على هذا النحو-
Adafruit IO مع ESP32 لمراقبة معدل ضربات القلب
لقد قمنا سابقًا ببناء العديد من مشاريع Adafruit IO لتطبيقات إنترنت الأشياء المختلفة. Adafruit IO هي منصة ممتازة حيث يمكن إنشاء لوحة تحكم مخصصة. لإنشاء لوحة معلومات مخصصة لمستشعر مقياس التأكسج النبضي المستند إلى إنترنت الأشياء ، استخدم الخطوات التالية-
الخطوة 1: قم أولاً بالتسجيل في adafruit IO بعد إعطاء اسم Fist واسم العائلة وعنوان البريد الإلكتروني واسم المستخدم وكلمة المرور.
الخطوة 2: سيتم فتح نافذة لوحة القيادة الفارغة بعد الانتهاء من عملية تسجيل الدخول. في هذا المقطع ، سنحتاج إلى إنشاء لوحة تحكم لعرض البيانات بطرق مختلفة. وبالتالي ، فقد حان الوقت لإنشاء لوحة القيادة الجديدة وتقديم اسم لوحة القيادة والوصف.
الخطوة 3: بعد ملء النموذج أعلاه ، حان الوقت لإنشاء قسم الرسم البياني والتحكم لجهاز الاستشعار.
حدد كتلة التبديل. سيكون مطلوبًا لتشغيل أو إيقاف تشغيل مستشعر مقياس التأكسج النبضي.
الخطوة 4: اكتب اسم الكتلة. كما نرى في الصورة أعلاه ، ستوفر وظيفة التبديل حالتين ، ON و OFF. في نفس العملية ، حدد كتلة الرسم البياني.
يجب تحديد قسم الرسم البياني هذا مرتين حيث سيتم عرض رسمين بيانيين ، القلب بت و SpO2. تم إنشاء كلا القسمين. كما نرى ، اخترنا جميع وظائف الإدخال والإخراج.
الخطوة 5: الخطوة التالية والأخيرة هي الحصول على مفتاح adafruit. كما نرى ، نحصل على مفتاح adafruit وهذا يحتاج إلى إضافته في الكود.
تم تكوين Adafruit IO الآن. حان الوقت لإعداد الأجهزة وإنشاء البرامج الثابتة لهذا المشروع.
شرح الكود
يستخدم هذا الرمز العديد من المكتبات وكلها مهمة. المكتبات هي مكتبة مستشعر مقياس الأكسجة النبضي MAX30100 ، و Wire.h لـ I2C ، و WiFi.h للدعم المتعلق بشبكة WiFi في مكتبة ESP32 و Adafruit MQTT و MQTT Client . يمكن العثور على البرنامج الكامل في أسفل هذه الصفحة.
يتم تضمين تلك المكتبات المذكورة أعلاه في بداية الكود.
#تضمن
التعريفان التاليان هما WLAN SSID وكلمة مرور WLAN. يجب أن يكون هذا دقيقًا وسيتم استخدامه بواسطة ESP32 للاتصال بشبكة WiFi.
#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_USERNAME "xxxxxxxxxxxxx" #define AIO_KEY "abcdefgh"
سيقوم معدل التحديث بتحديث البيانات كل 5 ثوانٍ ، وسيكون الخادم io.adafruit.com بمنفذ خادم من 1883. سيكون اسم المستخدم وكلمة المرور اسم المستخدم وكلمة المرور اللذين تم إنشاؤهما من لوحة معلومات adafruit IO. سيكون مختلفًا للجميع ويجب إنشاؤه كما هو موضح في قسم إعداد adafruit.
يتم تحديد منافذ I2C بعد ذلك كما هو موضح في التخطيطي.
#define I2C_SDA 21 #define I2C_SCL 22
بعد ذلك ، يتم استخدام ثلاثة متغيرات لتخزين التقرير الأخير وقيمة bpm و spo2.
uint32_t tsLastReport = 0 ؛ تعويم bpm_dt = 0 ؛ تعويم spo2_dt = 0 ؛
يعمل MQTT مع نموذج pub-sub (النشر والاشتراك). في نموذج العمل هذا ، يظل الجهاز الذي يرسل البيانات إلى خادم 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") ؛ // لاحظ أن مسارات MQTT لـ AIO تتبع النموذج:
في وظيفة الإعداد ، نبدأ I2C ، ونقوم بتوصيل WiFi مع SSID وكلمة المرور المحددين مسبقًا ، وبدء عملية اشتراك MQTT لحالة التبديل (زر التبديل الذي تم إنشاؤه في لوحة معلومات Adafruit IO).
إعداد باطل () {Serial.begin (115200) ؛ Wire.begin (I2C_SDA، I2C_SCL) ؛ WiFi.begin (WLAN_SSID، WLAN_PASS) ، while (WiFi.status ()! = WL_CONNECTED) {delay (500) ؛ Serial.print (".") ؛ } Serial.println () ، Serial.println ("متصل بشبكة WiFi") ؛ Serial.println ("عنوان IP:") ؛ Serial.println (WiFi.localIP ()) ؛ mqtt.subscribe (& sw_sub) ؛ Serial.print ("تهيئة مقياس التأكسج النبضي..") ؛ // تهيئة مثيل PulseOximeter // عادةً ما تكون حالات الفشل ناتجة عن وجود أسلاك I2C غير صحيحة أو مصدر طاقة مفقود // أو شريحة هدف خاطئة إذا (! pox.begin ()) {Serial.println ("FAILED") ؛ إلى عن على(؛؛)؛ } else {Serial.println ("SUCCESS") ؛ } // التيار الافتراضي لـ IR LED هو 50mA ويمكن تغييره // بإلغاء التعليق على السطر التالي. تحقق من MAX30100_Registers.h للحصول على // الخيارات المتاحة. جدري.setIRLedCurrent (MAX30100_LED_CURR_7_6MA) ، // تسجيل رد اتصال لجدري الكشف عن الإيقاع. stopReadPOX () ، }
بعد كل هذا ، يبدأ الحد الأقصى 30100 بإعداد تيار LED. تتوفر أيضًا إعدادات حالية مختلفة في ملفات رأس MAX30100 لتكوينات مختلفة. كما بدأت وظيفة معاودة الاتصال لاكتشاف نبضات القلب. بعد كل هذه الإعدادات ، يتم إيقاف مستشعر مقياس الأكسجة.
في وظيفة الحلقة ، يتم بدء اتصال MQTT ويتم التحقق من نموذج الاشتراك كل 5000 مللي ثانية. في هذه الحالة ، إذا تم تشغيل المفتاح ، فسيبدأ في قراءة مستشعر مقياس الأكسجة ونشر بيانات Heartbeat وقيمة SPO2. إذا تم إيقاف تشغيل المفتاح ، فإنه يوقف جميع المهام المتعلقة بمستشعر مقياس التأكسج النبضي.
حلقة باطلة () {MQTT_connect () ، Adafruit_MQTT_Subscribe * الاشتراك ؛ while ((subscription = mqtt.readSubscription (5000))) {if (subscription == & sw_sub) {Serial.print (F ("Got:")) ؛ Serial.println ((char *) sw_sub.lastread) ؛ if (! 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) {xReturned = xTaskCreate (mqttPubTask ،/ * الوظيفة التي تنفذ المهمة. * / "mqttPub" ، / * اسم النص للمهمة. * / 1024 * 3 ، / * حجم المكدس بالكلمات وليس بالبايت. * / NULL ، / * تم تمرير المعلمة إلى المهمة. * / 2، / * الأولوية التي يتم بها إنشاء المهمة. * / & mqttPubTaskHld) ؛ / * يُستخدم لتمرير مقبض المهمة المُنشأة. * /}} else {Serial.print (("Stoping POX…")) ؛ // Detele POX قراءة المهمة إذا (poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld) ؛ poxReadTaskHld = NULL ، } // احذف مهمة MQTT Pub إذا (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld) ؛ mqttPubTaskHld = NULL ، } stopReadPOX () ، }}}}/ * يُستخدم لتمرير مقبض المهمة المُنشأة. * /}} else {Serial.print (("Stoping POX…")) ؛ // Detele POX قراءة المهمة إذا (poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld) ؛ poxReadTaskHld = NULL ، } // احذف مهمة MQTT Pub إذا (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld) ؛ mqttPubTaskHld = NULL ، } stopReadPOX () ، }}}}/ * يُستخدم لتمرير مقبض المهمة المُنشأة. * /}} else {Serial.print (("Stoping POX…")) ؛ // Detele POX قراءة المهمة إذا (poxReadTaskHld! = NULL) vTaskDelete (poxReadTaskHld) ؛ poxReadTaskHld = NULL ، } // احذف مهمة MQTT Pub إذا (mqttPubTaskHld! = NULL) {vTaskDelete (mqttPubTaskHld) ؛ mqttPubTaskHld = NULL ، } stopReadPOX () ، }}}}
عرض توضيحي لمقياس التأكسج القائم على إنترنت الأشياء
الدائرة متصلة بشكل صحيح في لوحة توصيل ويتم تحميل البرنامج الموضح أدناه إلى ESP32. تأكد من تغيير بيانات اعتماد Wi-Fi و Adafruit وفقًا لذلك في التعليمات البرمجية الخاصة بك لجعلها تعمل من أجلك.
بعد الاتصال بخادم WiFi و Adafruit IO ، بدأ العمل كما هو متوقع.
كما يمكننا أن نرى أن مستوى SPO2 يظهر 96٪ وأن ضربات القلب تظهر من 78 إلى 81 بت في الدقيقة. كما أنه يوفر الوقت الذي يتم فيه التقاط البيانات.
كما نرى في الصورة أعلاه ، يتم إيقاف تشغيل المفتاح وتكون البيانات 0. يمكن أيضًا العثور على فيديو العمل الكامل للمشروع في أسفل هذه الصفحة.
آمل أن تكون قد استمتعت بالمقال وتعلمت شيئًا مفيدًا ، إذا كان لديك أي أسئلة ، فيرجى تركها في قسم التعليقات أدناه أو نشرها على منتدياتنا.