در این پست از سایت اِمیک, ماژول جوی استیک (Joystick) دو محوره را با استفاده از برد اردوینو یونو (UNO) راه اندازی خواهیم کرد. این ماژول کاربردهای مختلفی دارد و می توان از ان در پروژه های مختلف استفاده کرد, به عنوان مثال در پروژه های رباتیک برای کنترل حرکت ربات, کنترل ماشین های CNC و یا در دسته های بازی و غیره از جوی استیک استفاده می شود. قبلا ماژول جوی استیک را با استفاده از میکروکنترلر AVR راه اندازی کرده بودیم که در ان پست بطور کامل در مورد این ماژول و نحوه راه اندازی ان توضیح داده شد که می توانید ان پست را در اینجا مطالعه کنید.
همانطور که در تصویر بالا مشاهده می کنید این ماژول دارای 5 پایه به صورت زیر می باشد:
پایه GND که باید به منفی تغذیه (زمین) متصل شود
پایه 5V+ که به مثبت تغذیه (VCC) متصل می شود
پایه VRx که خروجی انالوگ محور X می باشد
پایه VRy که خروجی انالوگ محور Y می باشد
و پایه SW که خروجی سوئیچ ماژول است
برای راه اندازی ماژول ما باید با استفاده از ADC در اردوینو مقدار ولتاژ انالوگ هر دو خروجی VRx و VRy را اندازه گیری کنیم که این ولتاژها متناسب با جهت قرار گیری اهرام جوی استیک می باشند. با فشار دادن اهرام جوی استیک به سمت داخل یک سوئیچ یا کلید فشاری تغییر وضعیت می دهد. در حالتی که اهرام فشار داده نشده خروجی سوئیچ (SW) یک منطقی یا HIGH است با فشار دادن اهرام خروجی ان به صفر منطقی یا LOW تغییر وضعیت می دهد.
راه اندازی ماژول جوی استیک (Joystick) با آردوینو :
در این پروژه ما با استفاده از برد اردوینو UNO جهت حرکت اهرام ماژول جوی استیک را تشخیص داده و بر روی یک LCD کاراکتری نمایش می دهیم. همچنین در صورت فشار دادن سوئیچ ماژول عبارت PUSH بر روی ال سی دی نمایش داده می شود. در انتهای مطلب کلیپ تست پروژه را می توانید مشاهده کنید.
همانطور که گفته شد در این پروژه از برد اردوینو یونو (UNO) و یک ماژول جوی استیک دو محوره استفاده شده و برای نمایش متن هم از یک LCD کاراکتری 2*16 استفاده شده است. در ادامه شماتیک این پروژه را مشاهده می کنید:
برای دیدن تصویر بالا در اندازه بزرگتر ان را ذخیره کنید. LCD کاراکتری به پایه های 7 تا 13 برد اردوینو متصل شده و برای کنترل روشنایی (کنتراست) LCD کاراکتری از یک پتانسیومتر (RV1) استفاده شده است. پایه خروجی سوئیچ ماژول جوی استیک (SW) به صورت بالا به پایه A0 از برد اردوینو یونو متصل شده است. پایه VRY به پایه A1 و پایه VRX به پایه A2 از برد اردوینو یونو متصل شده است.
شماتیک بسیار ساده می باشد و نیاز به توضیح خاصی نیست در ادامه برنامه اردوینو این پروژه را مشاهده می کنید.
برنامه اردوینو :
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 54 55 56 57 58 59 60 61 62 63 64 65 |
////////// WWW.EMIC.IR ////////// #include <LiquidCrystal.h> //lcd معرفي کتابخانه// //متصل شود LCD تابع زیر مشخص می کند که کدام پین های اردوینو به// LiquidCrystal lcd(13, 12, 11, 10, 9, 8, 7); void setup() { //اردوینو مشخص میکند ADC دستور زیر مقدار ولتاژ مبنا یا رفرنس را برای کار با واحد// analogReference(DEFAULT); pinMode(A0, INPUT_PULLUP); pinMode(A1, INPUT); pinMode(A2, INPUT); lcd.begin(16, 2); //(LCD بررسي اتصال) LCD پيکره بندي// } void loop() { int X, Y, P ; Y = analogRead(A1); //می ریزد Y دستور روبرو عددي بين 0 تا 1023 که بيانگر مقدار ولتاژ انالوگ روي پين مورد نظر از اردوینو است را درون متغير// X = analogRead(A2); //می ریزد X دستور روبرو عددي بين 0 تا 1023 که بيانگر مقدار ولتاژ انالوگ روي پين مورد نظر از اردوینو است را درون متغير// P = digitalRead(A0); //برد اردوینو A0 با پین P برابر قرار دادن متغیر// lcd.setCursor(0, 0); //تعريف شده است که با توجه به جهت حرکت جوي استيک يکي از انها اتفاق مي افتد if در زیر تعدادی شرط// if ((480 <= X) & (530 >= X) & (480 <= Y) & (530 >= Y)) { lcd.print("WWW.EMIC.IR"); } if ((531 <= X) & (480 <= Y) & (530 >= Y)) { lcd.print("UP"); } if ((X <= 479) & (480 <= Y) & (530 >= Y)) { lcd.print("Down"); } if ((480 <= X) & (530 >= X) & (531 <= Y)) { lcd.print("Right"); } if ((480 <= X) & (530 >= X) & (Y <= 479)) { lcd.print("Left"); } if ((531 <= X) & (531 <= Y)) { lcd.print("UP and Right"); } if ((531 <= X) & (Y <= 479)) { lcd.print("UP and Left"); } if ((X <= 479) & (531 <= Y)) { lcd.print("Down and Right"); } if ((X <= 479) & (Y <= 479)) { lcd.print("Down and Left"); } if (P == 0) { lcd.setCursor(0, 1); lcd.print("PUSH"); } delay(300); lcd.clear(); } |
توضیحات قسمت های مهم برنامه نوشته شده, اگر سوالی داشتید می تونید در قسمت نظرات مطرح کنید.
نکات :
- برای تست پروژه حتما برد اردوینو را با اداپتور راه اندازی کنید (جریان دهی برد اردوینو در حالتی که با کابل usb متصل به کامپیوتر راه اندازی می شود بسیار کم است و جوابگوی برخی پروژه ها نیست)
- برای اشنایی با دستورات مربوط به LCD کاراکتری اینجا کلیک کنید
- برای اشنایی با دستورات و نحوه راه اندازی ADC در آردوینو اینجا کلیک کنید
- برای اشنایی با دستورات مهم برنامه نویسی اردوینو اینجا کلیک کنید
- برای اشنایی با نحوه پروگرام کردن برد اردوینو (ریختن برنامه روی برد) اینجا کلیک کنید
کلیپ تست عملی پروژه :
پسورد فایل زیپ : www.emic.ir
نظر یادتون نره …
سلام
می شود خط زیر را توضیح دهید؟
if ((X <= 479) & (480 = Y)) {
lcd.print(“Down”);
}
سلام جناب
ببخشید من از رابط I2C برای ال سی دی کاراکتری استفاده کردم و الان فقط 4 تا سیم دارم که دوتاش برق ال سی دی هست و دوتای دیگه رو میشه بگین به کجای آردوینو وصل کنم؟؟