Menu
Sepet

Servo Motor Kontrolü

PCB rehberleri · Sensör ve modüller

Servo Motor Kontrolü

Okuma süresi: yaklaşık 4 dkHazırlayan: Elektromall Teknik Ekibi Yayın: 28 Eylül 2026Güncelleme: 20 Ekim 2026

Kısa cevap Servo motor nasıl kontrol edilir?

Servo motor 20 ms periyotlu (50 Hz) PWM sinyaliyle kontrol edilir; darbe genişliği yaklaşık 1 ms'de 0°, 1,5 ms'de 90°, 2 ms'de 180° konumunu verir. Arduino'da Servo kütüphanesiyle write(açı) komutu kullanılır. Servolar Arduino'nun 5 V pininden değil, ortak GND'li ayrı bir 5 – 6 V kaynaktan beslenmelidir.

Servo motor, içindeki redüktör, potansiyometre ve kontrol devresi sayesinde kendisine söylenen açıya gidip orada duran küçük bir motordur. Robot kolları, kamera yönlendirme, RC modeller ve otomatik kapaklar için idealdir. Bu rehberde SG90, MG90S ve MG996R servoların farklarını, PWM kontrol sinyalini, Arduino ile bağlantıyı, besleme sorunlarını ve 360 derece servoların nasıl çalıştığını anlatıyoruz.

SG90, MG90S ve MG996R karşılaştırması

ModelDişliTork (tipik)AğırlıkKullanım
SG90Plastik≈ 1,8 kg·cm (4,8 V)9 gHafif mekanizmalar, eğitim
MG90SMetal≈ 2 – 2,2 kg·cm13 gSG90 boyutunda daha dayanıklı
MG996RMetal≈ 9 – 11 kg·cm (6 V)55 gRobot kolu, direksiyon, yük taşıyan eklemler

Kontrol sinyali: 50 Hz PWM

Standart servolar 20 ms periyotlu (50 Hz) bir darbe dizisi bekler. Açıyı darbenin genişliği belirler: yaklaşık 1 ms → 0°, 1,5 ms → 90°, 2 ms → 180°. Gerçekte birçok servo 0,5 – 2,5 ms aralığını kullanır; uç noktaları kendi servonuzla deneyerek bulun. Görev oranı olarak bu %5 – %10 aralığına denk gelir; PWM hesaplama aracıyla darbe sürelerini hesaplayabilirsiniz.

Arduino ile kullanım

Servo kabloları: kahverengi/siyah GND, kırmızı + besleme (4,8 – 6 V), turuncu/sarı sinyal.

#include <Servo.h>

Servo s;

void setup() {
  s.attach(9, 500, 2400);   // pin, en küçük ve en büyük darbe (µs)
}

void loop() {
  for (int a = 0; a <= 180; a += 2) { s.write(a); delay(15); }
  for (int a = 180; a >= 0; a -= 2) { s.write(a); delay(15); }
}

ESP32'de "ESP32Servo" kütüphanesi aynı arayüzü sağlar.

Besleme: en sık yapılan hata

Bir SG90 hareket ederken birkaç yüz miliamper, zorlandığında 600 – 700 mA çekebilir; MG996R ise 1 – 2,5 A'e kadar çıkar. Servoları Arduino'nun 5 V pininden beslemek, kartın resetlenmesine, USB portunun kapanmasına veya servonun titremesine yol açar. Servoları ayrı bir 5 – 6 V kaynaktan (en az servo başına 1 A, MG996R için 2 – 3 A) besleyin ve kaynağın GND'sini Arduino'nun GND'sine bağlayın. Servo besleme hattına 470 – 1000 µF bir elektrolitik kondansatör koymak ani akım çekişlerini yumuşatır. Uzun kablolarda gerilim düşümünü kablo kesiti aracıyla kontrol edebilirsiniz.

360 derece (sürekli dönen) servolar

360° servolarda konum geri beslemesi yoktur; darbe genişliği açıyı değil dönüş hızını ve yönünü belirler. 1,5 ms civarında durur, 1 ms'ye doğru bir yöne, 2 ms'ye doğru diğer yöne hızlanır. Tam durma noktası servodan servoya biraz değişir; kodla (ör. s.write(90) yerine 88 – 92 arasında) ince ayar yapılır.

