Arduino ile DC Motor Kontrolü

arduino dc motor kontrolü

Arduinonun pin çıkışlarını doğrudan motora bağlamamız motor için gerekli akımı sağlamamaktadır. Arduinonun pin çıkışları ancak bir ledi yakacak kadar akım vermektedir. Fakat biz bu akımı tetikleme işlevinde kullanıp DC motorları ileri veya geri yönde çalıştırabiliriz. Bunun için hazır devre kartları vardır. Bunlardan birini alıp kolaylıkla kullanabiliriz. Örnek hazır karta linkten ulaşabilirsiniz.


http://www.aliexpress.com/item/Special-promotions-5pcs-lot-L298N-motor-driver-board-module-L298-for-arduino-stepper-motor-smart-car/1827893830.html


Bu kartı aldığınızda birazdan anlatacağım şekilde kablo bağlantılarını yapabilir ve motorunuzu kolaylıkla kontrol edebilirsiniz.


Fakat tüm devreyi kendiniz yapmak istiyorsanız bu iş biraz uğraştırıcı ve karmaşık olabilir. Fakat sistemin nasıl çalıştığını anlamak için en azından bir kere devrenin kurulması yararlı olabilir. Motor sürücü için akımı kuvvetlendirmek ve motoru kontrol etmek için L298 entegresini kullanacağız. Benzer entegreler de aynı görevi yapmaktadır. L298 entegresinin en önemli özellikleri, 2 ampere kadar dayanabilmesi ve iki adet H köprüsünün bulunmasıdır.

h köprüsü

Kısaca bağlayacağımız pinleri tanıtmak istiyorum;

INPUT 1 ve INPUT 2 (5. ve 7. Ayaklar): Bu pinlerimizi Arduino’ya bağlayacağız. Input 1’e 5 volt verip input 2’ye 0 volt verdiğimizde motorumuz ileri doğru, tam tersini yaptığımızda da geri doğru gidecektir.


INPUT 3 ve INPUT 4 (10. ve 12. Ayaklar): Bu pinler de INPUT 1 ve INPUT 2 gibi çalışmaktadır.


OUTPUT 1 ve OUTPUT 2 (2. Ve 3. Ayaklar): Bu iki pin motorun iki ucuna bağlanması gerekmektedir.

OUTPUT 3 ve OUTPUT 4 (13. Ve 14. Ayaklar): Bu iki pin diğer motorun iki ucuna bağlanması gerekmektedir.


ENABLE A ve ENABLE B (6. ve 11. Ayaklar): Bu iki pin bizim hızımızı ayarlayacak pinlerdir. Bu yüzden bu pinleri Arduino’nun PWM ayaklarına bağlamamız gerekir. Verilen PWM sinyaline göre hızımız belli olacak ve INPUT ayaklarına verdiğimiz veya vermediğimiz 5 volta göre de motorun yönü belli olacaktır.

PWR hız kontrolü

 

PWM ile Hız Kontrolü: PWM sinyali LOGIC-HIGH (5 Volt) ve LOGIC-LOW (0 Volt) sinyallerden oluşmaktadır.

HIGH ve LOW sinyalin oranına göre belli olan ortalama çıkış sinyali sayesinde motorumuzun hızı 0-255 arasında değerler alabilmektedir.

VSS (LOGIC SUPPLY VOLTAGE – 9. Ayak): Adından da anlaşıldığı gibi bu pinin 5 volta bağlanması gerekmektedir. Devrenin kararsızlığını azaltmak için bu pin ile toprak arasına 100nF’lık kondansatör bağlanabilir.


GND (8. Ayak) : Bu pini toprağa bağlamamız gerekmektedir. Ayrıca entegrenin tepesindeki metal de toprak olmaktadır. Bunu belirtmemin nedeni yanlışlıkla kısa devre yapmamanız içindir.


VS (4. Ayak): Entegremizin motorlara gidecek enerjiyi sağladığı asıl besleme ayağıdır. Buraya verdiğimiz motor kontrolümüz doğrultusunda motorlara verilecektir. Motorumuzun özellikleri göze alınarak uygulamalarımızda buraya 12 Volt bağlayacağız.


Entegremizin pin yapılanmasını öğrendiğimize göre devremizi oluşturmaya başlayalım. Test için entegreyi breadboard üzerinde kullanabilirsiniz. Fakat diğer uygulamalarda kullanmak istediğinizde, kablo kalabalığı ve sürekli çıkan/temassızlık yapan kablolar yüzünden tam verim alamazsınız. Bu yüzden devreyi test ettikten sonra delikli pertinaks’a veya baskı devreye kurmak isteyebilirsiniz. Veya benim önerim hazır devre kartını almanız. Yurtdışından 2-3$’a alabilirsiniz.


Hazır kart aldığınızda da üzerinden demin bahsettiğim pinleri göreceksiniz.

Sıra geldi Arduino programını yazmaya. Aşağıdaki kodda oluşturuğum fonksiyonları diğer uygulamalarımızda da kullanacağız. Öncelikle INPUT ayakları için değişkenlerimizi tanımlıyoruz.

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 hizsag, int hizsol){
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,HIGH);
digitalWrite(saggeri,LOW);
analogWrite(solenable, hizsol);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri,LOW);
}
void geri(int hizsag, int hizsol){   // ilk değişkenimiz sağ 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 tork’unun yetersizliğinden 60-255 arasında çalışmaktadır.
// Eğer motorunuzdan tiz bir ses çıkıyorsa hızını arttırmanız gerekmektedir.
analogWrite(sagenable, hizsag);
digitalWrite(sagileri,LOW);
digitalWrite(saggeri, HIGH);
analogWrite(solenable, hizsol);
digitalWrite(solileri, LOW);
digitalWrite(solgeri, HIGH);
}
void dur()
{
digitalWrite(sagileri, HIGH);
digitalWrite(saggeri, HIGH);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri, HIGH);
}
void setup(){
pinMode(sagileri,OUTPUT);
pinMode(saggeri,OUTPUT);
pinMode(solileri,OUTPUT);
pinMode(solgeri,OUTPUT);
pinMode(sagenable,OUTPUT);
pinMode(solenable,OUTPUT);
}
void loop(){
ileri(100,100);   // ileri gidiyoruz
delay(1000);
dur(); // durduk
delay(1000);
ileri(150,100)   // hafif sola doğru gidiyoruz
delay(1000);
dur(); // durduk
delay(1000);
ileri(100,150)   // hafif sağa doğru gidiyoruz
delay(1000);
dur();   // durduk
delay(1000);
geri(100,100);   // geri gidiyoruz
delay(1000);
dur();    // durduk
delay(1000);
}

Umarım kodlar yararlı olmuştur. Şimdi bir de yazılımda yazdığımız kodlarla yani Arduino ayaklarıyla motor sürücümüzün ayakları arasındaki bağlantıları bir tabloda gösterelim.

İlgili Mesajlar

Abone ol
Bildir
guest
0 Yorum
Inline Feedbacks
View all comments