Shield motor sürücülere göre daha ucuz olduğu için harici motor sürücüler proje bütçesine göre tercih edilebilmektedir. Harici motor sürücüler, bu bölümde gösterilen kendinizin kurabileceği motor sürücülerin hazır kart şekline getirilmiş halidir. Bu sürücülerde INPUT, OUTPUT, ENABLE ve besleme pinleri bulunur. INPUT pinleri daha önce öğrendiğimiz gibi yön kontrolünde, ENABLE pinleri motorların dönme hızını kontrol etmede kullanılır.
Motor sürücüsünün nasıl çalıştığını bildiğimize göre kablo bağlantılarını yapmaya başlayabiliriz. Motorlara enerji sağlayacak besleme 7-12 volt arasındaki besleme kaynaklarına bağlanmalıdır. Mantıksal besleme 5 volt hattına ve GND ise toprak hattına bağlanmalıdır. INPUT pinleri Arduino'nun çıkış pinlerine; ENABLE pinleri ise Arduino'nun PWM çıkış verebilen pinlerine bağlanmalıdır. Motor pinleri sürücü yanlarında bulunan OUTPUT pinlerine bağlanmalıdır.
Not: Motorun ileri gitmesi beklenirken geri yönde dönmesi, OUTPUT pinlerinin ters bağlanmış olduğundan kaynaklanmaktadır. Bu pinlerin yerleri değiştirilerek motorların doğru yönde dönmesi sağlanabilir.
Motor sürücü bağlantısını aşağıdaki gibi yapınız.
Resimde yapılan kablo bağlantıları aşağıdaki tablolarda gösterilmiştir.
Arduino | Motor Sürücü |
8 | INPUT 1 |
9 | INPUT 2 |
13 | INPUT 3 |
12 | INPUT 4 |
11 | ENABLE A |
10 | ENABLE B |
Motor | Motor Sürücü |
Motor1 + | OUTPUT 1 |
Motor1 - | OUTPUT 2 |
Motor2 + | OUTPUT 3 |
Motor2 - | OUTPUT 4 |
(Motorun + veya – ucunun hangisi olduğu farketmez)
Besleme | Motor Sürücü |
+12 volt | VCC |
Toprak (- uç) | GND |
+5 volt | VS |
Devre kurulumunu yaptığımıza göre aşağıdaki kodu Arduino'ya yükleyerek devremizi test edelim. Kendi motor sürücüsünü kurmuş olanlar da aşağıdaki Arduino kodunu kullanabilirler.
int DonmeHizi = 175;
/* bu değişken ile motorların dönme hızı kontrol edilebilir */
/* motor sürücüsüne bağlanacak INPUT ve ENABLE pinleri belirleniyor */
const int sagileri = 9;
const int saggeri = 8;
const int solileri = 12;
const int solgeri = 13;
const int solenable = 11;
const int sagenable = 10;
void ileri(int hiz){
/* ilk değişkenimiz sag motorun ikincisi sol motorun hızını göstermektedir.
* motorlarımızın hızı 0-255 arasında olmalıdır.
* Fakat bazı motorların torkunun yetersizliğiniden 60-255 arasında çalışmaktadır.
* Eğer motorunuzdan tiz bir ses çıkıyorsa hızını arttırmanız gerekmektedir.
*/
analogWrite(sagenable, hiz); /* sağ motorun hız verisi */
digitalWrite(sagileri,HIGH); /* ileri dönme sağlanıyor */
digitalWrite(saggeri,LOW); /* ileri dönme sağlanıyor */
analogWrite(solenable, hiz); /* sol motorun hız verisi */
digitalWrite(solileri, HIGH); /* ileri dönme sağlanıyor */
digitalWrite(solgeri,LOW); /* ileri dönme sağlanıyor */
}
void sagaDon(int hiz){
analogWrite(sagenable, hiz); /* sağ motorun hız verisi */
digitalWrite(sagileri,LOW); /* geri dönme sağlanıyor */
digitalWrite(saggeri,HIGH); /* geri dönme sağlanıyor */
analogWrite(solenable, hiz); /* sol motorun hız verisi */
digitalWrite(solileri, HIGH); /* ileri dönme sağlanıyor */
digitalWrite(solgeri,LOW); /* ileri dönme sağlanıyor */
}
void solaDon(int hiz){
analogWrite(sagenable, hiz); /* sağ motorun hız verisi */
digitalWrite(sagileri,HIGH); /* ileri dönme sağlanıyor */
digitalWrite(saggeri,LOW); /* ileri dönme sağlanıyor */
analogWrite(solenable, hiz); /* sol motorun hız verisi */
digitalWrite(solileri, LOW); /* geri dönme sağlanıyor */
digitalWrite(solgeri,HIGH); /* geri dönme sağlanıyor */
}
void geri(int hiz){
analogWrite(sagenable, hiz); /* sağ motorun hız verisi */
digitalWrite(sagileri,LOW); /* geri yönde dönme sağlanıyor */
digitalWrite(saggeri, HIGH); /* geri yönde dönme sağlanıyor */
analogWrite(solenable, hiz); /* sol motorun hız verisi */
digitalWrite(solileri, LOW); /* geri yönde dönme sağlanıyor */
digitalWrite(solgeri, HIGH); /* geri yönde dönme sağlanıyor */
}
void dur()
{
/* Tüm motorlar kitlenerek durma sağlanıyor */
digitalWrite(sagileri, HIGH);
digitalWrite(saggeri, HIGH);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri, HIGH);
}
void setup(){
/* motorları kontrol eden pinler çıkış olarak ayarlanıyor */
pinMode(sagileri,OUTPUT);
pinMode(saggeri,OUTPUT);
pinMode(solileri,OUTPUT);
pinMode(solgeri,OUTPUT);
pinMode(sagenable,OUTPUT);
pinMode(solenable,OUTPUT);
}
void loop(){
ileri(DonmeHizi);
delay(1000);
dur();
delay(1000);
solaDon(DonmeHizi);
delay(1000);
dur();
delay(1000);
sagaDon(DonmeHizi);
delay(1000);
dur();
delay(1000);
geri(DonmeHizi);
delay(1000);
dur();
delay(1000);
}
Yukarıdaki kodla motorlar dönmeye başlamalıdır. Eğer motorların dönmesinde bir sorun var ise, öncelikle kablo bağlantılarınızı gözden geçiriniz. INPUT pinleri hatalı bağlanmış olabilir, birbiri arasında yerlerini değiştirmeyi deneyebilirsiniz. Motorun ileri yönde dönmesi beklenirken geri yönde dönüyorsa motor bağlantılarının yerini değiştirebilirsiniz.
Bu bölümde Arduino ile DC motor kontrolünün nasıl yapıldığını öğrenmiş olduk. Motor kontrolü için gereken motor sürücülerin türlerini ve kendimiz nasıl motor sürücü yapacağımızı da öğrendik. Artık hareket gerektiren projelerimizde motor sürücüler yardımıyla DC motorlarımızı kullanabiliriz.