Evet Arduino ile display olaylarını tamamladık. Umarım genel işleyiş anlaşılmıştır. Bu çalışmamızda DC motor’un Arduino ile kullanımını inceleyeceğiz. Bu motorlar çalışma gerilimi civarında DC akım verildiğinde sürekli dönerler. Dönüş hızlı uygulanan DC gerilimle orantılıdır. İmalat esnasında kaç volt DC gerilimle çalışacağı belirlenip motorun üzerine yazılır. Ancak belirlenen değerin biraz daha üstünde (daha hızlı) ya da biraz altında da (daha yavaş) dönerler. Kısaca 6 voltluk bir DC motoru 9 volta yada 4-5 volt ile de çalıştırabilirsiniz. Bu motorla ilgili başka bir olay ise birçoğu kablo bağlantılarının yönünü değiştirdiğinizde ters yöne döner. Bu da Arduino projelerinde hareketli bir ürünün ileri ya da geri gitmesini olanaklı kılar. Taa pikaplardan, kasetlerden, floppy disklerden gelerek harddisklerde, CD, DVD oynatıcı/yazıcıdan, bilgisayarın soğutulmasına kadar bir çok yerde kullanılırlar.

img_20190515_230248.jpg

Arduino uygulamaları için tekeri ile birlikte satılan ve yukarıdaki resimde sarı renkte gösterilen DC motorlar oldukça revaçtadır. çok hızlı olmasa da torku yüksek olan bu motorlar oldukça geniş çalışma gerilimi aralığına sahipler. Ben önce güç kaynağından uyguladığım DC 5 volt ile denedim gayet güzel çalıştı. Sonra bunu Arduino ile test ettim. Nasıl olsa “HIGH” çıkışı bana yaklaşık +5V veriyordu. Bunun için Arduino’ya “Blink” programını yükledim. Arduino üzerindeki LED ve bağlı olduğu 13 numaralı digital çıkış, bir saniye aralıklarla “HIGH” oluyordu. Bana da 5V lazımdı. Motorun bir ucunu 13 numaralı pine, diğer ucunu GND hattına bağladım. Sonuç; motor dönmediği gibi Arduino üzerindeki LED’in de yanıp sönmesi durdu! Bir terslik var! Motor güç kaynağından beslenip çalıştığı sırada çektiğ akımı ölçtüm; boşta 90 mA civarında. Zorlandığında daha da yükseliyor. Bingoo. Arduino’nun kendi sayfası çıkışların 20 mA seviyesinde olduğu söylenmiş! (https://store.arduino.cc/usa/arduino-uno-rev3) Sebep anlaşıldı, bu kadar akım çekilemiyormuş…

20mA

Sonuç olarak bu motorları çalıştırabilmek için başka bir yöntem olmalı1 Cevap: motor sürücüler. Bu arkadaşlar aynen transistörler, mosfetler gibi girişten çok akım çekmeden anahtarlama olarak kullanılıyor. Akımı Arduino’nun bir giriş/çıkış pininden çekmiyor. Hatta güçlü sürücüler kullanmak için Arduino yerine başka bir kaynak kullanılıyor. Bunun için L293(D ya da B) gibi entegre devreleri alıp kullanabilirsiniz. Tabi data sheet’e bakıp bacak bağlantılarını uygun bir şekilde yaparak. Ya da bu iş için hazırlanmış hazır devreleri kullanabilirsiniz.

 

Bu devrelerde Arduino’nun her çıkışı bir giriş olmuş. GND hattı ortak olmak şartıyla ikinci bir güç kaynağı bağlantısı da var. Yani Arduino çıkışı sadece tetikleme görevi yapıyor, çok akım çekilmiyor. Çünkü akım diğer kaynaktan alınıyor. Bu sürücülerin daha güçlü modelleri de var. Bir de bu motorlar çektiği akım nedeniyle herhangi bir sıradan pili çok çabuk bitiriyor. Ben şarj edilebilen 9V pil kullandım.

IMG_20190516_011253

Bu sürücülerde 4 çıkış var. bir motoru ileri geri hareket ettirmek için 2 bağlantı olduğu düşünülürse, bir sürücü 2 motoru (ileri/geri) kontrol edebiliyor.

Artık devremizi kurabiliriz. Ben yine “Blink” örneği üzerinde oynadım. 13 numaralı pin yanıp sönerken, 12 numaralı pini de onun negatifi yaptım. Yani 13 numaralı pin “HIGH” iken 12 numaralı pin “LOW”, 13 “LOW” iken 12 “HIGH” olsun şeklinde. Ve bu çıkışları sadece ileri yönde kullanmak için sürücü üzerindeki birer Arduino girişini GND hattına bağladım.

IMG_20190516_010910

Kalın bir kartona önce iki delik açtım. Kablo bağı ile motorları bu kartona sabitledim. Ayrıca ön tarafta “sarhoş teker” yerini delip vidaladım. Sarhoş teker aracın dönmesini kolaylaştıran bir bilye aslında.

 

Pillerin hareket etmesini önlemek için birbirlerine lastikle bağladım. Ayrıca pilleri, Arduino’yu, motor etrafını ve hareketli kısımları da sıcak silikon kullanarak sabitledim. (Sıcak silikon daha sonra kolaylıkla çıkartılabiliyor)

Koda gelince:

void setup() {
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
}

void loop() {
digitalWrite(13, HIGH);  // 13 numaralı bacak HIGH–Sağ motor ilerliyor
digitalWrite(12, LOW);   // 12 numaralı bacak LOW
delay(1000);                    // bir saniye bekleniyor
digitalWrite(13, LOW);   // 13 numaralı bacak LOW
digitalWrite(12, HIGH);  // 12 numaralı bacak HIGH–Sol motor ilerliyor
delay(1000);                    // bir saniye bekleniyor
}

Yukarıdaki kod sanırım yeterince net. Bacak bağlantılarını değiştirip sonucu gözlemleyebilirsiniz. Ayrıca iki pini daha çıkış olarak tanımlayıp, motora geri hareket de yaptırabilirsiniz. Bunun için sürücü üzerinden iki motor için de Arduino’ya bağlanan  GND’ye bağlantısını söküp tanımladığınız diğer pinlere bağlamalısınız. Unutmayın; motorun hangi girişinin potansiyeli diğerine göre 5V daha fazla ise o yöne döner!

Keyifli uygulamalar diliyorum. Hoşça kalın…