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:
- Robot kolunun dirseğini belli bir açıya getirmek.
- Bir bariyeri (park kapısı gibi) açıp kapatmak.
- Kamerayı veya sensörü sağa-sola çevirip etrafı taramak.
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:
- Kahverengi (veya siyah): GND, yani toprak.
- Kırmızı: Güç (5V).
- Turuncu (veya sarı): Sinyal. Arduino'nun açı komutunu bu kablodan gönderir.
Ç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:
Servo kol;— Servoya bir isim veriyoruz. İstersenkapiya dakamerade.kol.attach(9);— Servonun hangi pine bağlı olduğunu söylüyoruz. Geneldesetupiçinde bir kez yazılır.kol.write(90);— Kolu istediğin açıya gönderiyorsun. Sayı 0 ile 180 arasında olmalı.
Bağlantı özeti (küçük bir SG90 için):
- Servo GND → Arduino GND
- Servo 5V → Arduino 5V
- Servo sinyal → Arduino pin 9
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:
- Servoyu bağla: GND → GND, 5V → 5V, sinyal → pin 9.
#include <Servo.h>ekle ve bir servo nesnesi oluştur.setupiçindeattach(9)yaz.loopiçinde sıraylawrite(0),write(90),write(180)çağır; her birinin arasınadelay(1000)koy.- 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.
- Planla: Başlangıç durumunu, beklenen sonucu ve kullanacağın kavramları yaz.
- En küçük sürümü kur: Yalnız temel davranışı çalıştır; süsleme ve ek özellikleri sonraya bırak.
- Üç test hazırla: Normal bir durum, sınırda bir durum ve hatalı ya da beklenmeyen bir durum seç.
- Sonucu kaydet: Beklenen ile gerçekleşeni yan yana yaz; fark varsa olası nedeni belirt.
- 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
- Kartın 5 V veya 3,3 V çalışma sınırı doğru mu?
- Pin numaraları kod ve devrede eşleşiyor mu?
- Seri monitör ölçümü beklenen aralıkta mı?
- Motor veya servo karttan doğrudan aşırı akım çekiyor mu?
- Güç kesildiğinde sistem güvenli duruma dönüyor mu?
“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:
- Küçük servo (SG90 gibi): USB'den beslenen Arduino'nun 5V pini genelde tek bir küçük servo için yeterlidir.
- Büyük servo veya birden fazla servo: Bunları Arduino pininden besleme. Ayrı bir güç kaynağı (örneğin bir pil paketi) kullan ve o güç kaynağının GND'sini Arduino'nun GND'siyle ortak bağla ki sinyal doğru anlaşılsın. Bu bağlantıyı bir yetişkinle birlikte kur.
- Servo ısınıyor, gariplik yapıyor veya kol takılıp zorlanıyorsa gücü hemen kes. Motorun zorla döndürülmeye çalışıldığı durumlar hem servoya hem Arduino'ya zarar verir.
- Motorlar için asla şebeke (priz) elektriği kullanma. Yalnız USB veya uygun pil paketleriyle çalış.
Ders özeti
- Servo motor,
write(aci)komutuyla istediğin açıya (0–180°) gidip orada duran bir motordur. Servokütüphanesi#include <Servo.h>ile programa eklenir ve zor darbe hesabını bizim yerimize yapar.- Üç temel adım: nesne oluştur,
setupiçindeattach(pin), sonrawrite(aci). - Servonun dönmesi zaman alır; hareketler arasına
delaykoymak gerekir. - Küçük servo USB'den beslenebilir; büyük veya çoklu servolar ayrı güç kaynağı ister ve GND ortak bağlanır.
Kontrol soruları
Servokütüphanesini programa dahil etmek için hangi satırı yazarız?kol.write(90)komutu ne yapar?attach(9)komutu genelde programın hangi bölümünde yer alır ve ne işe yarar?- Küçük bir hobi servosu yaklaşık kaç dereceye kadar döner?
- Büyük bir servoyu Arduino'nun 5V pininden beslemek neden sorun çıkarır ve doğru çözüm nedir?
Cevaplar
#include <Servo.h>satırını programın en başına yazarız.- Servo kolunu 90 dereceye, yani hareket aralığının tam ortasına getirir ve orada tutar.
setupbö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.- Yaklaşık 0 ile 180 derece arasında, yani bir yarım dairelik aralıkta döner.
- 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.