Merhaba arkadaşlar. Bugünkü uygulamamızda Arduino ile DC motor hız kontrolü yapacağız. Konuya geçmeden hatırlatmak isterim, tüm arduino eğitim derslerimizi mutlaka inceleyin.

Gerekli malzemeler:

Bu uygulamamızda BJT tipi bir transistör kullanarak DC motorumuzun hızını kontrol edeceğiz. Peki neden bir transistöre ihtiyacımız var?

Arduino’muzun dijital pinlerinden alacağımız çıkış geriliminin 5V olduğunu biliyoruz. 9V DC motorumuz 5V gerilimle çalışabilir fakat motorun çekeceği akım, Arduino pinlerinden çekebileceğimiz en yüksek akım değeri olan 40 mA’in oldukça üzerinde olacaktır. Burada transistör devreye giriyor.

Transistörler

Transistörü çok basit bir şekilde elektrik akımı veya gerilimi ile kontrol edebileceğimiz bir switch olarak düşünebiliriz. Bunu anlamak için elimizdeki NPN tipi transistörü bir musluk olarak düşünelim: transistörün kolektör (collector) bacağından emitör (emitter) bacağına doğru bir boru içerisinden su aktığını hayal edelim. Biz, ortada bulunan baz bacağından vereceğimiz akım ile tıpkı bir musluğun suyuk akışını kısıp arttırması gibi kolektörden emitöre akan akım miktarını kontrol edebiliriz:

Bu sayede çok küçük akımlar kullanarak, büyük akım çeken cihazları kontrol edebilmemiz mümkün olur.

Devre şemamız:

Devredeki diyotun görevi, motorun durur vaziyetten harekete geçtiği anda oluşan gerilim sıçramalarından transistörü korumak içindir.

NOT: Bağlantıları yapmadan önce Arduino’muza kodu yükleyelim. Bağlantıları yaptıktan sonra ise USB bağlantısı yerine Arduino üzerinde bulunan güç girişinden 9V adaptör veya 9V pil ile kartımızı besleyelim. Aksi takdirde bilgisayarımızın USB portuna veya Arduino’muza zarar verebiliriz!

Bu kod ile motorumuzun hızı önce kademeli olarak artacak; en yüksek değere ulaştıktan sonra ise aynı şekilde azalacak:

int motorPin = 3;
int hiz = 0;
 
void setup() 
{ 
  pinMode(motorPin, OUTPUT);
} 
  
void loop() 
{ 
  for(hiz = 0; hiz <= 255; hiz++) 
  {                                  
    analogWrite(motorPin,hiz);
    delay(20);                       
  } 
  for(hiz = 255; hiz>=0; hiz--)
  {                                
    analogWrite(motorPin,hiz);          
    delay(20);                    
  } 
}

analogWrite() fonksiyonunu RGB LED uygulamamızdan hatırlarsınız umarım 🙂

Bu sefer motorun hızının kendiliğinden artması yerine biz bilgisayarımızdan kontrol edelim:

int motorPin = 3;
 
void setup() 
{ 
  pinMode(motorPin, OUTPUT);
  Serial.begin(9600);
  while (! Serial);
  Serial.println("0 ile 255 arasi hiz giriniz");
} 
  
void loop() 
{ 
  if (Serial.available())
  {
    int hiz = Serial.parseInt();
    if (hiz >= 0 && hiz <= 255)
    {
      analogWrite(motorPin, hiz);
    }
  }
}

Bu kod sayesinde, motorumuzun hızını bilgisayarımızdaki Arduino programının seri port ekranından gireceğimiz değerle kontrol edebiliriz. Motor gibi fazla akım çekebilen cihazlarla çalışırken 9V adaptör veya 9V pil ile Arduino’muzu güç girişinden beslemeyi unutmayalım.

 

