Arduino ile Joystick Kontrollü Servo Motor Yapımı (2 Eksenli Robotik Kontrol)

Arduino ile Joystick Kontrollü Servo Motor Yapımı (2 Eksenli Robotik Kontrol)

Arduino dünyasında hem eğlenceli hem de öğretici bir proje arıyorsanız, Joystick ile Servo motor kontrolü en iyi başlangıçlardan biridir. Bu projeyle robot kolların, kamera gimballarının veya hareketli platformların temel çalışma mantığını kavrayacağız.

Bu yazıda; Arduino Uno, Joystick modülü ve Servo motorlar kullanarak 2 eksenli bir kontrol sistemini nasıl kuracağınızı adım adım anlatıyorum.

Gerekli Malzemeler

  • 1 adet Arduino Uno
  • 2 adet Servo Motor (SG90 idealdir)
  • 1 adet 2 Eksenli Joystick Modülü
  • 1 adet Breadboard
  • 5V Harici Güç Kaynağı (Servolar için)
  • Jumper Kablolar

Joystick ve Servo Motor Devre Şeması

Projeye başlamadan önce dikkat etmeniz gereken en kritik nokta güç yönetimidir. Servo motorlar hareket halindeyken yüksek akım çekebilir. Bu yüzden servoları doğrudan Arduino’nun 5V pininden beslemek yerine, harici bir güç kaynağı kullanmak kartınızın sağlığı için çok daha güvenlidir.

Arduino Joystick Servo Kontrol Kodu

Aşağıdaki kod, joystick’ten gelen 0-1023 arasındaki analog veriyi alır ve map() fonksiyonu sayesinde servoların anlayabileceği 0-180 derecelik açıya dönüştürür.

#include <Servo.h>

// Pin Tanımlamaları
#define SERVO_X_PIN 5
#define SERVO_Y_PIN 6
#define JOYSTICK_X_PIN A0
#define JOYSTICK_Y_PIN A1

// Joystick Sınır Değerleri (Standart 0-1023)
#define JOY_MIN 0
#define JOY_MAX 1023

Servo servoX;
Servo servoY;

void setup() {
  Serial.begin(9600);
  
  // Servoların pinlerini tanımlıyoruz.
  servoX.attach(SERVO_X_PIN);
  servoY.attach(SERVO_Y_PIN);
}

void loop() {
  // Analog okuma yapıp 0-180 dereceye oranlıyoruz.
  int x_angle = map(analogRead(JOYSTICK_X_PIN), JOY_MIN, JOY_MAX, 0, 180);
  int y_angle = map(analogRead(JOYSTICK_Y_PIN), JOY_MIN, JOY_MAX, 0, 180);

  // Servolara pozisyonu gönderiyoruz.
  servoX.write(x_angle);
  servoY.write(y_angle);

  // Debug için seri monitöre yazdır
  Serial.print("X : "); Serial.print(x_angle);
  Serial.print(" | Y : "); Serial.println(y_angle);
  
  delay(15); // Daha akıcı hareket için delay süresini kısa tutalım.
}

Projenin Çalışma Mantığı

  1. Analog Okuma: Joystick içindeki potansiyometreler sayesinde hareket ettirildiğinde 0 ile 5V arasında bir voltaj değişimi yaratır. Arduino bunu 0-1023 arasında bir sayısal değer olarak okur.
  2. Map Fonksiyonu: map(deger, 0, 1023, 0, 180) komutu, joystick’in tam sol/alt konumunu 0 dereceye, tam sağ/üst konumunu ise 180 dereceye eşitler.
  3. PWM Sinyali: Arduino, hesaplanan bu açı bilgisini servo.write() komutuyla servo motorun anlayacağı PWM sinyallerine çevirir.

Sıkça Sorulan Sorular (SSS)

1. Servolar neden titriyor? Genellikle yetersiz akımdan kaynaklanır. Harici bir adaptör veya pil paketi kullandığınızdan ve GND hatlarını birleştirdiğinizden emin olun.

2. Joystick ters yönde çalışıyor, ne yapmalıyım? Kod içerisindeki map(değer, 0, 1023, 0, 180) kısmını map(değer, 0, 1023, 180, 0) olarak değiştirerek yönü tersine çevirebilirsiniz.

Etiketlendi:

Bir Cevap Yazın

Maker Günlüğü sitesinden daha fazla şey keşfedin

Okumaya devam etmek ve tüm arşive erişim kazanmak için hemen abone olun.

Okumaya Devam Edin