14.04.2012

Arduino Project 12 - Stepper Motor

Uzun bir aradan sonra tekrardan herkese merhaba

Bu hafta sonu projesi olarak bitirme projemde de temeli oluşturan bir çalışma yapacağım. Step motor kontrolü. Step motor nedir ? Step motor çalışma mantığı ? ile ilgili wikipedia üzerinden ön bir bilgi alabilirsiniz. Genel olarak dım adım kontrol edilen motor olarak denebilir. Her adım (ör; motor 200 adım - devir ise 360/200 = 1.8) belirli derece ile döndüğü için adım sayılarını ve yönlerini belirleyerek motoru istediğimiz açıya getirebiliriz. Bu adım aralıkları değişik tekniklerle bir adımı 2,4,8,16 ya bölerek çok daha hasas bir şekilde kontrol yapılabiliyor. Ben bu çalışmada güç kaynağım çok iyi olmadığı için tam adım olan (bir tam deviri 200 adımda dönüyor) yöntemi kullacağım. 

Projede kullanıdığım motor sürücü A4988. Özelliklerine buradan bakabilrsiniz. Projede kullandığım step motor ise hybrid bipolar bir step motor. Nema 14 şafta sahip. Motorun özelliklerine burdan bakabilirsiniz. Motor sürücüye yön ve adım bilgisi göndererek motoru kontrol etmeye çalışacağım. Adım bilgisini kare dalgalar üreterek göndereceğim. Her bir darbe bir adım anlamına geliyor.

En baştan olarak gerekli olanları listelersek

Malzeme listesi

Gerekliler litesi :

- 1x A4988
- 1x Bioplor Hybrid Step Motor
- 1x Breadboard
- Arduino Mega 2560 ya da diğer Arduino boradlarından biri
- Arduino Yazılımı
- Processing Yazılımı
Diğer Arduino projelerine de bakmak isterseniz technologylaboratory.blogspot.com/search/label/Arduino

Arduino Kod :
 /*
*****************
H.Melih ERDOĞAN
*****************
Project 12
Name : Stepper Motor
*/
    #define stepPin 3 // bağlantı yaptığım uçlar
    #define dirPin 2
    int dir;
    int time;
    String inputString = "";   // seri port üzerinde göndereceğim veri 
    boolean stringComplete = false;
    // ayarlar
    void setup(){
      Serial.begin(9600);
      inputString.reserve(200);
      pinMode(stepPin, OUTPUT);
      pinMode(dirPin, OUTPUT);
    }
    void loop(){
    if (stringComplete){ // eğer veri varsa
    if (inputString.substring(0,3) == "dir") { // veri etiketi yön ise
    motor_dir(); // yön fonksiyonunu çağır
    }
    else if (inputString.substring(0,5) == "speed") { // veri etiketi hız ise
    motor_speed(); // hız fonksiyonunu çağır
    }
    inputString = "";
    Serial.println("Motor Set");
    stringComplete = false;
    }
    for (int i=0;i<200;i++){ // kare dalga oluştur ve 200 adım at
           digitalWrite(stepPin, HIGH);
           delayMicroseconds(time);
           digitalWrite(stepPin, LOW);
           delayMicroseconds(time);
    }
    }
    // motor speed
    void motor_dir(){
    if(inputString.substring(3,4) == "r"){ // sağa dön
    digitalWrite(dirPin, LOW);
    }
    else if(inputString.substring(3,4) == "l"){ // sola dön
    digitalWrite(dirPin, HIGH);
    }
    else{
    Serial.println("Error");
    }
    }
    // motor speed // hızı ayarla
    void motor_speed(){
    if(inputString.substring(5,6) == "1"){
    time = 300;
    }
    else if(inputString.substring(5,6) == "2"){
    time = 500;
    }
    else if (inputString.substring(5,6) == "3"){
    time = 1000;
    }
    else if (inputString.substring(5,6) == "4"){
    time = 2000;
    }
    else{
    Serial.println("Error");
    }
    }
    // Serial Com.
    void serialEvent() { // seri port üzerinden haberleşme
    while (Serial.available()) {
    char inChar = (char)Serial.read(); // gönderilen veriyi oku
    inputString += inChar;
    if (inChar == '\n') {
    stringComplete = true;
    }
    }
   }

 

Devre Şeması

MS1,MS2,MS3 uçlarını  toprağa bağladım. Bu uçlar adım çözünrlüğünü ayarlamak için kullanılıyor. Sleep ucu reset ucuna bağlı. Vmot ve GND uçlarına ise harici güç kaynağımı bağlıyorum. Kullanıdığım güç kaynağı 12V ve en fazla 500 ma kadar çıkış veriyor.




Proje Ekran Görüntüleri :

hız bilgisini gönderioyrum speed1 -> 1 yani time 300 olacak


yön bilgisi gönderiyorum dirl yani directory left motor yön değiştiriyor.


hatalı bilgi yolluyorum error alıyorum. Motor varsayılan ayarlarında kalıyor.
 

Devrenin kurulmuş halinin fotoğrafları 



Projenin çalıştırılmış şeklinin videosu aşağıdadır iyi seyirler. Bir sonraki projede görüşmek üzere.


Diğer Arduino projelerine de bakmak isterseniz technologylaboratory.blogspot.com/search/label/Arduino