Bu yazımızda LM298 entegresi kullanarak bir DC Motorun kontrolünü Arduino ile gerçekleştireceğiz. Bir DC Motorun kontrolü çok basittir. Motorun desteklediği voltajı motor uçlarına verirseniz motor bir yöne dönmeye başlar. Polarizasyonu ters yaparsanız yani voltaj uçlarını ters bağlarsanız motor ters yöne doğru döner. Hızını değiştirmek istediğimiz zaman aynı şekilde besleyerek voltajı kıstığımızda motorun hızını değiştirmiş oluruz.
Yön değiştirme işleminde kullanılan devreye H-Köprüsü denir. İsterseniz 4 adet transistör veya mosfet ile yapabilirsiniz ama piyasada bunun için satılan hazır devreler bulunmaktadır. Piyasaki LM298 motor sürücü devresi iki kanallı bir entegreye sahiptir. Bu sürücü ile 2 adet dc motor veya bir adet step motor kontrolü yapabilirsiniz. Aşağıdaki devrede Arduino ile dc motor kontrolü yapmamıza yarayan şemayı bulabilirsiniz.
2 adet buton sayesinde sağa veya sola dc motoru kontrol edebiliriz. Trimpot’ tan gelen analog sinyal okunarak map komutu ile interpolasyon yapılmakta ve pwm çıkış ayarlanmaktadır. Arduino kodunu aşağıda inceleyebilirsiniz.
// www.kaizen40.com //***************** PİN ATAMALARI ******************// const int btn_sag = 2; const int btn_sol = 3; const int IN1 = 6; const int IN2 = 7; const int ENA = 9; //**************** KONFİG AYARLARI *****************// void setup() { pinMode(btn_sag, INPUT_PULLUP); pinMode(btn_sol, INPUT_PULLUP); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(ENA, OUTPUT); //analogWrite(ENA, 0); // sürücü kapalı //Serial.begin(9600); } //***************** ANALOG ÇIKIŞ *******************// void analog_write() { int potValue = analogRead(A0); // trimpotu oku int pwmOutput = map(potValue, 0, 1023, 0 , 255); // interpolasyon yap analogWrite(ENA, pwmOutput); // pwm çıkış olarak ayarla //Serial.println(pwmOutput); delay(100); } //****************** ANA PROGRAM *******************// void loop() { if (digitalRead(btn_sag) == 0) { analog_write(); digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); } else if (digitalRead(btn_sol) == 0) { analog_write(); digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); } else { analogWrite(ENA, 0); // sürücüyü kapat } }
İlerleyen zamanlarda aynı entegreyi kullanarak step motor kontrolünün nasıl yapılacağına değineceğiz arkadaşlar.
7 yorum
güner güvenç · 4 Eylül 2019 15:03 tarihinde
merhaba
yazdığınız kodu IBT2 motor sürücüsüne nasıl uygulaya bilirim ? yardımcı olabilirmisiniz.
IBT2 sürcüsünde ” rpwm,lpwm,r_en,l_en “girişleri var.
Remzi Şahinoğlu · 27 Eylül 2019 08:51 tarihinde
Bahsettiğiniz 4 giriş için;
motorun sağa dönmesi için r_en pinini 1 veya 0 yapıp rpwm pinine kare dalga gönderin.
motorun sola dönmesi için l_en pinini 1 veya 0 yapıp lpwm pinine kare dalga gönderin.
güner güvenç · 4 Ekim 2019 08:12 tarihinde
teşekkür ederim..
benim problemim yukarıdaki koda sizin yazdıklarınızı nasıl uygulayabilirim
Aytaç Çiçek · 16 Aralık 2019 22:01 tarihinde
Merhaba
Öncelikle çok teşekkür ediyorum. Ben bu projeyi perde otomasyonunda kullanacağım acaba 2 adet limit switch ilave edebilir misiniz? Beni çok büyük dertten kurtaracaksınız. Umarım kısa sürede ilave yaparsınız çünkü babamın eklem bölgelerinde kireçleme var perdeyi çekmesi zor oluyor. Tekrar teşekkürler iyi günler, iyi çalışmalar.
Remzi Şahinoğlu · 22 Ocak 2020 09:15 tarihinde
Merhaba, limit switch olarak butonlara seri ve normalde kapalı kontak olacak şekilde switchleri bağlayabilirsiniz. Bu sayede limit switche ulaşmadığı zaman akım geçerek motor dönecek, limit switche bastığında akım kesilerek duracaktır. Sadece diğer yön için butonu çalışacaktır.
Anonim · 24 Şubat 2021 14:54 tarihinde
BEN BU PROJE DE BUTON YERİNE LDR KULLANMAK İSTİYORUM.IŞIK ŞİDDETİNE GÖRE MOTOR YÖNÜ DEĞİŞİMİ NASIL YAPABİLİRİM.
Remzi Şahinoğlu · 3 Mart 2021 12:54 tarihinde
LDR’ yi bir trimpot ile analog inputa giriş yapabilirsin. Oradan gelen voltaj değişimini örnekleyerek kod üzerinde motora yön verebilirsin. Örneğin 2,5 voltun altında ise motor sağa dönsün, üzerinde ise sola dönsün gibi. Bununla ilgili internette örnekler olabilir. Arduino LDR gibi aratırsan sonuç çıakacaktır.