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.

 

73 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 🙂

      • iyi günler, aynı sorunu güncellenmiş şemada hala yaşıyorum. yön kontrolümsağlayamıyorum ve bazı durumlarda motor çalışmıyor. çalıştığı zamanda butonla başlat durdur dışında yön kontrolü yapamıyorum. bu sorunu nasıl çözebilirim?

  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?

    • L293B entegresi, bu devrede kullanılan L293D ile birebir pin uyumludur. Farkları sağlayabilecekleri akım miktarı ve flyback diyotlarıdır. Sağlayabileceği akım yettiği sürece sorunsuzca kullanabilirsiniz.

  11. yukarıdaki uygulamayı yaptım ama
    ” Çalışmanız programın 1194 bayt (3 %) saklama alanını kullandı. Maksimum 32256 bayt.
    Global değişkenler belleğin 9 byte kadarını (0%) kullanıyor. Yerel değişkenler için 2039 byte yer kalıyor. En fazla 2048 byte kullanılabilir. ” böyle bir hata aldım.ne yapmam gerekiyor?Yardımcı olabilirmisiniz?

    • Hata değil ki bu kodları başarılı bir şekilde karta aktardığını gösteriyor. Arduinonun belleğinde kullanılan alan yazılı orada

  12. s.a ustam ben uzaktan kumandalı arabadaki dc motorları kullanarak araba yapmak istiyorum bunun için
    arduino uno, dc motor sürücü kartı, 9v pil(arduino için), hc-06 bluetooth modülü ve android uygulaması olan blynk programını kullanarak yapmak istiyorum
    size sorum istediğimi elde edebilirmiyim programdaki joystick ile motorun hızını kontrol edebilirmiyim.

  13. Öncelikle selamun aleyküm kolay gelsin , arkadaşlarla takıldığımız bir konu var yardımcı olursanız çok seviniriz .
    iki adet dc motor kullanılarak pottan gelen değere göre birinin hızlanıp diğerinin aynı oranda yavaşlamasını sağlayan programı yazınız .
    yani ortalama 127 gibi bi değerde ikisi de aynı hızda motor2 255 yani max hızda çalışırken motor1 in durması gerekiyor ayrıca mesela pottan 150 gibi bir değer gelirse motor2 150 de , motor1 in ise buna oranla 104 gibi bir değerde çalışması gerekiyor bunun için yardımcı olabilir misiniz

    • Gelen veriyi motor_hiz gibi bir değişkende tutun. motor1 = motor_hiz ve motor2 = 255 - motor_hiz yazdığınızda istediğinizi elde edebilirsiniz.

  14. devreyi kurdum fakat motor dönmüyor 8200 coreless motor kullanıyorum yardımcı olurmusunuz etkileşim sıfır bide turunca kablo yerine motorun + ucunu bağladım

  15. kerem bey. Tek bir arduino uno ile ile rfid kullanarak kayan kapı yapmak istiyoruz. CD romu söküp içindeki mekanizmayı çıkardık. cd takılan yeri ileri geri haraket ettirerek kapıymış gibi kullanmayı planladık. bunun için cd rom motorunu sağa ve sola döndürmek içinL293D mi kullanmalıyız yoksa dc motor sürücü devresimi. iki elemanıda tek bi arduino uno ile çalıştıra bilirmiyiz. yani butonu kaldıracağız kartı okutunca kapı açılacak tekrar okutunca kapı kapanacak. tabi dc motor sürücü kodlarının içerisine rfid kodlarını ekleye bilirmiyiz ondanda pek emin değilim.

    • L293D entegresi zaten motor sürmek için kullanılan bir H-köprüsü entegresidir. Arduino UNO bahsettiğiniz proje için yeterli pin sayısına sahiptir. Kod için ise Arduino Dersleri 18: RC522 RFID Modül Kullanımı yazımızı inceleyebilirsiniz. LED yakıp söndürme yerine bu derste anlatılan motor sürme kısmını entegre edebilmeniz mümkündür.

  16. kerem bey bu uygulamayı 2DC motora uygulayıp buton olmadan sadece potansiyometre ile sağ ve sol yönlere çevirerek motorların hızlarını kontrol etmek mümkünmüdür ?
    kodlarda ne gibi değişiklikler yapmamız gerekiyor?

    • Potansiyometreden ölçeceğiniz değer 0-1023 arasında değişecektir. Bu değeri 0-511 ve 512-1023 olacak şekilde iki kısma ayırarak bu farklı aralıkların motoru farklı yönde döndürmesini sağlayabilirsiniz. Hız kontrolü için gerekli 0-255 arasındaki değeri de map() komutu ile elde edebilirsiniz. Yani bir if yapısı oluşturup bu if ile motorların döneceği yönü belirleyecek, if’in içerisinde ise gelen değeri hız kontrolü için ölçekleyerek kullanacaksınız.

  17. Merhaba kolay gelsin. 6 v 9000 rpm bir motor ( akulu araba motoru ) icin nasil bir surucu kari kullanabilirim. Kontrol arduino uzerinden kumandayla yapmayi dusunuyorum. 2 adet motor calisacak. Sag ve sol ileri ve geri. Tskler

    • Sürücü kartını belirleyecek parametre yalnızca motor gerilimi değildir. Akülü arabalarda kullanılan DC motorlar, yük altında yüksek akım çekebilmektedir. Genel olarak bir tahmin yürütmek gerekirse en azı 10A civarı akım sağlayabilecek bir motor sürücü kullanmak mantıklı bir hareket olacaktır. Sürücü kartlarımızı buradan inceleyebilirsiniz.

    • Turuncu kablo, motor besleme gerilimi olarak kullanılıyor. Ben Arduino’nun adaptör ile besleneceğini düşündüğüm için, adaptörden gelen gerilimi motoru beslemek için o şekilde bir bağlantı tercih ettim. Siz motor beslemesi olarak farklı bir kaynak kullanacaksanız sorun yoktur, yalnızca kullandığınız kaynağın GND veya – bağlantısını Arduino’nun GND pinlerinden birine bağlamayı unutmayınız.

  18. Merhabalar, hc-05 modülü ve 4 adet redüktörlü dc motor 2 adet l298 kullanarak, bluetooth kontrollü araba yaptım, fakat devremdeki sıkıntı şu, telefon
    ile ileri yada geri komutu verdiğimde sıkıntı yok, fakat ileri giderken geri yada geri giderken ileri komutu verdiğimde birden hc-05 in bağlantısı kesiliyor. Manuel olarak
    tekrar bağlanabiliyorum, motoru ters yöne geçirirken özel bir teknik varmı ? Ters manyetik alan devreyemi etki ediyor? Sizin fikriniz nedir?

  19. Merhabalar hocam http://www.robotistan.com/arduino-motor-surucu-shield-arduino-motor-driver-shield burada ki shield’e 4 dc motor bağlayıp küçük bir quadcopter yapmaya çalışacağım. Bluetooth modülü ve eksen/ivme sensörünü bu shield ile kullanabilirmiyim ? küçük birşey olacağı için fırçalı motor kullanmayacağım malum fiyatları pek uygun değil nasıl bir motor kullanmamı önerirsiniz 4 adet 600 devir 5v dc motor yeterli olurmu?

      • Üzülerek belirtmem gerekir ki fırçalı motorlar drone’lar için tatmin edici performans gösterememektedir. Küçük boyutlardaki oyuncak quadcopterlerde fırçalı motor kullanılmaktadır, fakat bu oyuncaklar bahsettiğiniz motor sürücü shield kartının belki yarısı kadar ağırlığına sahiptir. Ayrıca 600 devir 5V motor da biraz fazla iyimser bir tercih. Mini drone’larda kullanılan “coreless” tipteki fırçalı motorlar yaklaşık olarak 50.000 devir çevirmektedir.

  20. Merhabalar

    DC motorlarda step motorda olduğu gibi adım sistemine yakın birşey yapılabilir mi yani bir araba yapsak x kadar git ve dur gibisinden bir kod mümkün mü?

CEVAP VER