Yazılardaki ürünleri komponentci.net'te inceleyebilir, hemen sipariş verebilirsiniz.komponentci.net →
KomponentciBlog Mağaza
Blog  ›  Robotik

Joystick Modülü Arduino Bağlantısı: VRx, VRy, SW

Joystick Modülü Arduino Bağlantısı: VRx, VRy, SW
Kısa cevap

Analog joystick modülü Arduino'ya beş kabloyla bağlanır: GND GND'ye, +5V 5V'a, VRx A0'a, VRy A1'e ve SW bir dijital pine. VRx ve VRy 0–1023 arasında değer verir, kol ortadayken değer yaklaşık 512 civarındadır. Ortadaki küçük oynamaları yok saymak için kodda bir ölü bölge tanımlanır.

Robot araç sürmek, kamera başlığını çevirmek ya da bir menüde gezinmek için en sezgisel kontrol yöntemi joysticktir. Arduino projelerinde kullanılan küçük analog joystick modülü, oyun kumandalarındaki başparmak çubuğunun aynısıdır ve iki eksende konum bilgisi ile bir buton sunar. Bu yazıda modülün pinlerini, Arduino bağlantısını, okuma kodunu ve ölü bölge ayarını adım adım anlatıyoruz.

Joystick modülü nedir?

Joystick modülü, birbirine dik iki potansiyometre ve bir basma butonundan oluşan, kolun X ve Y eksenindeki konumunu analog gerilim olarak veren bir giriş kartıdır. Kol bir yöne itildiğinde ilgili potansiyometrenin orta ucu kayar ve çıkış gerilimi 0V ile besleme gerilimi arasında değişir.

Kol bırakıldığında yaylar onu ortaya geri getirir; bu konumda iki eksenin çıkışı da beslemenin yaklaşık yarısıdır. Kolun tepesine basıldığında ise altındaki buton kapanır. Potansiyometrenin çalışma mantığını potansiyometre nedir yazımızda ayrıntılı anlattık.

Joystick modülünün pinleri ne işe yarar?

Joystick modülünde beş pin bulunur: iki besleme pini, iki analog eksen çıkışı ve bir buton çıkışı. Pin adları kartın üzerinde yazar; sıralama üreticiye göre değişebilir.

PinGöreviArduino Uno bağlantısıOkunan değer
GNDToprakGND–
+5VBesleme5V–
VRxX ekseni (sağ-sol)A00–1023, ortada yaklaşık 512
VRyY ekseni (ileri-geri)A10–1023, ortada yaklaşık 512
SWButonD2Basılınca LOW

SW pini, buton basıldığında GND'ye bağlanır; bırakıldığında ise boşta kalır. Bu yüzden Arduino tarafında dahili pull-up direnci açılmalıdır. Aksi hâlde pin rastgele değerler okur.

Joystick modülü Arduino'ya nasıl bağlanır?

Joystick modülü Arduino Uno'ya GND–GND, +5V–5V, VRx–A0, VRy–A1 ve SW–D2 olarak bağlanır. Modülün erkek pinleri için erkek-dişi jumper kablo kullanmak en pratik yoldur.

  1. Arduino'yu USB'den ayırın.
  2. Modülün GND pinini Arduino'nun GND pinine, +5V pinini 5V pinine bağlayın.
  3. VRx pinini A0'a, VRy pinini A1'e bağlayın.
  4. SW pinini D2'ye bağlayın.
  5. Arduino'yu bağlayıp aşağıdaki kodu yükleyin ve Seri Monitör'ü 9600 baud ile açın.
  6. Kolu dört yöne itip değerlerin hangi yönde arttığını not edin; montaj yönünüze göre eksenleri kodda ters çevirebilirsiniz.
Joystick modülü Arduino Uno bağlantı şeması: GND GND pinine, +5V 5V pinine, VRx A0 pinine, VRy A1 pinine, SW D2 pinine; eksen değerleri 0–1023, ortada yaklaşık 512, ±40 ölü bölge
VRx A0'a, VRy A1'e, SW D2'ye bağlanır. Orta noktanın ±40 çevresi ölü bölge olarak 0 kabul edilir.

Arduino XY joystick modülü bu bağlantı için tipik karttır. Kablo uğraşmadan çalışmak isterseniz Arduino joystick shield doğrudan Uno'nun üzerine takılır ve ek butonlar sunar; shield'in pin atamalarını ürün sayfasından kontrol edin.

Joystick değeri nasıl okunur?

Joystick değeri, iki eksen için analogRead(), buton için digitalRead() ile okunur. Aşağıdaki kod ham değerleri ve butonun durumunu Seri Monitör'e yazdırır.

const int PIN_X = A0;
const int PIN_Y = A1;
const int PIN_SW = 2;

void setup() {
  Serial.begin(9600);
  pinMode(PIN_SW, INPUT_PULLUP);
}

void loop() {
  int x = analogRead(PIN_X);
  int y = analogRead(PIN_Y);
  bool basili = digitalRead(PIN_SW) == LOW;
  Serial.print("X: "); Serial.print(x);
  Serial.print("  Y: "); Serial.print(y);
  Serial.print("  Buton: "); Serial.println(basili ? "basili" : "-");
  delay(100);
}

Kol ortadayken değerin tam 512 olmadığını göreceksiniz; 490 ile 540 arasında bir değer olağandır ve her modülde farklıdır. Bu yüzden orta noktayı sabit bir sayı olarak yazmak yerine, kart açılırken birkaç okuma yapıp ortalamasını orta nokta olarak kaydetmek daha doğru sonuç verir.

