Merhaba arkadaşlar. Bugün sizlerle Arduino UNO kullanarak DC motor hız ve yön kontrolü yapacağız.

Gerekli malzemeler:

Daha önceki DC motor uygulamamızda, 1 adet transistör kullanarak motorumuzla sadece hız kontrolü yapmıştık. Fakat yön kontrolü yapabilmemiz için bir motor sürücü entegresine ihtiyacımız var. L293D entegresi, 2 adet DC motor veya 1 adet step motor sürmek için kullanılan oldukça popüler bir entegredir.

Bu entegrenin input 1 ve input 2 girişleri, motorun döneceği yönü; enable pini ise hangi çıkışların aktif olacağını kontrol ediyor. Enable pinine uygulayacağımız PWM sinyal, motorların hızını değiştirmemize olanak sağlıyor.

Bu entegreyi kullanarak hazırladığımız devre şemamız:

Devre şeması 17/01/2017 tarihinde güncellenmiştir.

Kodumuz:

int enablePin = 11;
int in1Pin = 10;
int in2Pin = 9;
int butonPin = 7;
int potPin = 0;

void setup()
{
  pinMode(in1Pin, OUTPUT);
  pinMode(in2Pin, OUTPUT);
  pinMode(enablePin, OUTPUT);
  pinMode(butonPin, INPUT);
}



void loop()
{
  int hiz = analogRead(potPin) / 4;
  boolean ters = digitalRead(butonPin);
  motorCalistir(hiz, ters);
}

void motorCalistir(int hiz, boolean ters)
{
  analogWrite(enablePin, hiz);
  digitalWrite(in1Pin, ! ters);
  digitalWrite(in2Pin, ters);
}

Entegremizin enable bacağına analogWrite() fonksiyonu sayesinde PWM sinyal göndererek hız kontrolü yapmış oluyoruz. Butona bastığımızda input 1 ve input 2 pinlerine giden sinyaller tersine çevriliyor. Böylece motorun döndüğü yön ters çevrilmiş oluyor.

 

