Arduino ile Servo Motor Kontrolü

Arduino ile Servo Motor Kontrolü

Arduino ile Servo Motor Kontrolü

Elektronik ve robotik projelerde en çok kullanılan motor türlerinden biri servo motordur.
Basit bir LED veya sensör projesinden öteye geçmek istiyorsan, hareket kabiliyeti kazandırmak için servo motor kullanmak mükemmel bir başlangıçtır.
Bu yazıda, Arduino ile servo motor kontrolü konusunu adım adım öğreneceksin:
Çalışma mantığı, bağlantı şeması, Servo kütüphanesi, örnek kodlar, servo türleri ve proje fikirleriyle eksiksiz bir rehber seni bekliyor.

1. Servo Motor Nedir?

Servo motor, belirli bir açıda hassas şekilde dönebilen özel bir motor türüdür.
Normal DC motorlar sürekli dönerken, servo motorlar 0° ile 180° arasında (bazı modellerde 270° veya 360°) belirli açılarda durabilir.
İç yapısında:

  • DC motor
  • Dişli sistemi
  • Potansiyometre
  • Kontrol devresi
  • bulunur.

Bu sayede servo motor, hem pozisyon hem hız hem de yön kontrolü sağlayabilir.
Kısacası:

Servo motor = hassas açı kontrolü için tasarlanmış akıllı motor.

2. Servo Motorun Çalışma Prensibi

Servo motorun dönme açısı, PWM (Pulse Width Modulation) sinyali ile belirlenir.
Arduino bu sinyali göndererek motor milinin hangi açıda duracağını belirler.
PWM sinyali, 20 ms (50 Hz) periyotla gönderilir.
Bu periyot içinde sinyalin aktif olduğu süre açıya karşılık gelir:
PWM Darbe SüresiServo Açısı1 ms0°1.5 ms90°2 ms180°
Arduino’nun Servo kütüphanesi, bu karmaşık sinyalleri otomatik olarak oluşturur.
Sen sadece hangi açıya dönmesi gerektiğini belirtirsin.

3. Gerekli Malzemeler

Arduino ile servo motor kontrolü için şunlara ihtiyacın olacak:

  • Arduino UNO / Nano / Mega
  • Servo motor (SG90 veya MG996R önerilir)
  • Breadboard (isteğe bağlı)
  • Harici 5V güç kaynağı (servo için önerilir)
  • Jumper kablolar

Not:
Servo motorlar yüksek akım çeker. Eğer birden fazla servo bağlanacaksa, Arduino’nun 5V çıkışı yetersiz kalabilir.
Bu durumda harici güç kaynağı kullanmak gerekir (örneğin 5V 2A adaptör).

4. Servo Motor Pinleri

Çoğu servo motorda üç kablo bulunur:
RenkPin AdıGörevKahverengi / SiyahGNDToprakKırmızıVCC5V beslemeSarı / TuruncuSignalKontrol sinyali (Arduino pinine bağlanır)

5. Arduino ve Servo Motor Bağlantısı

Aşağıdaki bağlantı şeması en basit yapıdadır:

[Arduino – Servo Bağlantısı]
------------------------------------
Servo Kırmızı → 5V
Servo Kahverengi → GND
Servo Turuncu → Pin 9
------------------------------------

Harici güç kaynağı kullanıyorsan:

  • Servo GND’sini Arduino GND ile ortak bağlamayı unutma.
  • Aksi halde servo çalışmaz veya düzensiz davranır.

6. Servo Motor Kontrol Kodu

Arduino, servo kontrolünü kolaylaştırmak için Servo.h adlı bir kütüphane sunar.
Aşağıdaki örnek, servo motoru 0°’dan 180°’ye döndürüp geri getirir:

#include <Servo.h>

Servo motor;  // Servo nesnesi oluştur

void setup() {
  motor.attach(9); // Servo sinyali 9 numaralı pine bağlı
}

void loop() {
  for (int aci = 0; aci <= 180; aci++) {
    motor.write(aci);   // Servoyu belirtilen açıya döndür
    delay(15);          // Hareket yumuşak olsun
  }

  for (int aci = 180; aci >= 0; aci--) {
    motor.write(aci);
    delay(15);
  }
}

Bu kod sayesinde servo motor sürekli olarak ileri ve geri hareket eder.

7. Servo Motoru Potansiyometre ile Kontrol Etme

