Ana Sayfa · Akademi · Robotik ve Kodlama · Arduino · Servo Kontrolü

Servo Kontrolü

Servo kütüphanesiyle bir servoyu belirli bir açıya döndürmeyi öğren.

DERS PUSULASI

Bu sayfayı ne için kullanacaksın?

Ana fikir

Servo motor, Arduino'nun Servo kütüphanesiyle istediğimiz açıya döndürebildiğimiz, kolun tam olarak nereye bakacağını söyleyebildiğimiz bir motordur.

Üretilecek kanıt

Kendi "kamera tarayıcını" yap. Amaç: servo kolunu üç sabit konuma getirmek — sol (0°), orta (90°) ve sağ (180°) — ve her konumda bir saniye beklemek. Adımlar: Servoyu bağla: GND → GND, 5V → 5V, sinyal → pin 9. #include <Servo.h> ekle ve bir servo nesnesi oluştur. setup içinde attach(9) yaz. loop içinde sırayla write(0) , write(90) , write(180) çağır; her…

Kontrol tuzağı

180'den büyük veya 0'dan küçük açı yazmak write(200) gibi bir değer çoğu servoda çalışmaz. Açıyı 0 ile 180 arasında tut. Emin değilsen küçük değerlerle başla. attach komutunu unutmak attach(9) yazmadan write() çağırırsan servo hareket etmez, çünkü Arduino kolun hangi pine bağlı olduğunu bilmez. attach her zaman setup…

Sonraki bağlantı

Ultrasonik Mesafe Sensörü: Ses dalgalarıyla bir engelin ne kadar uzakta olduğunu ölçen sensörü Arduino'ya bağlayıp okumayı öğreneceğiz.

Modül kaynakları: Python Tutorial · Arduino Learn

SeviyeBaşlangıç
Yaş10–16
Süre30–45 dk
Ön koşulButon Debounce Mantığı
İçerikStandart ders · 1.515 kelime
Son güncelleme

Bir cümlelik özet

Servo motor, Arduino'nun Servo kütüphanesiyle istediğimiz açıya döndürebildiğimiz, kolun tam olarak nereye bakacağını söyleyebildiğimiz bir motordur.

Neden önemli?

Şimdiye kadar LED yaktık, buton okuduk, buton titreşimini (debounce) temizledik. Bunların hepsi bilgiyi *okumak* veya bir ışığı *açıp kapatmak* içindi. Ama gerçek robotlar bir de hareket eder: bir kol kalkar, bir kapı açılır, bir tekerlek yön değiştirir.

Servo motor, hareketi kontrol etmenin en kolay yoludur. Sıradan bir motor sadece "dön" der; ne kadar döndüğünü bilmezsin. Servo ise farklıdır: ona "90 dereceye git" dersin, o da tam oraya gider ve orada durur. Yani açıyı doğrudan kontrol edebilirsin.

Bu yüzden servo, robotik projelerinde çok kullanılır:

Kısa tanım: Servo, gönderdiğin açı komutuna göre kolunu belli bir konuma getiren ve orada tutan bir motordur.

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

Açı ile konuşan bir motor

Küçük hobi servolarının (örneğin SG90) üç kablosu vardır:

Çoğu küçük servo yaklaşık 0 ile 180 derece arasında döner. Yani kolu bir yarım dairenin herhangi bir noktasına getirebilirsin: 0 derece bir uç, 180 derece diğer uç, 90 derece tam orta.

Arduino sinyal kablosundan çok hızlı darbeler (sinyaller) gönderir. Servonun içindeki küçük elektronik devre bu darbeleri okur ve kolu doğru açıya çevirir. İyi haber şu: bu darbelerin hesabını bizim yapmamıza gerek yok. Servo kütüphanesi tüm zor işi bizim yerimize hallediyor.

Servo kütüphanesi: attach ve write

Arduino'da hazır kod paketlerine kütüphane (library) denir. Servo kütüphanesi Arduino programına baştan geldiği için ekstra kurulum gerektirmez. Kullanmak için üç şey öğrenmen yeterli:

#include <Servo.h>   // Servo kütüphanesini programa dahil et

Servo kol;           // "kol" adında bir servo nesnesi oluştur

void setup() {
  kol.attach(9);     // Servonun sinyal kablosu 9 numaralı pine bağlı
  kol.write(90);     // Kolu 90 dereceye (ortaya) getir
}

void loop() {
  // Bu örnekte tekrar eden bir şey yok
}

Üç anahtar komut:

Bağlantı özeti (küçük bir SG90 için):

Servoyu hareket ettirelim

Örnek: iki açı arasında gidip gelmek