Bu yazıda kullanılan ürünler

Besleme akımı bütçesi

ServoBeslemeTipik akımKullanım
SG90 / MG90Syaklaşık 4,8 – 6 Vbekleme birkaç mA; yük altında 200 – 800 mAKüçük kollar, hafif yükler
MG996R4,8 – 7,2 Vbekleme 10 mA civarı; zorlamada 1 – 2,5 ARobot kolu, orta yükler

Değerler üretici veri sayfalarına göre yaklaşık değerlerdir; yük altında akım bu aralıkların üzerine çıkabilir.

Kaç servoyu birlikte süreceğinizi belirleyen şey Arduino değil, güç kaynağıdır. Basit bir kural: kaynağın akımı, aynı anda hareket edebilecek servo sayısı × en kötü durum akımı kadar olmalıdır. Dört MG996R için bu 4 × 2 A = 8 A demektir; bu yüzden robot kollarında 5 V / 5 – 10 A'lik ayrı bir besleme kullanılır ve toprak Arduino ile birleştirilir.

Darbe genişliği ile açı eşleşmesi

Standart servolar 50 Hz'de (20 ms periyot) 1 000 – 2 000 µs genişliğinde darbe bekler: yaklaşık 1 000 µs = 0°, 1 500 µs = 90° (orta), 2 000 µs = 180°. Modele göre sınırlar 500 – 2 500 µs'ye kadar genişleyebilir; yanlış sınır servoyu zorlayıp titretir. Kesin açı için writeMicroseconds() kullanılır:

#include <Servo.h>
Servo servo;

void setup() {
  servo.attach(9, 544, 2400);       // pin, min µs, max µs (modele göre ayarlayın)
}

void loop() {
  for (int us = 1000; us <= 2000; us += 10) {
    servo.writeMicroseconds(us);    // yumuşak ilerleme
    delay(15);
  }
  for (int us = 2000; us >= 1000; us -= 10) {
    servo.writeMicroseconds(us);
    delay(15);
  }
}

Sık yapılan hatalar

  • Servoyu Arduino'nun 5 V pininden beslemek: Yük altında akım çekilince Arduino resetlenir veya servo titrer.
  • Toprakları birleştirmemek: Harici besleme ile Arduino'nun GND hattı ortak olmazsa kontrol sinyali referanssız kalır.
  • Zıt yönde zorlamak: Mekanik sınırda servoyu tutarken sürekli akım çeker ve ısınır; sınır açılarını yazılımda sınırlayın.
  • Beslemeye kondansatör eklememek: Servo akım darbeleri gerilimi düşürür; besleme girişine 470 – 1 000 µF kondansatör ekleyin.

Sıkça sorulan sorular

Servo titriyor veya vınlıyor, neden?

Yetersiz besleme, ortak GND eksikliği, sinyal kablosundaki gürültü veya servonun mekanik sınırına zorlanması en sık nedenlerdir. Uç açıları biraz içeride tutun ve beslemeyi ayırın.

Aynı anda kaç servo sürebilirim?

Arduino Uno'da Servo kütüphanesi 12 servoya kadar destekler. Çok sayıda servo için PCA9685 gibi 16 kanallı PWM sürücü kartları kullanılır; besleme akımını ayrıca hesaba katın.

Servo motor kaç derece döner?

Standart servolar yaklaşık 180°, bazı modeller 270° döner. 360° modeller sürekli döner ama açı kontrolü yoktur.

ESP32 ile servo nasıl sürülür?

ESP32'de standart Servo kütüphanesi yerine ESP32Servo kütüphanesi kullanılır; LEDC (PWM) kanalları üzerinden 50 Hz darbe üretir. Servo besleme hattı yine harici 5 V olmalı, sinyal 3,3 V seviyesi çoğu servo için yeterlidir.

Direnç, kondansatör ve diğer komponentler için ürünlerimize göz atın.

Servo ve Motorlar