تخطيط نبض القلب

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

لذلك قمنا بعمل مشروع قياس ومراقبة نبض القلب، من خلاله يمكنك مراقبة معدل ضربات القلب الخاصة بك في المنزل.

measure-heart-rate

القطع المطلوبة

في هذا المشروع سنقوم بإستخدام القطع التالية :

Heart Rate Sensor Module

مستشعر لقياس معدل نبضات القلب

arduino uno r3

Arduino Uno R3

 اسلاك توصيل ذكر/أنثى (Jumper Wires Male Female)

مستشعر نبض القلب :

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

measure-heart-rate

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

measure-heart-rate

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

measure-heart-rate

الجزء الخلفي من أجهزة الاستشعار هو المكان الذي يتم تركيب بقية الأجزاء.

تصميم لوح التجارب :

قم بتوصيل الدائرة كما هو موضح بالصورة التالية :

measure-heart-rate

البرمجة :

قم بتحميل الكود التالي إلى الأردوينو :

//  Variables
int PulseSensorPurplePin = 0;        // Pulse Sensor PURPLE WIRE connected to ANALOG PIN 0
int LED13 = 13;   //  The on-board Arduion LED


int Signal;               // holds the incoming raw data. Signal value can range from 0-1024
int Threshold = 510;      // Determine which Signal to "count as a beat", and which to ingore. 


// The SetUp Function:
void setup() {
  pinMode(LED13,OUTPUT);       // pin that will blink to your heartbeat!
   Serial.begin(9600);         // Set's up Serial Communication at certain speed. 
   
}

// The Main Loop Function
void loop() {
  Signal = analogRead(PulseSensorPurplePin);  // Read the PulseSensor's value. 
                                              // Assign this value to the "Signal" variable.
   Serial.println(Signal);                    // Send the Signal value to Serial Plotter.   
   if(Signal > Threshold){                    // If the signal is above "510", then "turn-on" Arduino's on-Board LED.  
     digitalWrite(LED13,HIGH);          
   } else {
     digitalWrite(LED13,LOW);    //  Else, the sigal must be below "510", so "turn-off" this LED.
   }

delay(10);
}
لمحة عن الكود :

أولا نقوم بتعريف المتغيرPulseSensorPurplePin إعتمادا على ما تم توصيله بين المستشعر والأردوينو، ومتغير LED13  وهو الضوء الموجود على لوحة الأردوينو

int PulseSensorPurplePin = 0;
int LED13 = 13;

ومن ثم تعريف المتغير Signal الذي سيتم استخدامه لقراءة المستشعر، ومتغير Threshold لحديد حد للإشارات التي سيتم احتسابها كنبضة، والإشارات التي سيتم تجاهلها.

int Signal;               
int Threshold = 510;    

في دالة ()setup ،  نقوم بتهيئة المتغيرات كمخرج أو مدخل.

void setup() {
  pinMode(LED13,OUTPUT);       
   Serial.begin(9600);     
   
}

في دالة ()loop، نقوم بقراءة المستشعر ومن ثم طباعة القيمة.

  Signal = analogRead(PulseSensorPurplePin);  
                                             
   Serial.println(Signal);  

ثم نقوم بمقارنة قيمة المستشعر بالحد Thresholdالذي تم تعريفه مسبقا، إذا كانت القيمة أكبر من Threshold يتم إضاءة الـ LED 13 على لوحة الأردوينو، وإذا كانت أقل يتم إطفاءه.

 if(Signal > Threshold){                    
     digitalWrite(LED13,HIGH);          
   } else {
     digitalWrite(LED13,LOW);    
   }

وأخيرا قم بفتح نافذة Serial Plotter وراقب نبضك.




قياس رطوبة التربة باستخدام الاردوينو

في هذا المشروع سنتعلم كيف يمكننا قياس رطوبة التربة باستخدام حساس Soil Moisture مع الاردوينو. لمعرفة ما اذا كانت التربة جافة تحتاج الى ماء ام رطبة بشكل كافي.

قياس رطوبة التربة باستخدام الاردوينو

 

المكونات المطلوبة

arduino uno r3

Arduino Uno

Soil Moisture Sensor

green led 5mm

Green LED

blue led 5mm

Blue LED

 

Red LED

 

220 Ω resistor

220 Ohm Resistor

Full size breadboard 830

Breadboard

Breadboard Jumper Wire 65 pcs

Wires

حساس الرطوبة Moisture Sensor :

هو حساس إلكتروني يقوم بتحويل نسبة الرطوبة الموجودة في التربة إلى اشارة كهربائية يمكن قياسها. مخرجات هذا الحساس عبارة عن اشارة جهد من 0 إلى 5 فولت تعبر عن نسبة الرطوبة في التربة. فإذا كانت التربة جافة يكون المخرج 0 فولت وإذا كانت التربة رطبة جدا يعطي 5 فولت.

يمكننا قياس هذا الجهد الناتج عن طريق الاردوينو ،ومن خلال الأوامر البرمجية يمكننا التحكم بإظهار نسبة الرطوبة على مجموعة الـ LEDs .

 

