در این پست از سایت اِمیک, ماژول تشخیص باران (Raindrops sensor) را با استفاده از میکروکنترلر AVR راه اندازی خواهیم کرد. در واقع در این پست ما با استفاده از ماژول تشخیص باران یک هشدار دهنده بارش باران خواهیم ساخت که همچنین می تواند شدت باران را نیز بر حسب درصد روی یک LCD کاراکتری نمایش دهد. در ادامه با ماژول تشخیص باران بیشتر اشنا می شویم.
ماژول تشخیص باران :
از این ماژول می توان برای تشخیص باران استفاده کرد. کافی است قسمت سنسور را در فضای باز قرار دهید, با بارش قطرات باران روی سنسور خروجی ماژول فعال میشود. میزان حساسیت سنسور را می توان با استفاده از پتانسیومتر روی ماژول تنظیم کرد. این ماژول دارای دو خروجی دیجیتال و انالوگ می باشد که بسته به نیاز می توان از خروجی دیجیتال یا انالوگ یا هر دو استفاده کرد.
این ماژول دارای 4 پایه می باشد که به صورت زیر می باشند:
پایه 1: اتصال به VCC (مثبت تغذیه)
پایه 2: اتصال به GND (منفی تغذیه)
پایه 3: خروجی دیجیتال ماژول (D0)
پایه 4: خروجی انالوگ ماژول (A0)
زمانی که باران روی قسمت سنسور ماژول می بارد, هدایت الکتریکی آن تغییر کرده و ماژول بارش باران را تشخیص می دهد و خروجی DO آن از وضعیت 1 منطقی به 0 تغییر می کند. پس از پاک شدن ناحیه ی سنسور از آب, ماژول دوباره به وضعیت قبلی باز می گردد.
ویژگی ها:
- ولتاژ تغذیه 5 ولت
- دارای خروجی دیجیتال با قابلیت جریان دهی تا 100 میلی آمپر
- خروجی آنالوگ جهت متصل کردن به وروردی آنالوگ میکروکنترلرها
- چراغ نشانگر وضعیت خروجی
- حساسیت قابل تنظیم با پتانسومتر روی برد
پروژه راه اندازی ماژول تشخیص باران با میکروکنترلر AVR :
در این پروژه ما از میکروکنترلر ATmega16 به همراه ماژول تشخیص باران و یک LCD کاراکتری 2*16 برای نمایش مقدار بارش باران (درصد باران) استفاده کرده ایم.
همانطور که در بالا گفته شد عملکرد این پروژه به این صورت است که با بارش قطرات باران بر روی قسمت سنسور ماژول یک بازر هشدار دهنده فعال می شود و همچنین بر روی LCD مقدار بارش باران نمایش داده می شود. از هر دو خروجی دیجیتال و انالوگ ماژول در این پروژه استفاده شده است. در انتهای مطلب می توانید کلیپ تست پروژه را مشاهده کنید. در ادامه شماتیک ان را مشاهده می کنید:
برای دیدن تصویر بالا در اندازه بزرگتر ان را ذخیره کنید. همانطور که مشاهده می کنید علاوه بر میکروکنترلر و LCD و ماژول از یک پتانسیومتر (RV1) برای تنظیم کنتراست (روشنایی) ال سی دی کاراکتری و همچنین یک بازر (BUZZER) هشدار دهنده نیز استفاده شده است. ترانزیستور (Q1) و مقاومت (R1) به منظور درایور کردن یا راه اندازی بازر استفاده شده اند. بازر استفاده شده از نوع 5 ولت می باشد.
پایه D0 ماژول به پین 0 از پورت B میکروکنترلر (پایه 1 میکرو) متصل شده و پایه A0 ماژول به پین 0 از پورت A میکروکنترلر (پایه 40 میکرو) متصل شده است.
توجه کنید که پایه های تغذیه میکروکنترلر (پایه 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 48 49 50 51 52 53 |
////////// WWW.EMIC.IR ////////// #include <mega16.h> #include <delay.h> #include <alcd.h> #include <stdio.h> // sprintf براي استفاده از تابع stdio فراخواني کتابخانه // /* ايجاد مي شوند adc که توسط خود کدويژن با فعالسازي adc از خط 7 تا 16 دستورات مربوط به */ #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) { float i ; //از خط 20 تا 22 سه متغير تعريف شده است که در برنامه از انها استفاده مي شود// int R ; unsigned char lcd[16]; 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); DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (1<<DDB1) | (0<<DDB0); PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (1<<PORTB0); DDRD=(1<<DDD7) | (1<<DDD6) | (1<<DDD5) | (1<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0); PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); ADMUX=ADC_VREF_TYPE; /* که با توجه به تنظيمات ما در محيط کدويزارد ايجاد مي شوند adc از خط 33 تا 35 رجيسترهاي مربوط به */ ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (1<<ADPS0); SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0); lcd_init(16); while (1) { PORTB.1=~PINB.0; // مي ريزد B بود را برعکس مي کند و در پين 1 پورت B دستور روبرو هر مقداري که در پين 0 پورت // i=read_adc(0); // i خواندن عددي بين 0 تا 1023 که نشان دهنده مقدار ولتاژ انالوگ روي ان پين ميکرو است و ريختن ان در متغير // R=100-(i*100)/1023 ; // دستور روبرو عدد خوانده شده بين 0 تا 1023 را در بازه ي 0 تا 100 تبديل مي کند // sprintf(lcd,"Rain amount=%d",R); // براي نمايش روي ال سي دي کاراکتري lcd به رشته اي از کاراکتر و ذخيره ان در متغير R تبديل مقادير موجود در متغير // lcd_gotoxy(0,0); // رفتن به ستون 0 و سطر 0 از ال سي دي کاراکتري // lcd_puts(lcd); // ذخيره کرده بوديم lcd نمايش مقدار باران (به درصد) که به صورت کاراکتر در متغير // lcd_putsf("%"); // % نوشتن کاراکتر // lcd_gotoxy(2,1); lcd_putsf("WWW.EMIC.IR"); delay_ms(500); lcd_clear(); } } |
توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می تونید در قسمت نظرات مطرح کنید.
- در صورتی که با ADC در میکروکنترلر AVR و نحوه راه اندازی ان اشنا نیستید این پست را مطالعه کنید
- برای اشنایی با LCD کاراکتری و نحوه راه اندازی ان این پست را مطالعه کنید
کلیپ تست عملی پروژه :
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…
چگونه تغذیه ۵ ولت بسازیم ؟
سلام, پست زیر را بررسی کنید یا در سایت “7805” را جستجو کنید.
مدار ماژول رگولاتورهای سری 78xx
سلام خسته نباشید عالی بود ممنون
میتونین درمورد متصل کردن ب برق شهری با رله رو راهنمایی کنین چون میخوام واسه یه جایی استفاده کنم که موقع باریدن باران برق قطع بشه
سلام, کافیه به جای بازر یک رله بزارید