PS2 XY Joystick Module คืออะไร? วิธีใช้งานกับ Arduino
A302 PS2 XY Joystick Module คือ โมดูลจอยสติ๊กแบบอนาล็อกที่ทำงานคล้ายกับจอยเกม PlayStation 2 (PS2) ประกอบด้วยแกนควบคุม 2 แกน (แกน X และแกน Y) สำหรับตรวจจับการเคลื่อนที่ในแนว ซ้าย-ขวา และ ขึ้น-ลง นอกจากนี้ยังมีปุ่มกด (Push Button) ที่สามารถใช้งานได้เมื่อกดแกนจอยสติ๊กลงไปตรงๆ
ด้วยความสามารถในการให้ค่าได้ทั้งแบบอนาล็อก (ตำแหน่ง) และดิจิทัล (ปุ่มกด) ทำให้มันเป็นอุปกรณ์อินพุตที่ยอดเยี่ยมสำหรับควบคุมหุ่นยนต์, แขนกล, กล้อง, รถบังคับ, หรือสร้างเกม DIY ต่างๆ
สเปคของ Joystick Module
แรงดันไฟฟ้าใช้งาน |
3.3V – 5V |
อินพุตแกน X และ Y |
ให้สัญญาณเอาต์พุตแบบ Analog (0 - 1023 บน Arduino) |
ปุ่มกดกลาง (SW) |
ให้สัญญาณเอาต์พุตแบบ Digital (ส่งค่า LOW เมื่อถูกกด) |
ขาใช้งาน |
5 ขา (GND, 5V, VRx, VRy, SW) |
ขนาดโดยรวม |
ประมาณ 34 × 26 มม. |
การใช้งานกับ Arduino
✅ การต่อสาย
ขาบนโมดูล |
ต่อกับขาบน Arduino UNO |
หน้าที่ |
GND |
GND |
กราวด์ |
VCC (5V) |
5V |
ไฟเลี้ยง |
VRx |
A0 |
สัญญาณอนาล็อกแกน X |
VRy |
A1 |
สัญญาณอนาล็อกแกน Y |
SW |
D2 |
สัญญาณดิจิทัลของปุ่มกด |
✅ ตัวอย่างโค้ด Arduino
โค้ดนี้จะอ่านค่าจากแกน X, Y และปุ่มกด แล้วแสดงผลทาง Serial Monitor
// กำหนดขาที่เชื่อมต่อ
const int VRxPin = A0; // แกน X
const int VRyPin = A1; // แกน Y
const int SWPin = 2; // ปุ่มกด (Switch)
void setup() {
Serial.begin(9600);
// กำหนดให้ขา SW เป็น INPUT และเปิดใช้งาน Pull-up Resistor ภายใน
// เพื่อให้สถานะปกติเป็น HIGH และเป็น LOW เมื่อถูกกด
pinMode(SWPin, INPUT_PULLUP);
}
void loop() {
// อ่านค่าอนาลอกจากแกน X และ Y
int xPosition = analogRead(VRxPin);
int yPosition = analogRead(VRyPin);
// อ่านค่าดิจิทัลจากปุ่มกด
int buttonState = digitalRead(SWPin);
// แสดงผลค่าที่อ่านได้
Serial.print("X: ");
Serial.print(xPosition);
Serial.print(" | Y: ");
Serial.print(yPosition);
Serial.print(" | Button: ");
Serial.println(buttonState == LOW ? "Pressed" : "Not Pressed");
delay(200); // หน่วงเวลาเล็กน้อย
}
หลักการอ่านค่าจากโค้ด
-
แกน X (VRx) และ Y (VRy): ให้ค่าอนาล็อกในช่วง 0–1023 โดยตำแหน่งกลางจะอยู่ประมาณ 512 เมื่อโยกไปสุดด้านหนึ่ง ค่าจะเข้าใกล้ 0 และอีกด้านจะเข้าใกล้ 1023
-
ปุ่มกด (SW): เมื่อปุ่มถูกกด จะให้ค่าเป็น LOW (0) และเมื่อปล่อยจะเป็น HIGH (1) (เนื่องจากเราใช้ `INPUT_PULLUP`)
💡 การประยุกต์ใช้งาน
โปรเจกต์ |
การใช้งาน Joystick |
รถบังคับไร้สาย |
ใช้ค่า X/Y ควบคุมทิศทางและความเร็วของมอเตอร์ล้อซ้าย-ขวา |
แขนกล/หุ่นยนต์ |
ควบคุมการเคลื่อนไหวของ Servo Motor หลายๆ ตัวได้อย่างละเอียดและเป็นธรรมชาติ |
กล้องแพน-ทิลท์ (Pan-Tilt) |
ใช้โยกจอยสติ๊กเพื่อสั่งให้กล้องหันซ้าย-ขวา และก้ม-เงย |
เกม DIY |
สร้างเกมง่ายๆ บนจอ OLED หรือ LED Matrix โดยใช้จอยเป็นตัวควบคุม |
เมนูควบคุม |
ใช้เลื่อนเคอร์เซอร์ขึ้น-ลง-ซ้าย-ขวา และใช้ปุ่มกดเพื่อ "ยืนยัน" การเลือกเมนูบนจอ LCD |
ข้อดีและข้อควรระวัง
✅ ข้อดี
-
ใช้งานง่ายมาก เพียงต่อสายไม่กี่เส้นและอ่านค่าได้ทันที
-
ให้สัญญาณครบถ้วน ได้ทั้งค่าตำแหน่งแบบอนาล็อก 2 แกน และค่าปุ่มกดแบบดิจิทัล
-
ราคาถูกและทนทาน เหมาะสำหรับโปรเจกต์ต้นแบบและงานอดิเรก
-
เข้ากันได้กับหลายบอร์ด เช่น Arduino, ESP32, Raspberry Pi
⚠️ ข้อควรระวัง
- ควรใช้งานด้วยความนุ่มนวล ไม่กระชากหรือกดแรงเกินไป เพราะกลไกภายในอาจเสียหายได้
- หากใช้กับบอร์ดที่ทำงานบน Logic 3.3V (เช่น ESP32, Raspberry Pi) ควรจ่ายไฟ VCC ให้โมดูลจากขา 3.3V ของบอร์ดนั้นๆ เพื่อความเข้ากันได้ของสัญญาณ