Arduino ile Joystick Kullanımı

 Joystick Modül Nedir Nasıl Çalışır?

joystick module
        Arduino ile Joystick kullanımı oldukça basittir, bu yazıda joystik modülün devre şemasına çalışma mantığına ve arduino ile nasıl kullanılabileceğine örnek kodla birlikte bakıyor olacağız.

Joystik modül pin tanımları    

Yan tarafa resmini görmekte olduğunuz yakışıklı joystik modülün 5 adet pini bulunmakta:

  • GND ground pini
  • 5V 5v besleme pini
  • VRx Analog çıkış, 0-5V arası X yönündeki değişimi algılamak için
  • VRy Analog çıkış,0-5V arası Y yönündeki değişimi algılamak için
  • SW Digital Çıkış, Joystiğe tıklandığında pini GND ye aktaran butonun çıkış pini

Joystick Modül Yönleri ve Voltajları

joystick modül yönleri ve voltajları



Joystik Modul Nasıl Çalışır?

    Joystick modülde dikey ve yatay yönler için iki adet bir pinleri gnd'ye diğer pinleri 5v bağlı 10K 'lık potansiyometreler bulunur. Bu potansiyometreler birer voltaj bölücü olarak çalışırlar. Voltaj bölücü konusuna hakim değilseniz : Voltaj Bölücü Devresi konusunu okumanızı tavsiye ederim. Bu durumda joystick orta konumdayken, her iki potansiyometre de orta konumda olur ve giriş voltajının yarısı olan 2.5 'u üretirler, potansiyometrelerin kademesi arttıkça çıkıştaki voltajları artar, azaldıkça da çıkış voltajları azalır. Bu analog çıkışları mikrodenetleyicinin analog pinlerine bağlayıp ADC dönüşümü ile okumak suretiyle işlem yapılabilir. Okunan ADC değerine göre joystiğin hangi yöne ne kadar saptırıldığı anlaşılır.
    Modül üzerindeki buton GND'yi anahtarlamak için kullanılmıştır, bu nedenle butona basıldığında SW pininde 0V oluşur, normalde floating yani boştadır, devre şeması üzerindeki R1 direnci yerine 0805 kılıfında 10K bir direnç bağlayarak pull-up yapabilirsiniz, ya da mikrodenetleyicinizin butonu bağlayacağınız pinini internal olarak pull-up ayarlamalısınız.

Joystik Modülün Devre Şeması

Joystick Modül Devre Şeması





Joystik Modül Arduino Bağlantısı

Joystick Pini Arduino Uno Pini
GNDGND
5V5V
VRxAnalog Pin
VRyAnalog Pin
SWDigital Pin

VRx ve VRy pinlerini analog pinlerden sizin için uygun olanlara bağlayabilirsiniz
SW pini joystik üzerindeki butonu kullanmak için dijital pinlerden sizin için uygun olan birine bağlayabilirsiniz.


Arduino ile Joystik Örnek Kod


/*
   Arduino ile Joystick Kullanımı
   Örnek Kod

   Hakan ÖZMEN (hakkanr@gmail.com)
   01-12-2022

   https://www.devrelerim.com/2022/12/arduino-ile-joystick-kullanimi.html
*/
#define SWPIN 3
#define VRxPIN A0
#define VRyPIN A1
const char* dirNames[] = {
  "Sol Aşağı",
  "Aşağı",
  "Sağ Yukarı",
  "",
  "Sol",
  "OrtaKonum",
  "Sağ",
  "",
  "Sol Yukarı",
  "Yukarı",
  "Sağ Yukarı"
};
enum directions
{
  LeftDown,
  Down,
  RightDown,
  NC,
  Left,
  Center,
  Right,
  NC2,
  LeftUp,
  Up,
  RightUp
};
directions JoyDirection();
void setup() {
  Serial.begin(115200);
  pinMode(SWPIN, INPUT_PULLUP);

}
directions JoyDir;
void loop() {
  JoyDir = JoyDirection();
  Serial.println(dirNames[JoyDir]);
  if (buttonPressed()) /* butona basınca çalışacak kod*/
  {
    Serial.println("Butona basıldı!");
  }
    
  switch (JoyDir)
  {
    case LeftDown:
      /* joystick sol aşağı konumdayken çalışacak kod*/
      break;
    case Down:
      /* joystick aşağı konumdayken çalışacak kod */
      break;
      /*
       * tüm yönler için yazabilirsiniz
         ...
      */
  }
  delay(1000);
}

int adcX, adcY;
directions JoyDirection()
{
  adcX = analogRead(VRxPIN);
  adcY = analogRead(VRyPIN);
  int xPos = map(adcX, 0, 1023, 0, 3);
  int yPos = map(adcY, 0, 1023, 0, 3);
  directions dir = (directions)((xPos << 2) | (yPos));
  return dir;
}
bool buttonPressed()
{
  return (digitalRead(SWPIN) == LOW ? true : false);
}



Hiç yorum yok:

Yorum Gönder