🕹️ ماژول جویاستیک (Joystick Module (KY-023))
| اسم انگلیسی | Joystick Module (KY-023) |
|---|---|
| در ووکوی (Wokwi) | wokwi-analog-joystick |
| دسته | 🎛️ کلید، دکمه و ورودی |
| در شبیهساز فارسی | مود ساده (بدون کد) و مود آردوینو · رایگان |
ماژول جویاستیک (Joystick Module، مدل رایج KY-023) دو پتانسیومتر عمود بر هم و یک دکمه را زیر یک دسته جمع کرده است: یکی چپ و راست را میخواند، یکی بالا و پایین را، و فشار دادن خود دسته دکمه را میزند. با آن ماشین رباتیک، بازوی سروو، بازی مار روی ماتریس LED یا منوی یک نمایشگر را کنترل میکنی.
جویاستیک در ووکوی (Wokwi)
شناسهی این قطعه در ووکوی wokwi-analog-joystick است و پنج پایه دارد: VCC، VERT، HORZ، SEL و GND. هنگام اجرای شبیهسازی دسته را با موس جابهجا میکنی و عددها را در سریال مانیتور میبینی.
{
"version": 1,
"parts": [
{ "type": "wokwi-arduino-uno", "id": "uno", "top": 0, "left": 0 },
{ "type": "wokwi-analog-joystick", "id": "joy1", "top": -150, "left": 120 }
],
"connections": [
[ "joy1:VCC", "uno:5V", "red", [] ],
[ "joy1:GND", "uno:GND.1", "black", [] ],
[ "joy1:HORZ", "uno:A0", "green", [] ],
[ "joy1:VERT", "uno:A1", "blue", [] ],
[ "joy1:SEL", "uno:2", "orange", [] ]
]
}
| پایه در ووکوی | اسم روی ماژول واقعی | کار |
|---|---|---|
| VCC | +5V | تغذیه |
| GND | GND | زمین |
| HORZ | VRx | چپ و راست، ۰ تا ۱۰۲۳ |
| VERT | VRy | بالا و پایین، ۰ تا ۱۰۲۳ |
| SEL | SW | دکمه؛ با فشار، LOW |
در تینکرکد فارسی هم جویاستیک با پایههای GND، VCC، VRX، VRY و SW هست، ولی جزو قطعههای حرفهای اشتراک Plus است؛ مثال آمادهاش کنترل سروو با جویاستیک است.
سیمکشی با آردوینو
| پایهی قطعه | وصل به |
|---|---|
| GND | GND |
| +5V | 5V |
| VRx | A0 |
| VRy | A1 |
| SW | پین 2 (INPUT_PULLUP) |
خروجی هر محور ولتاژی بین ۰ تا ۵ ولت است که analogRead آن را به عدد ۰ تا ۱۰۲۳ تبدیل میکند؛ پس دو پین آنالوگ لازم داری. دکمهی SW با فشار به زمین وصل میشود و روی بیشتر ماژولها مقاومت بالاکش ندارد، پس INPUT_PULLUP را فراموش نکن.
کد نمونه
این کد جهت دسته را به کلمه تبدیل میکند؛ همان چیزی که برای بازی یا منو لازم داری. منطقهی مرده (DEAD) لرزشهای کوچک دور وسط را نادیده میگیرد:
// Joystick to direction words, with a dead zone around the centre.
// Wiring: VRx/HORZ -> A0, VRy/VERT -> A1, SW/SEL -> pin 2, VCC -> 5V, GND -> GND
const int PIN_X = A0;
const int PIN_Y = A1;
const int PIN_SW = 2;
const int CENTER = 512;
const int DEAD = 120; // ignore small moves around the middle
String lastDir = "";
void setup() {
pinMode(PIN_SW, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
int dx = analogRead(PIN_X) - CENTER;
int dy = analogRead(PIN_Y) - CENTER;
String dir = "CENTER";
if (abs(dx) > DEAD || abs(dy) > DEAD) {
if (abs(dx) > abs(dy)) dir = (dx > 0) ? "RIGHT" : "LEFT";
else dir = (dy > 0) ? "UP" : "DOWN";
}
if (dir != lastDir) { // print only when the direction changes
lastDir = dir;
Serial.println(dir);
}
digitalWrite(LED_BUILTIN, digitalRead(PIN_SW) == LOW); // LED while pressed
delay(30);
}
اگر در ووکوی یا روی ماژول خودت بالا و پایین (یا چپ و راست) برعکس بود، فقط علامت مقایسه را در همان خط عوض کن؛ جهت محورها در ماژولهای مختلف یکی نیست.
اگر بهجای چهار جهت، مقدار پیوسته میخواهی (مثلاً زاویهی سروو یا سرعت موتور)، عدد محور را مستقیم با map(analogRead(A0), 0, 1023, 0, 180) به بازهی دلخواه ببر. برای اینکه دستهی رها هم دقیقاً وسط بازه بماند، همان منطقهی مرده را قبل از map اعمال کن و مقدارهای نزدیک ۵۱۲ را خود ۵۱۲ بگیر.
اشتباههای رایج
- خواندن محور با digitalRead: محورها آنالوگاند؛
digitalReadفقط صفر و یک میدهد و همهی جزئیات حرکت گم میشود. - منطقهی مرده نگذاشتن: ربات وقتی دسته رها است آرام میخزد، چون وسط دقیقاً ۵۱۲ نیست.
- VCC روی 3.3V در آردوینوی ۵ ولتی: عدد وسط حدود ۳۴۰ میشود، نه ۵۱۲. روی بردهای ۳٫۳ ولتی مثل ESP32 هم بازه فرق دارد؛ analogRead در ESP32 را ببین.
- SW بدون مقاومت بالاکش: دکمه همیشه «فشرده» یا تصادفی خوانده میشود.
آموزشهای مرتبط
- پتانسیومتر، همان قطعهای که داخل هر محور جویاستیک است
- سروو موتور، رایجترین چیزی که با جویاستیک کنترل میشود
- ۴۰ مدار آردوینو برای ووکوی
- مدارهای رزبری پای پیکو، با خواندن جویاستیک روی دو ADC
سؤالهای رایج
وقتی جویاستیک رها است چه عددی میخوانم؟
حدود ۵۱۲ روی هر دو محور، چون هر محور یک پتانسیومتر است که در وسط ایستاده. در قطعهی واقعی این عدد کمی بالا و پایین میرود، برای همین در کد یک منطقهی مرده دور وسط میگذاریم.
پایههای VERT و HORZ ووکوی همان VRx و VRy ماژول واقعیاند؟
بله. HORZ محور چپ و راست است (همان VRx)، VERT محور بالا و پایین (VRy) و SEL همان دکمهی SW است که با فشار دادن دسته زده میشود.
جویاستیک در تینکرکد فارسی رایگان است؟
در ووکوی رایگان است. در تینکرکد فارسی جویاستیک جزو قطعههای حرفهای اشتراک Plus است.