در این پست از سایت اِمیک, پروژه AVR هشدار دهنده شعله آتش قرار داده شده است. در این پروژه ما از سنسور گیرنده مادون قرمز (IR) برای تشخیص شعله آتش استفاده کرده ایم.
پروژه زیر می تواند شعله اتش را تشخیص دهد. بنابراین می توان از این پروژه به عنوان هشدار دهنده اتش سوزی و یا دیگر کاربردها استفاده کرد. در زیر شماتیک کامل پروژه را مشاهده می کنید.
همانطور که در شماتیک بالا مشاهده می کنید, قطعات استفاده شده در این پروژه شامل میکروکنترلر ATmega16A, سنسور گیرنده مادون قرمز 5 میلیمتر, بازر 5 ولت, ترانزیستور BC547, دو LED, پتانسیومتر 10 کیلو اهم و 4 عدد مقاومت می باشد.
عملکرد پروژه به این صورت است که در صورت وجود شعله اتش مقدار مقاومت سنسور گیرنده مادون قرمز تغییر می کند. در نتیجه مقدار ولتاژ روی پین 40 میکروکنترلر (پین 0 از پورت A) نیز تغییر می کند. در واقع در صورت وجود شعله اتش, مقدار ولتاژ روی پین 40 میکرو افزایش می یابد و هر چه میزان و شدت شعله اتش بیشتر باشد, مقدار این ولتاژ نیز بیشتر خواهد شد.
پین 40 میکروکنترلر ATmega16A یکی از ورودی های انالوگ ان است. بنابراین ما با اندازه گیری مقدار ولتاژ روی پین 40 میکرو, می توانیم وجود شعله اتش را تشخیص دهیم.
در پروژه بالا در صورتی که شعله اتش تشخیص داده شد, میکروکنترلر یک LED قرمز و یک بازر هشدار دهنده را فعال می کند. بازر و LED قرمز به پین 14 میکرو متصل هستند. از انجایی که جریان خروجی میکرو محدود است ما از یک ترانزیستور (Q1) در حالت سوئیچینگ برای راه اندازی بازر و LED قرمز استفاده کرده ایم.
در زمانی هم که شعله اتشی وجود ندارد, LED سبز که به پین 15 میکرو متصل است روشن می شود و LED قرمز و بازر خاموش می باشند. توسط پتانسیومتر RV1 می توانید حساسیت پروژه را تنظیم کنید. یعنی توسط این پتانسیومتر می توانید شدت یا مقدار شعله اتش مورد نظر برای فعال شدن بازر و LED قرمز را مشخص کنید.
توجه کنید که پایه های تغذیه میکروکنترلر (پایه 10 و 11) را که در شماتیک بالا نیست, فراموش نکنید به تغذیه 5 ولت متصل کنید و همچنین پایه های 30 و 32 میکرو را هم بدلیل استفاده از ADC باید به مثبت تغذیه متصل کنیم. در انتهای مطلب می توانید کلیپ تست عملی پروژه را مشاهده کنید.
برنامه کدویژن:
در این پروژه فرکانس میکروکنترلر 1 مگاهرتز تنظیم شده است. در زیر برنامه نوشته شده به زبان C و کامپایلر کدویژن را مشاهده می کنید:
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 |
////////// WWW.EMIC.IR ////////// #include <mega16a.h> #include <delay.h> //ايجاد مي شوند adc که توسط خود کدويژن با فعالسازي adc از خط 6 تا 15 دستورات مربوط به// #define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR)) unsigned int read_adc(unsigned char adc_input) { ADMUX=adc_input | ADC_VREF_TYPE; delay_us(10); ADCSRA|=(1<<ADSC); while ((ADCSRA & (1<<ADIF))==0); ADCSRA|=(1<<ADIF); return ADCW; } void main(void) { int a=0; //تعريف متغير براي استفاده در برنامه// //ميکرو ورودي شده است A در زير پورت// DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); //ميکرو خروجي شده اند D در زير پين 0 و 1 از پورت// DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (1<<DDD1) | (1<<DDD0); PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); //که با توجه به تنظيمات ما در محيط کدويزارد ايجاد مي شوند adc از خط 31 تا 33 رجيسترهاي مربوط به// // ADC initialization // ADC Clock frequency: 250/000 kHz // ADC Voltage Reference: AREF pin // ADC Auto Trigger Source: ADC Stopped ADMUX=ADC_VREF_TYPE; ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (1<<ADPS1) | (0<<ADPS0); SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0); while (1) { a=read_adc(0); //مي ريزد a دستور روبرو با توجه به مقدار ولتاژ انالوگ روي پين 40 ميکرو عددي بين 0 تا 1023 خوانده و درون متغير// if(a<50) { //اجرا مي شود if در صورتي که عدد خوانده شده کمتر از 50 که مي شود حدود 0.25 ولت بود اين شرط// PORTD.0=0; //که ال اي دي قرمز و بازر به ان متصل است صفر مي شود D پين 0 از پورت// PORTD.1=1; //که ال اي دي سبز به ان متصل است يک مي شود D پين 1 از پورت// } if(a>=50) { //اجرا مي شود if در صورتي که عدد خوانده شده بيشتر از 50 که مي شود حدود 0.25 ولت بود اين شرط// PORTD.0=1; //که ال اي دي قرمز و بازر به ان متصل است يک مي شود D پين 0 از پورت// PORTD.1=0; //که ال اي دي سبز به ان متصل است صفر مي شود D پين 1 از پورت// } } } |
توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می توانید در قسمت نظرات مطرح کنید. فایل های کدویژن و شبیه سازی پروتئوس را هم می تونید از انتهای مطلب دانلود کنید.
کلیپ تست عملی پروژه :
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…
سلام. بجای این میکر میتونم از ایتی مگا ۸ استفاده کنم
سلام این پروژه رو با زبان اسمبلی کدش رو دارید؟
سلام, خیر
سلام یه سوال پایه 11 مگه GND نیست چرا باید به 5 ولت وصل کنیم؟
سلام, پایه 10 میکرو به مثبت تغذیه و پایه 11 میکرو به منفی تغذیه 5 ولت متصل می شود.
سلام من مدار رو وصل کردم ولی ولتاژ تو پایه های 14 و 15 صفر هستش در نتیجه LED ها و بازر کار نمیکنن
میشه یک راه ارتباطی بدین که عکس بتونم براتون بفرستم
سلام
در مدار به جای فتودیود، LED کذاشتم ، هیچ کدام از LED ها روشن نشد؟
سلام
در پروتئوس شبیه سازی می کنم. در هیچ حالت هیچ کدام از LED ها روشن نمی شود؟ LED سبز باید روشن شود اگر از 0.25 ولت کمتر است که با وصل ولتمتر DC به پایه 40 میکرو و زمین ، هیچ LED روشن نمی شود؟
سلام, فایل های انتهای مطلب را دانلود کنید و در پروتئوس اجرا کنید. بررسی کردم و شبیه سازی به خوبی عمل می کرد.
سلام تنظیمات خود برنامه رو هم میگین ؟
سلام, در برنامه مشخص است که پورت A ورودی شده و پین 0 و 1 از پورت D هم خروجی شده است. ADC فعال شده و تنظیمات ADC در خط 27 تا 30 برنامه نوشته شده, فرکانس کاری میکروکنترلر هم 1 مگاهرتز تنظیم شده است.
درود وقتتون بخیر
مدار بنده بدرستی کار میکنه led. های سبز و قرمز بموقع روشن و خاموش میشند ولی بیزرم اصلا صداش بلند نیست خیلی خیلی صدای ریزی داره مشکل چیه؟
سلام, شاید بازر شما 5 ولت نیست یا مشکلی دارد با یک بازر 5 ولت دیگر هم تست کنید.
سلام میگم اگر بجای atmega16 از atmega32 استفاده کنیم مشکل ایجاد نمیشه؟
سلام, مشکلی ندارد فقط در ابتدای برنامه mega16a را به mega32a تغییر دهید
چرا وقتی که به منبع تغذیه متصل میکنیم هردو ال ای دی روشن میشه و بازر صدا میکنه
بررسی کنید که پایه های تغذیه میکروکنترلر و همچنین تغذیه adc را بدرستی متصل کرده باشید و از درست پروگرام شدن میکروکنترلر مطمئن شوید
سلام
بیشتر مدارات میکروی شما با Attiny13 قابل اجراست مثل همین پروژه ، چرا از این میکرو استفاده نمی کنید ؟! هم بهتره و هم هزینه اش پایین تر ….
سپاس
سلام, میکروکنترلر ATmega16 عمومی تر است و معمولا پروژه های اموزشی را با این میکرو قرار می دهند. شما در صورت نیاز می توانید برنامه را برای میکروکنترلر مورد نظر خود تغییر دهید.