Bu yazıda ne yapacağız?
- Servonun içini ve verilen açıda nasıl durduğunu göreceğiz.
- Darbe genişliğiyle açıyı deneme alanında kendiniz ayarlayacaksınız.
- Servoyu Arduino'ya bağlayıp süpürme ve potansiyometre kodlarını yazacağız.
- 360 derece servoyu, step ve DC motorla farkını, güç hatalarını öğreneceğiz.
Neden işe yarar? Robot kol, kapak açan bir mekanizma ya da tutucu yapacaksanız servo en kısa yoldur: tek sinyal kablosu, tek satır kod, istediğiniz açı.
Servo motor nedir, ne işe yarar?
Servo motor, kendisine söylenen açıya dönüp orada duran bir motordur. SG90 gibi hobi servoları çoğunlukla yarım tur civarında döner ve tek sinyal kablosuyla yönetilir.
- Robot kol eklemleri ve tutucular (gripper)
- Kapı, kapak, otopark bariyeri maketi
- Direksiyon (RC araba), sensör döndürme (HC-SR04 ile "radar")
Servo motor nasıl çalışır?
Servonun içinde küçük bir DC motor, dişliler, bir potansiyometre ve bir kontrol kartı vardır. Kart, istenen açıyı potansiyometrenin ölçtüğü açıyla karşılaştırır ve fark kalmayana kadar motoru çevirir.
- Dişliler motorun hızını düşürüp kuvvetini (torkunu) artırır.
- Potansiyometre çıkış milinin açısını ölçer (potansiyometre nedir?).
- Kolu elle çevirirseniz kart farkı görür ve geri iter: servo açısını tutar.
Servo motor açı ayarı nasıl yapılır?
Açıyı darbe genişliği belirler: Arduino servoya her 20 ms'de bir kısa bir 5 V darbesi gönderir, servo yalnızca bu darbenin süresine bakar. SG90 veri sayfasına göre 1,5 ms orta konum, yaklaşık 1 ms bir uç, yaklaşık 2 ms öbür uçtur.
Arduino'nun Servo kütüphanesi ise açıyı varsayılan olarak daha geniş bir aralığa çevirir:
| Komut | Gönderilen darbe |
|---|---|
servo.write(0) |
544 µs |
servo.write(90) |
1472 µs |
servo.write(180) |
2400 µs |
servo.writeMicroseconds(1500) |
1500 µs |
Bu aralık standart 1-2 ms'den geniştir; bazı servolar write(0) ya da write(180) ile ucuna dayanıp vızıldar. Arduino belgesine göre bu yüksek akım demektir. Çözüm aşağıda: gerçek uçları bulmak.
Kendiniz deneyin
Kaydırıcıyla darbeyi değiştirin: önce 1000-2000 µs arasında kalın, sonra uçlara gidin. Ardından 360° sürekli servoya geçin; aynı sinyal bu kez hız ve yön olur.
Burada darbe genişliğini kaydırıcıyla değiştirip 20 ms'lik sinyali, servo kolunun açısını ve aynı işi yapan Arduino satırını görebileceğiniz bir deneme alanı var. JavaScript ile çalışır; açılmadıysa yukarıdaki tablo ve görsel aynı ilişkiyi gösteriyor.
Servo motor Arduino'ya nasıl bağlanır?
Servonun üç kablosu vardır: GND, 5V ve sinyal. Sinyal kablosu bir dijital pine gider; örneklerde D9 kullanıyoruz.
| Servo kablosu | Uno'da nereye? |
|---|---|
| Kahverengi ya da siyah | GND |
| Kırmızı | 5V (tek küçük servo için) |
| Turuncu, sarı ya da beyaz | D9 |
Servo ve potansiyometre tek 5V pinini paylaştığı için breadboardun + ve - hatlarını kullanıyoruz (breadboard nasıl kullanılır?). Arduino'ya yeniyseniz önce Arduino nedir? yazısına bakın.
Servo neden Arduino'yu resetler?
Yük altındaki servo, Uno'nun verebileceğinden fazla akım çeker: gerilim düşer, Uno kendini sıfırlar, servo titrer. Boştaki tek bir SG90 Uno'dan çalışabilir; Arduino belgesi bir iki servodan fazlası için ayrı güç önerir.
- Sayılar: takılan MG996R 2,5 A çekebilir (6 V, veri sayfası); Uno'nun USB sigortası 500 mA'de açar.
- Gerilim: SG90 4,8 V (~5 V), MG996R 4,8-7,2 V. Servoyu doğrudan 9 V pile ya da LiPo bataryaya bağlamayın, araya düzenleyici koyun.
- Ortak GND şart: sinyal GND'ye göre ölçülür; GND bağlı değilse servo kıpırdamaz ya da rastgele oynar.
Servo motor Arduino kodu
1. Süpürme: 0'dan 180'e gidip gelme
#include <Servo.h>
Servo servo; // servo nesnesi
void setup() {
servo.attach(9); // turuncu sinyal kablosu D9'da
}
void loop() {
for (int aci = 0; aci <= 180; aci++) { // 0'dan 180'e
servo.write(aci);
delay(15); // her derecede 15 ms: büyütürseniz servo yavaşlar
}
for (int aci = 180; aci >= 0; aci--) { // ve geri
servo.write(aci);
delay(15);
}
}
Bir yön yaklaşık 2,7 saniye sürer (181 adım × 15 ms).
Servo motor hız kontrolü: servo.write() servoyu en yüksek hızında götürür. Yavaşlatmak için açıyı küçük adımlarla değiştirip araya delay koyun, yukarıdaki gibi.
2. Potansiyometre ile servo kontrolü
#include <Servo.h>
Servo servo;
void setup() {
servo.attach(9); // servo sinyali D9
}
void loop() {
int deger = analogRead(A0); // potansiyometre: 0-1023
int aci = map(deger, 0, 1023, 0, 180); // 0-180 dereceye çevir
servo.write(aci);
delay(15); // servoya yetişme süresi
}
Dış bacaklar 5V ve GND'ye, orta bacak A0'a. Düğmeyi çevirdikçe servo onu takip eder.
3. Servonuzun gerçek uçlarını bulun
#include <Servo.h>
Servo servo;
void setup() {
Serial.begin(9600);
servo.attach(9, 500, 2500); // sınırı 500-2500 µs'ye genişlet
servo.writeMicroseconds(1500); // ortadan başla
Serial.println("Seri Monitor'e 500-2500 arasi bir sayi yazin");
}
void loop() {
if (Serial.available()) {
int us = Serial.parseInt(); // yazılan sayıyı oku
if (us >= 500 && us <= 2500) {
servo.writeMicroseconds(us);
Serial.println(us);
}
}
}
Seri Monitör'e 1000 yazın, sonra 50'şer azaltın; servonun dönmeyi bıraktığı ya da vızıldadığı yerin biraz içi gerçek ucudur. Öbür uç için 2000'den yukarı çıkın. Sonra servo.attach(9, min, max) yazın: write(0) ve write(180) tam bu uçlara gider.
360 derece servo (sürekli dönen servo) nedir?
Sürekli dönen servo aynı sinyali açı olarak değil, hız ve yön olarak okur: 1,5 ms civarında durur, kısa darbe bir yöne, uzun darbe öbür yöne döndürür.
write(0)bir yönde,write(180)öbür yönde tam hız; 90 civarı durur (Arduino belgesi).- Konumunu bilmez: "90 derece dön" diyemezsiniz, belli bir süre döndürürsünüz.
- Durmuyorsa ayar vidasını (trimpot) çevirin ya da
writeMicroseconds(1500)değerini birkaç µs kaydırın.write(90)1472 µs gönderdiği için yavaşça kayabilir.
Servo motor ile step motor ve DC motor farkı
| DC motor | Step motor | Servo motor | |
|---|---|---|---|
| Ne yapar? | Sürekli döner | Adım adım döner | Söylenen açıya gider |
| Konumu bilir mi? | Hayır (enkoder gerekir) | Adım sayar, ölçmez | İçindeki potansiyometreyle ölçer |
| Dönüş | Sınırsız | Sınırsız | Çoğunlukla yarım tur civarı |
| Nasıl sürülür? | Sürücü kartı (L298N) | Sürücü kartı (ULN2003) | Sinyal pini, sürücü gerekmez |
| Tipik iş | Tekerlek, fan | 3B yazıcı, CNC | Kol, kapak, direksiyon |
"Normal motor" genellikle DC motordur: döner ama nerede durduğunu bilmez. Step motor için: step motor nasıl çalışır?
Servo motor AC mi, DC mi? Hobi servoları DC ile, 5 V civarında çalışır. Fabrikalardaki CNC ve endüstriyel robotlarda şebeke gerilimiyle çalışan AC servolar da vardır; onlara kendiniz bağlantı yapmayın, bu yetkili bir elektrikçinin işidir.
SG90 mı, MG996R mı?
| Veri sayfasına göre | SG90 | MG996R |
|---|---|---|
| Ağırlık | 9 g | 55 g |
| Takılma torku | 1,8 kgf·cm (4,8 V) | 9,4 kgf·cm (4,8 V), 11 kgf·cm (6 V) |
| Hız | 0,1 s / 60° | 0,17 s / 60° (4,8 V) |
| Çalışma gerilimi | 4,8 V (~5 V) | 4,8-7,2 V |
| Dönüş | yaklaşık 180° | yaklaşık 120° |
kgf·cm: 1,8 kgf·cm, milden 1 cm uzakta yaklaşık 1,8 kg'a karşı koymak demektir; 3 cm'lik kolda üçte biri. Bu takılma değeridir, servoyu sürekli bu yükte çalıştırmayın. SG90 torku farklı kopyalarda 1,2-1,8 kgf·cm yazıyor.
Sık yapılan hatalar
| Belirti | Sebep | Çözüm |
|---|---|---|
| Servo titriyor, Uno resetleniyor | Güç yetmiyor | Harici 5-6 V kaynak, GND ortak |
| Uçta vızıldıyor, ısınıyor | Darbe servonun ucunun ötesinde | Uçları bulun, attach(9, min, max) |
| Hiç kıpırdamıyor | Sinyal başka pinde ya da GND ortak değil | attach pinini ve GND'yi kontrol edin |
D9 ya da D10'da analogWrite çalışmıyor |
Uno'da Servo kütüphanesi bu iki pindeki PWM'i kapatır | LED'i 3, 5, 6 ya da 11'e alın |
| 360 servo durmuyor | Durma noktası 1500 µs'den kaymış | Trimpot ya da writeMicroseconds ile ince ayar |
| Kol yanlış açıda duruyor | Kol dişliye kaymış takılmış | write(90) verip kolu ortada yeniden takın |
Kaynaklar
Erişim: 17 Ekim 2026
- Arduino, Servo kütüphanesi belgeleri:
write,writeMicroseconds(1000, 1500, 2000 µs, uçta yüksek akım uyarısı), kablo renkleri, ayrı güç ve ortak GND, D9 ve D10'da PWM'in kapanması. - Arduino, Servo kütüphanesi kaynak kodu (1.3.0): varsayılan 544 ve 2400 µs, 20 ms yenileme,
write()içindekimap()hesabı. - Tower Pro, SG90 veri sayfası (üniversite kopyası): ağırlık, tork, hız, gerilim, 1-1,5-2 ms konumları.
- Tower Pro, MG996R veri sayfası (Cornell kopyası): tork, gerilim, 2,5 A takılma akımı, yaklaşık 120° dönüş.
- SparkFun, Hobby Servo Tutorial: servonun iç yapısı, 20 ms sinyal, sürekli dönen servo, servo başına en az 1 A önerisi.
- Arduino, UNO R3 ürün sayfası: USB'de 500 mA'de açan sigorta.
- Arduino, analogWrite(): Uno'daki PWM pinleri.