عناوين الدرس

نظام طبي لقياس نسبة الأكسجين في الدم ومعدل ضربات القلب

متوسط

مقدمة

في هذا الدرس ستتعلم كيف تصنع نظام طبي لقياس نسبة الأكسجين وعدد ضربات القلب في الدم، يمكن معرفة تلك النسبة دون الحاجة لوخز الإبرة وذلك من خلال حساس ضوئي يحتوي على وحدة صغيرة مجهزة بموضع خاص لإصبع اليد.

arduino-blood-oxygen-heart-rate-monitor-max30100

المواد والأدوات

arduino-blood-oxygen-heart-rate-monitor-max30100

1× اردوينو اونو

arduino-blood-oxygen-heart-rate-monitor-max30100

1× سلك الاردوينو

breadboard

1× لوحة تجارب – حجم كبير

arduino-blood-oxygen-heart-rate-monitor-max30100

3× مقاومة 4.7K Ωنظام طبي

مستشعر معدل نبضات القلب والأكسجين

arduino-blood-oxygen-heart-rate-monitor-max30100 اسلاك التوصيل لوح التجارب

arduino-blood-oxygen-heart-rate-monitor-max30100

1× شاشة (OLED)نظام طبي

موديول بلوتوث من النوع HC-06

arduino-blood-oxygen-heart-rate-monitor-max30100

حزمة أسلاك توصيل (ذكر – أنثى)

arduino-blood-oxygen-heart-rate-monitor-max30100

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.

arduino-blood-oxygen-heart-rate-monitor-max30100

من قائمة Project اختر Import projects (.aia) from my computer ثم انقر على الملف الذي حملته مسبقًا ويحتوي على واجهة المستخدم والكود البرمجي.

arduino-blood-oxygen-heart-rate-monitor-max30100

من قائمة Connect اختر Al companion

arduino-blood-oxygen-heart-rate-monitor-max30100

سيظهر كود ورمز مكون من 6 حروف.

حمّل تطبيق MIT App Inventor على جهازك الذكي.

يمكنك ادخال الرمز في المستطيل أو النقر على scan QR code ومسح الكود السابق.

ثم انقر على connect with code.
arduino-blood-oxygen-heart-rate-monitor-max30100

ستظهر هذه الواجهة انقر على Tap to connect.arduino-blood-oxygen-heart-rate-monitor-max30100

اختر موديول البلوتوث المستخدم هنا استخدمنا النوع HC-06.

نظام طبي

ستتم عملية الاقتران وستبدأ البيانات المقروءة من المستشعر بالظهور على الجهاز.نظام طبي

الآن تعلمت كيف تصنع نظام طبي يمكنك اختباره وذلك بوضع اصبعك على الحساس ومراقبة معدل نبضات القلب ونسبة الأكسجين.

 لا تنسَ فصل مصدر الطاقة بعد الانتهاء من استخدام النظام.

المشاكل والإصلاحات

إذا كان توصيلك صحيح والحساس لا يعمل، ببساطة قم بإزالة المقاومات ذات القيمة 1.8ohm ليتم استبدالها بمقاوامات ذات قيمة 4.7k ohm .

arduino-blood-oxygen-heart-rate-monitor-max30100

 

 

 

 

X
تم إضافة المنتج إلى السلة بنجاح