Dokümanlar · ← Blog yazıları

Robotik

Servo motor nedir, nasıl çalışır? Arduino bağlantısı, kodu ve açı ayarı

Probot Studio

Bu yazıda ne yapacağız?

  1. Servonun içini ve verilen açıda nasıl durduğunu göreceğiz.
  2. Darbe genişliğiyle açıyı deneme alanında kendiniz ayarlayacaksınız.
  3. Servoyu Arduino'ya bağlayıp süpürme ve potansiyometre kodlarını yazacağız.
  4. 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çı.

Solda servo sinyali 1 ms, 1,5 ms ve 2 ms arasında değişiyor; sağda üstten görülen servonun kolu buna göre 0, 90 ve 180 dereceye dönüyor

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.

Servo motor nasıl çalışır?

Servonun içi akış şeması olarak: sinyal kontrol kartına hedef açıyı söyler, kart potansiyometrenin ölçtüğü açıyla karşılaştırıp DC motoru çevirir, dişliler hızı düşürüp kuvveti artırır, çıkış mili döner, potansiyometre yeni açıyı karta bildirir

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.

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?

Bağlantı şeması: servonun kahverengi kablosu breadboardun eksi hattına, kırmızısı artı hattına, turuncu sinyal kablosu Uno D9 pinine gidiyor; potansiyometrenin dış bacakları artı ve eksi hatlara, orta bacağı A0'a bağlı; Uno 5V artı hattına, GND eksi hattına bağlı

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?

Harici güçle bağlantı: 5-6 V güç kaynağının artısı servonun kırmızı, eksisi kahverengi kablosuna gidiyor; Uno D9 sinyal kablosuna, Uno GND de güç kaynağının eksisine bağlı. Not: takılan MG996R 2,5 A çekebilir, Uno USB'de 500 mA sigortası var

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.

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.

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