در این پست از سایت اِمیک, ما ماژول شمارنده نوری (اپتوکانتر) را با استفاده از میکروکنترلر AVR راه اندازی خواهیم کرد. ماژول اپتوکانتر کاربرد های مختلفی دارد و یکی از مهم ترین کاربردهای این ماژول, استفاده از ان برای شمارش دور موتور است. البته ما در این پروژه این ماژول را به ساده ترین روش راه اندازی خواهیم کرد و هدف این پروژه فقط راه اندازی ماژول است و در اینده پروژه شمارش دور موتور با استفاده از ماژول اپتوکانتر را حتما قرار خواهم داد.
شکل ماژول شمارنده نوری یا اپتوکانتری که ما در این پروژه ان را راه اندازی می کنیم به صورت زیر است:
همانطور که مشاهده می کنید این ماژول دارای 4 عدد پایه می باشد. دو عدد از این پایه ها مثبت و منفی تغذیه ماژول هستند که می تواند به ولتاژ 3.3 ولت تا 5 ولت متصل شود. دو پایه دیگر خروجی های دیجیتال و انالوگ ماژول هستند که در این پروژه ما فقط از خروجی دیجیتال ماژول یا همان پایه D0 استفاده می کنیم.
در زیر شماتیک پروژه راه اندازی ماژول شمارنده نوری (اپتوکانتر) را مشاهده می کنید.
همانطور که مشاهده می کنید, ما در این پروژه از میکروکنترلر ATmega16 استفاده کرده ایم. از یک LCD کاراکتری نیز استفاده کرده ایم که این LCD به پورت D میکروکنترلر متصل شده است. پتانسیومتر RV1 نیز برای تنظیم کنتراست یا میزان روشنایی LCD کاراکتری استفاده شده است.
پایه خروجی دیجیتال ماژول اپتوکانتر (D0) نیز به پایه شماره 1 میکروکنترلر (پین 0 از پورت B) متصل شده است.
عملکرد این پروژه به این صورت است که با هر عبور جسم از بین شیار ماژول, یک واحد به عددی که روی LCD نمایش داده شده اضافه می شود. در انتهای مطلب می توانید کلیپ تست عملی پروژه را مشاهده کنید.
شماتیک این پروژه بسیار ساده است و نکته خاصی ندارد. فقط توجه کنید که پایه های تغذیه میکروکنترلر (پایه 10 و 11) را که در شماتیک بالا نیست, فراموش نکنید به تغذیه 5 ولت متصل کنید.
برنامه کدویژن:
در این پروژه فرکانس میکروکنترلر 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 |
////////// WWW.EMIC.IR ////////// #include <mega16a.h> //ATmega16 فراخواني کتابخانه ميکروکنترلر// #include <alcd.h> //کاراکتري LCD فراخواني کتابخانه// #include <delay.h> //delay فراخواني کتابخانه// #include <stdlib.h> //itoa براي استفاده از تابع stdlib فراخواني کتابخانه// void main(void) { unsigned long int i=0; //تعريف متغير براي استفاده در برنامه// char Buffer_LCD[16]; //تعريف متغير براي استفاده در برنامه// //ميکرو ورودي شده است B در زير پورت// DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0); PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); //ميکرو براي اتصال به ال سي دي کاراکتري خروجي شده است D در زير پورت// 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); lcd_init(16); //(LCD بررسي اتصال) LCD پيکره بندي// while (1) { if(PINB.0==1) { //روبرو مي شويم if ميکرو که خروجي ماژول اپتوکانتر به ان متصل شده است برابر يک منطقي شد وارد شرط B در صورتي که پين 0 از پورت// while(PINB.0); //روبرو متوقف مي شود while برابر يک منطقي است اجراي برنامه درون حلقه B تا زماني که پين 0 از پورت// i++; //يک واحد اضافه مي شود i برنامه دوباره ادامه پيدا مي کند و اجرا مي شود و به متغير B با صفر شدن پين 0 از پورت// } itoa(i,Buffer_LCD); //ذخيره مي کند Buffer_LCD را براي اينکه بتوانيم روي ال سي دي کاراکتري نمايش دهيم به کاراکتر تبديل مي کند و درون متغير i دستور روبرو متغير// lcd_clear(); //پاک کردن ال سي دي// lcd_gotoxy(0,0); //رفتن به سطر 0 و ستون 0 از ال سي دي// lcd_putsf("Counter="); //Counter= نوشتن عبارت// lcd_puts(Buffer_LCD); //ذخيره کرده بوديم Buffer_LCD که به صورت کاراکتر درون متغير i نمايش مقدار متغير// lcd_gotoxy(0,1); //رفتن به سطر 1 و ستون 0 از ال سي دي// lcd_putsf("WWW.EMIC.IR"); //WWW.EMIC.IR نوشتن عبارت// delay_ms(50); //ايجاد 50 ميلي ثانيه تاخير// } } |
توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می توانید در قسمت نظرات مطرح کنید. فایل برنامه این پروژه با نرم افزار کدویژن را می توانید از انتهای مطلب دانلود کنید.
کلیپ تست عملی پروژه :
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…
تا چه سرعتی میتونه بخونه ؟
سلام فروشی هست؟
با سلام
من کتابخانه ماژول Opto Counter را میخواستم تا روی پروتئوس آزمایش کنم اگه ممکنه ان را روی سایت تون قرار دهید.