44 Yorumlar

  1. Bu entegrenin beslemesini arduino üzerinden değil de mesela bir aküden verebiliyor muyuz? sadece yön kontrolü için ULN 2803 kullanmaktan farkı ne?

    • Sürücünüzün çalışabildiği gerilim aralığında olduğu sürece herhangi bir DC gerilim kaynağı (pil, akü, adaptör vs.) kullanabilirsiniz. ULN2803 entegresi, yanlızca darlington transistörlerden oluşmaktadır, L293D ise bir H-köprüsü entegresidir. Yani ULN2803 entegresini çoklu transistör gibi kullanabilirsiniz, L293D ise hız kontrol ve yön değiştirme uçları dışarı verildiğinden daha kolay bir kullanıma sahiptir.

  2. Merhaba
    Ben bi proje yapacagim
    Arduino katrtla
    İleri geri devirli bir motor olacak zaman ayarli ilk ilere calistiginda ortalama 20 dk gibi zamanla otomatik baslayacak durdurma sivic yardimiyla manuel olacak 20 dk kadar bekleyip geri calisacak yine ayni bi 20 dakika kadar calisip durdurma sivic yardimiyla sonlu olacak sonra tekrar 20 dakika bekleyim ileri devam edecek bu sekilde dongulu ayarlaya bilecegim bir kart .. oneri bekliyorum İyi CALİSMALAR simdiden yatdiminiz icin tesekkur ederim….

    • Merhabalar, ünlem işareti gelen değerin tersinin alınması için kullanılmaktadır. Yani 0 geliyorsa 1, 1 geliyorsa 0.

  3. PWM ile DC motor sürmede en dikkat edilmesi gerek konulardan birtanesi PWM frekansı. Fakat baktığım hiçbir Türkçe kaynakta Arduino’nun PWM frekansını ayarlamayı görmedim. Lütfen bu konuda da bilgi verin.

    • Arduino üzerindeki PWM çıkışlarının frekanslarını değiştirmek için timer’lar ile oynamak gerekeceğinden, bu yazımızın kapsamını çok aşacağını düşünmekteyim. İlginiz için teşekkür ederiz 🙂

    • Farklı bir motor çalıştırma fonksiyonu (örneğin motorSolCalistir veya motorSagCalistir) oluşturarak bu motorun bağlı olduğu yön kontrol pinlerini (eğer bu dersteki sürücüyü kullanıyorsanız L293D entegresinin 10 ve 15 yön kontrol ve 9 numaralı enable bağlantıları) bu fonksiyonda tanımlayarak ikinci motorunuzu kontrol edebilirsiniz.

    • Bu uygulamada kullanılan motor fırçalı DC motordur. Fırçasız DC motorları çalıştırmak için ESC (electronic speed controller) isimli özel sürücü devreler bulunmaktadır. ESC’lerin sinyal bağlantısı, servo motorlar ile tamamen aynıdır. Fırçasız motorlar ile ilgili çalışma yapacaksanız Servo Motor Kontrolü uygulamamızı inceleyebilirsiniz.

    • Merhabalar, burada anlatılan sistem oldukça basittir: Doğrudan istenilen hız değeri PWM olarak sürücünün “enable” pinine verilir ve böylelikle oransal (proportional – PID’nin P kısmı) olarak hız kontrolü yapılmış olur. Yani kısa cevap P kontrol 🙂

  4. merhabalar iyi çalışmalar hocam
    bu uygulamayı aynı şekilde 4 farklı dc motora aynı devre de uygulamak mümkün müdür bu konuda yardımcı olabilirseniz sevinirim teşekkür ederim

    • Evet mümkündür. Her bir L293D motor sürücüsü 2 adet motoru desteklediğinden 2 tane bu sürücüden kullanmanız gerekecektir. Yön kontrol pinleri ve PWM hız pinlerini bağlayarak kullanabilirsiniz. Unutmayın ki her bir motor için Arduino’ya 3 adet bağlantı yapmanız gerekmekte. Yani toplamda 12 adet pin kullanmış olacaksınız.

    • Bahsettiğiniz tipteki motorları sürmek için “inverter” diye tabir edilen sürücüler kullanılmaktadır. Bu tip sürücüler, genellikle endüstriyel kullanım amaçlı olduğundan, PLC gibi cihazlar ile haberleşecek şekilde tasarlanır (PROFIBUS, PROFINET, CCLink vs). Bazı sürücülerin bu tip haberleşme yeteneği olmamakta, bunun yerine PLC’nin çıkışına doğrudan bağlanacak şekilde 24V gerilim ile çalışan girişleri bulunmaktadır. Bu tipte bir sürücünüz var ise, buradaki ürüne benzer kartlar ile Arduino’nuzun 5V çıkışını 24V’a yükselterek sürücüyü kullanabilirsiniz.

    • Uygulamada kullanılan L293D entergresi, H köprüsü dediğimiz konfigürasyonda dizilmiş transistör dizilerine sahiptir. H köprüsünü inceleyecek olursak, akımın motor üzerinden bir yönde akması için çapraz iki transistörün iletime girmesi gerektiğini görmekteyiz. Aynı şekilde akımın yönünü tersine çevirmek için ise diğer çapraz transistörlerin aktif olması gerekmektedir. L293D entegresi, her motorun yön kontrolü için 2 adet girişe sahiptir. Böylelikle kolay bir şekilde motorun dönüş yönünü tersine çevirebilir, ya da fren yaptırabiliriz. H köprüsünü daha iyi anlamak için buradaki videoyu izleyebilirsiniz.

  5. Merhaba,
    Öncelikle bu güzel çalışma için teşekkürler.
    Devreye radio transmitter ekleyerek uzaktan kumanda ile kullanmaya çalışıyorum. Motor dönerken radyo alıcısı çalışmıyor. Motor pinlerinden birini boşa düşürünce yeniden çalışmaya başlıyor. Nedeni ne olabilir? Bu sorunu nasıl aşarım.
    Teşekkürler.

    • Motorunuzun çalışırken oluşturduğu parazit kablosuz alıcı devrenizi etkiliyor olabilir. Motor ile alıcı arasındaki mesafeyi arttırmayı veya daha kaliteli bir motor sürücü kullanmayı deneyebilirsiniz.

    • Merhabalar. Linkini vermiş olduğunuz motor, zorlanma durumunda ürün açıklamasında belirtildiği üzere 5.6A akım çekmektedir. L298N motor sürücü ise kanal başına 2A akım verebildiğinden yetersiz kalabilir. Enkoderli motor olması, yalnızca konum kontrolü uygulamalarında işinize yarayacaktır, onun haricinde standart bir DC motor gibi sürebilirsiniz. Motorun + ve – uçlarından sürücüye bağlantı yapmanız yeterli olacaktır.

  6. merhabalar motorun tork ve dönüş hızını gösteren bir aurdino projesi varmıdır? bu tork ve hız değerlerini de bir lcd panel üzerinden görebilirmiyiz? bu proje için yardım edermisiniz veya yol gösterirmisiniz?

  7. merhaba ben bir proje yapıyorum butona basarak yön değişeceğine , butona basınca dursa olur mu. olursa neleri değiştirmem gerek? (butonla start/stop yapma)

  8. DC motorda zaman kontrolünü nasıl sağlayabilirim.? yani dc motorun belli bir süre (saniye cinsinden) Çalışıp durması söz konusu olabilir mi?

  9. merhaba ben devreyi yaptım çalıştı hızı ayarlıyorum fakat butona bastığımda terse dönmüyor hiç bir şey olmuyor şemaya göre kesinlikle doğru 4 kere söküp tekrar yaptım LÜTFEN YARDIM EDİN

    • Devredeki butonun bağlantısını yaparken yan yana iki bacağını kullanmayı deneyin. Sanırım devre şeması hatalı. Tüm yazıları kontrol etmemiz gerekecek 🙂

  10. merhaba öncelikle verilen bilgiler için eşekkür ederim.küçük bir cam sileceği projesi yapmam lazım.bu yazınızı incelediğimde yapmayı düşündüğüm sisteme uyuyor.yeni sizden arduino uno seti aldim.ama içerisinde l293d entegresi ve 1k direnç yok.ve şu an sitenizde de stokta kalmadığını ördüm en kısa zamanda malzemeleri temin etmem gerekiyor.ne zaman bu ürünlere ulaşabilirim.ya da yerine kullanabileceğim farklı malzemeler var mıdır?

CEVAP VER