Servo Motor Nedir?
Servo motor, mili belirli bir açıya götürüp orada tutabilen motordur. DC motordan farkı, bir geri bildirim mekanizması içermesidir: mevcut konumunu bilir ve istenen konuma ulaşana kadar kendini düzeltir.
Robot kolları, direksiyon mekanizmaları, kamera pan-tilt sistemleri ve sensör tarayıcılar servo motorla yapılır.
İçinde Ne Var?
Bir hobi servosunun gövdesinde dört parça bulunur:
- DC motor — asıl hareketi üretir
- Dişli kutusu — hızı düşürüp torku artırır
- Potansiyometre — çıkış miline bağlıdır, mevcut açıyı ölçer
- Kontrol devresi — istenen açı ile mevcut açıyı karşılaştırır
Çalışma döngüsü şudur: kontrol devresi gelen sinyalden hedef açıyı okur, potansiyometreden mevcut açıyı okur, aradaki farkı kapatacak yönde motoru sürer. Fark sıfırlandığında motor durur.
Buna kapalı çevrim (closed loop) kontrol denir ve servoyu DC motordan ayıran temel özelliktir.
Kontrol Sinyali
Servo, üç kablosundan sinyal kablosuna gelen PWM darbeleriyle kontrol edilir. Standart hobi servolarında:
- Sinyal 20 ms’de bir (50 Hz) tekrarlanır
- Darbenin genişliği hedef açıyı belirler
| Darbe genişliği | Açı |
|---|---|
| ~1,0 ms | 0° |
| ~1,5 ms | 90° (orta) |
| ~2,0 ms | 180° |
Bu değerler markaya göre biraz kayabilir (0,5 – 2,5 ms). Servo tam 0° veya 180°‘ye ulaşamıyorsa bu aralığı ayarlamak gerekir.
Neyse ki Arduino’nun Servo kütüphanesi bu zamanlamayı sizin yerinize yönetir; siz sadece açı yazarsınız.
Kablo Renkleri
| Renk | İşlev |
|---|---|
| Kahverengi veya siyah | GND |
| Kırmızı | VCC (4,8 – 6 V) |
| Turuncu, sarı veya beyaz | Sinyal |
Ortadaki kablo her zaman VCC’dir. Bu, servoları ters takma riskini azaltan yararlı bir standarttır.
Temel Kod
#include <Servo.h>
Servo servo;
const int SERVO_PIN = 9;
void setup() {
servo.attach(SERVO_PIN);
}
void loop() {
servo.write(0); // 0 derece
delay(1000);
servo.write(90); // orta
delay(1000);
servo.write(180); // 180 derece
delay(1000);
}Yumuşak hareket
servo.write(180) komutu servoyu tam hızla hedefe fırlatır. Bu hem sarsıntılı görünür hem de ani akım çekişine yol açar. Kademeli hareket daha doğrudur:
void yumusakGit(int hedef, int gecikme) {
int mevcut = servo.read();
if (hedef > mevcut) {
for (int a = mevcut; a <= hedef; a++) {
servo.write(a);
delay(gecikme);
}
} else {
for (int a = mevcut; a >= hedef; a--) {
servo.write(a);
delay(gecikme);
}
}
}
void loop() {
yumusakGit(180, 15);
delay(500);
yumusakGit(0, 15);
delay(500);
}writeMicroseconds ile hassas kontrol
write() yalnızca tam sayı derece kabul eder. Daha ince kontrol için doğrudan darbe genişliği yazabilirsiniz:
servo.writeMicroseconds(1500); // orta konum
servo.writeMicroseconds(1750); // yaklasik 135 dereceServonun gerçek sınırlarını bulmak için attach() fonksiyonuna min/max verilebilir:
servo.attach(9, 600, 2400); // pin, min us, max usServo Türleri
Standart (konumlu) servo
0–180° arası döner ve o açıda durur. SG90, MG996R gibi.
Sürekli dönüşlü (continuous rotation) servo
Potansiyometre bağlantısı değiştirilmiş, açı geri bildirimi devre dışı bırakılmış servodur. Bu tipte write() değeri açı değil hız ve yön belirler:
| Değer | Davranış |
|---|---|
| 0 | Tam hızla bir yöne |
| 90 | Dur |
| 180 | Tam hızla ters yöne |
servo.write(90); // dur
servo.write(120); // yavas ileri
servo.write(0); // tam hizla geriSürekli dönüşlü servolar, sürücü kartı gerektirmeden yön ve hız kontrolü sağladıkları için basit robotlarda pratiktir. Ancak konum bilgisi vermezler.
Servonuz
write(90)dediğinizde durmuyor, yavaşça dönmeye devam ediyorsa gövdesindeki küçük ayar vidasıyla nötr noktası kalibre edilebilir.
Dijital ve analog servo
Analog servo kontrol sinyalini 50 Hz’de işler. Dijital servo içindeki mikrodenetleyici motoru çok daha yüksek frekansta sürer; daha hızlı tepki verir, daha kuvvetli tutar, ama daha çok akım çeker.
Metal ve plastik dişli
Plastik dişliler (SG90) ucuzdur ama darbe ve aşırı yükte kolayca sıyrılır. Yük taşıyan uygulamalarda metal dişli (MG90S, MG996R) tercih edin.
Yaygın Servo Modelleri
| Model | Tork (6V) | Dişli | Ağırlık | Kullanım |
|---|---|---|---|---|
| SG90 | ~1,8 kg·cm | Plastik | 9 g | Hafif işler, sensör tarama |
| MG90S | ~2,2 kg·cm | Metal | 13 g | SG90’ın dayanıklı hali |
| MG996R | ~11 kg·cm | Metal | 55 g | Robot kolu, direksiyon |
| DS3218 | ~20 kg·cm | Metal | 60 g | Ağır yük, RC araç |
Besleme — En Sık Yapılan Hata
Servoyu Arduino’nun 5V pininden beslemeyin.
Arduino Uno’nun kart üzerindeki regülatörü sınırlı akım verir ve USB beslemesi de tipik olarak 500 mA ile sınırlıdır. Oysa:
- Bir SG90 hareket sırasında ~200–700 mA çeker
- Bir MG996R 2,5 A’e kadar çıkabilir
- Stall durumunda bu değerler daha da yükselir
Sonuç: gerilim çöker, Arduino resetlenir, servo titrer.
Doğru bağlantı:
- Servo VCC → harici 5–6 V besleme (pil paketi veya adaptör)
- Servo GND → harici besleme GND ve Arduino GND (ortak toprak zorunlu)
- Servo sinyal → Arduino dijital pini
Ortak GND olmadan servo hiç çalışmaz veya rastgele davranır; sinyal seviyesinin bir referansı olmaz.
Besleme hattına 470–1000 µF elektrolitik kondansatör eklemek ani akım çekişlerini yumuşatır ve titremeyi belirgin şekilde azaltır.
Titreme (Jitter) Sorunu
Servo hedefe ulaştıktan sonra hafifçe titriyorsa nedenleri şunlardır:
Yetersiz besleme. En yaygın neden. Harici besleme ve kondansatör ekleyin.
Sinyal gürültüsü. Uzun sinyal kablosu gürültü toplar. Kısaltın veya sinyal hattına 220 Ω seri direnç ekleyin.
Potansiyometre aşınması. Eski servolarda geri bildirim potansiyometresi yıpranır; servo doğru konumu bulamaz ve sürekli düzeltmeye çalışır.
Ölü bant dışında hedef. Servo, ulaşamayacağı bir açıya (mekanik sınırın ötesi) zorlanıyorsa sürekli iter. Bu durumda servo ısınır ve zarar görür. Hareket aralığını yazılımda sınırlayın:
int guvenliAci(int aci) {
return constrain(aci, 10, 170); // uc noktalardan kacin
}Sürekli sinyal göndermek. Servo hedefe ulaştıktan sonra detach() ile sinyali kesmek titremeyi tamamen durdurur (ama servo tutma kuvvetini kaybeder):
servo.write(90);
delay(500); // hareket tamamlansin
servo.detach(); // sinyali kes, titreme dursunServo Kütüphanesi ve PWM Çakışması
Arduino’nun Servo kütüphanesi Timer1 donanımını kullanır. Bunun sonucu:
- Arduino Uno’da pin 9 ve 10’daki
analogWrite()çalışmaz — kütüphane dahil edildiği anda. - En fazla 12 servo kontrol edilebilir (Uno’da).
Servo kullanan bir projede LED parlaklığı veya motor hızı için 3, 5, 6 veya 11 numaralı pinleri tercih edin.
Daha fazla servo gerekiyorsa PCA9685 kullanın: I2C üzerinden 16 servo sürer, ayrı bir besleme girişi vardır ve Arduino’nun timer’larını hiç meşgul etmez.
Servo Ne Zaman Yanlış Seçimdir?
| İhtiyaç | Servo uygun mu? |
|---|---|
| Belirli bir açıya gitmek | ✔ İdeal |
| Sürekli dönmek | ✘ (sürekli dönüşlü tip hariç) |
| Yüksek hız | ✘ Yavaştır |
| Yüksek tork | Sınırlı |
| Hassas ve tekrarlanabilir konum | ✘ Step motor daha iyi |
| Tam tur konum kontrolü | ✘ Step motor |
Bir 3D yazıcının kafasını hareket ettirmek için servo değil step motor kullanılır: step motor tam tur boyunca konum kontrolü sağlar ve tekrarlanabilirliği çok daha yüksektir.
Özet
Servo motor, dahili potansiyometre geri bildirimiyle mili belirli bir açıya götürüp orada tutan kapalı çevrim motordur. 20 ms periyotlu PWM darbelerinin genişliğiyle kontrol edilir.
Bu derste şunları öğrendik:
- Servonun içindeki dört parçayı ve kapalı çevrim mantığını
- 1,0 / 1,5 / 2,0 ms darbe – açı ilişkisini
Servokütüphanesi ilewrite()vewriteMicroseconds()kullanımını- Sürekli dönüşlü servonun neden farklı çalıştığını
- Servoyu Arduino 5V’undan beslememek gerektiğini
- Titreme (jitter) nedenlerini ve çözümlerini
- Timer1 çakışması yüzünden pin 9–10’da PWM’in bozulduğunu