در این پست از سایت اِمیک, یک پروژه بسیار جالب و آموزشی به نام پروژه آردوینو کنترل روشنایی LED با جوی استیک قرار داده شده است. همانطور که از نام پروژه مشخص است, ما در این پروژه به وسیله برد آردوینو میزان روشنایی (یا درخشندگی) چهار عدد LED را توسط یک ماژول جوی استیک کنترل خواهیم کرد. این پروژه با برد آردوینو UNO انجام شده است. در ادامه در مورد پروژه بیشتر توضیح خواهم داد. در زیر شماتیک این پروژه را مشاهده می کنید:
همانطور که مشاهده می کنید, ما در این پروژه از برد آردوینو UNO استفاده کرده ایم. از یک ماژول جوی استیک نیز استفاده کرده ایم که پایه های آن به صورتی که در ادامه می گویم به برد آردوینو متصل شده است. پایه VRx به پین A0 آردوینو, پایه VRy به پین A1 آردوینو و پایه های 5V+ و GND ماژول نیز به ترتیب به پین های 5V و GND برد آردوینو متصل شده اند.
از چهار عدد LED به همراه چهار مقاومت نیز استفاده کرده ایم. مقاومت ها برای محدود کردن جریان مصرفی LED ها و جلوگیری از آسیب به آنها می باشند. ال ای دی مشخص شده با عبارت LED-F به پین 3 آردوینو, LED-B به پین 5 آردوینو, LED-R به پین 6 آردوینو و LED-L نیز به پین 9 آردوینو متصل شده است. پایه کاتد همه LED ها نیز به منفی تغذیه (GND) متصل می شود.
عملکرد پروژه بالا به این صورت است که اهرم جوی استیک را به هر سمتی که حرکت دهیم, LED که در آن جهت است روشن می شود. در صورت حرکت اهرم جوی استیک به سمت جلو LED-F روشن می شود, حرکت اهرم به سمت عقب LED-B روشن می شود, حرکت اهرم به سمت راست LED-R روشن می شود و در صورت حرکت اهرم جوی استیک به سمت چپ LED-L روشن خواهد شد.
روشن شدن LED ها به تدریجی و با توجه مقدار حرکت اهرم جوی استیک می باشد. یعنی هر چه که اهرم را به یک سمت بیشتر حرکت دهیم, نور LED آن سمت نیز بیشتر خواهد شد. در انتهای مطلب کلیپ تست پروژه را می توانید مشاهده کنید.
برنامه آردوینو :
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 |
////////// WWW.EMIC.IR ////////// #define LEDF 3 //تعیین پین اردوینو که به ال ای دی سمت جلو متصل می شود// #define LEDB 5 //تعیین پین اردوینو که به ال ای دی سمت عقب متصل می شود// #define LEDR 6 //تعیین پین اردوینو که به ال ای دی سمت راست متصل می شود// #define LEDL 9 //تعیین پین اردوینو که به ال ای دی سمت چپ متصل می شود// void setup() { analogReference(DEFAULT); //اردوینو ADC تعیین ولتاژ رفرنس برای کار با واحد// pinMode(A0, INPUT); //اردوینو A0 ورودی کردن پین// pinMode(A1, INPUT); //اردوینو A1 ورودی کردن پین// pinMode(LEDF, OUTPUT); //خروجی کردن پین متصل به ال ای دی سمت جلو// pinMode(LEDB, OUTPUT); //خروجی کردن پین متصل به ال ای دی سمت عقب// pinMode(LEDR, OUTPUT); //خروجی کردن پین متصل به ال ای دی سمت راست// pinMode(LEDL, OUTPUT); //خروجی کردن پین متصل به ال ای دی سمت چپ// } void loop() { int VRx = analogRead(A0); //VRx که عددی بین 0 تا 1023 می تواند باشد و ریختن ان در متغیر A0 خواندن مقدار ولتاژ انالوگ روی پین// int VRy = analogRead(A1); //VRy که عددی بین 0 تا 1023 می تواند باشد و ریختن ان در متغیر A1 خواندن مقدار ولتاژ انالوگ روی پین// if (VRx >= 550) { //بیشتر از 550 شده و شرط روبرو اجرا می شود VRx در صورتی که اهرام جوی استیک را به سمت جلو حرکت دهیم مقدار// int brightness_F = map(VRx, 550, 1023, 0, 255); //می ریزد brightness_F را که می تواند در بازه 550 تا 1023 باشد را به بازه 0 تا 255 تبدیل می کند و در متغیر VRx دستور روبرو مقدار// analogWrite(LEDF, brightness_F); //که می تواند بین 0 تا 255 باشد روشن می کند brightness_F دستور روبرو ال ای دی سمت جلو را با توجه به مقدار متغیر// } else { digitalWrite(LEDF, LOW); //بالا برقرار نباشد ال ای دی سمت جلو را خاموش می کند if دستور روبرو در صورتی که شرط// } if (VRx <= 500) { //کمتر از 500 شده و شرط روبرو اجرا می شود VRx در صورتی که اهرام جوی استیک را به سمت عقب حرکت دهیم مقدار// int brightness_B = map(VRx, 500, 0, 0, 255); //می ریزد brightness_B را که می تواند در بازه 500 تا 0 باشد را به بازه 0 تا 255 تبدیل می کند و در متغیر VRx دستور روبرو مقدار// analogWrite(LEDB, brightness_B); //که می تواند بین 0 تا 255 باشد روشن می کند brightness_B دستور روبرو ال ای دی سمت عقب را با توجه به مقدار متغیر// } else { digitalWrite(LEDB, LOW); //بالا برقرار نباشد ال ای دی سمت عقب را خاموش می کند if دستور روبرو در صورتی که شرط// } if (VRy >= 550) { //بیشتر از 550 شده و شرط روبرو اجرا می شود VRy در صورتی که اهرام جوی استیک را به سمت راست حرکت دهیم مقدار// int brightness_R = map(VRy, 550, 1023, 0, 255); //می ریزد brightness_R را که می تواند در بازه 550 تا 1023 باشد را به بازه 0 تا 255 تبدیل می کند و در متغیر VRy دستور روبرو مقدار// analogWrite(LEDR, brightness_R); //که می تواند بین 0 تا 255 باشد روشن می کند brightness_R دستور روبرو ال ای دی سمت راست را با توجه به مقدار متغیر// } else { digitalWrite(LEDR, LOW); //بالا برقرار نباشد ال ای دی سمت راست را خاموش می کند if دستور روبرو در صورتی که شرط// } if (VRy <= 500) { //کمتر از 500 شده و شرط روبرو اجرا می شود VRy در صورتی که اهرام جوی استیک را به سمت چپ حرکت دهیم مقدار// int brightness_L = map(VRy, 500, 0, 0, 255); //می ریزد brightness_L را که می تواند در بازه 500 تا 0 باشد را به بازه 0 تا 255 تبدیل می کند و در متغیر VRy دستور روبرو مقدار// analogWrite(LEDL, brightness_L); //که می تواند بین 0 تا 255 باشد روشن می کند brightness_L دستور روبرو ال ای دی سمت چپ را با توجه به مقدار متغیر// } else { digitalWrite(LEDL, LOW); //بالا برقرار نباشد ال ای دی سمت چپ را خاموش می کند if دستور روبرو در صورتی که شرط// } } |
توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می توانید در قسمت نظرات مطرح کنید. از انتهای مطلب نیز می توانید فایل برنامه این پروژه با نرم افزار آردوینو را دانلود کنید.
کلیپ تست عملی پروژه :
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره…
سلام
آیا راه اندازی این ماژول بدون میکرو و آردینو به همین شکلی که شما ارائه نمودید قابل راه اندازی می باشد یا خیر؟
سلام, بله مدارشو در روزهای اینده طراحی خواهم کرد و در سایت منتشر می کنم.
مدار تست ماژول جوی استیک بدون میکروکنترلر
سلام
خیلی ممنون از آموزش خوبتون ، مهندس در اینستا دیدم با همین ماژول جوی استیک ولی بدون میکرو یا آردینو و فقط با خود همین ماژول و 5 تا ال ای دی این ماژول رو تست میکرد ، من امتهان کردم نشد ، چطوری میشه این کار رو انجام نداد؟ ممنونم اگه راهنمایی کنید.
سلام لطفا با AVR هم بگذارید ممنونم
سلام “پروژه AVR کنترل روشنایی LED با جوی استیک“