- المكونات المطلوبة
- مستشعر النبض SEN-11574
- مخطط الدائرة لتفاعل مستشعر النبض مع متحكم PIC
- شرح كود PIC16F877A لجهاز مراقبة ضربات القلب
معدل ضربات القلب هو أهم عامل في مراقبة صحة أي شخص. في العصر الحديث للأجهزة القابلة للارتداء ، هناك الكثير من الأجهزة التي يمكنها قياس ضربات القلب وضغط الدم وخطى الأقدام والسعرات الحرارية المحروقة والكثير من الأشياء الأخرى. تحتوي هذه الأجهزة على مستشعر نبض بداخلها لاستشعار معدل النبض. اليوم ، سنستخدم أيضًا مستشعر نبضات مع متحكم PIC لعد ضربات القلب في الدقيقة والفاصل الزمني بين النبضات ، وسيتم عرض هذه القيم على شاشة LCD مقاس 16 × 2 حرف. سوف نستخدم متحكم PIC16F877A PIC في هذا المشروع. لقد قمنا بالفعل بتوصيل مستشعر النبض مع Arduino لنظام مراقبة المريض.
المكونات المطلوبة
- متحكم PIC16F877A
- 20 ميجا هرتز كريستال
- 33pF مكثف 2 قطعة
- 4.7 كيلو المقاوم 1 قطع
- شاشة LCD مقاس 16 × 2 شخصية
- وعاء 10K للتحكم في التباين في شاشة LCD
- مستشعر النبض SEN-11574
- حزام الفيلكرو
- محول طاقة 5 فولت
- اللوح وأسلاك التوصيل
مستشعر النبض SEN-11574
لقياس نبضات القلب نحتاج إلى حساس نبض. هنا اخترنا مستشعر النبض SEN-11574 والذي يتوفر بسهولة في المتاجر عبر الإنترنت أو غير المتصلة بالإنترنت. استخدمنا هذا المستشعر نظرًا لوجود رموز نموذجية مقدمة من الشركة المصنعة ، ولكن هذا هو رمز Arduino. قمنا بتحويل هذا الرمز لميكروكونترولر PIC الخاص بنا.
المستشعر صغير جدًا ومثالي لقراءة نبضات القلب عبر شحمة الأذن أو طرف الإصبع. يبلغ قطرها 0.625 بوصة وسمكها 0.125 بوصة من الجانب الدائري ثنائي الفينيل متعدد الكلور.
يوفر هذا المستشعر إشارة تناظرية ويمكن تشغيل المستشعر بجهد 3 أو 5 فولت ، والاستهلاك الحالي للمستشعر هو 4 مللي أمبير ، وهو أمر رائع لتطبيقات الهاتف المحمول. يأتي المستشعر مع ثلاثة أسلاك مع كابل توصيل بطول 24 بوصة ورأس ذكر بيرج في النهاية. أيضًا ، يأتي المستشعر مع شريط فيلكرو للإصبع لارتدائه عبر أطراف الأصابع.
يتم توفير مخطط مستشعر النبض أيضًا من قبل الشركة المصنعة ومتوفر أيضًا على sparkfun.com.
يتكون مخطط المستشعر من مستشعر معدل ضربات القلب البصري ، أو دوائر RC لإلغاء الضوضاء ، أو مرشحات ، والتي يمكن رؤيتها في الرسم التخطيطي. يتم استخدام R2 و C2 و C1 و C3 ومكبر تشغيلي MCP6001 لإخراج تناظري مضخم موثوق.
هناك عدد قليل من المستشعرات الأخرى لمراقبة نبضات القلب ولكن مستشعر النبض SEN-11574 يستخدم على نطاق واسع في مشاريع الإلكترونيات.
مخطط الدائرة لتفاعل مستشعر النبض مع متحكم PIC
هنا لدينا توصيل جهاز استشعار نبض عبر 2 الثانية دبوس من متحكم حدة. نظرًا لأن المستشعر يوفر بيانات تمثيلية ، فنحن بحاجة إلى تحويل البيانات التناظرية إلى إشارة رقمية عن طريق إجراء الحسابات اللازمة.
و مذبذب الكريستال من 20MHZ متصل عبر اثنين من المسامير OSC وحدة متحكم مع اثنين من المكثفات 33pF السيراميك. و LCD متصل عبر ميناء RB للمتحكم.
شرح كود PIC16F877A لجهاز مراقبة ضربات القلب
الكود معقد بعض الشيء للمبتدئين. قدمت الشركة المصنعة نماذج رموز لمستشعر SEN-11574 ، ولكن تمت كتابتها لمنصة Arduino. نحن بحاجة إلى تحويل الحساب الخاص بشريحةنا الدقيقة ، PIC16F877A. يتم تقديم الكود الكامل في نهاية هذا المشروع مع فيديو توضيحي. ويمكن تنزيل ملفات C الداعمة من هنا.
إن تدفق الكود الخاص بنا بسيط نسبيًا وقد اتخذنا الخطوات باستخدام حالة التبديل . وفقًا للشركة المصنعة ، نحتاج إلى الحصول على البيانات من المستشعر كل 2 مللي ثانية. لذلك ، استخدمنا روتين خدمة مقاطعة المؤقت والذي سيطلق وظيفة كل 2 مللي ثانية.
سيصبح تدفق الكود الخاص بنا في بيان التبديل كما يلي:
الحالة 1: اقرأ ADC
الحالة 2: احسب نبضات القلب و IBI
الحالة 3: اعرض نبضات القلب و IBI على شاشة LCD
الحالة 4: IDLE (لا تفعل شيئًا)
داخل وظيفة مقاطعة المؤقت ، نقوم بتغيير حالة البرنامج إلى الحالة 1: قراءة ADC كل 2 مللي ثانية.
لذلك ، في الوظيفة الرئيسية ، حددنا حالة البرنامج وجميع حالات التبديل .
void main () { system_init () ؛ main_state = READ_ADC ، while (1) { switch (main_state) { case READ_ADC: { adc_value = ADC_Read (0)؛ // 0 هو رقم القناة main_state = CALCULATE_HEART_BEAT ؛ استراحة؛ } الحالة CALCULATE_HEART_BEAT: { calculate_heart_beat (adc_value) ؛ main_state = SHOW_HEART_BEAT ، استراحة؛ } الحالة SHOW_HEART_BEAT: { if (QS == true) {// تم العثور على نبضات القلب // تم تحديد BPM و IBI // القيمة الذاتية "QS" صحيحة عندما يجد Arduino نبضات قلب QS = false ؛ // إعادة تعيين علامة الذات الكمية في المرة القادمة // 0.9 المستخدمة للحصول على بيانات أفضل. في الواقع لا ينبغي استخدام BPM = BPM * 0.9 ؛ IBI = IBI / 0.9 ؛ lcd_com (0x80) ؛ lcd_puts ("BPM: -") ؛ lcd_print_number (BPM) ؛ lcd_com (0xC0) ؛ lcd_puts ("IBI: -") ؛ lcd_print_number (IBI) ؛ } } main_state = IDLE ؛ استراحة؛ حالة IDLE: { استراحة ؛ } الافتراضي: { } } } }
نحن نستخدم اثنين من الأجهزة الطرفية للجهاز PIC16F877A: Timer0 و ADC.
داخل ملف timer0.c ،
TMR0 = (uint8_t) (tmr0_mask & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000))) ؛
يوفر هذا الحساب مقاطعة عداد الوقت 2 مللي ثانية. صيغة الحساب هي
// TimerCountMax - (((تأخير (مللي ثانية) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
إذا رأينا وظيفة timer_isr ، فهي-
timer_isr () باطل { main_state = READ_ADC؛ }
في هذه الوظيفة ، يتم تغيير حالة البرنامج إلى READ_ADC في كل 2 مللي ثانية.
ثم يتم أخذ وظيفة CALCULATE_HEART_BEAT من كود مثال Arduino.
void calculate_heart_beat (int adc_value) { Signal = adc_value؛ sampleCounter + = 2 ؛ // تتبع الوقت بالمللي ثانية باستخدام هذا المتغير int N = sampleCounter - lastBeatTime ؛ // مراقبة الوقت منذ آخر إيقاع لتجنب الضوضاء // ابحث عن ذروة وحوض الموجة النبضية إذا (الإشارة <درجة && N> (IBI / 5) * 3) {// تجنب الضوضاء ثنائية اللون بالانتظار 3/5 من آخر IBI إذا كانت (الإشارة <T) {// T هي الحوض الصغير T = الإشارة ؛ // تتبع أدنى نقطة في موجة النبض } } …………. …………………………..
علاوة على ذلك ، يتم تقديم الكود الكامل أدناه ويتم شرحه جيدًا من خلال التعليقات. يمكن تحميل بيانات مستشعر ضربات القلب هذه إلى السحابة ومراقبتها عبر الإنترنت من أي مكان ، مما يجعلها نظام مراقبة ضربات القلب القائم على إنترنت الأشياء ، اتبع الرابط لمعرفة المزيد.
قم بتنزيل ملفات دعم C لمشروع PIC Pulse Sensor Project من هنا.