جوی استیک یک ماژول کنترل کننده است که میتوان از طریق آن ورودیهای آنالوگ را از طریق حرکت جوی استیک دریافت کرد و این ورودیها را برای کنترل اجزای دیگر سیستم استفاده کرد. از جمله کاربردهای رایج جوی استیک میتوان به کنترل بازیهای رایانهای، روباتیک، هواپیماهای مدل، و سیستمهای کنترل صنعتی اشاره کرد. قصد داریم یک جوی استیک ساده را با استفاده از برد آردوینو راهاندازی کنیم. برد آردوینو یک پلتفرم متن باز و قدرتمند است که بر اساس میکروکنترلرهای AVR توسعه یافته است. با استفاده از برد آردوینو و سادهسازی فرآیند برنامه نویسی و اتصال قطعات الکترونیکی، میتوانیم به سرعت و با کمترین هزینه یک سیستم کنترل کننده جوی استیک راهاندازی کنیم. در ادامه با مرجع تخصصی آردوینو به زبان فارسی دیجی اسپارک همراه باشید.
برد آردوینو Arduino
برد آردوینو یک برد الکترونیکی قابل برنامهریزی است که برای توسعه و اجرای پروژههای الکترونیکی و رباتیکی استفاده میشود. این برد مجهز به واحد پردازشی میکروکنترلر است که میتواند توسط کدهای برنامهنویسی نوشته شده توسط کاربران کنترل و پیکربندی شود. برد آردوینو شامل ورودیها و خروجیهای متنوعی است که میتوان از آنها برای اتصال سنسورها، موتورها، و دیگر اجزای الکترونیکی به آن استفاده کرد.
جوی استیک JOYSTICK و روش استفاده
ماژول جوی استیک یا Joystick در نقش ورودی برای کنترل خروجی استفاده میشود. این ورودیهای آنالوگ میتوانند به عنوان سیگنالهای کنترلی برای سیستمها و دستگاههای الکترونیکی استفاده شوند ماژول جوی استیک شامل یک پایه مرجع و دو پتانسیومتر (Potentiometer) است که به طور معمول برای کنترل حرکت افقی و عمودی استفاده میشود. پتانسیومترها تغییرات مقاومت خروجی را ایجاد میکنند که باعث تولید ورودی آنالوگ در محورهای متناظر میشود. این ورودیهای آنالوگ میتوانند به عنوان جریان برای سیستمهای کنترلی یا تفسیر شوند تا برنامهها و عملکردهای مختلف را کنترل کنند.ماژولهای جوی استیک با استفاده از اتصالات آنالوگ یا دیجیتال، به بردهای کنترلی مانند برد آردوینو متصل میشوند. این بردها میتوانند ورودیهای آنالوگ را تفسیر کرده و براساس آنها عملکردهای مختلف را اجرا کنند، مانند کنترل موتورها، نمایشگرها، روباتها و سایر اجزا و دستگاههای الکترونیکی.
مشخصات فنی جوی استیک
مشخصات فنی ماژول جوی استیک (Joystick module) ممکن است براساس مدل و سازندهای که استفاده میکنید، متفاوت باشد. اما در اینجا مشخصاتی کلی را برای ماژول جوی استیک آوردهام:
- تعداد محورها: دو محور عمودی و افقی
- نوع خروجی: ورودی آنالوگ
- رنج ورودی آنالوگ: بین ۰ تا ۱۰۲۳ (برای آردوینو با تبدیلکننده آنالوگ به دیجیتال ۱۰ بیتی)
- نوع اتصال: اتصال آنالوگ یا دیجیتال با بردهای کنترلی مانند آردوینو
- ولتاژ عملکرد: ۳٫۳ ولت تا ۵ ولت
- جریان مصرفی: در محدوده ۱-۱۰ میلی آمپر
- ابعاد: در حدود ۲۵-۳۰ میلیمتر در هر طرف
- مواد ساخت: بدنه پلاستیکی و اجزای داخلی الکترونیکی
بررسی پایه های جوی استیک joystick
ماژول جوی استیک دارای ۵ پایه است که به طور کلی به شرح زیر هستند:
- VCC: این پایه مربوط به تغذیه ماژول است و باید به منبع تغذیه خارجی (مانند ۳٫۳ ولت یا ۵ ولت) متصل شود.
- GND: این پایه مربوط به زمین ماژول است و باید به منبع زمین خارجی متصل شود. این پایه و مثبت تغذیه (VCC) باید به طور الزامی بهم متصل شوند.
- X-Axis: این پایه مربوط به خروجی محور افقی جوی استیک است. یک سیگنال آنالوگ را تولید میکند که باید به ورودی آنالوگ برد کنترلی متصل شود.
- Y-Axis: این پایه مربوط به خروجی محور عمودی جوی استیک است. همچنین یک سیگنال آنالوگ را تولید میکند و باید به ورودی آنالوگ برد کنترلی متصل شود.
- Button: بعضی از ماژولهای جوی استیک دارای یک دکمه فشاری نیز هستند. این پایه مربوط به دکمه است و به ورودی دیجیتال برد کنترلی متصل میشود. وقتی که دکمه فشرده شود، این ورودی دیجیتال مقدار HIGH میدهد و در حالت غیرفشرده مقدار LOW خواهد بود.
معرفی سرو موتور Servo motor SG90
سروموتور SG90 یک سروموتور کوچک و کاربردی است که برای کنترل حرکتی دقیق در سیستمها و رباتیک استفاده میشود. این سروموتور یکی از محبوبترین و پر استفادهترین مدلهای سروموتورهاست. سروموتور SG90 از نوع تمامیچرخش (Continuous Rotation) است، یعنی میتوان آن را به صورت ۳۶۰ درجه چرخانده و در سرعت و جهت دلخواه کنترل کرد. برای این که بتوانید سروموتور SG90 را بهخوبی کنترل کنید، نیازمند استفاده از یک ماژول سروموتور (Servo Motor Driver) یا میکروکنترلر مانند آردوینو (Arduino) هستید.
مشخصات فنی سروموتور SG90 عبارتند از:
- ولتاژ کاری: ۴.۸ تا ۶ ولت
- جریان کاری: کمتر از ۵۰ میلیآمپر بدون بار
- سرعت چرخش: ۶۰ درجه در ثانیه
- زاویه چرخش: ۰ تا ۱۸۰ درجه
- دقت: حدود ۱ درجه
سروموتور SG90 دارای سه پین کنترلی است: یک پین برای تغذیه (VCC)، یک پین برای زمین (GND) و یک پین کنترلی (Signal) که از طریق آن میتوانید سرعت و زاویه چرخش سروموتور را تنظیم کنید.
کد آردوینو راه اندازی سرو موتور با جوی استیک
در زیر یک نمونه کد آردوینو برای راهاندازی سروموتور با استفاده از جوی استیک آورده شده است. این کد از کتابخانه Servo استفاده میکند تا سروموتور را کنترل کند.حال به تحلیل برخی از بخشهای کد بپردازیم. ابتدا کتابخانه Servo را اضافه میکنیم.یک شیء servoMotor از کلاس Servo ایجاد میکنیم. مقادیر پینهای جوی استیک را تعیین میکنیم.مقادیر حداقل و حداکثر زاویه را مشخص میکنیم.
در بخش setup، سروموتور را به پین ۹ متصل میکنیم. در بخش setup، سروموتور را به پین ۹ متصل میکنیم و سروموتور را به حداقل و حداکثر زاویه ممکن حرکت میدهیم. این کار به عنوان یک مقدار اولیه و استقرار اولیه برای سروموتور استفاده میشود.سپس در بخش loop، مقادیر آنالوگ خوانده شده از جوی استیک را دریافت میکنیم. این مقادیر نشان دهنده موقعیت استیک در محورهای X و Y هستند.سپس با استفاده از تابع map، مقدار آنالوگ خوانده شده از محور X را به مقدار زاویه مورد نظر برای سروموتور تبدیل میکنیم. تابع map، مقادیر را از یک محدوده به محدوده دیگر تبدیل میکند.در انتهای حلقه loop، با استفاده از تابع write، سروموتور را به زاویه محاسبه شده حرکت میدهیم.به علاوه، در انتظار تاخیر ۱۵ میلیثانیه قرار میگیریم تا سروموتور به زاویه جدید استقرار یابد و بتوانیم حرکت دقیقتری داشته باشیم.با استفاده از این کد، میتوانید با جابهجایی استیک جوی، زاویه سروموتور SG90 را کنترل کنید. با جابهجایی در محور X، زاویه سروموتور تغییر خواهد کرد و سروموتور به همان زاویه حرکت خواهد کرد.
#include <Servo.h>
Servo servoMotor; // ایجاد یک شیء سروموتور
int joyStickXPin = A0; // پین آنالوگ جوی استیک برای محور X
int joyStickYPin = A1; // پین آنالوگ جوی استیک برای محور Y
int servoMin = 0; // حداقل زاویه سروموتور
int servoMax = 180; // حداکثر زاویه سروموتور
void setup() {
servoMotor.attach(9); // اتصال سروموتور به پین ۹ آردوینو
// محدود کردن محدوده خروجی سروموتور
servoMotor.write(servoMin);
delay(500);
servoMotor.write(servoMax);
delay(500);
}
void loop() {
int joyStickXValue = analogRead(joyStickXPin); // خواندن مقدار آنالوگ جوی استیک محور X
int joyStickYValue = analogRead(joyStickYPin); // خواندن مقدار آنالوگ جوی استیک محور Y
// تبدیل مقادیر خوانده شده به زاویه مورد نظر
int servoAngle = map(joyStickXValue, 0, 1023, servoMin, servoMax);
// حرکت سروموتور به زاویه محاسبه شده
servoMotor.write(servoAngle);
delay(15); // تاخیر برای استقرار سروموتور
}
وسایل مورد نیاز
سلام ببخشید برد من uno smd هستش ال ای دی پاورش سوخته میخواستم بدونم مشکل از آمپر کشیدنه موتوره یا من ولتاژdv رو زیاد کردم( ۷٫۵ ال ۹ ولت )
سلام. ولتاژی رو که به بردتون دادین خوبه ، میتونید به کامپیوتر وصلش کنید و با یه برنامه ی blink ساده تستش کنید. سروو ها رو هم جدا با یه برد دیگه تست کنید.
ببخشید من یه جوی استیک دوتایی از دسته بازی در آوردم این پایه هارو داره
GND
VCC
K12
K11
P1
P2
P3
P4
راهنماییم کننین لطفا چون م خواهم با هاش ماشین کنترلی بسازم
با سلام
کاربر گرامی میبایست دیتاشیت ماژول جوی استیک را با این مورد مطالبقت دهید. لازم است بدانید که کالای مورد استفاده شما در اجرا ممکن است کمی شما را دچار سردرگمی کند. بنابراین پیشنهاد میشود از ماژول جوی استیک آماده استفاده بفرمایید.
سلام
موقع کامپایل کردن این ارور رو میده:
exit status 1
‘Xservo’ was not declared in this scope
با سلام
به جای xservo در کدها myservo جایگزین کنید. همجنین کد اصلاح شد و میتوانید مجددا کپی کنید.
سلام آیا میتوان به جای پین ۰ از پین دیگه ای استفاده کرد
با سلام
بله در آردوینو UNO از هر ۵ پایه میتوانید استفاده کنید و بایستی در کدها تغییرات را اعمال کنید.