به نام خدا : پروژه avr شمارش ضربان قلب با نبض انگشت ، در این آموزش، قصد داریم تا پروژه ضربان قلب با استفاده از نبض انگشت رو طراحی کنیم و با avr پیاده کنیم.
پروژه avr شمارش ضربان قلب با نبض انگشت
با هر انقباض قلب میزان خون جاری شده در رگ ها افزایش می یابد؛ به عبارتی دیگر، با ضربان قلب میزان خون عبوری از رگ ها کم و زیاد می شود؛ وقتی مقدار خون در رگ زیاد شود، اگر به آن نور بتابانیم، نور برگشتی زیاد می شود؛ یکی از روش های آشکارسازی این ضربان استفاده از سنسورهای مادون قرمز است به این ترتیب که فرستنده مادون قرمز امواج مادون قرمز را به بافت های بدن ( مثلا نوک انگشت ) ارسال می کند و گیرنده مادون قرمز نیز امواج بازتاب شده از بافت مورد نظر را دریافت می کند؛ همانطور که ملاحظه می کنید می توان گیرنده و فرستنده مادون قرمز را در یکی از دو موقعیت زیر قرار داد :
توجه : ما در این پروژه،از حالت اول استفاده کردیم.
حالا این پروژه به چه دردی می خوره؟ برای مصارف ورزشی و پزشکی مثلا ضربان سنج موقع ورزش در محصول زیر :
طراحی مدار : با تغییر مکرر میزان خون در رگ ها (با هر تپش قلب ) دامنه موج مادون قرمز دریافتی توسط گیرنده تغییر می کند ( مانند شکل زیر )
با توجه به اینکه دامنه سیگنال کسب شده توسط گیرنده بسیار کوچک است ( مانند شکل فوق ) برای استفاده از آن می بایست آنرا تقویت نمود؛ برای تقویت چنین سیگنال ضعیفی باید توجه داشت که نویز محیط و حتی نویز مدار می تواند تاثیر مخربی بر سیگنال دریافتی داشته باشد؛ بنابراین برای رهایی از نویزهای موجود در اطراف ( مثلا برق شهر و … ) می بایست فیلتری طراحی نمود که سیگنال های ناخواسته را حذف نماید و آپ امپ های مورد استفاده از نوع آپ امپ های کم نویز و یا ابزار دقیق باشند؛ با توجه به اینکه فرکانس ضربان قلب انسان معمولا کمتر از ۳ هرتز است، فرکانس قطع فیلتر مورد نظر نیز در همین حدود خواهد بود؛ پس از آنکه سیگنال دریافتی از گیرنده مادون قرمز به خوبی تقویت شد می توان آنرا توسط یک مقایسه کننده به پالس مربعی تبدیل نمود و با اعمال آن به یک LED سبب خاموش و روشن شدن LED با هر ضربان قلب شد.
توجه : ما دراین پروژه، با یک میکروکنترلر، نرخ ضربان قلب ( تعداد در دقیقه ) را روی یک ال سی دی نمایش دادیم.
مدار تقویت کننده و فیلتر، شامل دو عدد آپ امپ می باشد( lm324 ) :
تحلیل فرکانسی :در مدار ما، تقویت کنندگی، به ازای فرکانس های مختلف، به صورت زیر است :
توجه : مدار شامل دو فیلتر می باشد که در مجموع، نوعی فیلتر میان گذر را ساخته اند؛ یعنی فرکانس های در محدوده ۳ هرتز را نگه می دارد و فرکانس های با بسامد بیشتر و کمتر را تضعیف ( حذف ) می کند.
قسمت سمت چپ شکل، مربوط به مدار آپ امپ می باشد که تشکیل یک فیلتر پایین گذر را داده است.
قسمت سمت راست شکل، مربوط به فیلتر RC که تشکیل یک فیلتر بالا گذر در ورودی هر طبقه داده است.
خدا از مردم نادان عهد نگرفت که بیاموزند تا آن که از دانایان عهد گرفت که آموزش دهند.
شماتیک پروژه AVR شمارش ضربان قلب :
عکس پروژه AVR شمارش ضربان قلب در عمل :
کد پروژه AVR شمارش ضربان قلب :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | #include <mega8.h> #include <delay.h> #include <alcd.h> #include <stdio.h> // Declare your global variables here int i=0,time=0; unsigned char ch[20]; float hr=0.0; // External Interrupt 0 service routine interrupt [EXT_INT0] void ext_int0_isr(void) { time=0; TCNT1H=0x85EE >> 8; TCNT1L=0x85EE & 0xff; TCNT0=0; i=1; } // Timer1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) { time++; // Reinitialize Timer1 value TCNT1H=0x85EE >> 8; TCNT1L=0x85EE & 0xff; // Place your code here } void main(void) { // Timer/Counter 0 initialization // Clock source: T0 pin Rising Edge TCCR0=(1<<CS02) | (1<<CS01) | (1<<CS00); TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 31/250 kHz // Mode: Normal top=0xFFFF // OC1A output: Disconnected // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer Period: 1 s // Timer1 Overflow Interrupt: On // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (1<<CS12) | (0<<CS11) | (0<<CS10); TCNT1H=0x85; TCNT1L=0xEE; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (1<<TOIE1) | (0<<TOIE0); // External Interrupt(s) initialization // INT0: On // INT0 Mode: Rising Edge // INT1: Off GICR|=(0<<INT1) | (1<<INT0); MCUCR=(0<<ISC11) | (0<<ISC10) | (1<<ISC01) | (1<<ISC00); GIFR=(0<<INTF1) | (1<<INTF0); // Alphanumeric LCD initialization // Connections are specified in the // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTC Bit 0 // RD - PORTD Bit 1 // EN - PORTC Bit 1 // D4 - PORTC Bit 2 // D5 - PORTC Bit 3 // D6 - PORTC Bit 4 // D7 - PORTC Bit 5 // Characters/line: 16 lcd_init(16); // Global enable interrupts #asm("sei") while (1) { lcd_gotoxy(0,0); hr = 60.0*TCNT0; hr/=time; sprintf(ch,"Rate: %2.2f",hr); lcd_puts(ch); lcd_gotoxy(0,1); sprintf(ch,"Time : %u",time); lcd_puts(ch); delay_ms(500); lcd_gotoxy(0,0); lcd_puts(" "); lcd_gotoxy(0,1); lcd_puts(" "); } } |
برای آشنایی با نحوه تنظیمات code wizard ویدئو زیر را مشاهده فرمایید : http://www.aparat.com/v/s20hG
pcb رسم شده در پروتئوس :
مدار چاپ شده :
توجه ۱ : مدار روی برد بورد خوب جواب داد ولی بورد بالا رو اسمبل کردم کار نکرد!!! اون موقع، به دلیل شروع امتحانات، نتونستم عیب یابیش کنم.
توجه ۲ : آپ امپ مورد استفاده در این پروژه، lm324 می باشد که شامل ۴ آپ امپ مجزا و با تغذیه مشترک است.
توجه ۳ : خروجی تقویت کننده دوم را به ورودی آپ امپ سوم وصل کرده و ولتاژ مرجعی را توسط یک پتانسومتر ایجاد کردیم ( این قسمت مدار، کار مقایسه را انجام می دهد ) سپس خروجی مقایسه گر را به ال ای دی دادیم تا با هر بار ضربان، یکبار روشن و خاموش شود.وهمین خروجی را به میکرو دادیم تا شمارش انجام شود.
قطعات پیشنهادی :
(توجه داشته باشید که مقاومت ها رو طبق مدار خریداری بفرمایید زیرا،در لیست زیر،فقط مقاومت 68 کیلو اهم ذکر شده اون هم برای درج قیمت.!!)
توجه : البته ما در مدارمان از فرستنده سنسور CNY70 و گیرنده TCRT5000 استفاده کردیم!!! چون با CNY70 جواب نگرفتم و فرستنده TCRT5000 هم سوخت!!
منبع : Microcontroller measures heart rate through fingertip
جهت هر چه مستحکم تر شدن مقام ولایت فقیه و تعجیل درظهور بابای خوبمون مهدی(عج) صلوات
مهمان
سلام خسته نباشید من این پروژه بستم ولی برنامه شو که میریزم وقتی کلید هارو میزنم هیچ کاری نمیکنه فقط روی lcd 2f میزنه این باید فقط به خروجی اپ امپ وصل بشه تا کار بده ؟؟؟ ممنون میشم
نویسنده این مطلب
سلام.
کدتون(فایل با پسوند .c) رو یه جایی بارگذاری بفرمایید و لینکش رو بفرستید تا بررسی بشه.
این مشکل،می تونه ازدو جا ناشی بشه
1. خط 81
sprintf(ch,"Rate: %2.2f",hr);
2.اگر با کد ویژن کار می کنید،مسیر زیر رو طی بفرمایید:
project >> configure
زبانه c compiler
کشو s printf feature
رو به float تغییر بدید.
مهمان
سلام خسته نباشید میشه برام کل مدار توی جیمیل ام بفرسیتن الان من این مولتی ترن کجا بزارم الان تو لیست قطعات 18 عدد مقاومت 68کیلو زدین کجای مدار بزارم
نویسنده این مطلب
سلام اون 18 عدد 68 کیلو اهم رو برای برآورد قیمت گذاشته.
شما مقاومت هاتون،طبق مدارها(عکس ها) باید بگذارید.
مهمان
سلام خسته نباشین میشه با مگا۳۲ وپلاس سنسور هم کد بنویسین
مهمان
با سلام
خداقوت.
جالب مثل همیشه
مهمان
سلام ببخشید چرا در lcd برای من rate فعال نمیشه
من طبق کد های شما طبق ویدئو تون رفتم جلو ولی rate فعال نشد تایمر فعال میشه ول rate کار نمیکنه
نویسنده این مطلب
سلام. احتمالا ورودی میکرو(خروجی تقویت کننده تون)سیگنال ندارید.با مولتی متر چک کنید ببینید خروجی دارید یا خیر
مهمان
سلام من این پروژه بستم ولی روی السیدی INT نوشته
مهمان
سلام خسته نباشید.
من آخر نفهمیدم از چه سنسوری استفاده کنم!!!
tcrt cny70 یا gp2s28 !?
مهمان
سلام
من مدار رو بستم، ولی تقویت کننده ها هرکدوم حدود 0.2 ولت افست روی خروجی دارن، و تقویت کننده دوم میره اشباع، چیکار میتونم بکنم؟