مقدمة
في هذا الدرس ستتعلم كيف تصنع نظام طبي لقياس نسبة الأكسجين وعدد ضربات القلب في الدم، يمكن معرفة تلك النسبة دون الحاجة لوخز الإبرة وذلك من خلال حساس ضوئي يحتوي على وحدة صغيرة مجهزة بموضع خاص لإصبع اليد.
المواد والأدوات
1× اردوينو اونو
1× مستشعر معدل نبضات القلب والأكسجين
1× شاشة (OLED)
1× موديول بلوتوث من النوع HC-06
1× هاتف بنظام اندرويد
توصيل الدائرة
للمزيد حول وحدة البلوتوث يمكنك الرجوع للدرس التالي نظام التحكم في الإضاءة عبر البلوتوث
الكود البرمجي
ارفع الكود البرمجي على لوحة الاردوينو باستخدام برنامج اردوينو (IDE).
#include <Wire.h> #include "MAX30100_PulseOximeter.h" #include "Wire.h" #include "Adafruit_GFX.h" #include "OakOLED.h" #define REPORTING_PERIOD_MS 1000 OakOLED oled; PulseOximeter pox; uint32_t tsLastReport = 0; const unsigned char bitmap [] PROGMEM= { 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x18, 0x00, 0x0f, 0xe0, 0x7f, 0x00, 0x3f, 0xf9, 0xff, 0xc0, 0x7f, 0xf9, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xf7, 0xff, 0xf0, 0xff, 0xe7, 0xff, 0xf0, 0xff, 0xe7, 0xff, 0xf0, 0x7f, 0xdb, 0xff, 0xe0, 0x7f, 0x9b, 0xff, 0xe0, 0x00, 0x3b, 0xc0, 0x00, 0x3f, 0xf9, 0x9f, 0xc0, 0x3f, 0xfd, 0xbf, 0xc0, 0x1f, 0xfd, 0xbf, 0x80, 0x0f, 0xfd, 0x7f, 0x00, 0x07, 0xfe, 0x7e, 0x00, 0x03, 0xfe, 0xfc, 0x00, 0x01, 0xff, 0xf8, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; void onBeatDetected() { Serial.println("Beat!"); oled.drawBitmap( 60, 20, bitmap, 28, 28, 1); oled.display(); } void setup() { Serial.begin(9600); oled.begin(); oled.clearDisplay(); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0, 0); oled.println("Initializing pulse oximeter.."); oled.display(); Serial.print("Initializing pulse oximeter.."); if (!pox.begin()) { Serial.println("FAILED"); oled.clearDisplay(); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0, 0); oled.println("FAILED"); oled.display(); for(;;); } else { oled.clearDisplay(); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0, 0); oled.println("SUCCESS"); oled.display(); Serial.println("SUCCESS"); } pox.setOnBeatDetectedCallback(onBeatDetected); } void loop() { pox.update(); if (millis() - tsLastReport > REPORTING_PERIOD_MS) { Serial.print("Heart BPM:"); Serial.print(pox.getHeartRate()); Serial.print("-----"); Serial.print("Oxygen Percent:"); Serial.print(pox.getSpO2()); Serial.println("\n"); oled.clearDisplay(); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0,16); oled.println(pox.getHeartRate()); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0, 0); oled.println("Heart BPM"); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0, 30); oled.println("Spo2"); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0,45); oled.println(pox.getSpO2()); oled.display(); tsLastReport = millis(); } }
شرح الكود البرمجي
هنا سيتم تعريف المكتبات المستخدمة في المشروع.
عليك تحميل المكتبات التالية:
1. Arduino MAX30100 Library
2. OkaOLED Library
3. Adafruit GFX Library
وذلك بالرجوع للملف المضغوط، لمعرفة كيفية تنزيل المكتبات يمكنك الرجوع إلى الدرس التالي.
بعد تحميل الملف فك الضغط عنه سيكون هناك 3 مكتبات، أضف كل مكتبة على حدة لقائمة المكتبات.
#include <Wire.h> #include "MAX30100_PulseOximeter.h" #include "Wire.h" #include "Adafruit_GFX.h" #include "OakOLED.h"
هنا سيتم تعريف المتغير الخاص بالشاشة OLED.
OakOLED oled;
وهنا سيتم تعريف المتغير الخاص بمستشعر نبضات القلب والأكسجين.
PulseOximeter pox;
في هذه الأسطر يتم تهيئة مصفوفة تضم مجموعة من المتغيرات والتي تخص الشاشة OLED.
const unsigned char bitmap [] PROGMEM= { 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x18, 0x00, 0x0f, 0xe0, 0x7f, 0x00, 0x3f, 0xf9, 0xff, 0xc0, 0x7f, 0xf9, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xe0, 0x7f, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xf7, 0xff, 0xf0, 0xff, 0xe7, 0xff, 0xf0, 0xff, 0xe7, 0xff, 0xf0, 0x7f, 0xdb, 0xff, 0xe0, 0x7f, 0x9b, 0xff, 0xe0, 0x00, 0x3b, 0xc0, 0x00, 0x3f, 0xf9, 0x9f, 0xc0, 0x3f, 0xfd, 0xbf, 0xc0, 0x1f, 0xfd, 0xbf, 0x80, 0x0f, 0xfd, 0x7f, 0x00, 0x07, 0xfe, 0x7e, 0x00, 0x03, 0xfe, 0xfc, 0x00, 0x01, 0xff, 0xf8, 0x00, 0x00, 0xff, 0xf0, 0x00, 0x00, 0x7f, 0xe0, 0x00, 0x00, 0x3f, 0xc0, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
في الدالة ()onBeatDetected سيتم قراءة البيانات من مستشعر نبضات القلب والأكسجين وطباعتها على الشاشة OLED.
void onBeatDetected() { Serial.println("Beat!"); oled.drawBitmap( 60, 20, bitmap, 28, 28, 1); oled.display(); }
في الدالة ()setup سيتم طباعة القيم المقروءة من مستشعر نبضات القلب والأكسجين وإذا تعذر ذلك سيتم طباعة الكلمة Failed بمعنى فشلت عملية القراءة هنا لابد التأكد من توصيل المستشعر بالشكل الصحيح.
void setup() { Serial.begin(9600); oled.begin(); oled.clearDisplay(); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0, 0); oled.println("Initializing pulse oximeter.."); oled.display(); Serial.print("Initializing pulse oximeter.."); if (!pox.begin()) { Serial.println("FAILED"); oled.clearDisplay(); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0, 0); oled.println("FAILED"); oled.display(); for(;;); } else { oled.clearDisplay(); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0, 0); oled.println("SUCCESS"); oled.display(); Serial.println("SUCCESS"); } pox.setOnBeatDetectedCallback(onBeatDetected); }
في الدالة ()loop سيتم قراءة معدل ضربات القلب ونسبة الأكسجين في الدم وطباعتها على الشاشة OLED وإرسال البيانات عن طريق البلوتوث إلى جهاز الاندرويد.
سيتم تحديث البيانات كل ثانية لكي يتم أخذ القراءات أولًا بأول.
void loop() { pox.update(); if (millis() - tsLastReport > REPORTING_PERIOD_MS) { Serial.print("Heart BPM:"); Serial.print(pox.getHeartRate()); Serial.print("-----"); Serial.print("Oxygen Percent:"); Serial.print(pox.getSpO2()); Serial.println("\n"); oled.clearDisplay(); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0,16); oled.println(pox.getHeartRate()); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0, 0); oled.println("Heart BPM"); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0, 30); oled.println("Spo2"); oled.setTextSize(1); oled.setTextColor(1); oled.setCursor(0,45); oled.println(pox.getSpO2()); oled.display(); tsLastReport = millis(); } }
برنامج MIT App Inventor
حمّل تصميم واجهة المستخدم والكود البرمجي من هنا.
من المتصفح افتح موقع MIT App Inventor.
أنشئ حساب على الموقع ثم انقر علي Create Apps.
من قائمة Project اختر Import projects (.aia) from my computer ثم انقر على الملف الذي حملته مسبقًا ويحتوي على واجهة المستخدم والكود البرمجي.
من قائمة Connect اختر Al companion
سيظهر كود ورمز مكون من 6 حروف.
حمّل تطبيق MIT App Inventor على جهازك الذكي.
يمكنك ادخال الرمز في المستطيل أو النقر على scan QR code ومسح الكود السابق.
ثم انقر على connect with code.
ستظهر هذه الواجهة انقر على Tap to connect.
اختر موديول البلوتوث المستخدم هنا استخدمنا النوع HC-06.
ستتم عملية الاقتران وستبدأ البيانات المقروءة من المستشعر بالظهور على الجهاز.
الآن تعلمت كيف تصنع نظام طبي يمكنك اختباره وذلك بوضع اصبعك على الحساس ومراقبة معدل نبضات القلب ونسبة الأكسجين.
لا تنسَ فصل مصدر الطاقة بعد الانتهاء من استخدام النظام.
المشاكل والإصلاحات
إذا كان توصيلك صحيح والحساس لا يعمل، ببساطة قم بإزالة المقاومات ذات القيمة 1.8ohm ليتم استبدالها بمقاوامات ذات قيمة 4.7k ohm .