Kolu önce 0 dereceye, sonra 180 dereceye götürüp bekletelim. Bu, bir bariyerin açılıp kapanmasına benzer.

#include <Servo.h>

Servo kol;

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

void loop() {
  kol.write(0);      // Kolu bir uca götür
  delay(1000);       // 1 saniye bekle
  kol.write(180);    // Kolu diğer uca götür
  delay(1000);       // 1 saniye bekle
}

Burada delay(1000) önemli. Servonun dönmesi zaman alır; hemen yeni bir komut verirsen kol hedefe ulaşamadan geri döner. Kısa bir bekleme, kola yerine ulaşması için süre tanır.

Örnek: yavaşça süpürmek (sweep)

Kolu tek adımda değil, yavaşça 0'dan 180'e kaydıralım. Bu hareket bir sensörü sağa-sola çevirip etrafı taramaya benzer.

#include <Servo.h>

Servo kol;
int aci = 0;

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

void loop() {
  for (aci = 0; aci <= 180; aci++) {
    kol.write(aci);  // Açıyı birer derece artır
    delay(15);       // Her adımdan sonra kısa bekle
  }
  for (aci = 180; aci >= 0; aci--) {
    kol.write(aci);  // Açıyı birer derece azalt
    delay(15);
  }
}

İlk döngü açıyı 0'dan 180'e birer birer artırır, ikinci döngü geri getirir. delay(15) her adımı yavaşlatır. Sayıyı büyütürsen hareket yavaşlar, küçültürsen hızlanır.

Örnek: butona basınca kapıyı aç

Geçen dersteki butonu hatırla. Butona basınca servoyu açık konuma, bırakınca kapalı konuma getirelim. Basit bir park bariyeri gibi.

#include <Servo.h>

Servo kapi;
const int buton = 2;

void setup() {
  kapi.attach(9);
  pinMode(buton, INPUT_PULLUP);  // Dahili direnç aktif
}

void loop() {
  if (digitalRead(buton) == LOW) {
    kapi.write(90);   // Basılıysa: aç
  } else {
    kapi.write(0);    // Basılı değilse: kapat
  }
}

INPUT_PULLUP kullandığımız için buton basılıyken pin LOW okur. Basınca kol 90 dereceye, bırakınca 0 dereceye döner.

Mini uygulama

Kendi "kamera tarayıcını" yap. Amaç: servo kolunu üç sabit konuma getirmek — sol (0°), orta (90°) ve sağ (180°) — ve her konumda bir saniye beklemek.

Adımlar:

  1. Servoyu bağla: GND → GND, 5V → 5V, sinyal → pin 9.
  2. #include <Servo.h> ekle ve bir servo nesnesi oluştur.
  3. setup içinde attach(9) yaz.
  4. loop içinde sırayla write(0), write(90), write(180) çağır; her birinin arasına delay(1000) koy.
  5. Kodu yükle ve kolun üç noktada durup durmadığını izle.

Meydan okuma: Konumların arasına Serial.begin(9600) ve Serial.println() ekleyerek her hareketin adını (örneğin "Sol", "Orta", "Sag") seri ekrana yazdır. Böylece kodun hangi satırda olduğunu gözünle görebilirsin.

Uygulama laboratuvarı: Servo Kontrolü

Servo Kontrolü konusunu kalıcı hâle getirmenin en iyi yolu, kavramı küçük ve ölçülebilir bir göreve dönüştürmektir. Bu çalışmada Servo motor nasıl çalışır? ile Servo kütüphanesi: attach ve write arasındaki ilişkiyi kullanarak bağlantı şeması, derlenebilen Arduino kodu, seri monitör kaydı ve test sonucu hazırlayacaksın. Amaç yalnız sonucun çalışması değil; hangi kararı neden verdiğini, neyi test ettiğini ve hangi durumda tasarımı değiştireceğini açıklayabilmektir.

Görev senaryosu

Şu senaryoyu ele al: buton sıçramasını yazılımla azaltan kontrollü sayaç. Dersin ana hedefi “Servo kütüphanesiyle bir servoyu belirli bir açıya döndürmeyi öğren” olduğuna göre önce problemi tek cümleyle tanımla. Ardından sistemin alacağı girdiyi, uygulayacağı işlemi ve üreteceği çıktıyı ayrı ayrı yaz. Bilmediğin bir ayrıntı varsa onu varsayım olarak işaretle; varsayımı gerçek bilgi gibi kullanma.

  1. Planla: Başlangıç durumunu, beklenen sonucu ve kullanacağın kavramları yaz.
  2. En küçük sürümü kur: Yalnız temel davranışı çalıştır; süsleme ve ek özellikleri sonraya bırak.
  3. Üç test hazırla: Normal bir durum, sınırda bir durum ve hatalı ya da beklenmeyen bir durum seç.
  4. Sonucu kaydet: Beklenen ile gerçekleşeni yan yana yaz; fark varsa olası nedeni belirt.
  5. Tek değişiklik yap: Aynı anda birçok şeyi değiştirmek yerine bir kararı düzeltip testi yeniden çalıştır.

