Book Appointment Now
Arduino ile Adım Motor Çalıştırılması
Adım motor hareketlerin hassas olması gereken yerlerde kullanılan motor çeşididir. Bu yazıda bir adım motorun nasıl kontrol edileceği incelenecektir. Adım motorların bir sürücü ile çalışması gereklidir. Bu hem arduino için yüksek olabilecek akımları başka kaynaktan sağlamak hem de çalıştırmayı kolaylaştırmak için yararlıdır. Kullanacağımız motor 28 BYJ-48 kod numaralıdır. Bu motor sürücüsü ile satılmaktadır. Yavaş ama ucuz bir motordur. Ancak ilkeleri ve kullanmayı anlamak için çok uygundur.
Bu tasarım için gerekenler her hangi bir arduino ve 28 BYJ-48 adım motordur.
Bağlantı aşağıdaki görseldeki gibidir.

Bu bağlantıda arduino toprağı ile adım motorun toprağının birleştirilmesi unutulmamalıdır.
Program arduino’ya yüklendikten sonra SeriPort ekranı açılır. Bu tasarımda SeriPort ekranın girilen adım kadar motor bir yöne çalışacaktır. girilen süre negatif olursa motor ters yönde dönecektir.
Program aşağıda verilmiştir.
int motorPin1 = 4, motorPin2 = 5, motorPin3 = 6, motorPin4 = 7; //Step motor pinlerini tanımlıyoruz.
void setup(){
//Motor pinleri OUTPUT olarak ayarlanır.
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
Serial.begin(9600);
}
long Adimlar;
void loop(){
if (Serial.available()){
Adimlar = Serial.parseFloat();
// Serial.println(Adimlar); // Adimlar değişkenini seri porttan görmek için bu satırın başındaki açıklama işareti kaldırılır
// Adimlar değişkeni pozitif ise Adimlar kadar ileri hareket yapılır
if (Adimlar>0){
for(int adim = 0; adim < Adimlar; adim++){
stepIleri(3);
}
// Hareket bitince, yeni hareket öncesi motor çıkışları sıfırlanır
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
Serial.println("İleri tamamlandı");
Adimlar = 0;
}
// Adimlar değişkeni negatif ise Adimlar kadar geri hareket yapılır
if (Adimlar<0){
Adimlar = - Adimlar;
for(int adim = 0; adim < Adimlar; adim++){
stepGeri(3);
}
// Hareket bitince, yeni hareket öncesi motor çıkışları sıfırlanır
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
Serial.println("Geri tamamlandı");
Adimlar = 0;
}
}
}
void stepIleri(int beklemeSuresi){ //Step motora ileri hareketi yaptırır.
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(beklemeSuresi);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(beklemeSuresi);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(beklemeSuresi);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(beklemeSuresi);
}
void stepGeri(int beklemeSuresi){ //Step motora geri hareketi yaptırır.
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(beklemeSuresi);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(beklemeSuresi);
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(beklemeSuresi);
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(beklemeSuresi);
}
Programın incelenmesinden anlaşılacağı gibi motorun bir yöne dönmesi için 4 giriş sırayla VDD yapılır. Ters yöne döndürmek için sıra değiştirilir. Yani bir yöne 1, 2 , 3 , 4 sırası kullanılırken diğer yöne 4, 3, 2, 1 sırası kullanılır.
Her hangi bir otomasyonda kullanılırken adım sayılarını sistemin vermesi sağlanmalıdır.