Proje hakkında
Normal bir DC motor enerji verildiği sürece döner. Servo motor ise içindeki küçük bir potansiyometre ve kontrol devresi sayesinde konumunu bilir ve kendisine söylenen açıya gidip orada durur. SG90 gibi hobi servoları 0 ile 180 derece arasında hareket eder.
Bu projede ilk kez bir kütüphane kullanacağız. Servo kütüphanesi, servo motorun anladığı özel sinyali üretme işini bizim yerimize yapar. Biz sadece "90 dereceye git" deriz. Potansiyometreyi çevirdikçe servo kolunun da aynı oranda döndüğünü göreceksiniz; bu, robot kolu projelerinin temelidir.
- Servo motorların iç yapısını ve PWM kontrol sinyalini
- Arduino kütüphanesini projeye eklemeyi
- Nesne oluşturup fonksiyonlarını çağırmayı
- Analog bir girişi açı değerine dönüştürmeyi
Malzeme listesi
Projeyi tamamlamak için aşağıdaki 7 çeşit malzemeye ihtiyacınız var. Parçaların çoğu Arduino başlangıç setlerinde hazır olarak bulunur.
Arduino Uno R3 1 adet
Projenin beyni. Nano veya Mega ile de aynı kod çalışır.
Breadboard 1 adet
Lehimsiz devre kurmak için yarım boy (400 delik) yeterlidir.
SG90 mikro servo motor 1 adet
Plastik dişli, 9 g, 0–180°. Pakette çıkan kollar (horn) dahil.
10 kΩ potansiyometre 1 adet
Döner tip, 3 bacaklı.
100 µF elektrolitik kondansatör (önerilir) 1 adet
Servo ani akım çektiğinde beslemeyi dengeler.
Jumper kablo (erkek-erkek) 7 adet
USB A-B kablosu 1 adet
Kodu yüklemek ve kartı bilgisayardan beslemek için.
Devre bağlantıları
Bağlantıları USB kablosu takılı değilken yapın. Her satır, bileşenin hangi bacağının Arduino'nun hangi pinine gideceğini gösterir; çizgi rengi önerilen kablo rengidir.
Adım adım kurulum
Servo kolunu takın
Pakette çıkan tek kollu plastik parçayı servonun miline bastırın. Vidayı şimdilik sıkmayın.
Servoyu bağlayın
Servo kablosunun ucuna üç jumper kablo takarak kahverengiyi GND hattına, kırmızıyı 5V hattına, turuncuyu D9'a bağlayın.
Kondansatörü ekleyin
100 µF kondansatörü breadboard'un 5V ve GND hatları arasına takın. Şeritli (−) tarafın GND hattına gelmesine dikkat edin.
Potansiyometreyi bağlayın
Uç bacakları 5V ve GND hatlarına, orta bacağı A0 pinine bağlayın.
Kodu yükleyin
Servo kütüphanesi Arduino IDE ile birlikte gelir; ek kurulum gerekmez. Kodu yükleyin.
Hareketi test edin
Potansiyometreyi bir uçtan diğerine yavaşça çevirin. Servo kolu da 0° ile 180° arasında aynı yönde dönmeli.
Kolu hizalayın
Potansiyometreyi ortaya getirip servoyu 90°'ye konumlandırın. Kolu çıkarıp yatay konumda yeniden takın ve vidayı sıkın.
Arduino kodu
Kodları Arduino IDE'ye yapıştırıp yükleyebilirsiniz. Türkçe karakterler yalnızca yorum satırlarında kullanıldı; Seri Port Ekranına yazdırılan metinlerde bilerek kullanılmadı.
Potansiyometrenin konumunu servo açısına dönüştüren kod.
// Potansiyometre ile Servo Motor Kontrolü
// RobotikHocasi.com
#include <Servo.h> // Servo kütüphanesini ekle
Servo servoMotor; // Servo nesnesi oluştur
const int potPin = A0;
const int servoPin = 9;
void setup() {
servoMotor.attach(servoPin); // Servoyu D9 pinine bağla
Serial.begin(9600);
}
void loop() {
int potDegeri = analogRead(potPin); // 0 - 1023
int aci = map(potDegeri, 0, 1023, 0, 180); // 0 - 180 derece
servoMotor.write(aci); // Servoyu açıya götür
Serial.print("Aci: ");
Serial.println(aci);
delay(15); // Servonun konuma ulaşması için kısa bekleme
}
Bonus: Potansiyometre olmadan servo motorun kendi kendine ileri geri taraması.
// Servo tarama (sweep) hareketi
#include <Servo.h>
Servo servoMotor;
void setup() {
servoMotor.attach(9);
}
void loop() {
for (int aci = 0; aci <= 180; aci++) {
servoMotor.write(aci);
delay(15);
}
for (int aci = 180; aci >= 0; aci--) {
servoMotor.write(aci);
delay(15);
}
}
Kod açıklaması
#include <Servo.h>Servo kütüphanesini projeye dahil eder. Kütüphaneler, başkalarının yazdığı ve hazır kullanabileceğimiz kod paketleridir.
Servo servoMotor;Servo türünde servoMotor adında bir nesne oluşturur. Birden fazla servo için servo1, servo2 gibi ayrı nesneler oluşturabilirsiniz.
servoMotor.attach(servoPin)Nesneyi fiziksel bir pine bağlar. Bu satırdan sonra kütüphane D9 pininden sürekli kontrol sinyali üretmeye başlar.
servoMotor.write(aci)Servoya hedef açıyı bildirir. Servo motor bu açıya gider ve yük altında bile orada kalmaya çalışır.
delay(15)Servo 60 dereceyi yaklaşık 0,1 saniyede döner. Kısa bir bekleme, sinyal gönderme hızını servonun takip edebileceği seviyede tutar.
Nasıl çalışır?
Servo motor, her 20 milisaniyede bir gelen bir darbeyle kontrol edilir. Darbenin genişliği hedef açıyı belirler: yaklaşık 1 ms genişliğinde darbe 0°, 1,5 ms 90°, 2 ms 180° anlamına gelir. Servo kütüphanesi write() ile verdiğimiz açıyı bu darbe genişliğine çevirir.
Servonun içinde küçük bir DC motor, bir dişli kutusu, mile bağlı bir potansiyometre ve bir kontrol devresi bulunur. Kontrol devresi, potansiyometreden okuduğu mevcut açıyı istenen açıyla sürekli karşılaştırır ve fark sıfır olana kadar motoru döndürür. Bu yapıya kapalı çevrim kontrol denir.
Sorun giderme
Servo titriyor veya tıkırdıyor
Arduino servo hareket edince yeniden başlıyor
Servo uç noktalarda zorlanıp vınlıyor
Servo hiç hareket etmiyor
Geliştirme fikirleri
Projeyi tamamladıysanız, aşağıdaki fikirlerle bir adım öteye taşıyabilirsiniz.
Joystick kontrollü robot kol
İki eksenli bir joystick ve iki servo ile basit bir pan-tilt mekanizması yapın.
Analog gösterge
Servoya bir ibre takın ve sıcaklığı veya ışık seviyesini kadranda gösterin.
Otomatik kapı
Mesafe sensörüyle birleştirip yaklaşan kişiye kapı açan bir sistem yapın.
Konum hafızası
Bir butona basınca mevcut açıyı kaydedip başka bir butonla o açıya geri dönün.