Merhabalar. Bugün sizlerle beraber Arduino UNO’muzla step motor kontrolü uygulamasını yapacağız.

Gerekli malzemeler:

Step motorlar, hassas hareket gerektiren uygulamalarda kullanılan motorlardır. Fonksiyon olarak DC motorlar ile servo motorların her ikisinin de karakterini gösterir: istenildiğinde belirli bir konuma adım adım ilerleyebilir veya sürekli olarak istenilen yönde döndürülebilir. Normal yazıcılar ve 3B yazıcıların vazgeçilmez parçalarındandırlar.

Step motorlar, bipolar ve unipolar olmak üzere iki çeşittir: bipolar step motorlar 4 kablolu, unipolar step motorlar ise 4,5,6 ya da 8 kablolu olabilirler.

Bizim bu uygulamamızda kullanacağımız step motor genellikle sürücü kartıyla birlikte satılmaktadır. Bu sayede breadboard’a ihtiyaç duymadan kolaylıkla bağlantı yapmamız mümkündür.

Bu uygulamamız için hâlihazırda bulunan bir kütüphane mevcuttur. Bu kütüphaneyi indirmek için şu linki tıklıyoruz: https://github.com/tardate/X113647Stepper/archive/master.zip

İndirme işlemi tamamlandığında, zip dosyasını açıyor ve X113647Stepper-master isimli klasörü C:\Program Files (x86)\Arduino\libraries klasörünün altına kopyalıyoruz. (Eğer bilgisayarınızda 32-bit Windows yüklü ise C:\Program Files\Arduino\libraries klasörünü kullanın.)

Arduino programımızı açıp Dosya > Örnekler > X113647Stepper-master > FullSweep adımlarını takip ediyoruz ve bu kodu kartımıza yüklüyoruz. Kodumuz, step motorumuzu önce tam tur bir yönde döndürecek, daha sonra zıt yönde tekrardan tam tur döndürecektir. Koddaki myStepper.setSpeed() fonksiyonunun değerini değiştirerek motorun dönme hızını ayarlayabiliriz.

 

