• Forumu şuan da Ziyaretçi olarak görüntülüyorsunuz. Forum ziyaretçileri tüm konu ve bağlantıları görüntüleyemez ve kaynaklara erişimi yoktur. Eğer üye iseniz buradan üye girişi yapın ya da burayı tıklayarak şimdi üye olun.
  • Ubden® Topluluk Projelerine, Aracılığınızla Destek Vermektedir.

    Topluluk projelerine katkı yapmak ve topluğumuza ulaşan genç girişimcilere destek olmak için Buradaki  bağlantıdan işlem kanallarına ulaşabilirsiniz.

    Desteklerinizle 9.000 kişilik bir ekosistem olduk ve büyümeye devam ediyoruz. Desteğiniz için teşekkürler.

Arduino ve Joystick ile Servo Motor Kontrolü – 2

Lukenin

Acemi
Üye
3 Şub 2023
7
6
KrediPara
5KP

Servo Motor ve Joystick – Bölüm 2​


Daha önceki yazımızda servo motorların çalışma prensibini ele almıştık. Bu bölümde ise Joystick – Servo Motor – Arduino üçlüsünü bir araya getirerek, analog kontrol mantığını daha yakından inceleyeceğiz.


Joystick Nedir?​


Joystick (Türkçede “eğlence çubuğu” veya “yönetim kolu” olarak da bilinir), mekanik hareketleri elektriksel sinyallere dönüştüren bir kontrol elemanıdır. Günümüzde oldukça yaygın olsa da, joystick’in geçmişi bilgisayar tarihinin erken dönemlerine kadar uzanır.

Eskiden Commodore 64 veya VIC-20 gibi ev tipi bilgisayarlar satın alındığında yanında joystick de alınırdı. Hatta joystick’ler, bilgisayar faresinden (mouse) bile önce yaygın olarak kullanılmıştır. Endüstriyel alanda ise joystick kullanımı çok daha eskiye dayanır; vinç sistemlerinden gemi kontrol mekanizmalarına kadar geniş bir kullanım alanı vardır. Günümüzde bazı büyük feribotlarda dümen yerine joystick kullanıldığına bile rastlanmaktadır.


Joystick Türleri​


Joystick’ler genel olarak iki gruba ayrılır:

1. Dijital Joystick​

  • 4 yön (yukarı, aşağı, sağ, sol)
  • 1 adet buton (ateşleme)
  • Toplamda 5 temel giriş

Bu tip joystick’ler eski bilgisayarlarda ve oyun konsollarında yaygındı.

2. Analog Joystick​

  • X ve Y eksenlerinde hassas hareket algılar
  • Sürekli veri üretir (sadece yön değil, miktar da ölçülür)
  • Günümüzde Arduino ve robotik projelerde kullanılan tiptir

Bizim bu projede kullanacağımız joystick türü analog joystick’tir.


Analog Joystick Çalışma Mantığı​


Analog joystick aslında oldukça basit bir prensiple çalışır. İçerisinde:

  • 2 adet potansiyometre (ayarlı direnç) bulunur
    • Biri X ekseni (sağ-sol hareket)
    • Diğeri Y ekseni (yukarı-aşağı hareket)

Bu potansiyometreler mekanik olarak birbirine bağlıdır. Joystick hareket ettirildiğinde:

  • X ve Y yönlerine bağlı olarak direnç değerleri değişir
  • Bu değişim, voltaj değişimine dönüşür

Voltaj Üretimi Nasıl Olur?​


Potansiyometrelerin uçları şu şekilde bağlanır:

  • Bir uç → +5V
  • Diğer uç → GND (0V)
  • Orta uç (wiper) → çıkış sinyali

Bu durumda:

  • Joystick ortadayken → yaklaşık 2.5V
  • Bir yöne itilince → 5V’a yaklaşır
  • Ters yöne itilince → 0V’a yaklaşır

Yani joystick pozisyonu ile voltaj arasında doğrudan bir ilişki vardır.


Arduino ile Veri Okuma​


Joystick’ten gelen bu analog voltaj değerleri, Arduino’nun ADC (Analog-Dijital Çevirici) pinleri tarafından okunur.

Arduino:

  • 0V → 0
  • 5V → 1023

şeklinde bir dijital değere çevirir.

Bu sayede joystick’in konumu sayısal olarak elde edilir ve servo motor gibi çıkış elemanları kontrol edilebilir.


Servo Motor ile İlişkilendirme​


Servo motorlar belirli açılar arasında hareket edebilen hassas motorlardır (genellikle 0°–180°).

Joystick’ten gelen değerler:

  • X ekseni → servo açısına dönüştürülebilir
  • Örneğin:
    • 0 → 0°
    • 512 → 90°
    • 1023 → 180°

Bu sayede joystick’i hareket ettirdikçe servo motor aynı oranda hareket eder.

arduino-ve-joystick-ile-servo-motor-kontrolu-bolum-2-gorsel-001


Ancak günümüzde kullanılan joystick potansiyometreleri özel olarak üretilmektedir ve sadece sağdaki şekilde görüldüğü gibi bir dirençli bölge oluşturulur. Böylece hareketimiz +5V ve 0V arasında bir değer alır. Dolayısı ile Arduino AD değeri 0 ila 1023 arası bir değer verecektir. Joystick normal halinde orta pozisyonda olacağı için alacağımız değerler yaklaşık 512 civarı olmasını bekleyebiliriz. Tabii burada içindeki direnç değerlerinin toleransları, direncin fiziksel montajı ve lineer yapısı burada farklılık gösterebilir. Bu durumu test etmek için
Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
ve aşağıda görülen joystick pimlerini Arduino’ya bağlıyoruz.

