Servo Motor

Bu yazımda daha önce servo motor kullanmamış arkadaşlar için biraz servo motorlara değineceğim ve projelerinizde kullanmadan önce servo motor hakkında temel bilgiye sahibi olmanızı amaçlıyorum. Servo motorlar dişlilere ve bu dişlilerin kontrol edilebildiği hassas bir şafta sahiptir. Genellikle servo motorlar 0 ile 180 derece arası dönüş kabiliyetine sahipken, sürekli dönebilen (360 derece dönüş yapabilen) servolar da mevcuttur. Ben bu yazımda yaygın olan yani 0 ile 180 derece arası dönüş kabiliyetine sahip olanları kullanacağım (Bu servoların stoperlerini keserek bunları da sürekli dönebilen servolar haline getirebilirsiniz ancak servolar için başlangıç düzeyinde olduğumuzu varsayarsak, şimdilik bu çok daha ileride ele alacağımız bir yazımız olsun.) ancak yazacaklarımın çoğu sürekli dönebilen servolar için de geçerlidir. Arduino IDE kurulumu yaptığınızda zaten kendi içinde yer alan kütüphaneler arasında servo kütüphanesi de hazırda geliyor dolayısıyla projelerinizde servo kütüphanesini çağırarak servo veya servolarınızı oldukça kolay kontrol edebiliyorsunuz. Servo motor satın aldığınızda elinize üç kablosu olan bir servo geliyor, bu pinler güç, toprak ve sinyal pinleri. Genellikle güç kırmızı renkli kablo, toprak kahverengi veya siyah renkli kablo ve sinyal pini ise turuncu, sarı yada beyaz renkli kabloyla temsil edilmektedir. Güç pinini 5 Volt ve sinyal pinini dijital pinlerden herhangi birisine bağlamanız gerekmektedir PWM olması şart değildir.

İki farklı devre kuralım ve ilkinde servomuzu for döngüsü içinde bir uçtan bir uca döndürelim istiyorum. İkinci devremizde ise servomuzu bir potansiyometre ile kontrol edelim.

İlk Devre:

servo1


KOD:

#include <Servo.h> 

Servo servom;  // bir servo objesi yaratıyoruz
int poz = 0;    // servomuzun pozisyonunu belirliyoruz

void setup()
{
  servom.attach(9);  // yarattığımız servo objesinin bağlı olduğu pini yazıyoruz
} 

void loop()
{
  for(poz = 0; poz <= 180; poz += 1) // servomuzu 0dan 180 dereceye döndürüyoruz
  {
    servom.write(poz);              // servoya olması gereken pozisyon bilgisini gönderiyoruz
    delay(15);                       // her derecede beklemesi için
  }
  for(poz = 180; poz>=0; poz-=1)     // 180den 0a geri döndürüyoruz
  {
    servom.write(poz);              // servoya olması gereken pozisyon bilgisini gönderiyoruz
    delay(15);                       // her derecede beklemesi için
  }
} 

İkinci Devre:

servo2

İkinci devrenin kodunu vermeden önce map konusuna bir kez daha değinmek istiyorum. Arkadaşlar potansiyometremizden 0 ile 1023 arasında bir değer alacağımız ancak servomuza 0 ile 180 arası bir değer göndermemiz gerektiği için map fonksiyonunu kullanıyoruz. Bu fonksiyon ne mi yapıyor? Bizim için girdi değerlerini çıktı vermesini istediğimiz değerlere göre eşit şekilde parçalıyor ve gelen girdileri ayarladığımız çıktı boyutuna göre değiştirip değerimize atıyor. Yani bu örneğimizde 1023 olarak gelen input değeri 180 olarak değiştiriliyor ve atanıyor.


KOD:

#include <Servo.h> 

Servo servom;  // bir servo objesi yaratıyoruz 

int potpin = 0;  // potansiyometremizi bağladığımız analog pini seçiyoruz
int deger;

void setup()
{
  servom.attach(9);  // Servomuzu 9 numaralı dijital pine bağladığımızı tanımlıyoruz
} 

void loop()
{
  deger = analogRead(potpin);            // potansiyometreden değer okuyoruz
  deger = map(deger, 0, 1023, 0, 180);     // okuduğumuz değeri 180 derece için map ediyoruz
  servom.write(deger);                  // servoya olması gereken pozisyon bilgisini gönderiyoruz
  delay(15);                           // istediğimiz pozisyona gelene kadar gerekli süreyi tanıyoruz
}  

Çalışan Örnek:

Kodla ve Sevgiyle Kalın…

About Author

Sertan Deniz Saygılı

Meraklı bir öğrenci

3 Comments

    • Sertan Deniz Saygılı Reply

      Rasberry Pi 2 ile projeler yapıyorum ancak yoğunluktan dolayı Arduino ile ilgili bile istediğim şekilde içerik paylaşımı yapamıyorum. En kısa süre içerisinde işlerimi bir düzene koyup ikisiyle ilgili de yazılar paylaşmaya başlayacağımı umut ediyorum. İlgin için teşekkürler 🙂

  1. Başarılarınızın devamını dileriz.

Leave a Reply