42 Yorumlar

  1. myStepper.setSpeed() komutunu değiştirdiğimizde sayıyı ne kadar artırırsak artıralım hızı sınırlı kalıyor. Daha hızlı dönmesi için ne yapmalıyız?

  2. iyi günler. ben aynı yöntemi izledim fakat step motor bir tur atıp durdu. birdaha çalıştaramadım. komut verince motor titriyor ama dönme yok. nedeni ne olabilir. yardımcı olurmusunuz.

  3. 200 adımlık bir step motorum var. Ben 2,5 adım aralıkla hareket ettirmek istiyorum. Nasıl bir yol izlemeliyim

  4. Sizden aldığım l293d motor shield ile nema 14 7.4 ve 4 çıkışlı bipolar motoru süremedim sürekli titreme yapıyor yardımcı olurmusunuz

  5. iyi aksamlar arduino ile cnc yapmak istiyorum ve gerekli malzemeleri aldım. arduini ve step motor sürücüleri ve motorları bagladım. son sürüm ide yukledigimde grbl dosyaasını yukleyemiyorum. xloader donup kalıyor. 1.6.5 sürümde motorlardan sadece 1 tanesi ileri geri dönüyor. diger 2si ileri ve geri komutlarda hep aynı yöne dönüyor. yardım ederseniz sevinirim

  6. hepsi aynı renk sırasına göre baglı. sırayı degiştirmedim hiç. kırmızı siyah sarı beyaz bide beyaz sarı siyah kırmızı olarak bagladım. her sürücüye motorları sıra ile bagladım. tek sürücüde sıkıntı yok. iki sürücüyu baglayınca sıkıntı yok ama 3sürücüyü aynı anda baglayınca hata oluyor. şimdi 2 tanesi dogru calıosıyor. sadece 1 tanesi hep aynı yöne dönüyor. sürücülerün yerlerini değiştirince değisen bişey yok. yazılımsaal sanırım
    ide 1.6.5 kullanıyorum. son sürümde hiç calısmıyor

    • Öncelikle motorun datasheet’ini açıyoruz. Adım açısına datasheet’ten bakıyoruz. 180 derecenin kaç adıma denk düşeceğini basit bir matematik hesabı ile bulup o kadar adım istediğimiz yönde motorumuzu çalıştırıyoruz 🙂

  7. Ben raspberry Pi de kodları yazıyorum. Program aynı IDE programından yalnız sizin verdiğiniz kodları ‘error compiling’ diyerek hata veriyor. Ne yapmalıyım ?

  8. bende de karta yüklenirken sorun oluştu diyor ne yapmalıyım?
    bilisayara usb ile bağladım herşeyi yaptım ancak motorların hiçbiri kıpırdamıyo

  9. Step motoru otomatik kapı sisteminde kullanabilirmiyim ? belli bir süre hızlanan ivme sonrasında yavaslayan ivme bu şekilde kapı açılacak ve aynı işlemi tersi yönde tekrarlayıp kapı kapanacak

  10. Arduino uno ile step motor sürmek istiyorum ama grbl error 9 hatası veriyor . Ne yapmalıyım lütfen yardımcı olurmusunuz ?

    • Motoru kontrol etmek için sürücüye ve bir mikroişlemci kartına (Arduino) ihtiyacınız vardır. MPU6050 jiroskop/ivmeölçer sensöründen aldığınız veriyi işleyerek uygun hale getirip Arduino aracılığıyla motoru kontrol etmeniz mümkündür.

  11. agmet , iyi günler öncelikle senin yaşadıgın sıkıntıyla bende bir ay ugrastım. Öncelikle xloader ile yükleme yaparken baud rate yi dogru ayarladığından emin ol. Ve sürücü olarak tavsiyem bu tür minik sürücüler cd rom içindeki motorları sürebiliyor yüksek akım çeken motorları bağladığında yanabiliyor ve sürekli titreşim veriyor veya motor hiç çalışmıyor. Tavsiyem öncelikle cnc shield kullanıyorsan onu çıkar ve daha sonra eğer güçlü bir motor sürüyorsan TB6560 motor sürücüsünü kullanmalısın ben bu sekilde çözdüm olayı ve suan cnc cihazım süper sekilde calışıyor.
    Ayrıca dediğim sürücüyü alırsan eğer sakın “tüm toprak hatları aynı nasıl olsa” diyerek hepsini 12v nin yanındaki topraga verme . Arduino ya toprak girisi bağlanmadıgında motorlar ya hiç çalısmıyor veya tüm eksenleri bağladıgında motorun birisi geri yonde dönmüyor “DIR” pinindeki voltajı ölçerek sıkıntıyı bulabilirsin.

  12. merhabalar. iki adet step motoru robotumun hareketi için kullanmak istiyorum. Sola ve Sağa 90 derede açı ile döndürmek ileri ve geri yön vermek gibi bunu tek arduino ile yapmak mümkün mü acaba. Yani iki adet step motoru aynı anda kontrol edebilir miyim. Saygılarımla

  13. Merhaba Kerem Bey;
    yapmakta olduğum bir projede 1 adet nema 17 step motor ve easydriver kullanmaktayım. projede hem joystick hem de limitswitchler de bulunmakta. ancak motorum dönme hızını nasıl arttırabileceğime dair bir bilgiye ulaşamadım. 12V luk bir güç kaynağı kullanıyorum, bunu mu arttırmalıyım yoksa kodun içerinden mi müdahale etmeliyim bilemedim? bu konuda nasıl bir yardım alabilirim sizden? kod aşağıdaki gibi; şimdiden çok teşekkür ederim… iyi çalışmalar

    #define step_pin 9 // Pin 9 connected to Steps pin on EasyDriver
    #define dir_pin 8 // Pin 8 connected to Direction pin
    #define MS1 10 // Pin 10 connected to MS1 pin
    #define MS2 11 // Pin 11 connected to MS2 pin
    #define SLEEP 12 // Pin 12 connected to SLEEP pin

    #define X_pin A0 // Pin A0 connected to joystick x axis
    #define Joy_switch 4 // Pin 4 connected to joystick switch

    #define Limit01 2 // Pin 2 connected to Limit switch out
    #define Limit02 3 // Pin 3 connected to Limit switch out

    int step_speed = 10; // Speed of Stepper motor (higher = slower)

    void setup() {
    pinMode(MS1, OUTPUT);
    pinMode(MS2, OUTPUT);
    pinMode(dir_pin, OUTPUT);
    pinMode(step_pin, OUTPUT);
    pinMode(SLEEP, OUTPUT);

    pinMode(Limit01, INPUT);
    pinMode(Limit01, INPUT);

    pinMode(Joy_switch, INPUT_PULLUP);

    digitalWrite(SLEEP, HIGH); // Wake up EasyDriver
    delay(5); // Wait for EasyDriver wake up

    /* Configure type of Steps on EasyDriver:
    // MS1 MS2
    //
    // LOW LOW = Full Step //
    // HIGH LOW = Half Step //
    // LOW HIGH = A quarter of Step //
    // HIGH HIGH = An eighth of Step //
    */

    digitalWrite(MS1, LOW); // Configures to Full Steps
    digitalWrite(MS2, LOW); // Configures to Full Steps
    }

    void loop() {
    if (!digitalRead(Joy_switch)) { // If Joystick switch is clicked
    delay(500); // delay for deboucing
    switch (step_speed) { // check current value of step_speed and change it
    case 1:
    step_speed=10; // slow speed
    break;
    case 3:
    step_speed=1; // fast speed
    break;
    case 10:
    step_speed=3; // medium speed
    break;
    }
    }

    if (analogRead(X_pin) > 712) { // If joystick is moved Left
    if (!digitalRead(Limit01)) {} // check if limit switch is activated

    else { // if limit switch is not activated, move motor clockwise

    digitalWrite(dir_pin, LOW); // (HIGH = anti-clockwise / LOW = clockwise)
    digitalWrite(step_pin, HIGH);
    delay(step_speed);
    digitalWrite(step_pin, LOW);
    delay(step_speed);

    }
    }

    if (analogRead(X_pin) < 312) { // If joystick is moved right

    if (!digitalRead(Limit02)) {} // check if limit switch is activated

    else { // if limit switch is not activated, move motor counter clockwise

    digitalWrite(dir_pin, HIGH); // (HIGH = anti-clockwise / LOW = clockwise)
    digitalWrite(step_pin, HIGH);
    delay(step_speed);
    digitalWrite(step_pin, LOW);
    delay(step_speed);

    }
    }
    }

    • loop fonksiyonunda yer alan if (!digitalRead(Joy_switch)) altıdaki 500 sn’lik delay bu duruma sebep olabilir. Joystick switch’inizin debounce işlemi için farklı bir yöntem kullanmayı deneyebilirsiniz.

      • cevabınız için teşekkür ederim, ancak joystick switchleri iptal etmeme ve oradaki delay zamanını değiştirmeme rağmen motordaki hızda hiç bir değişiklik olmuyor. yukarıda tamamlanan int step_speed = 10; // Speed of Stepper motor (higher = slower) den başka bir tanım yapılamıyor. bunu sadece 1 yapabiliyorum. başka nereyi değiştirmem gerekiyor bilemedim. yine de teşekkürler…

  14. İYİ GÜNLER BANA AYNI BOYUTLARDA DAHA HIZLI DÖNEN BİR STEP MOTOR LAZIM BACAKLI BİR ROBOTTA KULLANMAK ÜZERE BİR ÖNERİNİZ VARMI ACABA ?

    • Step motorlar daha çok konum hassasiyeti odaklı uygulamalarda kullanıldığı için dönüş hızları her zaman belirtilmez. Bu derste görmüş olduğunuz step motorun içerisinde dahili olarak redüktör bulunduğundan, sitemizdeki diğer step motor çeşitlerine göre yavaş dönmektedir. Burada malesef önerebileceğimiz tek bir ürün bulunmamaktadır, siz kendi uygulamanıza uygun olanı kendi yapacağınız araştırma ile bulabilirsiniz.

CEVAP VER