Merhaba arkadaşlar ,bu yazımda arduino ile step motor kullanımını göstereceğim. Step motor hakkında daha detaylı bilgiye ulaşmak için daha önce yazmış olduğumuz bu yazımıza bakabilirsiniz.
Malzeme Listesi
Devre Şeması
Devre şeması aşağıdadır ve oldukça basittir. Ben breadboard kullanmadan yaptım. Siz kullanabilirsiniz veya kullanmadan da yapabilirsiniz. Motor sürücüdeki 4 adet IN girişini arduinoda 8 9 10 11 pinlerine aşağıdaki görüldüğü gibi bağlıyoruz. Daha sonra besleme için GND ve VCC bağlantılarını yapmamız gerekiyor. Kırmızı kablo VCC(+5V) , mavi kablo ise GND(-)’yi temsil etmektedir.
Arduino ile Step Motor Kullanımı Kodları
Kodlara aşağıdan ulaşabilirsiniz. Kodların kısaca açıklamaları yan taraflarında verilmiştir. Sure adında bir değişkenimiz var ve bu değişkenle motor her bir adım attığında ne kadar süre beklemesi gerektiğini ayarlıyoruz. Süreyi azaltmanızı tavsiye etmem ama arttırarak step motorun daha yavaş çalışmasını sağlayabilirsiniz. Define komutu ile motor sürücü kartındaki girişlerin arduinoda hangi pinlere bağlı olduğu tanımlanmıştır. Setup kısmında bu pinler output yani çıkış olarak tanımlanmıştır.
Loop kısmında 2 adet yazmış olduğum fonksiyonları çalıştırıyoruz. Bu fonksiyonlara parametre olarak verdiğimiz kadar adim sayısı ile motoru çalıştırıyor. Birisi saat yönünde diğeri ise saatin dönme yönünün tersinde o kadar adım attırıyor. 512 Adım 360 dereceye denk gelmektedir. Loop kısmında kısaca 360 derece saat yönünde hareket ediyor daha sonra 1 saniye bekliyor ve saatin tersi yönünde 360 derece hareket yapıyordur. Kodumuz bu şekilde sonsuza dek devam ediyordur.
Saat yönü ve saatin ters yönü adındaki fonksiyonlarımız parametre alıyordur. Bu parametreye göre adım atıyordur. Mesela 256 adım attırırsak 180 derecelik bir hareket yapmış olur. For döngüsünün içindeki kodlar 256 kez çalışmış olur. Motor sürücü devresindeki IN girişlerine verilen enerjinin yönüne göre motor saat veya ters yönde adım atmaktadır.
Motoru hareket ettirme kodlarını kendim yazdım. Siz isterseniz daha farklı olarak step motor kütüphanelerini kullanarak da step motorunuzu kontrol edebilirsiniz. Mantığını anlamak için bu şekilde yazmak bence daha mantıklı.
Not: Kullandığımız step motor aslında 2048 adım atınca 360 derece dönmektedir. Bizim yazdığımız kodda for döngüsünde 4 adet aşama olduğu için aslında 1 kere çalışınca 4 adım atıyor gibi düşünebiliriz. Biz 1 adım attırdığımızda 4 kere ufak hareket yaptığı ve farklı girişlere voltaj verip kestiği için 512 adım atınca tam tur oluyor. Yani kısaca 512 adım attırınca her adımda 4 kez hareket ediyor ve çarpınca 2048 adım elde ediyoruz.
int sure = 3; //Her adımda bekleme süresi
#define IN1 11 //Motor
#define IN2 10 //Sürücü
#define IN3 9 //Pin
#define IN4 8 //Bağlantıları
void setup() {
pinMode(IN1, OUTPUT); //Pinleri
pinMode(IN2, OUTPUT); //Çıkış
pinMode(IN3, OUTPUT); //Olarak
pinMode(IN4, OUTPUT); //Tanımladık
}
void loop() {
// 512 Adım Tam Tur 360 Derecedir.
SaatYonu(512); //Saat Yönü 512 Adım
delay(1000);
SaatTersYonu(512);//Saat Ters Yönü 512 Adım
delay(1000);
}
void SaatYonu(int adimSayisi) {
for (int i = 0; i < adimSayisi; i++) {
digitalWrite(IN4, HIGH);
delay(sure);
digitalWrite(IN4, LOW);
digitalWrite(IN3, HIGH);
delay(sure);
digitalWrite(IN3, LOW);
digitalWrite(IN2, HIGH);
delay(sure);
digitalWrite(IN2, LOW);
digitalWrite(IN1, HIGH);
delay(sure);
digitalWrite(IN1, LOW);
}
}
void SaatTersYonu(int adimSayisi) {
for (int i = 0; i < adimSayisi; i++) {
digitalWrite(IN1, HIGH);
delay(sure);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
delay(sure);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
delay(sure);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
delay(sure);
digitalWrite(IN4, LOW);
}
}
Uygulama Videosu
[embedyt] https://www.youtube.com/watch?v=tF0wezDc5Zo[/embedyt]
Step motor kullanımı uygulamamız hakkında merak ettiklerinizi veya anlamadığınız şeyleri yorum olarak sorabilirsiniz. İyi çalışmalar dilerim 🙂
Sayın Yunus Emre EKE .Yapmış olduğunuz step kontrol programı çok güzel.Elinize sağlık.step motor kontrol kodlarınız benim yazmaya çalıştığım kodlara çok yakın bir tek ileri geri hareketi 10 kez yapıp durmasını istiyorum bana yardımcı olabilir misiniz.Şimdiden çok teşekkürler
Merhaba benim bir sorum olacak.
Step motoru uzaktan kumanda ile 512 adım ileri 512 adım geri hareket ettiriyorum ,intrupt kesme koduyla her hangi bir adımda durduyorum.
Fakat tekrar sağ veya sola çevirmek istediğimde döngüye baştan giriyor ,benim istediğim ise adımlara kaldıgı yerden devam etmesi.
Yani örneğin sola çevirirken 500 üncü adımda durduğumda tekrar ilerle butonuna bastığımda sadece 12 adım atıp durmasını istiyorum.
Not : encoder ile çözmekten ziyade kodlama ile çözmek istiyorum bu problemi.
Bana yardımcı olursanız sevinirim ,çok araştırdım ama bu konuda bilgiye bir türlü ualasamadim.
Şimdiden teşekkür ederim
merhaba hala ilgileniyorsan ufak bir bilgi verebilirim;
Yeni bir değişken açıp o değişkenin içine adım sayısını tanımlamalısın sonra o tanımlı değişkeni if kalıbı ile bir sorguya alman lazım misal “eğer adım sayısı 0dan farklıysa” olarak if i kullanırsın sonra step motorun hareket kodlarını en son tanımladığın değişken ile çalıştırırsan olur aynı zamanda iç kısımına adım sayısı 512 olunca döngüden çık komutunu koyman lazım.