Arduino ve Joystick ile Servo Motor Kontrolü
Arduino ve Joystick ile Servo Motor Kontrolü
Joystick modülleri, Arduino projelerinde konum kontrolü yapmak için en sık kullanılan giriş elemanlarından biridir. İki eksende (X ve Y) analog veri üreten joystick sayesinde servo motorlar hassas şekilde kontrol edilebilir. Bu uygulama; robot kol, kamera gimbali, pan-tilt sistemleri, uzaktan kumandalı araçlar ve eğitim projelerinde yaygın olarak kullanılmaktadır.
Bu yazıda Arduino, analog joystick modülü ve iki adet servo motor kullanılarak temel bir servo kontrol uygulamasının nasıl gerçekleştirileceği anlatılmaktadır.
Analog Joystick Nasıl Çalışır?
Analog joystick içerisinde birbirine dik yerleştirilmiş iki adet potansiyometre bulunur. Bunlardan biri X eksenini, diğeri ise Y eksenini algılar.
Joystick hareket ettirildiğinde potansiyometrelerin direnç değeri değişir ve buna bağlı olarak çıkış gerilimi değişir.
Genellikle;
- Sol → 0 V’a yaklaşır.
- Sağ → 5 V’a yaklaşır.
- Yukarı → 5 V’a yaklaşır.
- Aşağı → 0 V’a yaklaşır.
- Orta konum → Yaklaşık 2,5 V verir.
Arduino’nun analog girişleri bu gerilimi 0-1023 arasında dijital değere dönüştürür.
Çoğu joystick modülünde ayrıca basmalı bir anahtar (SW) da bulunur. Joystick aşağı doğru bastırıldığında bu buton aktif olur ve dijital giriş olarak kullanılabilir.
Gerekli Malzemeler
Bu proje için aşağıdaki malzemeler yeterlidir.
- Arduino Uno veya Nano
- Analog Joystick Modülü
- 2 adet Servo Motor (SG90 vb.)
- Harici 5 V güç kaynağı (önerilir)
- Breadboard
- Jumper kablolar
Devre Bağlantısı
Joystick bağlantıları:
| Joystick | Arduino |
|---|---|
| VCC | 5V |
| GND | GND |
| VRx | A0 |
| VRy | A1 |
| SW | D2 |
Servo bağlantıları:
| Servo | Arduino |
|---|---|
| Servo 1 Sinyal | D9 |
| Servo 2 Sinyal | D8 |
| VCC | Harici 5V |
| GND | Ortak GND |
Not: Servo motorların beslemesini doğrudan Arduino’dan almak yerine harici bir 5 V güç kaynağı kullanılması tavsiye edilir. Servo motorlar hareket sırasında yüksek akım çekebilir ve Arduino’nun yeniden başlamasına neden olabilir.
Arduino Analog Değerlerini Okuma
Arduino’nun ADC (Analog-Dijital Çevirici) birimi analog girişleri 0 ile 1023 arasında sayısal değerlere dönüştürür.
Joystick orta konumdayken okunacak değer genellikle:
Yaklaşık 512
olacaktır.
Sağa veya yukarı hareket ettirildikçe değer 1023’e yaklaşırken, sola veya aşağı hareket ettirildiğinde 0’a yaklaşır.
Bu değerleri görmek için Arduino IDE’nin Seri Monitörü kullanılabilir.
Servo Motorun Kontrolü
Servo motorlar açı bilgisi ile çalışır.
Arduino Servo kütüphanesinde;
servo.write(90);
komutu servoyu yaklaşık 90° konumuna götürür.
Servo motorlar genellikle;
- 0°
- 90°
- 180°
arasında hareket eder.
Joystickten gelen 0-1023 arası değer doğrudan servo tarafından kullanılamaz. Bunun için değerlerin 0-180 aralığına dönüştürülmesi gerekir.
map() Fonksiyonu
Arduino’da bu işlem için map() fonksiyonu kullanılır.
Fonksiyonun yapısı şöyledir:
map(deger, giris_min, giris_max, cikis_min, cikis_max)
Örneğin:
servoPozisyon = map(xDegeri, 0, 1023, 0, 180);
Bu komut;
- 0 değerini 0°
- 512 değerini yaklaşık 90°
- 1023 değerini 180°
olarak dönüştürür.
Örnek Arduino Kodu
#include <Servo.h>
Servo servoX;
Servo servoY;
void setup()
{
servoX.attach(9);
servoY.attach(8);
}
void loop()
{
int x = analogRead(A0);
int y = analogRead(A1);
int aciX = map(x,0,1023,0,180);
int aciY = map(y,0,1023,0,180);
servoX.write(aciX);
servoY.write(aciY);
delay(20);
}
Bu program çalıştırıldığında joystick hangi yöne hareket ettirilirse ilgili servo motor aynı yönde dönecektir.
Joystick Kalibrasyonu
Her joystick modülünün mekanik toleransları farklı olabilir.
Örneğin bazı joysticklerde;
- Minimum değer → 35
- Maksimum değer → 995
olarak okunabilir.
Bu durumda map fonksiyonu şu şekilde düzenlenebilir.
map(x,35,995,0,180);
Böylece servo motor tüm hareket aralığını eksiksiz kullanabilir.
Servo Motor Kontrolünde Dikkat Edilmesi Gerekenler
Servo motor uygulamalarında aşağıdaki noktalara dikkat edilmesi önerilir.
- Servo beslemesi mümkünse harici güç kaynağından yapılmalıdır.
- Arduino ve harici güç kaynağının GND uçları ortak bağlanmalıdır.
- Servo kabloları uzun tutulmamalıdır.
- Ani hareketleri azaltmak için küçük gecikmeler kullanılabilir.
- Büyük servo motorlarda yeterli akım sağlayan adaptör tercih edilmelidir.
Uygulama Alanları
Joystick ile servo motor kontrolü birçok projede kullanılmaktadır.
Başlıca kullanım alanları şunlardır:
- Robot kol sistemleri
- Pan-Tilt kamera mekanizmaları
- Güvenlik kameraları
- Uzaktan kumandalı robotlar
- CNC ve eğitim setleri
- Gimbal sistemleri
- Kamera takip sistemleri
- Hobi elektroniği projeleri
Sonuç
Arduino ile joystick kullanarak servo motor kontrolü, elektronik ve robotik projelerine başlamak isteyenler için oldukça öğretici bir uygulamadır. Analog joystickten alınan konum bilgisi Arduino’nun ADC birimi tarafından okunur ve map() fonksiyonu yardımıyla servo motorun hareket edebileceği açı aralığına dönüştürülür. Doğru bağlantılar ve uygun güç kaynağı kullanıldığında bu yöntem; robotik, otomasyon ve mekatronik projelerinde hassas ve güvenilir hareket kontrolü sağlamaktadır.