96 Yorumlar

  1. Arduino kartımızı harici olarak 9 volt ile besledik ve motor da pwm yaptık .motor donus hızını bilgisayar üzerinden kontrol etmek istediğimizde arduino kartımızı usb takacaz bu durumda bir sorun yaşarmıyız. yani harici besleme verdiğimizde hem o besleme varken usb den takarak bilgisayar üzerinden kontrol etmek istediğimizde bir sıkıntı cıkarmı.

    • Bu uygulamada fırçalı motor kullanılmıştır. Ayrıca sürücü olarak sadece bir transistör kullanıldığından, yanlızca hız kontrolü yapılabilir. L293D çift motor sürücü entegresi ile yapılan örnek için bu yazımıza bakabilirsiniz

  2. merhaba arkadaşlar ben bu konuda yeniyim elimde dc 18 volt bir motor var bu motorun devrini düşürüm ve yüksetmek isityorum. bunun için ayarlı adaptorler var 7,5vot-18 volt. kadar amper olarak 4,5 Amper kullanam olurmu çalışırmı lütfen yardımcı olurmusunuz…

  3. merhaba 9 voltluk fırçalı dc motoruma direk güç verdiğimde çalışıyor ama devreyi tamamen kurup kodu yazdığımda çalışmıyor yardımcı olabilirmisiniz?

  4. Merhaba arkadaşlar dc motorun hızını hız kontrol devresi ile düşürsem düşük devirde güç azalırmı aynı güçte düşük devirde kullanabilirmiyim

    • DC motorunuzun üzerinden geçen akımı ve gerilimi değiştireceğinizden, motorun harcayacağı güç te değişmiş olacaktır. Aynı güçte düşük devirde kullanım için redüktör mekanizması kullanmanız gereklidir. Böylece motorun hızı azalacak, fakat torku yükselecektir.

    • Motora Arduino’nun Vin pininden giden güç kablosu yerine 9V kaynağınızın + ucunu bağlayabilirsiniz. Arduino’nun GND pinleri ile harici kaynağınızın – ucunu birleştirmeyi unutmayınız.

  5. hocam s.a ben zaman ayarlı duran kalkan bir motor yapacagım 12 volt yada 24 volt fan motorunu calıştırıcak led blink uygulamasını arduinoya yükledik diyelim ama arduinonun pinlerinde 5 volt var bu pinlerin cıkışlarını nasıl 12 volt yada 24 volt yapabilirim

    • Motorun besleme gerilimi ile Arduino pinlerinin lojik gerilimleri farklıdır. 12 veya 24V gerilimle çalışabilecek bir motor sürücü kullanırsanız sorun olmayacaktır.

  6. sa. hocam burda en yüksek değerin 255 olma sebebi nedir? ben 12v güç kaynağı ve 12v motor kullansam değeri max kaç yapabilirim?

    • 255 değeri, Arduino’nun PWM çıkışlarının 8-bit çözünürlükte olması sebebiyledir. 2^8 = 256 adımda hız kontrolü yapabilirsiniz. Besleme gerilimi ile ilgisi yoktur. Örneğin o değeri 127 yaparsanız motoru besleme geriliminizin yarısında çalıştırmış olacaksınız.

  7. hocam ben bu sistem için 12v motor kullandım. transistör yanıp duruyor. sıkıntıyı nasıl halledebilirim? acil cevap verirseniz sevinirim

    • Transistörler bildiğim kadarıyla 5 volt ve üzerinde yanma riski taşır yani transistör yerine 12 v destekleyen bir motor sürücü kullanman daha iyi olur tabi bu bildiğim kadarıyla belki daha yüksek voltajlara kadar dayanabilir ha bide transistörler için soğutma blokları olur onlara bakarsan belki çalışabilir

  8. BEN devreyi kurdum fakat motora ilk hareketi vermeden dönmüyor.Önce elle çeviriyorum öyle motor harekete geçiyor.acaba sebebi nedir.

    • Uygulamada kullandığınız transistör motorunuz için güçsüz gelmekte. Daha büyük bir transistör kullanmayı deneyebilirsiniz.

  9. Kerem bey, Bilgilendirmeleriniz için teşekkürler. Projem için ürün önerirmisiniz arduino UNO R3 var, 24 V 1000rpm motor var. Bu motoru iki konumlu düğme ile 400-ve 600 devirde çalıştırmam gerekiyor. Basit bir karıştırıcı yapacağım. (devirler çok önemli) Hangi motor sürücüyü kullanmamı önerirsiniz. Ayrıca başka bir malzemeye gerek varsa yazarsanız sevinirim.

    • Basit bir motor hız kontrol devresi kurarak ve bahsettiğiniz iki konumlu düğmeyi Arduino’nuza bağlayarak motorunuzun hızını %60 ve %40 arasında değiştirebilirsiniz. Yapmanız gereken, düğmeden gelen sinyale göre Arduino’nun dijital çıkışlarından elde edeceğiniz PWM dalganın duty cycle’ını değiştirmeniz (PWM ve duty cycle ile ilgili bilgi edinmek için RGB LED Kontrolü dersimizi inceleyebilirsiniz). Dikkat etmeniz gereken nokta, kuracağınız devredeki sürücünün veya transistörün motorunuzun ihtiyaç duyacağı akım ve gerilim değerlerini karşılamasıdır.

  10. Hocam iki adet step motoru sarma işinde kullanıcam yani iki motor da aynı anda 45 yada 90 derecede dönecek ve hizi da ilk baslarda normal olacak bunun için gerekli arduino bileşenleri ne olabilir,.yeni başladım oyuzden çok fazla acemiyim.

  11. Kerem bey merhaba bu projenizi hız kontrolu değilde baskı (gerilim) kontrolüne göre çalıştırmak için ne yapabiliriz. Nette benzer bi cihaz var godex t10 kol da ki gerilimi hissedip motor çalışıyor gerilim bitince duruyor.

    • Gerilimi algılamak için basit bir op-amp devresi veya gerilim bölücü ile gerilimi 0-5V arasına çekebilir ve Arduino’ya analog girişlerden bağlayabilirsiniz. Daha sonrası için analog girişteki değere oranlı olarak dijital çıkıştan alacağınız PWM sinyali ile motoru sürebilirsiniz.

    • Pek tavsiye edilen bir durum olmasa da deneme amaçlı kısa süreler için kullanabilirsiniz. Uzun vadede motorunuzun daha erken bozulmasına sebep olacaktır.

    • Ben denedim ve çalışıyo d13003 kodlu transistör evinde bile bulabilirsin mesela ampullerin içinde veya cakma cin mali sarj adaptorlerinde ayrica elinde transistör falan varsa dene belki çalışır

  12. neden vin motorun eksi ucuna bağlanmış o kısmı çözemedim sebebini anlatabilir misiniz?
    bir de şu iki satır ne anlama geliyor anlatabilir misiniz?
    ( Serial.begin(9600);
    while (! Serial); )

    • Motorun + ve – ucu diye bir kavram yoktur. Sadece motorumuz ters yönde dönerse uçlarını değiştirmemiz gereklidir. Vin’den bağlanmasının sebebi ise şudur: Bu projede Arduino’yu 9V pil veya adaptör gibi harici bir güç kaynağına bağladığımızda buradaki gerilimi Arduino üzerindeki Vin pininden görmekteyiz. 5V ve 3.3V çıkışları Arduino üzerindeki regülatörlere bağlı olduğundan buradan fazla akım çekmek istemeyiz. Bu yüzden Vin pinini kullanıyoruz. while (!Serial); ise, haberleşmenin seri port açılana kadar başlamamasını sağlıyor.

  13. diğer bir sorum ise şu ben de 6 v dc motor olduğu için 255 lik kısmı 165 yaptım.ilk komut dizininde sıkıntı yaşamadım ama bilgisayardan değer girmeli versiyon çalışmadı nedense önce sadece 255 olan yerleri 165 yaptım bana değer sorucak diye bekledim sormadı.sonra o değer yazın diyen yerin içine kendim değer yazdım yine olmadı sorun nerde acaba?

  14. merhabalar bizde motoru gösterdiginiz gibi çalıştırıp sonra motora 1motor çalışşın gibi kod göndermek istiyorum

  15. iyi günler kerem bey,bu uygulamayı gerçekleştirirken karttan bildirim sesi gibi bir ses çıkıyor bunun nedeni nedir?

    • Büyük ihtimalle o ses kullandığınız motordan geliyodur. Arduino’nun PWM frekansı duyulabilir aralıkta olduğundan bu şekilde bir ses gelmesi normaldir.

  16. Merhaba, ben 24 v dc motoru potansiyometre bağlıyarak potansiyometreyi çevirdikçe motorun dönmesini istiyorum (potansiyometreyi çevirince motor dönsün potansiyometreyi geri çevirince motor geri dönmesini istiyorum) nasıl yapabilirim, şimdiden teşekkürler.

    • Öncelikle hız ve yön kontrolü yapmanız için bir motor sürücüye ihtiyacınız olacaktır. Arduino Dersleri 14: DC Motor Hız ve Yön Kontrolü dersimizde bu konuyu detaylıca anlattım. Bunun yanında potansiyometreyi kullanmak için analog okuma yaptırmalısınız. Bununla ilgili bilgileri de Arduino Dersleri 7: Analog Girişler dersimizde bulabilirsiniz. Potansiyometrenin orta konumu 512’ye denk düşeceğinden, 0-511 arasını bir yöne döndürecek 512-1023 arasını diğer yöne döndürecek bir if koşulu yazabilirsiniz. Motorun hızını da ölçeklemek istiyorsanız map() komutunu kullanabilirsiniz.

    • 24 V DC motor için H-Bridge denen bir yapı var. Bu şekilde arama yaparsanız çift yönlü motor sürücü bulabilirsiniz. Bu konuda da transistörler yeterli gelmeyecektir. NMOS ve PMOS kullanmanız gerekecek. IRFZ44N ve IRF4905 kullanmanızı tavsiye edebilirim H-Bridge için. Bunları da direkt olarak Arduino pinleriyle sürmeye çalışırsanız mosfet kanallarını yeterince açamayacağınız için ısınmaya yol açacak. O nedenle mosfetleri de transistörler yardımıyla hatta optokuplörlerle sürmenizde fayda var. Isınmadan tamamen uzak ve en güzel yöntem bu bence. Potansiyometre işine gelince de analog okuma yapmalısın kerem Bey’in dediği gibi. Bu aşamada da potansiyometrenin bacaklarını 5 V ve GND bacaklarına bağlayıp orta bacaktan analog okuma yapacaksın. Çevirdiğinde yön değiştirmesini istediğinden değerlerdeki artış ve azalışa göre motora yön vereceksin. Ya da söylendiği gibi 0-511 arası bir yöne 512-1023 arası diğer yöne şeklinde de yapabilirsin.

  17. Merhaba, bu devrede Vin girişindeki bağlantıyı söküp harici 6v kaynağı bağlarsam ve gnd’yi ortak edersem 6v motor sürebilir miyim?
    Teşekkürler.

  18. Lütfen yazdiklarimin hepsini okuyun

    Bişey sormak istiyorum size ben bu degil ama ayni gorevi goren d13003 transiator kullandim ve oldu ama yon tayini olmuyor 2 transistorle yaparak bunu basardim aslinda ama soyle bi problem var motorların ikisinede ayni oranda voltaj gittigi icin fren gibi bisi yapiyo birazdaha detaya girmem gerekiyor burda simdi benim bi rc projem var mini boyutlarda ve bu projede bu transistorle ileri goturdum “geriye gitmese de olur ” ama sag sol olmuyor mesela sadece saga yada sadece sola donuyor bundan dolayi 2 transistor kullanmam gerekti bende yaptim ve dedigim gibi oldu ama fren yapar gibi calisiyor motor bu yuzden bana bi kod lazim
    Kodda oyle calismali ki pot mesela 1860 da durucak “serial monitorde bu sekilde potun orta noktasi” 1860 dan 1760 a kadar saga 1860 dan 1960 a kadar sola donmesi lazim ama yapamiyorum bi turlu yokmu bi bilen abiler :/

    • Motorunuz fırçalı tipte ve kullanacağınız transistör motorun çekeceği akımı sağlayabildiği sürece redüktörlü motor ile de kullanabilirsiniz.

  19. Merhaba,
    Bilgisayardan,girdigimiz veri ses sistemine baglamali nasil yapabiliriz.Yani sectigimiz șarkiya gore dc motorumuz donecek.Analoh girise sesin durumunu algilayici bir komut mu girmemiz lazim ,bluetooth moduluyle bazi ornekler var ama ben jak girisli olsun istiyorum ne onerirsiniz.

  20. Merhabalar; 24 V, 7 A Değerlerindeki DC motoru ne şekilde sürebilirim? çözüm bulamıyorum, yardım ederseniz çok sevineceğim. İlginiz için şimdiden teşekkür ederim.

  21. Merhabalar,
    12 veya 24 volt ile çalışan kartlar ile 380 volt çalışan motorlar kontrol edilebiliyor. Arada nasıl bir kat kullanıyorlar da bu dengeyi sağlıyorlar. Bilgi vere bilir misiniz?

    • Merhaba. Bahsetmiş olduğunuz kartlar, endüstriyel tipteki motor sürücülerdir. Bu ekipmanlar PLC gibi 24V seviyesinde çıkışa sahip cihazlar ile kullanılmak üzere tasarlanmıştır. Eski tip sistemler ile uyumlu olması açısından, tıpkı bir Arduino ile motor sürücü kullanır gibi dijital çıkışlar aracılığıyla yön ve hız kontrolü yapabilmektedir (örnek ders). Daha güncel motor sürücüler ise PROFINET, CCLink gibi endüstriyel haberleşme standartları üzerinden kontrol sistemine entegre edilerek sayısız şekilde konfigüre edilebilme ve esneklik sunabilmektedir. Umarım açıklayıcı olabilmişimdir 🙂

  22. merhaba,

    oyuncak’dan çıkan bir motoru bağladım, çalışıyor fakat kabloları değdirince ilk anda ufak bir kıvılcım çıkıyor. bu normal midir?
    devreye sadece diyot bağladım.

  23. Merhaba Kerem bey,
    Elimde 12 V ve en fazla 40 amper akım çekebilen DC motor, 12V 80Ah Jel akü ve arduino R3 var. Benim yapmak istediğim projede motoru arduino dan potansiyometre ile hız kontrolünü yapmak.Yaptığım araştırmalara göre ‘MSF50 Mosfet Motor Sürücü 3-15V 50A’ sürücü kartı bu motoru arduino ile sürmek için yeterli gözüküyor.
    Benim size sormak istediğim önerebileceğiniz başka bir dc motor sürücü kartı var mı ve MSF50 Mosfet Motor Sürücü 3-15V 50A projem için uygun mudur?
    Örnek bir proje mevcut mu veya bu kart ın bağlantılarını nasıl yapmalıyım?
    Saygılarımla.

    • Kullanabilirsiniz, sorun olmaz. Arduino’nun giriş gerilimi 7-12V arasında olduğundan Vin pininden veya adaptör aracılığıyla uygulayabileceğiniz gerilimler bu aralıkta olduğu sürece problem yoktur.

    • Potansiyometre değerini analogRead ile ölçün. Bu değeri bir değişken içerisinde tutun. Daha sonra map komutu veya bölme işlemi ile 0-1023 arasında değişen bu değeri 0-255 arasına çekin. Son olarak bu değeri analogWrite ile motoru sürecek PWM sinyalini oluşturmada kullanın.

  24. Hocam iyi günler ben 4 tane step motoru aynı anda kontrol etmek istiyorum tam bir tur olmadan yaklaşık yarım tur dönüp ters yönde devam etmesi lazım projem için acaba bunu nasıl sağlayabilirim.

  25. merhabalar bu hız kontrolünü sesle yapmak mümkünmüdür farklı kaynaklarda bt kullanarak android den kontrol sağlamayı gösteriyorlar bunun haricinde bi yöntem varmıdır ? motor olarak step motor kullanacağım örneğin hızlan dendiğinde motor dönüş hızı artacak nasıl yapabileceğim konusunda yardımcı olurmusunuz?

    • Arduino’nun kendi işlemcisi ses tanıma gibi karmaşık sayılabilecek bir işlemi yapabilecek güce sahip değildir. Bunun için üzerinde Linux çalıştıran Arduino kartları veya Raspberry Pi gibi tek kart bilgisayarları kullanmak daha mantıklı olacaktır.

  26. Merhaba kerem Bey
    Ben Garaj kapım için 12 volt dc 100watt veya 250 watt motor ayarladım dc motor sürücü de ayarladım ancak bağlantı için başka neler gerekli
    bide kod örneği var mı elinizde paylaşım yaparsanız sevinirim.

    İyi günler..

    • Sanırım amacınız uzaktan kontrollü garaj kapısı uygulaması yapmak. Bu proje için ayrıca tercihinize göre bir kablosuz haberleşme modülüne ihtiyacınız olacaktır. Yazmanız gereken kod da bu modüle bağlı olarak değişeceği için örnek kod verebilmem mümkün değildir.

  27. Kerem Bey
    Kapı sistemini alıp biz röle ve bluetooth yardımıyla kapıyı açıp kapatabiliriz sanırım.Röle ile sisteme 220voltluk sisteme enerji giriş çıkışını sağlayabilir sanırım .
    Biraz karışık bir soru oldu ama sanırım demek istediğimi anladınız..

  28. Hobi açlı Masaüstü ağaç torna yapmaktayım.

    Adım hamdi Sizden ricam 24 volt rediktörlü kapı motorlarını yaptığımız sağa,sola ve onun üstünde ileri geri hareket eden alt destekli iki arabalarımızın kontrolü için kullanmak istiyoruz.
    İki eksen hareketli cnc olarak kullanmak istiyoruz. Görselleri paylaşıyorum. Görsellerini paylaştığım ürünlerle istediğimizi yaptırmamızın bir yoluvarsa rica ediyorum.

  29. merhabalar hocam başlama hızlanma ve yavaşlama diye 3 buton oluşturup kodları kullandım ama hangi butona yazıp textboxtan sayı çekeceğimi saptayamıyorum yardımcı olursanız çok sevinirim.

  30. Transistör e bagladigimiz direnci ,pro mini 3.3 de çalışırken çıkarmalıdır miyim yoksa hız ayarlamada bi görevi var mi ,Teşekkürler

    • Transistör ile Arduino dijital pin arasındaki direncin görevi akım sınırlamaktır. Arduino pinlerinden maksimum 40mA akım çekilebileceğinden, direnç bu akımı sınırlar. Kullanmanızda fayda vardır.

  31. RC arabamız var ve kumadasıyla arduinodan kontrol yapıyoruz.Arka dc motor çok hız dönüyor bunu yavaşlatmak istiyoruz.Hız kontrol devresi aldık sadece ileri yönde çalışıyor geri yönde motoru çalıştırmıyor.Yani ileri ve geri yönde çalıştıracak ve yavaş çalıştırmasını sağlayacak birşey lazım bize yardım eder misiniz?

CEVAP VER