Servo motor sorunu
  • Merhaba, servo motor ile problem yaşıyorum, sorun şu ki motor dönmeye başladı mı durmuyor :) iki tarafa da hareket ediyor onda problem yok, fakat ben telefonumdan 1 e bastığımda 2 tur sola dönsün dursun istiyorum, 2 ye bastığımda 2 tur sağa dönsün dursun istiyorum. iki yöne de tuşlamalarla dönüyor fakat durmuyor, sürekli dönüyor :) durdurma komutu var mı bu servolar için ? loop a dön dedim yine olmadı. kodu aşağıda paylaşıyorum, konu hakkında bilgi sahibi olanlar yardımcı olursa sevinirim, kodu bahsettiğim şekilde revize etmem gerekiyor. konuyu açmadan önce sitede arattım ama böyle bir problem yaşayan olmamış sanırsam.

    #include < SoftwareSerial.h>
    #include < Servo.h>

    SoftwareSerial mySerial(10, 11); // RX | TX

    Servo servo;

    int servoPin = 9;
    int servoAngle = 0;

    char command;

    void setup() {
    Serial.begin(9600);
    mySerial.begin(9600);
    Serial.println("bluetooth baglantisi tamam");
    servo.attach(servoPin);
    }


    void loop() {
    if (mySerial.available())
    {
    command=(mySerial.read());
    if (command=='1')
    {
    Serial.println("Servo motor to 10 degrees");
    servo.write(10);
    delay(500);
    loop();
    }

    else if (command=='2')
    {
    Serial.println("Servo motor to 120 degrees");
    servo.write(120);
    delay(500);
    loop();
    }

    }

    }
  • Delay ve loop satırlarını silip deneyin.
  • sildim, hiçbir değişiklik yok, telefondan 1 e bastıgımda surekli sağa dönüyor durmadan, 2 ye bastıgımda ise durmadan sola dönmeye başlıyor.
  • aşağıdaki şekilde yapınca servo calısıp sonra duruyor, burası tamam oldu, simdi aynı pozisyona nasıl geri getirebilecegim kaldı.

    if (command=='1')
    {
    Serial.println("Servo motor to 10 degrees");
    servo.write(0);
    delay(1000);
    servo.write(90);
    }
  • servoyu her hareketten sonra command degıskenını sıfırla

    if (command=='1')
    {
    Serial.println("Servo motor to 10 degrees");
    servo.write(10);
    command=0;
    }

    else if (command=='2')
    {
    Serial.println("Servo motor to 120 degrees");
    servo.write(120);
    command=0;
    }
  • aşağıdaki kod parçacığında ilk döngüde 180 dereceye gelip, ikinci döngüde başlangıç noktasına geri dönmesi gerekmiyor mu bu motorun ? başlangıç noktası yerine neden farklı bir açıya döndüğünü bana soyleyebilecek var mı ? hep biraz fark oluyor gittiği geldiği açılarda, bu farkı nasıl ortadan kaldırabilirim nerede hata yapıyorum sizce ? kendi servo sweep kodunu yükledim arduino nun, onda bile her gidişte ve gelişte başlangıç açısı değişiyor ???


    void loop() {
    for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees<br /> // in steps of 1 degree
    myservo.write(pos); // tell servo to go to position in variable 'pos'
    delay(15); // waits 15ms for the servo to reach the position
    }
    for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos); // tell servo to go to position in variable 'pos'
    delay(15); // waits 15ms for the servo to reach the position
    }
    }
  • 1. servonun marka, modeli ne? içindeki reosta tutarsızlık yapıyor olabilir.
    2. servonun çektiği akım özellikle ilk hareket esnasında atalet momentini yenmek için yada üstteki kod için söylemiyorum genel olarak söylüyorum kodu ileri git-dur-geri git şeklinde değilde ileri git-geri gel şeklinde yazarsan geçişlerde oluşacak fren etkisinden doğacak zorlanma servonun çektiği akımı artıracak, vs. vs...
    velhasılkelam servoyu beslediğin güç kaynağına odaklan
    3. farklı güç kaynağından besliyosan gnd uçlarını ortaklamayı unutma.
  • servonun modeli SM-S4303R. 5v 1a lık bir telefon şarj aletinin ucunu kestim, + yı servonun + sına, - yi arduino nun gnd pinine bagladım, diger gnd pininden de servonun - sine kablo baglantısı yaptım, zaten arduino elektriği bilgisayarımın usb portundan alıyor. bluetooth serial terminal yukledim telefonuma, calistirip hc05 bluetooth takılı arduino ma baglanıp 1 yazıp enter leyince servo 0 dan 170 derece açıya dönsün. eğer 2 yazıpta enter e basarsam da 170 derece açıdan 0 a geri dönsün istiyorum, tek yapmak istediğim bu fakat başaramadım, nerede hata var bilemiyorum, internette dolaşan tüm kodları denedim, olmadı. servo.write(90) yapınca zaten direk duruyor motor. bluetooth baglantısı ve komut gondermede problem yok, 1 yzıp enterleyince motor dönmeye başlıyor, servo motorla ilgili sorun ne anlamadım :(
  • servo.write(180) > yarı hızda saat yönüne döner 54 tur 1 dakikada
    servo.write(135) > yarı hızda saat yönüne döner 28 tur 1 dakikada
    servo.write(90) > stop noktası
    servo.write(45) > yarı hızda saat yönü tersine döner 28 tur 1 dakikada
    servo.write(0) > max hızda saat yönü tersine döner 54 tur 1 dakikada

    ama (90) haricinde sürekli döner
    yani bilindik servolar gibi açıda durmaz. yani açı değil hız servosu..
    yani servo.write komutunun verdiği PWM hız belirleyici açı değil gibi gözüküyor..
    >>> datasheets' den anladığım kadarıyla <<<<<br />
    öylemi gerçekten diye bir denermisiniz... (basitçe yukarıdaki kodlarla)

    tam olarak ne yapmaya çalıştığını (mekanik olarak) yazarsan daha iyi bir çözüm bulmaya çalışalım.


  • ben kilit yapmaya çalışıyorum, bluetooth dan kontrol edecegim, telefon uygulaması yazdım android, telefondan 1 komutunu gönderip kapıyı kilitleyeceğim. telefondan 2 komutunu gönderdiğimde ise kapının kilidini açacağım, program tamam, hc05 kullanıyorum bluetooth olarak, arduino ile telefon baglantısında hiç sıkıntı yok, kilit mekanizması olarak da SM-S4303R servo motoru aldım işte, birtek şu motora kapıyı kilitle, yani 2 tur sola dön ve dur diyemedim, önceleri hiç durduramadım, sonra şu servo.write(90) ile durdurmayı başardım, fakat bu sefer de her defasında farklı yerde duruyor servo motor, başlangıç noktası hep şaşıyor.
  • Arkadaşın dediği gibi servo hız servosu ise aynı acıda durmaması normal.
    Siz arkadaşın verdiği kodlarla ayrı ayrı deneyip "dönüş hızında" bir farklılık varmı diye kontrol eder misiniz?
  • 180 ve 135 saat yonu tersine dönüyor, 45 ve 0 ise saat yönünde dönüyor, fakat hepsi aynı hızda dönüyor, 90 da durduruyor. yani servo.write(45) ile servo.write(0) hızları arasında hiç fark yok.
  • tabi bura problem kapının neyle kitlenip açılcağı değil ama, selenoid kilitler çok daha uygun-uzun ömürlü-kolay olurdu bu iş için.
  • kilit mekanizması yapmam gerekli, bu yüzden önerebileceğiniz açı servosu var mıdır ? kapının kilidini 3 kez saga(kilitlemek icin) ve 3 kez sola (kilidi acmak icin) cevirebilecek güçte olan ?
  • servoya bır dişli bağla ustune duz bır cubuk ve bu cubugun altında da dısler olsun motor calıstıkça lıneer hareket elde edersın

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook

Tagged

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.