Başarı ölçütleri

“Servo Kontrolü” çalışmasını bitirdiğinde ürünü bir arkadaşına yalnız bölüm başlıklarıyla anlat. Arkadaşın buton sıçramasını yazılımla azaltan kontrollü sayaç senaryosundaki adımları ve karar nedenlerini takip edebiliyorsa anlatım yeterince açıktır. Anlaşılmayan noktayı daha fazla terim ekleyerek değil, Servo motor nasıl çalışır? ve Servo kütüphanesi: attach ve write ilişkisini daha küçük adımlara bölerek düzelt.

Sık yapılan hatalar

180'den büyük veya 0'dan küçük açı yazmak

write(200) gibi bir değer çoğu servoda çalışmaz. Açıyı 0 ile 180 arasında tut. Emin değilsen küçük değerlerle başla.

attach komutunu unutmak

attach(9) yazmadan write() çağırırsan servo hareket etmez, çünkü Arduino kolun hangi pine bağlı olduğunu bilmez. attach her zaman setup içinde, write'tan önce gelmeli.

Beklemeyi (delay) atlamak

Servoya arka arkaya çok hızlı komut verirsen kol titreyebilir veya hedefe ulaşamaz. Her hareketten sonra kola yerine varması için biraz süre tanı.

Servoyu ayrı güç olmadan zorlamak

Büyük bir servoyu veya birden fazla servoyu doğrudan Arduino'nun 5V pininden beslersen Arduino gereğinden fazla akım çeker ve resetlenebilir. Büyük servolar için ayrı bir güç kaynağı gerekir (bir sonraki bölümde).

Güvenlik notu

Servo bir hareketli parçadır. Kolu döndüğü sırada parmağını, saçını veya kabloyu araya sıkıştırmamaya dikkat et. Deneyleri bir yetişkinle birlikte yap.

Güç konusunda dikkatli ol:

Ders özeti

Kontrol soruları

  1. Servo kütüphanesini programa dahil etmek için hangi satırı yazarız?
  2. kol.write(90) komutu ne yapar?
  3. attach(9) komutu genelde programın hangi bölümünde yer alır ve ne işe yarar?
  4. Küçük bir hobi servosu yaklaşık kaç dereceye kadar döner?
  5. Büyük bir servoyu Arduino'nun 5V pininden beslemek neden sorun çıkarır ve doğru çözüm nedir?

Cevaplar

  1. #include <Servo.h> satırını programın en başına yazarız.
  2. Servo kolunu 90 dereceye, yani hareket aralığının tam ortasına getirir ve orada tutar.
  3. setup bölümünde yer alır ve servonun sinyal kablosunun hangi pine bağlı olduğunu Arduino'ya söyler. write çağrılmadan önce yazılmalıdır.
  4. Yaklaşık 0 ile 180 derece arasında, yani bir yarım dairelik aralıkta döner.
  5. Büyük servo çok akım çeker; Arduino bu akımı karşılayamaz ve resetlenebilir ya da zarar görebilir. Doğru çözüm ayrı bir güç kaynağı kullanmak ve o kaynağın GND'sini Arduino'nun GND'siyle ortak bağlamaktır.

Kaynak ve doğrulama notu

“Servo Kontrolü” dersi için doğrulama odağı Servo motor nasıl çalışır? ile Servo kütüphanesi: attach ve write arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Arduino uyumlu kartlarda pin, gerilim ve akım sınırları modele göre değişebilir. Kod derlense bile devre güvenli olmayabileceğinden, motor ve servo gibi yükler uygun sürücü ve harici besleme ile kullanılmalıdır.

Sonraki ders

Ultrasonik Mesafe Sensörü: Ses dalgalarıyla bir engelin ne kadar uzakta olduğunu ölçen sensörü Arduino'ya bağlayıp okumayı öğreneceğiz.

Quiz’i BaşlatArduino bölümüne dön
SORU HAVUZU

Bu dersi 10 soruyla pekiştir

Bu ders için 20 soruluk bir havuz hazırlandı. Her başlangıçta 10 soru ve seçenekler yeniden karıştırılır.