توصيل الدارة

قم بتوصيل الدارة كما هو موضح بالصورة التالية :

قياس رطوبة التربة باستخدام الاردوينو

يتم توصيل حساس الرطوبة إلى الأردوينو كما هو موضح بالجدول :

الطرف (بداية من اليسار) التوصيل
VCC VCC
GND GND
SIG Output to Arduino

سنقوم بكتابه برنامج يقوم بقياس نسبة الرطوبة في التربة وعرضها على الشاشة التسلسلية Serial Monitor وتشغيل الـ LEDs للدلاله على نسبة الرطوبة في التربة.
فإذا كانت التربة جافة، لايتم تشغيل اي LED. وكلما زادت نسبة الرطوبة تبدأ الـ LEDs في الإضاءة تدريجيا. وعند وصول التربة إلى درجة التشبع تكون جميع الـ LEDs مضاءة.

قياس رطوبة التربة باستخدام الاردوينو

الكود البرمجي

#define LED1 2
#define LED2 3
#define LED3 4
#define LED4 5
#define LED5 6
#define SENSOR A0

void setup() {
  Serial.begin(9600);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(LED5, OUTPUT);
}

void loop() {
  int sensorValue = analogRead(SENSOR);
  Serial.println(sensorValue);

  if (sensorValue >= 760)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, HIGH);
    digitalWrite(LED4, HIGH);
    digitalWrite(LED5, HIGH);
  }
  else if (sensorValue >= 720  && sensorValue < 760)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, HIGH);
    digitalWrite(LED4, HIGH);
    digitalWrite(LED5, LOW);
  }
  else if (sensorValue >= 615  && sensorValue < 720)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, HIGH);
    digitalWrite(LED4, HIGH);
    digitalWrite(LED5, LOW);
  }
  else if (sensorValue >= 410 && sensorValue < 615)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, LOW);
    digitalWrite(LED4, LOW);
    digitalWrite(LED5, LOW);
  }
  else if (sensorValue >= 250 && sensorValue < 410)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, LOW);
    digitalWrite(LED3, LOW);
    digitalWrite(LED4, LOW);
    digitalWrite(LED5, LOW);
  }
  else if (sensorValue >= 0 && sensorValue < 250)
  {
    digitalWrite(LED1, LOW);
    digitalWrite(LED2, LOW);
    digitalWrite(LED3, LOW);
    digitalWrite(LED4, LOW);
    digitalWrite(LED5, LOW);
  }
  delay(1000);      
}

شرح الكود :

في البداية، نقوم بتسمية منافذ الأردوينو المستخدمة في المشروع، من أجل تسهيل عملية التعامل معها.

#define LED1 2
#define LED2 3
#define LED3 4
#define LED4 5
#define LED5 6
#define SENSOR A0

ثم فى دالة ()setup نقوم بضبط الاعدادات اللازمة للمشروع مثل تشغيل الاتصال التسلسلى و ضبط الـ LEDs المستخدمة كمخرجات

void setup() {
  Serial.begin(9600);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(LED5, OUTPUT);
}

في الدلة ()loop، نقوم بقراءة الحساس وعرض هذه القراءة على الشاشة التسلسلية Serial Monitor. بعد ذلك نبدأ بتشغيل الـ LEDs على حسب القيمة التي تمت قراءتها.

int sensorValue = analogRead(SENSOR);
  Serial.println(sensorValue);

مثلا إذا كان قيمة الحساس أعلى من 760، يدل ذلك على أن التربطة رطبة جدا، لذلك يتم إضاءة جميع الـ LEDs.

 if (sensorValue >= 760)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, HIGH);
    digitalWrite(LED4, HIGH);
    digitalWrite(LED5, HIGH);
  }

على عكس إذا كان قيمة الحساس اقل من 250، دل ذلك على أن التربة جافة وتحتاج إلى ماء ونعبر عن ذلك بإطفاء جميع الـ LEDs .

else if (sensorValue >= 0 && sensorValue < 250)
  {
    digitalWrite(LED1, LOW);
    digitalWrite(LED2, LOW);
    digitalWrite(LED3, LOW);
    digitalWrite(LED4, LOW);
    digitalWrite(LED5, LOW);
  }

ويتم إضاءة الـ LEDs تدريجيا اعتمادا على القيمة التي تم قراءتها من الحساس .

  else if (sensorValue >= 720  && sensorValue < 760)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, HIGH);
    digitalWrite(LED4, HIGH);
    digitalWrite(LED5, LOW);
  }
  else if (sensorValue >= 615  && sensorValue < 720)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, HIGH);
    digitalWrite(LED4, HIGH);
    digitalWrite(LED5, LOW);
  }
  else if (sensorValue >= 410 && sensorValue < 615)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, LOW);
    digitalWrite(LED4, LOW);
    digitalWrite(LED5, LOW);
  }
  else if (sensorValue >= 250 && sensorValue < 410)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, LOW);
    digitalWrite(LED3, LOW);
    digitalWrite(LED4, LOW);
    digitalWrite(LED5, LOW);
  }