Merhaba arkadaşlar. Bugün sizlerle Arduino UNO ile servo motor kontrol uygulaması yapacağız.

Gerekli malzemeler:

Servo motorlar, RC (radio controlled, uzaktan kumandalı) araba, helikopter ve uçak gibi araçlarda kullanılır. Bu motorlar, DC motorlardan farklı olmak üzere istediğimiz pozisyonda sabit kalacak şekilde tasarlanmıştır. Çoğunlukla 0-180 derece arası açılarda çalışırlar. RC arabamızın direksiyonunda, helikopterlerin pervanelerine açı vermede ve uçakların kontrol yüzeylerini hareket ettirmede kullanılırlar. PWM sinyal ile çalışırlar.

İlk uygulama örneklerimizde PWM’i analog voltaj çıkışı elde etmek için kullanmıştık. Fakat servo motorlarda PWM biraz daha farklı şekilde çalışmakta. Hatırlayacak olursak, Arduino’da analogWrite() komutu ile aldığımız PWM sinyalinin sadece 5V seviyesinde kaldığı süreyi (duty cycle) değiştirerek farklı analog sinyaller elde etmiştik. Servo motorlarda ise yine benzer şekilde 20 ms’lik sinyalin açık kaldığı periyodu 1 ms ile 2 ms arasında değiştirerek, servomuzu 0 dereceden 180 derece arasında istediğimiz konuma ayarlayabiliriz.

Bağlantılarımızı şekildeki gibi yapıyoruz:

Uygun koda Arduino programından

Dosya > Örnekler > Servo > Sweep

adımlarını takip ederek ulaşabilirsiniz. Bu kod, servomuzu önce 0 dereceden 180 dereceye adım adım ilerletecek; 180 dereceye ulaşınca da tekrardan 0 dereceye adım adım geri döndürecektir.

Farklı bir uygulama olarak servomuzun pozisyonunu Arduino’muza bağlayacağımız bir potansiyometre ile de kontrol etmemiz mümkün:

 

Bu devreye uygun koda da

Dosya > Örnekler > Servo > Knob

adımlarını takip ederek ulaşabilirsiniz.

 