Bir potansiyometre (ayar direnci) ekleyerek servo motoru manuel olarak kontrol edebilirsin.
Potu çevirince servo aynı oranda döner.

#include <Servo.h>

Servo motor;
int potPin = A0;
int potDeger;
int aci;

void setup() {
  motor.attach(9);
  Serial.begin(9600);
}

void loop() {
  potDeger = analogRead(potPin);           // 0-1023
  aci = map(potDeger, 0, 1023, 0, 180);    // 0-180 dereceye çevir
  motor.write(aci);
  
  Serial.print("Açı: ");
  Serial.println(aci);
  
  delay(15);
}

Bu sistem, joystick, servo robot kolu veya kamera yönlendirme gibi projelerin temelidir.

8. Servo Motor Türleri

Servo motorlar uygulama türüne göre üç ana gruba ayrılır:
TürAçıKullanım AlanıStandart Servo0°–180°Robot kolları, pan–tilt sistemleriSürekli Döner Servo360° (sürekli)Mini robotlar, tekerlek sistemleriMikro Servo0°–180°Hafif yükler, RC uçaklar, hobi projeleri
En çok kullanılan model: SG90 mikro servo
Küçük, ucuz ve Arduino ile doğrudan çalışabilir.

9. Servo Güç Problemleri ve Çözümleri

Servo motorlar hareket ederken ani akım çekebilir.
Bu durumda Arduino yeniden başlatılabilir (reset atar).
Çözüm:

  • Harici 5V güç kaynağı kullan.
  • Servo GND ve Arduino GND ortak olsun.
  • 100µF – 470µF arası kondansatör ekle (parazitleri azaltır).

Ek ipucu:
Birden fazla servo kullanıyorsan harici adaptör şarttır.

10. Servo Motorun Hızını Kontrol Etme

Servo motorlar genellikle “hedef açı”ya hızlı şekilde gider.
Ancak bazı durumlarda hareketin yavaş ve kontrollü olması istenir.
Yavaş geçiş için aşağıdaki yöntem kullanılabilir:

#include <Servo.h>

Servo motor;
int hedefAci = 0;
int mevcutAci = 0;

void setup() {
  motor.attach(9);
}

void loop() {
  hedefAci = 180;
  for (int i = mevcutAci; i <= hedefAci; i++) {
    motor.write(i);
    delay(30);  // daha uzun bekleme = daha yavaş hareket
  }

  hedefAci = 0;
  for (int i = 180; i >= hedefAci; i--) {
    motor.write(i);
    delay(30);
  }
}

Bu şekilde servo motor yavaş geçişli bir hareket yapar.

11. Servo Motoru Buton ile Kontrol Etme

Servo motoru belirli bir açıda döndürmek için buton da kullanılabilir.
Örneğin bir butona basıldığında 90°’ye dönsün, tekrar basıldığında 0°’ye dönsün.

#include <Servo.h>

Servo motor;
int butonPin = 2;
int durum = 0;
bool basildi = false;

void setup() {
  motor.attach(9);
  pinMode(butonPin, INPUT_PULLUP);
}

void loop() {
  if (digitalRead(butonPin) == LOW && !basildi) {
    basildi = true;
    durum = !durum;
    if (durum == 1) motor.write(90);
    else motor.write(0);
  }

  if (digitalRead(butonPin) == HIGH) basildi = false;
}

Bu yapı, robotik parmak hareketi veya servo kilit sistemlerinde sıkça kullanılır.

12. Servo Motor ve Ultrasonik Sensör Projesi

Servo motoru HC-SR04 ultrasonik sensör ile birlikte kullanarak engelden kaçan sistem yapabilirsin.
Servo sensörü farklı açılarda döndürür, engel algılandığında yön değiştirir.
Bu sistem, robot araçların temel çalışma prensibini oluşturur.

13. Servo Motor Kalibrasyonu

Bazı servo motorlar “tam 180°” dönmez.
Fiziksel sınır 160–170° civarında olabilir.
Servo’yu test etmek için:

#include <Servo.h>
Servo motor;

void setup() {
  motor.attach(9);
}

void loop() {
  for (int i = 0; i <= 180; i += 10) {
    motor.write(i);
    delay(500);
  }
}

Bu şekilde hangi açı aralıklarında çalıştığını gözlemleyebilirsin.
Eğer servo “vınlama” sesi çıkarıyorsa, o açı sınırın dışındadır.