GND Arduino GND ye, 5V Arduino 5V’ta Rx çıkışı Arduino AD0 girişine, Ry çıkışını Arduino AD1 girişine bağlıyoruz. Joystickerde daha önce bahsettiğim buton SW bağlantısı bulunur onu da test için dijital pin 2 ye bağlayalım.

arduino-ve-joystick-ile-servo-motor-kontrolu-bolum-2-gorsel-002


Şimdi Arduino IDE aşağıdaki kısa programı yazalım.


// Arduino pin numaraları

const int SW_pin = 2; // dijital pin 2 ye SW bağladık

const int X_pin = 0; // analog pin 0 Rx e bağladık

const int Y_pin = 1; // analog pin 1 Ry ye bağladık



void setup() {

PinMode(SW_pin, input);
// Dijital pini giriş olarak tanımladık

digitalWrite(SW_pin, HIGH); // buton basılı değil iken “1” yap

Serial.begin(115200); // seriel çıktı hazırlığı

}



void loop() {

Serial.print(“Buton: “);

Serial.print(digitalRead(SW_pin));
// buton durumu

Serial.print(\n); // alt satıra geç

Serial.print(X-düzlem: “;

Serial.print(analogRead(X_pin));
// x değerini oku ve yaz

Serial.print(\n);

Serial.print(Y-düzlem: ”);

Serial.print(analogRead(Y_pin));
// y değerini oku ve yaz

Serial.print(\n\n); // alt satıra geç ve bir satır boşluk ver

delay(250); //1/4 saniye bekle

}


Kod yazımından sonra test ettiğimizde Joysticki oynatınca bize seriport terminal ekranında okunan değerleri verecektir. Bir önceki yazımda Servo motorlarına değinmiştik. Bu bağlantıların devamı olarak aşağıdaki bağlantıyı yapıp Programlamamıza bakalım. Servoları ayrı bir güç kaynağından beslememizin sebebi, daha önceki yazımda da belirttiğim gibi 2 servonun yük bindirildiği zaman çekeceği akım Arduino’nun besleyebileceği akımdan yüksek olabilir.

arduino-ve-joystick-ile-servo-motor-kontrolu-bolum-2-gorsel-003


Bu bağlantı yapıldıktan sonra aşağıdaki program ile test edelim.
[ICODE][/ICODE]
#include <Servo.h>

Servo servo1, servo2; //
servoyu kontrol için yeni bir servo objesi yarat

const int X_pin = 0; // analog pin 0 Rx e bağladık

const int Y_pin = 1; // analog pin 1 Ry ye bağladık

int poz1 = 0; // servo1 pozisyonunu kontrol için değişken deklarasyonu

int poz2 =0;

int x_deger = 0; // x ve y analog değerler

int y_deger = 0;

void setup()

{

servo1.attach(9); //
servo kontrol pimi arduinonun 9’uncu pimine bağlıyoruz

servo2.attach(8); // 2.servo pimini de arduinonun 8’inci pimine bağlıyoruz

}

void loop()

{

x_deger = analogRead(X_pin); // analog değerler 0-1023 arası servoya yazılacak

y_deger = analogRead(Y_pin); // değer 0-180 arası burada “map”komutunu kullanacağız

poz1 = map(x_deger, 0, 1023, 0,180);

poz2 = map(y_deger, 0,1023, 0,180);

servo1.write(poz1); //
Servoya pimine bu pozisyonu yazıyoruz

servo2.write(poz2); // Servoya pimine bu pozisyonu yazıyoruz


delay(50); // yine servonun bunu gerçekleştirmesi için zaman veriyoruz.

}

Map
fonksiyonu 5 parametre alıyor ve bunlar negatif değerler de olabiliyor. Sentaksı şu şekilde

map(long map_edilecek_değer, long gelen_min, long gelen_max, long cikan_min, long cikan_max)

Hani yukarıda bahsetmiştik toleranslar vs. yine yukarıdaki test programı ile Joystick değerleri farklı olabilir örneğin bir joystickte aldığımız en düşük değer 95 en yüksek değer de 997 olabilir. Servo en düşük değer i 10, en yüksek değeri de 175 olabilir map fonksiyonuna bu değerler yazıldığında tam kontrol sağlanacaktır.

Map kullanılmadan örneğin poz1 için map satıraları nasıl yazılırdı hemen formülü verelim
🙂


poz1=((x_değer – giriş_min)*(cikis_max-cikis_min)/(giriş_max-giris_min))+cikis_min;

Buna göre poz1=((x_deger-0)*(180-0)/(1023-0))+0; gerçekten 0 alıyorsak ve sıfırları kaldırırsak

poz1 = (x_deger*180)/1023;

Son olarak, Joystick ile DC motor kontrolü de yapmak mümkün ancak bunun için PWM kontrollü H-Bridge motor sürücü kullanmak gerekir. H-bridge sürücünün avantajı, motoru hem ileri hem geri çevirebilmesi için gereklidir. Örnek olarak
Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
adresindeki kart kullanılabilir. Bu konuyu başka bir yazımıza bırakalım.

Arduino, Joystick ve SG90 ürünlerini aşağıdaki linklerden temin edebilirsiniz:

Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.


Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.


Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.


Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.




Murat Tanatar

Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
yazısı ilk önce
Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
üzerinde ortaya çıktı.
 
Üst