/* Project: Measuring heart rate through fingertip Copyright @ Rajendra Bhatt January 18, 2011 PIC16F628A at 4.0 MHz external clock, MCLR enabled */ sbit IR_Tx at RA3_bit; sbit DD0_Set at RA2_bit; sbit DD1_Set at RA1_bit; sbit DD2_Set at RA0_bit; sbit start at RB7_bit; unsigned short j, DD0, DD1, DD2, DD3; unsigned short pulserate, pulsecount; unsigned int i; //-------------- Function to Return mask for common anode 7-seg. display unsigned short mask(unsigned short num) { switch (num) { case 0 : return 0xC0; case 1 : return 0xF9; case 2 : return 0xA4; case 3 : return 0xB0; case 4 : return 0x99; case 5 : return 0x92; case 6 : return 0x82; case 7 : return 0xF8; case 8 : return 0x80; case 9 : return 0x90; } //case end } void delay_debounce(){ Delay_ms(300); } void delay_refresh(){ Delay_ms(5); } void countpulse(){ IR_Tx = 1; delay_debounce(); delay_debounce(); TMR0=0; Delay_ms(15000); // Delay 1 Sec IR_Tx = 0; pulsecount = TMR0; pulserate = pulsecount*4; } void display(){ DD0 = pulserate%10; DD0 = mask(DD0); DD1 = (pulserate/10)%10; DD1 = mask(DD1); DD2 = pulserate/100; DD2 = mask(DD2); for (i = 0; i<=180*j; i++) { DD0_Set = 0; DD1_Set = 1; DD2_Set = 1; PORTB = DD0; delay_refresh(); DD0_Set = 1; DD1_Set = 0; DD2_Set = 1; PORTB = DD1; delay_refresh(); DD0_Set = 1; DD1_Set = 1; DD2_Set = 0; PORTB = DD2; delay_refresh(); } DD2_Set = 1; } void main() { CMCON = 0x07; // Disable Comparators TRISA = 0b00110000; // RA4/T0CKI input, RA5 is I/P only TRISB = 0b10000000; // RB7 input, rest output OPTION_REG = 0b00101000; // Prescaler (1:1), TOCS =1 for counter mode pulserate = 0; j = 1; display(); do { if(!start){ delay_debounce(); countpulse(); j= 3; display(); } } while(1); // Infinite loop }
- توضیحات
- نوشته شده توسط مهدی احمدی ;-)
- دسته: الکترونیک دیجیتال
- آخرین به روز رسانی در 02 آبان 1392
- بازدید: 81108
این پروژه یک نبض شمار یا ضربان سنج قلب است که براساس نور مادون قرمز انعکاس یافته از گلبول های خون جاری در رگها کار میکند, در این پروژه از میکروکنترلر PIC16F628A استفاده شده است و سنسور مورد استفاده از نوع مادون قرمز مجزا میباشد, البته میتوان این سنسور را با نوع پک شده تعویض نمود. برای تامین پالس ساعت زمان واقعی از کریستال ساعت استفاده شده و همچنین برنامه به زبان c نوشته شده است. نحوه کار مدار به این صورت است که پس از فشردن کلید فشاری, انگشت خود را بر روی سنسور قرار داده و مدار شروع به شمارش نبض شما میکند, از هر پنج انگشت میتوان برای تشخیص نبض استفاده نمود. بعد از شمارش برای توقف شمارنده و مشاهده زمان مجددا کلید را فشار داده تا میزان نبض شمارش شده در زمان را مشاهده کنید.
ضربان قلب تعداد ضربان قلب در هر واحد زمان است و معمولا در ضربه در دقیقه ( ضربان ) بیان شده است . در بزرگسالان ، ضربان قلب طبیعی حدود 60 تا 100 بار در دقیقه در شرایط استراحت میباشد.
این مدار شامل یک فیلتر پایین گذر با فرکانس قطع 2.5 هرتز است که به این معنی است که فرکانسهای بالاتر از این مقدار فیلتر میشود یعنی در کل مدار ضربان حدود 150 ضربه در دقیقه را میتواند بشمارد و بیش از آنرا حذف میکند.برای تقویت و ایجاد فیلتر از یم آپ امپ به شمارهMCP602 استفاده شده است که در دو مرحله با گین 101 سیگنال را تقویت میکند که در کل 10000بار سیگنال تقویت میگردد.وجود خازن 1uf برای جلو گیری از ورود مولفه های dc الزامی است.در شکل زیر محاسبات گین به طور کامل انجام شده است:
مدار شکل بالا یک تقویت کننده کامل است و مقدار تقویت شده در خروجی آن یک پالس است که ضربان قلب را نشان میدهد و کافی است که با یک فرکانس متر آنرا اندازه گرفت و مقدار فرکانس را روی نمایشگر نشان داد.
برای عملکرد بهتر مدار بهتر است که یک پتانسیو متر را برای بدست آوردن بهترین مقدار مقاومت برای سنسور فرستنده(شیشه ای) به شکل زیر استفاده کنید:
و تست کنید که آیا مدار تقویت کننده به درستی با قرار دادن انگشت روی فرستنده و گیرنده پلک میزند یا خیر یعنی برای تست مدار با قرار دادن چنین مداری و تغییر مقاومت 470 اهمی مقاومتی را بدست آورید که به بهترین شکل در خروجی پاس را ایجاد مینماید.
در زیر یک نمونه برنامه و شماتیک آورده شده است که میتوان مدار شمارش ضربان قلب را با میکرو PIC16F628A ساخت:
برای راه اندازی مدار بالا کافی است که مدار قبل را به آن متصل نمود.برای کامپایل کردن برنامه از کامپایلر MikroC استفاده کنید:
عکسهای مدار ساخته شده: