Merhaba arkadaşlar,
Mobilhanem.com için hazırladığımız Arduino derslerine Servo Motor Kullanımı ile devam ediyoruz. Bu dersimizde Servo Motorları ve Arduino ile Servo Motorları kontrol edebileceğimiz Servo kütüphanesini inceleyeceğiz.
Arduino ile Servo Motor Kullanımı
Arduino ile Servo Motor kullanımı için Arduino’nun Servo.h kütüphanesini yararlanılabilmektedir. Servo kütüphanesini kullanmak bizler için kolaylıklar sağlamaktadır ancak bu bir gereklilik değildir. Servo Motorların kontrolü için ihtiyaç duyulan sinyali Arduino üzerinden bulunan PWM destekli pinler kullanılarakta üretebilir ve Servo Motor kontrolünü sağlayabilir. Biz bu dersimizde Servo kütüphanesini kullanarak nasıl Servo motorlarımızı kontrol edebileceğimizi inceleyeceğiz.
Servo Kütüphanesini kullanırken dikkat etmemiz gereken bazı durumlar vardır. Bu durumlardan ilki Arduino 0016 ve daha eski sürümlerde, Servo kütüphanesi sadece 9 ve 10 numaralı pinleri desteklemektedir. Eğer Arduino 0016 veya daha eski bir sürüm kullanmıyorsak Servo motorumuzu her hangi bir PWM pimine bağlayarak kullanabiliriz. Dikkat etmemiz gereken ikinci durum ise Servo kütüphanesini kullanırken 9 ve 10 numaralı PWM pinlerin analogWrite özelliğinin bir Servo bağlı olsun yada olmasın devre dışı kalmasıdır. Bu nedenle Servo kütüphanesi ile çalışırken bu durumu dikkate alarak mümkünse 9 ve 10 numaralı pinlere öncelik vermemizde fayda vardır.
Arduino Servo Motor Bağlantıları
Servo motorların güç, toprak ve kontrol sinyali için üç bağlantı noktası bulunmaktadır. Bu bağlantılar için kullanılan kabloların renkleri çeşitlilik gösterebililmektedir. Topraklama kablosu siyah veya kahverengi, güç kablosu kırmızı, kontrol sinyali için kullanılan kablo ise sarı, turuncu veya beyaz olabilmektedir.
Kullandığınız Servo’nun güç ihtiyacına göre Arduino kartınıza veya harici bir besleme kaynağına bağlayabilirsiniz. Biz bu dersimizde 5V gerilim ile çalışabilen bir Servo ile örneklerimizi gerçekleştireceğimiz için güç kaynağı olarak Arduino kartımızı kullanacağız.
Arduino Servo Kütüphanesi ve Fonksiyonları
Bu kütüphane Arduino kartları ile Servo motorların kontrolünün kolaylıkla sağlanabilmesi için geliştirilmiştir.
Arduino IDE’de bu kütüphanenin kullanımını gösteren iki örnek bulunmaktadır. Bu örneklere Arduino IDE’nizi kullanarak
Dosya -> Örnekler -> Servo
yolunu takip ederek ulaşabilirsiniz.
Dersimizin geri kalan kısmında bu örnekler hazırlanırken kullanılan fonksiyonları ve Servo kütüphanesinin diğer fonksiyonlarını incelemeye çalışacağız.
Servo Kütüphanesi Fonksiyonları
#include <Servo.h> // Servo kütüphanesinin eklenmesi Servo myservo; // Kütüphane kullanılarak bir nesne oluşturulması.
Servo kütüphanesini kullanabilmemiz için yukarıdaki kod satırında olduğu gibi kütüphaneyi projemize eklememiz ve kontrol için bu kütüphaneden en az bir nesne oluşturmamız gerekmektedir. Bu işlemleri yaptıktan sonra aşağıdaki fonksiyonları kullanabiliriz.
- attach(pinNo) – Kütüphaneyi kullanarak oluşturduğumuz nesneye hangi pini kullanarak motorumuzu kullanacağımızı belirtmek için kullanılır.
- attach(pinNo,min,max) – Kabaca Servo motorlar kontrol girişine gelen sinyalin uzunluğuna göre motorun açı değerini değiştirirler ve belirli sinyal uzunluğu aralıklarında çalışırlar. Standart servolarda 1000 mikrosaniyelik bir sinyal için motorumuz 0 derecede, 1500 mikrosaniyelik bir sinyal için 90 derecede ve 2000 mikrosaniyelik bir sinyal için 180 derecede konumlanacaktır. attach fonksiyonunun 3 parametreli kullanımı olan bu fonksiyon ise Servo motorumuzun özelliklerine göre bu aralığı değiştirebilmek için kullanılır. Varsayılan olarak min için 544, max için 2400’dür. Bu değerler kullanılacak olan motorun özelliklerine göre değiştirilerek hassas bir kullanım sağlanabilir.
- attached() – Oluşturmuş olduğumuz nesnenin motor kontrolü için bir pine bağlı olup olmadığını kontrol etmek için kullanılır. Bağlı ise true, değil ise false değerini döndürür.
- detach() – Oluşturulan ve attach() fonksiyonu ile bir pin ile ilişkilendirilen nesnenin pin ile ilişkisini kesmek için kullanılır. İlişki kesme işleminden sonra attach() fonksiyonu kullanılarak oluşturulan servo nesnemiz başka bir pin ile veya daha önce bağlı olduğu pin ile ilişkilendirilerek tekrar kullanılabilir.
- Ayrıca bu fonksiyon için Arduino’nun resmi sitesinde aşağıdaki bilgi bulunmaktadır.
- Yukarıda da görülebildiği gibi bu fonksiyonu kullandıktan sonra 9 ve 10 pinleri PWM çıkış sinyali için analogWrite() fonksiyonu ile kullanabileceğimiz belirtilmiştir. Ancak bu bilgi resmi sitede bulunmasına rağmen uygulama esnasında malesef söylenen işi gerçekleştirememektedir. Bu konu hakkında Arduino’ya yapılan Bug bildirimleri bulunmaktadır. Arduino tarafında bir güncelleme gerçekleştiği zaman yazımızdaki ilgili kısım güncellenecektir.
- read() – Oluşturduğumuz nesne ile kontrol ettiğimiz motorun o anki açı değerini öğrenmek için kullanılır.
- write(aciDegeri) – Bu fonksiyon ile daha önceden bağlanmış olan motorumuzun açı değeri ayarlanır. 0 ile 180 aralığında bir değer alır.
- writeMicroseconds(mikrosaniye) – Bu fonksiyon Servo motora gönderilecek olan sinyalin uzunluğunu değiştirerek istenilen açı değerine ulaşmak için kullanılır.
Örnek
Aşağıdaki örnekte yukarıdaki bahsedilen fonksiyonların kullanımı gösterilmeye çalışılmıştır. Örnek kodlarının altında bulunan simülasyon eklentisinde bulunan Start Simulation butonuna kullanarak örneği çalıştırabilirsiniz.
/* Bu örnek Servo kütüphanesinin kullanımı göstermek için oluşturulmuştur. */ #include <Servo.h> Servo servo; void setup() { } void loop() { // attach fonksiyonu ile servo nesnemizi 9. pin ile ilişkilendiriyoruz. servo.attach(9); /* * Arduino'nun kendi örneklerinde de olduğu gibi 9 numaralı pine bağlı olan * servo moturumuzu birer write fonksiyonunu kullanarak 0'dan 180 dereceye * kadar 1'er derece artış ile döndürür. */ for (int i=0;i<=180;i++){ servo.write(i); delay(20); } // servo nesnesinin önceden bağlı olduğu pin ile ilişkisini kesme servo.detach(); /* * attach fonksiyonu ile servo nesnemizi bu kez 10. pin ile ilişkilendiriyoruz. * Ayrıca varsayılan değerler olan 544ms ve 2400ms'i belirterek bu işlemi gerçekleştiriyoruz. * Bu örnek bir simülasyon üzerinde gösterilmek üzere hazırlandığı için varsayılan değerler * kullanılmıştır. * Gerçek servolar ile çalışırken servonuzun özellikleri doğrultusunda * min ve max değerlerin kullanılması gerekmektedir!! */ servo.attach(10,544,2400); /* * Bu örnekte 544-2400ms aralığı kullanıldığı için 1 derecelik hareket için yaklaşık olarak * 10ms'lik değişime ihtiyaç duyulmaktadır. Bu nedenlede 0 dereceden 180 dereceye ilerleyiş * write fonksiyonu kullanılırken olduğu gibi birer birer artarak değil onar onar artarak * sağlanmıştır. */ for(int i=544;i<=2400;i+=10){ servo.writeMicroseconds(i); delay(20); } servo.detach(); delay(1000); servo.attach(9); for (int i=180;i>=0;i--){ servo.write(i); delay(20); } servo.detach(); servo.attach(10,544,2400); servo.writeMicroseconds(2400); for(int i=2400;i>=544;i-=10){ servo.writeMicroseconds(i); delay(20); } servo.detach(); delay(1000); }
Bu dersimizde Arduino Servo kullanımını incelemeye çalıştık. Servo kütüphanesinin nasıl kullanılabileceğini, fonksiyonlarının neler ve hangi işlevlere sahip olduklarını anlatmaya çalıştık. Konuyla ilgili yorumlarınızı konu altından yapabilir, sorularınızı Mobilhanem Soru&Cevap bölümünden sorabilirsiniz. Bir sonraki içeriğimizde Mobilhanem.com‘da görüşmek üzere.
Tüm Arduino Dersleri için tıklayınız..
26