Joystick Nedir?
Joystick modülü, içerisinde iki eksende hareket edebilen iki potansiyometre bulunan tümleşik bir modüldür. Bu iki potansiyometrenin hareketi ile 2 eksende bir hareket elde edilir. Bu X ve Y ekseninde elde edilen hareket sonucunda potansiyometrelerden okunan değerler led yakma, motor kontrolü, uzaktan kumandalı araba kontrolü vb bir çok arduino projesinde kullanılabilir.

arduino-joystick-x-y-eksen-hareketi
Joystick modülünün X ve Y eksenleri yukarıdaki resimdeki gibidir. Ayrıca joystick modülünün bir kenarında bir adet buton butunmaktadır. Bu buton joystick modülüne üstten bastığınızda 0 değerini, basılmadığında ise 1 değerini üretir. Bu buton Pullup olduğu için normal butonların tersine bir çalışma mantığı vardır.
Joystick’ten Analog Değerleri Okuma
Kumanda kolunun fiziksel konumunu okumak için, bir potansiyometrenin direncindeki değişikliği ölçmemiz gerekir. Bu değişiklik ADC kullanılarak bir Arduino analog pini tarafından okunabilir. Arduino kartı 10 bitlik bir ADC çözünürlüğüne sahip olduğundan, her analog kanaldaki (eksen) değerler 0 ile 1023 arasında değişebilir. Bu nedenle, çubuk X ekseninde bir uçtan diğer uca hareket ettirilirse, X değerleri değişecektir. 0 ile 1023 arasında benzer bir değer hareketi de Y ekseni boyunca hareket ettirildiğinde gerçekleşir. Kumanda kolu orta konumda kaldığında değer 512 civarındadır. Aşağıdaki grafik X ve Y yönlerini gösterir ve ayrıca joystick çeşitli yönlere itildiğinde çıkışların nasıl tepki vereceğine dair bilgi edinmenizi sağlar.

Arduino ile Joystick Bağlantısı Nasıl Yapılır?
Joystick modülünde 5 adet çıkış pini bulunmaktadır. Bunlar sırasıyla; Gnd, 5V, VRx, VRy ve SW pinleridir. Bu pinlerin arduino bağlantısı aşağıdaki resimdeki gibi yapılmalıdır.


Örnek:
2 eksen XY Joystick Modül ile 2 adet servo motoru kontrol edeceğiz. Bağlantı şemamış şu şekilde.

Program Kodlarımız bu şekilde
#include <Servo.h>
const int servo1 = 3; // first servo
const int servo2 = 10; // second servo
const int joyH = 3; // L/R Parallax Thumbstick
const int joyV = 4; // U/D Parallax Thumbstick
int servoVal; // variable to read the value from the analog pin
Servo myservo1; // create servo object to control a servo
Servo myservo2; // create servo object to control a servo
void setup() {
// Servo
myservo1.attach(servo1); // attaches the servo
myservo2.attach(servo2); // attaches the servo
// Inizialize Serial
Serial.begin(9600);
}
void loop(){
// Display Joystick values using the serial monitor
outputJoystick();
// Read the horizontal joystick value (value between 0 and 1023)
servoVal = analogRead(joyH);
servoVal = map(servoVal, 0, 1023, 0, 180); // scale it to use it with the servo (result between 0 and 180)
myservo2.write(servoVal); // sets the servo position according to the scaled value
// Read the horizontal joystick value (value between 0 and 1023)
servoVal = analogRead(joyV);
servoVal = map(servoVal, 0, 1023, 180, 0); // scale it to use it with the servo (result between 70 and 180)
myservo1.write(servoVal); // sets the servo position according to the scaled value
delay(30); // waits for the servo to get there
}
/**
* Display joystick values
*/
void outputJoystick(){
Serial.print(analogRead(joyH));
Serial.print ("---");
Serial.print(analogRead(joyV));
Serial.println ("----------------");
}
Kolay gelsin !
