Servo Motorlar ilk anda tepki gösteriyor
  • Bunu daha önce acip soracaktim ama bir türlü kismet olmadi nihayetinde simdi yaziyorum.
    Arkadaslar servo motorlarla yaptigim calismalarda(robotarm, robot örümcek) gibi , tüm bu calismalarda Ardunioya ilk enerji verme aninda arduinaya bagli servolar tepki veriyor.
    yani tüm motorlarda kisa ve ani bir hareketlenme oluyor.
    Bunun önüne nasil gecebiliriz?
    Yani Arduinoya enerji verdigimizde Motorlarin hic etkime yapmamasini nasil saglayabiliriz? Yazilim kismindami yada Elektronik kisimdami birseyler yapmamiz gerek?
    Bilgilerinizi paylasirsaniz sevinirim.
  • Bilen yok mu?
    yoksa yanlis yeremi sordum?
  • Kodunu yayınlarsan yardımcı olacak bir arkadaş çıkar.
  • Tabiki su kod örnegin.
    Bu 5 eksenli bir Robot kol icin kullandigim kod.
    Arduinoaya enerji verdigim an motorlar tepkime yapiyor.
    Arduino enerjilendiginde ilk etabta robot kolda takil servo motorlarin hic reaksiyon göstermemesini istiyorum.

    ////////////////////////////////////////////////////////////////////////////////
    #include
    #include
    SoftwareSerial myBluetooth(0, 1); // RX, TX

    VarSpeedServo servo1;
    VarSpeedServo servo2;
    VarSpeedServo servo3;
    VarSpeedServo servo4;
    VarSpeedServo servo5;

    // Degiskenlerimiz
    int userInput[3]; // raw input from serial buffer, 3 bytes
    int startbyte; // start byte, begin reading input
    int servo; // which servo to pulse?
    int pos; // servo angle 0-180

    //Komut Arrayalari
    int veri[] = {190, 473, 55, 290, 4110, 274, 5135, 4142, 2125, 482, 2170, 1161, 295, 4118, 270, 55, 2170, 448, 190, 5135};
    int al[] = {5135, 190, 448, 2170, 55, 270, 4118, 295, 1161, 2170, 482, 2125, 4142, 5135, 274, 4110, 290, 55, 473, 190};
    int dik_dur[] = {190, 2170, 4129, 3180, 5135};
    int l_konum[] = {190, 2170, 4129, 368, 5135};

    void setup()
    {
    servo1.attach(4);
    servo2.attach(5);
    servo3.attach(6);
    servo4.attach(11);
    servo5.attach(12);
    islem(dik_dur, sizeof(dik_dur));
    //Serial.begin(9600);
    myBluetooth.begin(9600);

    }

    //Burada Serial Port'dan gelen verilere göre islem yapiliyor
    void loop()
    {
    myBluetooth.flush();
    // Wait for serial input (min 3 bytes in buffer)
    if (myBluetooth.available() > 2) {
    // Read the first byte
    startbyte = myBluetooth.read();
    //Serial.print(startbyte);
    // If it's really the startbyte (ASCII 35 -> #)
    if (startbyte == 35) {
    // ... then get the next two bytes
    for (int i = 0; i < 2; i++) {
    userInput[i] = myBluetooth.read();
    }
    // First byte = servo to move?
    servo = userInput[0];
    // Second byte = which position?
    pos = userInput[1];

    // Packet error checking and recovery
    if (pos == 255) {
    servo = 255;
    }

    // Assign new position to appropriate servo
    switch (servo) {
    case 1:
    servo1.write(pos); // move servo1 to 'pos'
    break;
    case 2:
    servo2.write(pos);
    break;
    case 3:
    servo3.write(pos);
    break;
    case 4:
    servo4.write(pos);
    break;
    case 5:
    servo5.write(pos);
    break;
    case 6: //Objeyi al getir funktionu icin
    islem(veri, sizeof(veri));
    break;
    case 7: //Standart Pozition al funktionu
    islem(al,sizeof(al));
    break;
    case 8: //Dikdur Pozition al funksiyonu
    islem(dik_dur, sizeof(dik_dur));
    break;
    case 9: //L Pozition al funksiyonu
    islem(l_konum, sizeof(l_konum));
    break;
    }
    }
    }

    }

    void islem(int komut[], int deger) //Burdaki funktionun paremetresi bir int array
    {
    String konum;
    String gelen_veri;
    String servonumm;

    for (int i = 0; i < deger / 2; i++)
    {
    gelen_veri = String(komut[i]); //Gelen veriyi string islemler yapabilmek icin stringe cevirioyruz
    servonumm = gelen_veri.substring(0, 1); //Ilk karekteri aliyoruz
    konum = gelen_veri.substring(1, 4); //Ilk karekterden sonraki karekterleri aliyoruz
    yap(servonumm, konum.toInt()); //konum degiskeninini tekrar int'e ceviriyoruz
    }

    }

    int yap(String servo_nummer, int pos)
    {
    //Serial.print(servo_nummer + " - " + pos);
    //Serial.println();
    switch (servo_nummer.toInt()) {
    case 1:
    servo1.write(pos, 20, true);
    break;
    case 2:
    servo2.write(pos, 20, true);
    break;
    case 3:
    servo3.write(pos, 20, true);
    break;
    case 4:
    servo4.write(pos, 20, true);
    break;
    case 5:
    servo5.write(pos, 20, true);
    break;

    }
    }
    /////////////////////////////////////////////////////////////////////
  • Bu sorunla karsilasanlar yokmu?

    Eger bir kac servo motorlu bir robot veya ne bileyim herhangi bir Proje yaptiginizda, Arduinoya ilk enerji verdiginizde motorlar kis bir calisma yapmiyormu?
    sanirim bu yazilmdan kaynaklanmiyor.
    Servo lar ilek enerji aldiginda bir tepkime yaiyor ondan kaynaklaniyor acaba bu sorunu nasil giderebiliriz??
  • bildiğim kadarı ile servolar servo.attach(4); denildiği andan itibarem sürekli konumunu korumak için enerji uygular bunu milini hafif bir yöne ittiğinizde farkedersiniz tekrar konumuna dönmek için karşı direnç koyar sürekli konumunu sabit tutar yani

    sizin ilk başta farkettiğiniz belki bu olaydır bilemiyorum

    bazı konularda servo.detach(); ile devre dışı brakılabileceği söylenmiş ama ne kadar doğru bilemiyorum bunun için servo.attach(4); setupta değil de motorun çalıştırılacağı anda yapılıp gerekli komut verildikten sonra da servo.detach(); yapılıyor

    servo.attach(4);
    servo.write(pos, 20, true);
    servo.detach();

    her seferinde bu şekilde tekrarlanmış



  • şöyle bir şey olabilir mi;

    servo'ya ilk komutu göndermeden ilgili servonun nesnesini açmayın, ilk kullanım esnasında bir kez çalışacak ve ilgili servoyu etkinleştirecek bir fonksiyon çağrılsın. sanırım bu şekilde görüntü olarak kusurun önüne geçilebilir. birde bunu yaparken servo sinyal bacaklarını setup esnasında low hale getirin, ileride pin high kaldığı için belki servo etkin hale geliyordur.

    algoritma mantıklı mı: hayır
    işe yarar mı: kulağa mantıklı geliyor

    bunun çözümü hakkında çok eskiden bir şeyler okuduğumu hatırlıyorum, ingilizce kaynak taramak en iyi seçenek

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.