33 Yorumlar

  1. bu güzel çalışma için teşekkürler
    bir sorum olacak
    servo motorun istenen açıya giderkenki hızını nasıl ayarlayabiliriz?
    (rampalanarak çalışmasını ve durmasını istiyorum)

    • Servonun istenen pozisyona giderkenki hızını koddaki delay() komutlarını değiştirerek ayarlayabilirsiniz fakat, maksimum konumlama hızı, servo motorun içinde kullanılan motor ile alakalı olduğundan buna pek müdahale şansımız bulunmamaktadır. Projenizde kullanacağınız servo motoru tercih ederken size uygun hıza sahip olanı sn/60 derece şeklinde verilen servo özelliklerine bakarak tercih edebilirsiniz. Ayrıca dijital servolar analog servolara göre daha hızlı ve kararlı çalışmaktadırlar.

  2. merhabalar. ben arduino ile 6 adet mg996r servo kontrol etmek istiyorum.motorlara breadboard üzerinde 5v 1a adaptör ile dışarıdan besledim.arduino’nun gnd ile board’a 1 bağlantı yaptım.ancak yeterli gücü aldığımı düşünmüyorum acaba yanlış mı kullanıyorum güç kaynağımı?ölçtüğümde 1motor 0.1a-0.3a gibi bir aralıkta çalışıyor ama datasheet’ine baktığımda 6v 0.8a çalışma değerleri görünüyor.lütfen bilginiz varsa yardımcı olunuz teşekkürler iyi günler dilerim.

  3. Merhaba,
    Bu uygulama ile motoru önceden belirlediğimiz 50-60 noktaya hafızalandırabilirmiyiz.
    Yani istediğimiz 50-60 nokta için memory uygulaması yapılabilirmi.

    Teşekkürler

    • Merhabalar. İstediğiniz konumların derece olarak karşılığını bildiğinizi varsayarsak, servo.write(derece) komutunu kullanarak sırayla istediğiniz konumlara servoyu hareket ettirebilirsiniz.

  4. Merhaba
    Ben basınç sensörü flex sensörü ve servo motor kullanarak robot kol yapmak istiyorum. Flex sensör ile servoyu hareket ettireceğim fakat robot kolun ucundaki basınç sensörüne belli bir kuvvet uygulandığında servo duracak. Bu uygulamayı nasıl yapabilirim. Yardımcı olursanız sevinirim

  5. Merhabalar; elimde tam tur atabilen bir servo motor var, ve mesafe sensörünün ölçtüğü uzaklık belli bir değerin altına indiği zaman durmasını istiyorum. Bunu nasıl sağlayabilirim?

  6. merhaba.ben hc -sr501 hareket sensörü ile mg 90s servo motor kontrolünü zaman ekleyerek nasıl yapabilirim? mesela sensör algıladığında servo motor sıfır konumundan 180 dereceye gidecek ve algılama devam ettiği sürece bekleyecek algılama bitince 3 sn bekleyip servoyu 180 dereceden sıfır konumuna alacak.kodun tamamını yazarsanız sevinirim.teşekkür ederim.

  7. Merhabalar;
    4 ad Mg996r ile yaptığım bir projede komut listesine ihtiyacım var.Butona basıldığında servolar 90*derece dönecek 1 sn bekleyip tekrar eski pozisyonuna dönmesini istiyorum.Bu işlemi butona bastığımızda 1 defa yapacak.Komut satırı hk.yardımcı olabilirseniz sevinirim.İyi çalışmalar,

  8. Engelden kaçan robot yapmaktayım. Bu robotun engeli gördüğünde durup sonra dönmesini istiyorum. Dönmesinde sıkıntı yok fakat durduramıyorum. Motoru kontrol eden bağlantıların hepsine yazılım kısmında HIGH verilince motor duruyor diye biliyorum. Fakat durmuyor. Yardımcı olurmusunuz?

    • Fırçasız DC motorlar ESC isimli sürücüler ile kullanıldığından tıpkı servo gibi kullanılabilir. Joystick kontrollü servo uygulamalarına bakabilirsiniz, size bir fikir verecektir.

  9. Iyi günler elimde iki adet Free tech fs90r pl 2820 servo motor var ben bu motorlarla android uzerinden almis oldugu sayisal degerler ile labirenti cozebilmesini istiyorum elimde birde hc 06 bluetooth var android bluetoothu görüyor ve baglaniyor ama mesaj alis verisi yapmiyor ve motorlar kodlari girmeme ragmen tam yani 360 derece dönüyor motorlarin bu dönüşünü telefondan kontrol edebilmek icin nasil bir kod girmem gerekiyor yardimci olursaniz cokkkkk sevinirim iyi günler iyi çalışmalar 🙂

  10. Analog olarak çalıştırdığım yağmur sensörü var ben yağmur miktarına göre servonun çalışmasını istiyorum sağanak yağmurda çalıştı ama normal yağmur yağarken çalıştoramadım iki kodu nasıl ayarlamalıyım

  11. Merhabalar, Ben de yağmur sensörünün suyu algılaması durumunda servo motorun belli bir açı değeriyle çalışmasını istiyorum.Kodu nasıl yazabilirim.Şimdiden teşekkür ederim.

    • Buradaki sensörü kullanarak yağmur algılaması yaptırabilirsiniz. Sensör analog çıkış verdiğinden yazacağınız kod if(analogRead(sensor_pini)) gibi bir if yapısı ile kolaylıkla kod kısmı yazılabilir.

  12. Merhaba bir adet dc motor bir adet 180 derece servo motoru nrf24l01 smd ile birlikte kullanmak istiyorum diğer tarafta yine bir uno r3 üzerinde nrf24l01 ve joystick shield olacak bu şekilde rc araç ve kumandasını yapmam için uygun bir motor shield ya da çözüm bulamadım l293d motor shield alamayı düşündüm ama o zamanda nrf için gereken pinleri motor shield işgal ediyor lütfen yardımcı olur musunuz TSK…

  13. Merhabalar. Konuyu ve yourmları okudum fakat benim yapmak istediğim şey başka. Elimde AC bir servo motor ve o motora ait sürücüsü var. Ben bu servoyu arduino ile kontrol etmek istiyorum fakat forumlarda veya başka bir yerde bununla ilgili bir kaynak bulamadım. Bilginiz varsa eğer yardımcı olabilirseniz çok sevinirim.Teşekkürler

    • Merhabalar. Bahsetmiş olduğunu endüstriyel tipte servo drive’lar marka/modellerine göre PROFINET, PROFIBUS, CCLink gibi endüstriyel haberleşme protokolleri ile diğer otomasyon ekipmanları ile bağlantı kurabileceği gibi, PLC ile doğrudan kullanımı için Arduino üzerindekine benzer dijital giriş/çıkışlara da sahip olabilirler. Eğer bu tipte girişler sürücünüzde mevcut ise, Arduino veya benzer bir mikrokontrolcünün çıkışını PLC ile uyumlu 24V seviyesine getirebilen bir devre kartı ile (örnek) kullanabilirsiniz.

  14. Merhaba bu işlerde çok yeniyim ik adet servoyu aynı anda farklı hareketler ile nasıl çalıştırabilirim şu anda ikisinede aynı hareketi yaptırabiliyorum
    Bilg için tesekkurler

    • Arduino’ya aynı ikinci devredeki gibi bir potansiyometre daha bağlayın. Diğer potansiyometrenin orta pinini A1 pinine bağlayın. Aynı şekilde ikinci servoyu da, sinyal pini 10 numaralı dijital pine gelecek şekilde bağlayın. Aşağıdaki kodu kullanabilirsiniz:

      #include "Servo.h"

      Servo servo1;
      Servo servo2;

      int s1_val;
      int s2_val;

      void setup() {
      servo1.attach(9);
      servo1.attach(10);
      }

      void loop() {
      s1_val = analogRead(A0);
      s1_val = map(s1_val, 0, 1023, 0, 180);
      s2_val = analogRead(A1);
      s2_val = map(s2_val, 0, 1023, 0, 180);
      servo1.write(s1_val);
      servo2.write(s2_val);
      delay(15);
      }

  15. Merhaba.Otopark projesi için ultrasonik mesafe sensörüyle servo motor kontrol ediyorum.Bütün park yerlerinin dolu olduğu durumda giriş kapısı için kullandığım servo motorun konumunun değişmemesini istiyorum acaba yardımcı olabilir misiniz ? Teşekkürler.

    • RC araçlar için kullanılan uzaktan kumandalar doğrudan servo motorları kontrol edebilecek şekilde tasarlanmıştır. Kumandanın alıcısının uygun kanalına servo motoru takmanız ve 5V (çoğu servo motor 5V ile çalışır) ile beslemeniz yeterlidir.

  16. servo motor lcd ekran ve lm35 ısı sensörü kullanıyorum sorunum lm35 sensör veriyi servo motor durduktan sonra veri alabiliyorum lm35 sensör verisini 1 sn bir nasıl alabilirim
    #include
    #include
    #include

    // initialize the library with the numbers of the interface pins
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
    Servo myservo;
    float T;
    int motor = 0;
    int i;
    void setup() {
    // set up the LCD’s number of columns and rows:
    Serial.begin(9600);
    lcd.begin(16, 2);
    lcd.setCursor(0,0);
    // Print a message to the LCD.
    lcd.print(“Temperature”);
    myservo.attach(9);

    }

    void loop() {
    T = 0.48828125 * analogRead(A0);

    // set the cursor to column 0, line 1
    // (note: line 1 is the second row, since counting begins with 0):
    lcd.setCursor(0, 1);
    // print the number of seconds since reset:
    lcd.print( T,1);
    lcd.print(” oC”);
    delay(1000);
    Serial.print(“TEMPRATURE = “);
    Serial.print(T);
    Serial.print(” oC”);
    Serial.println();
    delay(1000);

    for (motor = 90; motor 90; motor-= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(motor); // tell servo to go to position in variable ‘pos’
    delay(30); // waits 15ms for the servo to reach the position

    if( motor==91 ){

    myservo.write(motor); // tell servo to go to position in variable ‘pos’
    delay(3000);
    }
    else {
    myservo.write(motor);
    delay(30);
    }
    }

    for(motor=90; motor>45; motor-=1){
    myservo.write(motor);
    delay(30);
    if(motor==46){
    myservo.write(motor);
    delay (3000);
    }
    else{
    myservo.write(motor);
    delay(30);
    }
    }
    }

CEVAP VER