در این پست از سایت اِمیک, پروژه ساخت فتوسل با استفاده از میکروکنترلر AVR قرار داده شده است. در این پروژه ما با استفاده از یک سنسور مقاومت نوری یا LDR یک دستگاه فتوسل خواهیم ساخت که به وسیله ان می توانید چراغ ها یا دیگر وسایل را با توجه به نور محیط و بصورت اتوماتیک خاموش و روشن کنید. در ابتدا بهتر است که بطور خلاصه با سنسور LDR اشنا شویم.
سنسور LDR چیست؟ سنسور LDR در واقع یک مقاومت وابسته به نور است که مقدار مقاومت ان با توجه به شدت نور محیط تغییر می کند. با افزایش نور محیط مقاومت ان کاهش می یابد و با کاهش نور محیط مقاومت ان افزایش می یابد. در زیر شکل یک LDR را مشاهده می کنید:

در ادامه شماتیک این پروژه را مشاهده می کنید. همانطور که مشاهده می کنید در این پروژه از میکروکنترلر ATmega16 استفاده شده است.

سنسور LDR به همراه مقاومت R1 یک تقسیم ولتاژ مقاومتی ایجاد می کنند. هر چه نور محیط بیشتر باشد, مقدار مقاومت سنسور LDR کمتر است و در نتیجه ولتاژ کمتری روی پین 40 میکروکنترلر (پین 0 از پورت A) که در واقع یکی از ورودی های انالوگ میکرو است می افتد. با کاهش نور محیط مقدار مقاومت سنسور LDR افزایش می یابد و در نتیجه ولتاژ روی پایه 40 میکرو افزایش می یابد. با اندازه گیری ولتاژ روی پایه 40 میکرو توسط ADC میکروکنترلر, می توانیم میزان نور محیط را تشخیص دهیم.
عملکرد پروژه به این صورت است که در زمانی که هوا روشن است و نور کافی در محیط وجود دارد, رله قطع است. در زمانی که هوا تاریک است و نور کافی در محیط نیست, رله وصل می شود و چراغ یا وسیله متصل به رله نیز روشن می شود. در انتهای مطلب می توانید کلیپ تست عملی پروژه را مشاهده کنید.
رله از طریق یک مدار راه انداز شامل ترانزیستور Q1 و مقاومت R2 به پین 14 میکروکنترلر (پین 0 از پورت D) متصل شده است. همانطور که می دانید جریان خروجی پین های میکروکنترلر محدود است و نمی توان بطور مستقیم به رله متصل کرد و باید از طریق یک مدار راه انداز مانند شماتیک بالا رله را به میکروکنترلر متصل کرد.
توجه کنید که پایه های تغذیه میکروکنترلر (پایه 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 |
////////// WWW.EMIC.IR ////////// #include <mega16.h> #include <delay.h> //ايجاد مي شوند adc که توسط خود کدويژن با فعالسازي adc از خط 5 تا 14 دستورات مربوط به// #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) { unsigned int A=0; //در روبرو يک متغير براي استفاده در برنامه تعريف شده است// 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); DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (1<<DDD0); PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0); //که با توجه به تنظيمات ما در محيط کدويزارد ايجاد مي شوند adc از خط 30 تا 32 رجيسترهاي مربوط به// // ADC initialization // ADC Clock frequency: 500/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) | (0<<ADPS1) | (1<<ADPS0); SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0); PORTD.0=0; //که رله به ان متصل است را صفر مي کنيم يعني رله قطع باشد D بصورت پيش فرض پين 0 از پورت// while (1) { A=read_adc(0); //ميکرو است A خواندن عددي بين 0 تا 1023 که بيانگر مقدار ولتاژ انالوگ روي پين 0 از پورت// if(A<900) PORTD.0=0; //در صورتي که عدد خوانده شده کمتر از 900 که مي شود حدود 4.4 ولت بود رله را قطع مي کند// if(A>920) PORTD.0=1; //در صورتي که عدد خوانده شده بيشتر از 920 که مي شود حدود 4.5 ولت بود رله را وصل مي کند// } } |
توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می تونید در قسمت نظرات مطرح کنید. فایل های کدویژن و شبیه سازی پروتئوس را هم می تونید از انتهای مطلب دانلود کنید.
کلیپ تست عملی پروژه :
من برای تست پروژه از لامپ ماشین استفاده کردم و این لامپ ها یکم با تاخیر روشن می شوند
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…





سلام و درود
ممنون بابت اطلاعات مفید و خیلی خوبه سایت تون ، خدا خیرتون بده.
با تشکر و سپاس
آخه یه ای تی مگا 16 واسه فتوسل ! الان دلار میدونی چنده 114000 هزار تومان
این یک پروژه اموزشی هست هدف اموزش است شما می توانید از اطلاعات و کدهای پروژه برای هر میکروکنترلری استفاده کنید. یا این پروژه ساده می تواند بخشی از یک پروژه بزرگتر باشد
سلام . در مقاله راه اندازی adc یک تنظیمات برای adc قرار دادید برای استفاده از فتوسل هم باید این تنظیمات را انجام دهیم ؟
سلام, بله ولتاژ فتوسل با ADC میکرو اندازه گیری می شود
سلام . برای این که این کد رو داخل کد ویژن بنویسم باید تنظیمات adc به چه صورت باشد ؟
سلام اگه بخواهیم شدت نور led با توجه به نور محیط تغییر کنه چکار باید انجام بدیم ؟
در کل مدار کار میکنه ولی مشکلی که داره اینه که وقتی فن رو به رله متصل می کنم پشت سر هم کنتاک های رله قطع و وصل میشه.
سلام ببخشید اگر به جای MEGA16 بخواهیم MEGA8 بزاریم باید چه تغیراتی را انجام دهیم.
سلام, تغییرات جزئی در شماتیک و برنامه باید بدید. خودتون شروع کنید انجام بدید هر کجا مشکل داشتید سوال بپرسید راهنمایتون می کنم
تنظیمات اولیه چیست
سلام وقت بخیر …ممنون از توضیحات…عدد 900 از چه منطقی حاصل شده؟ لطفا خود سنسور را توضیح دهید که چطور کار میکنه؟
سلام, پست “راه اندازی ADC در میکروکنترلر AVR” را مطالعه کنید
ایول دمتون گرم خیلی خوب توضیح میدید.
سلام وقت بخیر میشه بهتون سفارش طراحی یه مدار دلخواه رو بدیم؟