-->

  • Arduino - Joystick ile Servo Motor Sürme

        Bu yazımda joystick kullanımından bahsetmek istiyorum sizlere. Kullanımı oldukça basit. Kullanacağım modül siyah kartlı  KY-023 joystick modülü. Üzerinde 2 adet potansiyometre ve de 1 adet buton var. 5V ile çalışıyor.

        Ben uygulamayı LCD Keypad Shield ile yaptığım için fritzingde hem LCD'siz hem LCD li olanı çizmek istedim.






        Modülden bahsetmek gerekirse, modülün 5 adet pini var. GND ve 5V pinlerinin dışında, VRx pini var ki bu pin X düzlemindeki konumunu , VRy pini Y düzlemindeki konumunu bize gösterecek. SW pini ile de buton durumunu okuyacağız.



        Uygulamayı açısal konumunu X ve Y düzlemindeki konuma göre alan iki servo motor ve buton durumuna göre yanıp sönen led ile yapacağız. 

        SW pinini arduinoya direkt bağladım o yüzden basılı olduğunda "0" basılı olmadığında "1" değeri döndürecek. Siz isterseniz pull-down direnci ile girebilirsiniz.

    Kodlar;



     1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    #include <LiquidCrystal.h>
    #include <Servo.h>
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

    Servo servo_x,servo_y; // 2 Adet Servo Motoru Tanımlıyoruz

    #define xPin A3 // VRx Pin
    #define yPin A2 // VRy Pin
    #define butonPin A1 // SW Pin
    #define led 1

    int x_angle=0; // Okunacak X Konum Değeri
    int y_angle=0; // Okunacak Y Konum Değeri
    int xPos = 0; // Okunan X değerine göre servo_x'in Açısı
    int yPos = 0; // Okunan Y değerine göre servo_y'nin Açısı
    int butonDurum = 0;

    void setup() {

    pinMode(butonPin, INPUT_PULLUP);
    pinMode(led,OUTPUT);
    lcd.begin(16, 2);
    servo_x.attach(3);
    servo_y.attach(2);

    }
    void loop()
    {
    lcd.clear();
    xPos = analogRead(xPin); // X konumunu okuduk
    yPos = analogRead(yPin); // Y Konumunu okuduk
    butonDurum = digitalRead(butonPin); // Buton durumunu okuduk

    if(butonDurum==0)
    {
    digitalWrite(led,HIGH); // Buton basılı ise yanacak
    }
    else
    {
    digitalWrite(led,LOW); // Buton basılı değil ise sönecek
    }

    /*
    Okunan X ve Y konumunun ADC değerini (0-1023) 0-180 aralığına indirgedik.
    Servo Motoru okunan 0-1023 değerine göre 0-180 derece arasında konuma almasını sağlayacağız.
    map komutunun başına (int) ibaresi girdik çünkü servo.write() komutu integer değerle çalışır.
    Float değer olursa integer bir sayıya çevirmiş olduk.
    */
    x_angle=(int)map(xPos,0,1023,0,180);
    y_angle=(int)map(yPos,0,1023,0,180);

    lcd.print("X: ");
    lcd.print(x_angle); // X açısını LCD'de yazdırdık
    lcd.setCursor(0,1);
    lcd.print("Y: ");
    lcd.print(y_angle); // Y açısını LCD'de yazdırdık
    lcd.print(" Button:");
    lcd.print(butonDurum); // Buton durumunu LCD'de yazdırdık.

    servo_x.write(x_angle); // Servoyu sürdük
    servo_y.write(y_angle); // Servoyu sürdük

    delay(125);
    }


    Uygulamamızın videosu;





  • YOUTUBE KANALIMI ZİYARET EDİN

    Youtube'da seslendirdiğim şiirleri paylaşıyorum. Youtube kanalıma da abone olursanız sevirim.

    Video Of Day

    ADRES

    Kağıthane/İstanbul

    EMAIL

    omersalihgul@gmail.com
    omersalihgul@hotmail.com