Hiber Bilişim okurlarına merhaba. Bu yazıda, Arduino platformunda servo motor kontrolünün temellerini ele alıyor; özellikle yaygın kullanılan SG90 servo motoru bir potansiyometre yardımıyla 0-180 derece arasında nasıl süreceğinizi adım adım gösteriyoruz. Servo motorlar robotik projelerden otomasyon sistemlerine kadar pek çok alanda hassas açı kontrolü sağlar. Bu rehberde bağlantı şemasından kod mantığına kadar ihtiyacınız olan tüm bilgileri bulacaksınız.
Servo Motor Nedir ve Neden SG90?
Servo motorlar, belirli bir açıya hassas şekilde konumlanabilen DC motorlardır. İçlerinde bulunan geri besleme devresi sayesinde motor mili, gönderilen sinyale göre istenen açıda sabit kalır. Arduino projelerinde en sık tercih edilen modellerden biri, düşük maliyeti ve yeterli torkuyla öne çıkan SG90'dır. SG90'ın teknik özelliklerine bakıldığında, çalışma gerilimi genellikle 4.8V ile 6V arasındadır. Tork değeri ise yaklaşık 1.8 kg-cm (4.8V) ile 2.5 kg-cm (6V) arasında değişir. Bu değerler, küçük robotik kol uygulamaları, pan-tilt mekanizmaları veya model uçaklar için yeterli sayılabilir. Ayrıca SG90, 0-180 derece aralığında hareket eder ve 60 derecelik dönüşü yaklaşık 0.1 saniyede tamamlayabilir.
Arduino ile SG90 Servo Bağlantısı Nasıl Yapılır?
Servo motoru Arduino kartına bağlamak oldukça basittir. SG90 üzerinde üç kablo bulunur: turuncu, kırmızı ve kahverengi. Bu kabloları doğru pinlere bağlamak, motorun düzgün çalışması için kritiktir. Arduino üzerindeki dijital pinlerden biri sinyal çıkışı olarak kullanılır. Örnek bağlantıda sinyal ucunu 11. pine takıyoruz; ancak 3, 5, 6, 9 veya 10 numaralı pinlerden herhangi biri de seçilebilir. Burada dikkat edilmesi gereken nokta, seçilen pinin PWM destekli olmasıdır. Arduino kartlarında yanında ~ işareti bulunan pinler, darbe genişlik modülasyonu (PWM) sinyali üretebilir. Servo kontrolü için bu pinlerin kullanılması daha kararlı sonuç verir.
Servo Kablo Renkleri ve Pin Eşleşmesi
SG90 servo motorun turuncu kablosu sinyal ucudur ve Arduino'nun seçilen dijital pinine (örnekte 11) bağlanır. Kırmızı kablo pozitif besleme (VCC) olup Arduino'nun 5V pinine, kahverengi kablo ise toprak (GND) hattına bağlanır. Bağlantıları yaparken renk kodlarına dikkat etmek, ters polarite gibi sorunların önüne geçer.
Güç Kaynağı ve Dikkat Edilmesi Gerekenler
Tek bir SG90 servoyu Arduino'nun 5V pininden beslemek çoğu durumda yeterlidir. Ancak birden fazla servo veya yük altında çalışan bir sistem söz konusuysa, Arduino'nun dahili voltaj regülatörü yetersiz kalabilir. Bu durumda harici bir 5V güç kaynağı kullanılması ve toprak hatlarının ortaklanması önerilir. Ayrıca servo motorlar kalkış anında ani akım çekebileceğinden, güç kaynağının bu akımı karşılayabildiğinden emin olunmalıdır.
Potansiyometre ile Servo Kontrol Kodu
Bağlantılar tamamlandıktan sonra sıra kodlamaya gelir. Aşağıdaki örnek, bir potansiyometreyi analog girişten okuyarak servo motorun açısını gerçek zamanlı olarak kontrol eder. Potansiyometrenin orta ucu Arduino'nun A0 pinine, diğer iki ucu ise 5V ve GND'ye bağlanır. Kod, Servo kütüphanesini kullanarak sinyal üretir ve potansiyometreden okunan 0-1023 aralığındaki değeri servo açı aralığı olan 0-180 dereceye dönüştürür. Bu sayede potansiyometreyi çevirdikçe servo motor da aynı oranda döner.
#include // Servo kütüphanesini projeye dahil et
Servo servoMotor; // Servo motor nesnesi tanımla
const int potPin = A0; // Potansiyometrenin bağlı olduğu analog pin
int potDeger = 0; // Analog okuma değerini tutan değişken
void setup() {
servoMotor.attach(11); // Servo sinyal ucunu 11. pine bağla
}
void loop() {
potDeger = analogRead(potPin); // Potansiyometre değerini oku (0-1023)
potDeger = map(potDeger, 0, 1023, 0, 180); // 0-1023 aralığını 0-180 dereceye ölçekle
servoMotor.write(potDeger); // Servo açısını güncelle
delay(15); // Stabil hareket için küçük gecikme
}
Kodun Çalışma Mantığı
analogRead() fonksiyonu, A0 pinindeki gerilimi 10 bit çözünürlükle okur ve 0-1023 arasında bir tam sayı döndürür. map() fonksiyonu ise bu değeri doğrusal olarak 0-180 aralığına dönüştürür. servoMotor.write() komutu, hesaplanan açıyı servo motora gönderir. delay(15) eklenmesi, servo motorun yeni konuma ulaşması için kısa bir süre tanır ve hareketin daha yumuşak olmasını sağlar. İhtiyaca göre bu gecikme süresi azaltılabilir veya artırılabilir.
Sık Karşılaşılan Sorunlar ve Çözümleri
Servo motor projelerinde en sık görülen sorunlardan biri titreme veya istenmeyen hareketlerdir. Bu genellikle yetersiz güç kaynağından veya gevşek bağlantılardan kaynaklanır. Servo motorun toprak hattının Arduino ile ortak olduğundan emin olun. Ayrıca kod içinde çok uzun delay() kullanmak servo tepki süresini yavaşlatabilir. Bir diğer hata kaynağı, Servo.h kütüphanesinin eksik veya yanlış dahil edilmesidir. Kodun en üstünde #include <Servo.h> satırının bulunduğundan emin olun. Eğer servo hiç hareket etmiyorsa, sinyal kablosunun doğru pine takıldığını ve potansiyometrenin orta ucunun A0'a bağlı olduğunu kontrol edin.
Bu yazıda Arduino ile SG90 servo motorun nasıl kontrol edileceğini, doğru bağlantı şemasını ve potansiyometre ile açı kontrolü sağlayan örnek kodu inceledik. Servo motorların çalışma mantığını kavradığınızda robotik projelerde çok daha karmaşık hareketleri kolayca oluşturabilirsiniz. Bir sonraki adım olarak iki servo kullanarak basit bir pan-tilt sistemi kurmayı veya joystick ile servo kontrol etmeyi deneyebilirsiniz.
Kodu yükleyip potansiyometreyi çevirerek servonuzun tepkisini test edin; aklınıza takılan soruları yorumlarda paylaşmaktan çekinmeyin.