step motor 180 derece ileri geri yaptıktan sonra durabilir mi?
  • Aşağıdaki kodları yüklediğimde motor sürekli 180 derece ileri ve geri hareket ediyor, ileri ve geri hareketini sadece bir kez yaptırmam lazım, teşekkürler.

    UNO R3
    28BYJ-48 STEP MOTOR VE SÜRÜCÜSÜ
    kullanıyorum.

    #define IN1 8
    #define IN2 9
    #define IN3 10
    #define IN4 11
    int Steps = 0;
    boolean Direction = true;// gre
    unsigned long last_time;
    unsigned long currentMillis ;
    int steps_left=2408;
    long time;
    void setup()
    {
    Serial.begin(115200);
    pinMode(IN1, OUTPUT);
    pinMode(IN2, OUTPUT);
    pinMode(IN3, OUTPUT);
    pinMode(IN4, OUTPUT);
    // delay(1000);

    }
    void loop()
    {
    while(steps_left>0){
    currentMillis = micros();
    if(currentMillis-last_time>=1000){
    stepper(1);
    time=time+micros()-last_time;
    last_time=micros();
    steps_left--;
    }
    }
    Serial.println(time);
    Serial.println("Wait...!");
    delay(1000);
    Direction=!Direction;
    steps_left=2048;
    }

    void stepper(int xw){
    for (int x=0;xswitch(Steps){
    case 0:
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
    break;
    case 1:
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, HIGH);
    break;
    case 2:
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    break;
    case 3:
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    break;
    case 4:
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    break;
    case 5:
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, HIGH);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    break;
    case 6:
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    break;
    case 7:
    digitalWrite(IN1, HIGH);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, HIGH);
    break;
    default:
    digitalWrite(IN1, LOW);
    digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    break;
    }
    SetDirection();
    }
    }
    void SetDirection(){
    if(Direction==1){ Steps++;}
    if(Direction==0){ Steps--; }
    if(Steps>7){Steps=0;}
    if(Steps<0){Steps=7; }<br />
    }
  • Öncelikle kodun çalışma mantığı anlamalısınız bence , neden orası 7 biliyor musunuz ? Benzer kodu kendiniz farklı mantıkta yazmaya çalışın istediğinizi yapmanız daha kolay olur.
  • Kodun çalışma mantığını anlıyorum sanırım
    mesela;
    pinler motor çıkışları olarak tanımlanmış,
    4096 adımda tam tur hesabı yapılmış,2048 adım ve 8 ayrı case ile 180 derece ileri ve geri döndürülmüş, buraya kadar doğru anlamışmıyım ? yanlışım varsa lütfen düzeltirmisiniz.
    anlamadığım ve yapamadığım ve yardım istediğim şey sonsuz döngü yerine, döngünün sadece bir kez çalışması.

    Teşekkürler.
  • Evet dediğiniz mantıkta çalışıyor 4 fazımız var ve bunu 8 stepte sürüyoruz ilgili pinleri 1 , 0 yaparak. Yine belirttiğiniz gibi motor 4096 adımda tam tur dönüyor.

    Şimdi şunu sorayım bunu bir kere çalıştırdınız daha sonra nasıl çalıştıracaksınız resetlememi yapacaksınız bir yerden tekrar mı tetikleyeceksiniz?
  • Eğer tek seferlik ise , sürekli dönmesinin sebebi loop içinde bulunan direction =! direction olayından kaynaklanıyor. Onu sürekli terslediği için bir o yana bir bu yana gidiyor.Örneğin direction sadece 1 olsun tek yana gidip duracaktır.Deneyin göreceksiniz muhtemelen. Zaten durum öyleyse gerisini hallederisiniz.
  • İlginiz için teşekkürler,

    Döngü bir sefer çalışıp duracak ben ihtiyaç duyduğumda tanımlayacağım butonlarla
    180, 270 ve 360 derece çalıştıracağım, yukarıdaki kod sadece 180 derece için örnek.

  • Anladım dediğimi denedikten sonra o aşamada takıldığınız yerlerde birlikte bakarız.
  • Teşekkürler
  • Cengiz bey projeniz ne durumda. Benimde sizinle hemen hemen benzer bi sorunum var. Hallettiyseniz çözüm metodunuzu burda paylaşırsanız memnun olurum.
  • Bir türlü kodla halledemedim, switch kullanmak zorunda kaldım. istediğim gibi olmadı ama
  • step motorda bir pozisyon sıfırlama anahtarı ıle kullanırsanız olası hataları onlersınız bu matrix yazıcıdan 3d printere ve sanayi uretim robotlarına kadar değişmez bir kural oldu neredeyse. sayacı sıfırladıktan sonra pulse heaaplayarak istediğiniz kadar her yöne hareket edebilirsiniz.

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.