Ölü bölge nedir ve nasıl ayarlanır?

Ölü bölge (dead zone), orta noktanın çevresinde, okunan değer değişse bile hareket yokmuş gibi davranılan küçük bir aralıktır; kol bırakıldığında motorun ya da servonun titremesini önler. Potansiyometreler ve yaylar kolu her seferinde aynı noktaya getirmez, analog okuma da birkaç birim oynar.

Uygulamada orta noktadan sapma belirli bir eşiğin altındaysa sonuç sıfır kabul edilir. Eşik genellikle 20 ile 60 arasında seçilir; modülünüzün kol bırakıldığındaki oynamasına bakarak ayarlayın. Aşağıdaki fonksiyon sapmayı ölü bölge dışında −100 ile +100 arasına çevirir.

const int OLU_BOLGE = 40;

int eksen(int ham, int orta) {
  int fark = ham - orta;
  if (abs(fark) < OLU_BOLGE) return 0;
  if (fark > 0) return map(fark, OLU_BOLGE, 1023 - orta, 0, 100);
  return map(fark, -orta, -OLU_BOLGE, -100, 0);
}

Ölü bölge çok küçük seçilirse kol bırakıldığında araç yavaşça kayar; çok büyük seçilirse küçük hareketler algılanmaz ve kontrol kaba hissettirir. Robot araçlarda bu değeri motor sürücüsüne gönderilecek PWM değerine çevirebilirsiniz.

Joystick ile servo motor nasıl kontrol edilir?

Joystick ile servo kontrolünde eksen değeri map() fonksiyonuyla 0–1023 aralığından 0–180 derece aralığına çevrilir ve servoya yazılır. SG90 mikro servo motor sinyal pinini D9'a bağlayıp X eksenini kullanarak basit bir yön kontrolü yapabilirsiniz.

#include <Servo.h>
Servo servo;

void setup() {
  servo.attach(9);
}

void loop() {
  int x = analogRead(A0);
  servo.write(map(x, 0, 1023, 0, 180));
  delay(15);
}

İki servo ve iki eksenle pan-tilt kamera başlığı ya da basit bir robot kol kurabilirsiniz. Servo bağlantısı ve besleme konusunu servo motor nedir yazımızda anlattık. Birden fazla servoyu Arduino'nun 5V pininden değil, ayrı bir 5V kaynaktan besleyin ve GND'leri birleştirin. Daha dayanıklı, panel tipi joystickler için CH-109B 2 eksen butonlu joystick gibi modellere ve mağazamızın Arduino aksesuarları kategorisine bakabilirsiniz.

Sık sorulan sorular

Joystick modülü ESP32 ile kullanılır mı?

Evet, joystick modülü ESP32 ile kullanılabilir, ancak modülü 5V yerine 3,3V ile beslemelisiniz. ESP32'nin analog girişleri 3,3V'tan yüksek gerilimi kaldıramaz; 5V beslenen bir joystick kol uçtayken 5V verir. VRx ve VRy için ADC1 grubundaki pinleri (örneğin GPIO34 ve GPIO35) kullanın. ESP32'de okunan değer 0–4095 aralığındadır, bu yüzden orta nokta ve ölü bölge buna göre ayarlanır.

Joystick orta değeri neden 512 değil?

Joystick orta değeri, potansiyometrelerin üretim toleransı ve yayların kolu tam merkeze getirmemesi nedeniyle 512'den birkaç on birim sapar. Bu bir arıza değildir. Kart açılırken kol bırakılmış durumdayken birkaç okuma alıp ortalamasını orta nokta olarak kullanın. Ardından ölü bölge uygulayarak bu küçük farkın motor ya da servo hareketine dönüşmesini engelleyin.

SW butonu neden sürekli basılı görünüyor?

SW pini sürekli basılı ya da kararsız görünüyorsa büyük olasılıkla dahili pull-up açılmamıştır. pinMode(2, INPUT_PULLUP) satırını ekleyin; böylece buton bırakıldığında pin HIGH, basıldığında LOW okunur. Kod doğruysa kabloyu ve modüldeki SW lehimini kontrol edin. Butonda kısa titreşimler (ark) görürseniz okumalar arasına küçük bir gecikme koyarak basit bir debounce uygulayın.

Joystick ile robot araç nasıl sürülür?

Robot araçta Y ekseni ileri-geri hızı, X ekseni dönüşü belirler; iki değer birleştirilip sol ve sağ motorlara ayrı ayrı gönderilir. Örneğin sol motor için Y + X, sağ motor için Y − X hesaplanır ve sonuç −255 ile +255 arasına sınırlandırılır. Bu değerin işareti yönü, büyüklüğü PWM hızını verir. Motorlar bir motor sürücü kartı üzerinden sürülmelidir.

Özet

  • Joystick modülü iki potansiyometre ve bir butondan oluşur; pinleri GND, +5V, VRx, VRy ve SW'dir.
  • Arduino Uno bağlantısı: GND–GND, +5V–5V, VRx–A0, VRy–A1, SW–D2.
  • SW pini için INPUT_PULLUP kullanılır; buton basılınca LOW okunur.
  • Orta değer 512'den sapabilir; açılışta ölçülen ortalama ve 20–60 arası bir ölü bölge titremeyi önler.
  • ESP32 ile kullanırken modül 3,3V ile beslenir ve değerler 0–4095 aralığında okunur.

Bu yazıdaki ürünler

Diğer yazılar