مواجهة وحدة استشعار قياس نبضات القلب KY-039 مع الأردوينو Interfacing the KY-039 Heartbeat Sensor Module with Arduino اكتب تعليقُا

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

شرح فكرة المشروع

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

أدوات المشروع

  • اردوينو اونو مع سلك توصيل Arduino Uno: عدد 1
  • وحدة استشعار قياس نبضات القلب KY-039 Heartbeat Measuring Sensor: عدد 1
  • أسلاك توصيل من ذكر إلى أنثى 40 دبوس 20 سم wires 40pcs Male to Female

مخطط المشروع

منحنى قياس نبضات القلب على Serial Plotter

  • لفتح نافذة Serial Plotter، انقر على Tools من شريط القوائم، ثم اختر من القائمة Serial Plotter

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

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

#define samp_siz 4
#define rise_threshold 4

// Pulse Monitor Test Script
int sensorPin = 0;

void setup() {
Serial.begin(9600);
}

void loop ()
{
float reads[samp_siz], sum;
long int now, ptr;
float last, reader, start;
float first, second, third, before, print_value;
bool rising;
int rise_count;
int n;
long int last_beat;

for (int i = 0; i < samp_siz; i++)
reads[i] = 0;
sum = 0;
ptr = 0;

while(1)
{
// calculate an average of the sensor
// during a 20 ms period (this will eliminate
// the 50 Hz noise caused by electric light
n = 0;
start = millis();
reader = 0.;
do
{
reader += analogRead (sensorPin);
n++;
now = millis();
}
while (now < start + 20);
reader /= n; // we got an average

// Add the newest measurement to an array
// and subtract the oldest measurement from the array
// to maintain a sum of last measurements
sum -= reads[ptr];
sum += reader;
reads[ptr] = reader;
last = sum / samp_siz;
// now last holds the average of the values in the array

// check for a rising curve (= a heart beat)
if (last > before)
{
rise_count++;
if (!rising && rise_count > rise_threshold)
{
// Ok, we have detected a rising curve, which implies a heartbeat.
// Record the time since last beat, keep track of the two previous
// times (first, second, third) to get a weighed average.
// The rising flag prevents us from detecting the same rise more than once.
rising = true;
first = millis() – last_beat;
last_beat = millis();

// Calculate the weighed average of heartbeat rate
// according to the three last beats
print_value = 60000. / (0.4 * first + 0.3 * second + 0.3 * third);

Serial.print(print_value);
Serial.print(‘\n’);

third = second;
second = first;

}
}
else
{
// Ok, the curve is falling
rising = false;
rise_count = 0;
}
before = last;

ptr++;
ptr %= samp_siz;

}
}

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *