Mühendis Bilim / Eğitimler / Arduino Dersleri / Arduino İle Servo Motor Kontrolü

Arduino İle Servo Motor Kontrolü

Hasan Eren EMİR | 22 Temmuz 2016, 20:41 | Arduino Dersleri | 8907 görüntülenme

Merhabalar! Bugünkü arduino dersinde potansiyometre ile bir servo motorun açı kontrolünü gerçekleştireceğiz.

Önceki arduino derslerinde dc motor kontrolünü gerçekleştirmiştik. Dc motorlar elektrik sinyali uygulandığında milini belirli devirde döndüren standart elektrik motorları olarak karşımıza çıkan motor çeşididir. Ancak dc motorlar haricinde faklı kullanım amaçlarına sahip bazı motor çeşitleri de bulunuyor.

Bu arduino dersinde kullanacağımız servo motorlar da dc motorlardan ayrı olarak çalışmalarını devir şeklinde mekanik dönüşten ziyade açılarla mekanik dönüş şeklinde yaparlar. Yani bu motorların kontrolünü açılar ile yaparız.

Servo motorlar kullanım amaçlarına göre belirli açı değerlerinde üretilirler. 180, 90 derece gibi. Biz bu dersimizde 180 derece dönüş kapasitesine sahip Tower Pro marka Micro Servo gg SG90 servo motoru kullanacağız. Bu motoru piyasada bulabilirsiniz, fiyatıda uygundur.

Elektronik Devre Kurulumu

Arduino İle Servo Motor Bağlantısı

Kullanacağımız servo motorda 3 adet bağlantı kablosu bulunuyor. Bunlardan kırmızı olanı güç vereceğimiz kablo, siyah olanı toprak/şase (gnd) hattı, sarı kablo ise motorun döneceği açı bilgisini göndereceğimiz veri (data) kablosu olacak.

Potansiyometrenin orta pini üzerinden A0 pini ile analog veri okuyoruz. Okuduğumuz bu değeri önceki derslerde anlattığımız map(); komutu ile moturun desteklediği açı aralığına yani 0 ile 180 aralığına dönüştüreceğiz.

Ardından yine önceki derslerde anlattığımız PWM tekniği ile PWM desteği olan 5. dijital pin üzerinden servo motorun data kablosuna ileteceğiz. Potansiyometre yi çevirdikçe data kablosuna 0 ve 180 arasında açı değerleri iletilecek ve motor mili bu açı değerlerine göre dönüşünü gerçekleştirecektir.

Arduino üzerinde servo motorların kullanımı için yazılmış bir kütüphane mevcuttur. Bu sebeple pwm kontrolünü önceki derslerdeki gibi analogWrite(); komutu ile değil, servo kütüphanesi içerisinde bulunan servo.write(); komutu ile gerçekleştireceğiz.

Not: Kütüphane nedir ve arduinoda kütüphane kullanımı nasıldır soruları için bkz. Arduino da Kütüphaneler ve Kullanımları.

Not: Biz servo motora gücü arduino üzerinde ki 3.3V çıkıştan verdik. Fakat arduino ile dc motor kontrolünü gerçekleştirdiğimiz dersteki gibi motora gücü transistör yardımı ile farklı bir kaynaktan vermek daha sağlıklı olacaktır.

Kaynak Kodlar

Kodlarda kullandığımız bazı komutlar Servo.h kütüphanesine ait kodlardır. O yüzden Servo.h kütüphanesi eklenmemiş projelerinizde bu kodları kullanamazsınız.

YAZAR BİLGİSİ
Hasan Eren EMİR
Yönetici
Biyografi

Merhabalar. Ben MühendisBilim’ in yöneticisiyim. Çocukluğumdan beri elektik-elektronik ve yazılım alanlarına duyduğum büyük ilgi sebebiyle üniversite eğitimimde bu alana yöneldim. Halen Atatürk Üniversitesi Elektrik-Elektronik Mühendisliği Bölümü’ nde eğitim görmekteyim. Bunun yanında kendi projelerim üzerinde çalışmalarımı sürdürüyorum. Bilim, teknoloji, mühendislik alanlarından gelişmeleri duyuracağım ve diğer projelerimi de yayınlayacağım bir platform ihtiyacından doğan bir diğer projem; MühendisBilim için desteklerinizi bekliyor, iyi okumalar diliyorum.

BENZER GÖNDERİLER

FACEBOOK İLE YORUM YAP

YORUM YAP
  1. Avatar
    Mühendis Hanım, 19 Mayıs 2018 - 23:53 'de demiş ki:
    Mühendis Hanım

    Merhaba hocam ben aynı işlemi 4 adet servo motor ile kontrol etmek istiyorum ama kodlarını yapamıyorum acaba elinizde böyle bir program varmı??

    • Hasan Eren EMİR
      Hasan Eren EMİR, 24 Mayıs 2018 - 22:35 'de demiş ki:
      Hasan Eren EMİR

      Servoları ayrı ayrı potlarla birbirinden bağımsız hareket ettirecekseniz, ilk önce analogRead() ile potları dinlemeniz ardından sırayla her potun harekete geçirmesini istediğiniz servoyu sürmeniz gerekiyor. Bunu basitçe if else koşul komutları ile yaptırabilirsiniz;
      Mesela eğer 1.potu 100 birimlik analog değer artışıyla çevirdiysem, 1. servoyu 10 derece pozitif yönde döndür. yok eğer ikinci potu 50 birimlik analog değer değişimiyle çevirdiysem, 2. servoyu harekete geçir gibi….
      Kişilerin kendini geliştirmesi için çaba göstermesi gerektiğine inandığımdan doğrudan kod paylaşımı yapmıyorum. Üstelik buna yetişebilmemde mümkün olmadığından sözel olarak yol göstermeye çalışıyorum. Bu şekilde umarım size yol gösterebilmişimdir.

  2. Avatar
    Hursit, 1 Nisan 2018 - 22:24 'de demiş ki:
    Hursit

    Merhaba hocam,elimde bahsettiginiz motordan olmadigindan dolayi ayni projeyi sm.s2309s servomotoru ile yapabilirmi?60 derece donen bir motor.tesekkurler.

    • Hasan Eren EMİR
      Hasan Eren EMİR, 10 Nisan 2018 - 10:53 'de demiş ki:
      Hasan Eren EMİR

      Elbette gerçekleştirebilirsiniz. Yalnız belirttiğiniz motorun özelliklerini bilmiyorum. Yüksek güç isteyen bir motorsa ekstradan motor sürücü gerekebilir.


PAYLAŞ