14. Birden Fazla Servo Motor Kontrolü

Arduino aynı anda birden fazla servo motoru da kontrol edebilir.
Servo kütüphanesi genellikle 12 servoya kadar destek sağlar.

#include <Servo.h>

Servo s1, s2, s3;

void setup() {
  s1.attach(3);
  s2.attach(5);
  s3.attach(6);
}

void loop() {
  for (int aci = 0; aci <= 180; aci++) {
    s1.write(aci);
    s2.write(180 - aci);
    s3.write(aci / 2);
    delay(15);
  }
}

Bu örnek, robot kol sistemlerinde çok eklemli servo koordinasyonunu gösterir.

15. Gerçek Hayatta Servo Kullanım Alanları

Servo motorlar yalnızca hobi projelerinde değil, endüstride de yaygın kullanılır:

  • Robot kolları
  • Kamera sabitleme sistemleri (gimbal)
  • Drone kumandaları
  • Otomatik kapı kilitleri
  • RC uçak, araba, tekne modelleri
  • 3D yazıcı ve CNC makinelerinde hareket kontrolü

Bu yüzden servo motor öğrenmek, robotik dünyasında temel bir beceridir.

16. Servo Motorun Avantajları

  • Yüksek hassasiyet
  • Küçük boyut, hafif yapı
  • Düşük enerji tüketimi
  • Hızlı tepki süresi
  • Basit kontrol (yalnızca 1 pin ile)

Dezavantajları ise:

  • Torku sınırlıdır (özellikle SG90 gibi küçük modellerde)
  • Güç kaynağı yetersizse hatalı davranabilir
  • Sürekli dönmesi gereken uygulamalarda uygun değildir

17. Proje Fikirleri

Servo motoru kullanarak yapabileceğin bazı yaratıcı Arduino projeleri:

  1. Mini Robot Kol:
  2. 4–5 servo ile objeleri tutup kaldıran sistem.
  3. Otomatik Kapı Sistemi:
  4. LDR sensör ile ışığa göre açılıp kapanan kapak.
  5. Kamera Takip Sistemi:
  6. PIR sensör ile insan hareketini takip eden servo başlığı.
  7. Engelden Kaçan Araç:
  8. Servo üzerinde dönen ultrasonik sensör ile yön değiştiren robot.
  9. Güneş Takip Paneli:
  10. LDR sensörler yardımıyla güneşe göre yön değiştiren solar sistem.

18. Sık Karşılaşılan Sorunlar

[Servo Motor Problemleri ve Çözümleri]
----------------------------------------
1. Servo titriyor → GND ortak değil veya sinyal bozuk.
2. Servo hareket etmiyor → Güç yetersiz.
3. Arduino reset atıyor → Servo 5V’a aşırı yük bindiriyor.
4. Servo açı hatalı → Kalibrasyon gerekli.
5. Servo ses yapıyor → Aşırı yük altında kalmış.
----------------------------------------

Bu hataları önlemek için güç kaynağını harici kullanmak ve kablo bağlantılarını kısa tutmak önemlidir.

19. Servo Kütüphanesi Alternatifleri

Standart Servo.h kütüphanesi çoğu proje için yeterlidir.
Ancak daha gelişmiş projelerde şu kütüphaneler kullanılabilir:

  • VarSpeedServo.h → Hız kontrollü servo hareketi
  • ServoEasing.h → Yumuşak geçişli (smooth) animasyonlu servo kontrol
  • Adafruit_PWMServoDriver.h → Çoklu servo kontrol (I2C tabanlı)

Bu kütüphaneler, özellikle robotik kol ve drone projelerinde büyük kolaylık sağlar.

20. Sonuç: Arduino ile Servo Kontrol Sanatı

Servo motorlar, Arduino dünyasının en heyecan verici bileşenlerinden biridir.
Basit bir pin bağlantısı ve birkaç satır kodla robotik hareketlerin temelini oluşturmak mümkündür.
Artık şunları biliyorsun:

  • Servo nasıl çalışır
  • PWM sinyali ile açı kontrolü nasıl yapılır
  • Potansiyometre veya sensörlerle servo nasıl yönlendirilir
  • Birden fazla servo nasıl senkronize edilir

Kısacası:

Servo motorlar, Arduino projelerinde hassas hareketin anahtarıdır.