Bir cümlelik özet
Motor sürücü, Arduino'nun küçük sinyalini alıp bir DC motoru ayrı bir güç kaynağından besleyen aracıdır; bu sayede motorun yönünü ve hızını (PWM ile) güvenle kontrol ederken kartımıza da zarar vermeyiz.
Neden önemli?
Bir önceki derste ultrasonik sensörle robotun önündeki engeli "görmesini" sağladık. Peki robot bir engel görünce durmak ya da yön değiştirmek isterse, tekerlekleri neyle döndürecek? İşte burada DC motor devreye girer.
Ama küçük bir sorun var. Bir LED yakmak için pine doğrudan tel bağlıyorduk. Motoru da öyle bağlamak isteyebilirsin. Ne yazık ki bu, kartını bozmanın en kolay yollarından biridir. DC motor, bir LED'e göre çok daha fazla akım çeker ve Arduino'nun pini bu kadar akımı veremez.
Çözüm, araya bir motor sürücü koymaktır. Bu ders, hareket eden gerçek robotların kalbindeki bileşeni tanıtır. Aslında bu mantığı günlük hayatta zaten görüyorsun:
- Oyuncak bir araba pili ters takınca geri gider; içindeki motorun yönü değişmiştir.
- Bir vantilatörün kademe düğmesi motoru hızlandırıp yavaşlatır.
Bu iki davranışın (yön değiştirme ve hız ayarı) arkasında, bir motoru güvenle süren bir devre vardır.
Motoru neden doğrudan pinden süremeyiz?
Akım meselesi
Elektronik dersinden hatırla: akım, bir devreden geçen elektrik miktarıdır. Bir LED çok küçük bir akımla parlar, bu yüzden onu doğrudan pine bağlayabildik. DC motor ise mili döndürmek için çok daha fazla akım ister; özellikle ilk hareket anında (kalkışta) çektiği akım en yüksektir.
Arduino'nun bir pini yalnızca birkaç miliamper verebilecek şekilde tasarlanmıştır. Motor bundan çok daha fazlasını ister. Sonuç ikisinden biri olur: ya motor zar zor döner ya da pin aşırı yüklenip kartın zarar görür.
Basit kural: Arduino'nun pini bir motoru döndürmek için değil, "emir" vermek için vardır. Gücü başka bir yerden almalıyız.
Bir musluk gibi düşün
Motor sürücüyü bir musluk gibi düşünebilirsin. Parmağınla küçük bir kolu ittirirsin; bu az kuvvet ister (Arduino'nun sinyali). Ama akan su, borunun basıncından gelir (ayrı güç kaynağı). Küçük bir hareketle, çok daha güçlü bir akışı kontrol edersin.
Motor sürücü ne yapar?
Motor sürücü (motor driver), Arduino'nun verdiği küçük sinyali alıp motoru ayrı bir güç kaynağından besleyen bir devredir. Okullarda en çok kullanılan örnekleri L298N ve L293D kartlarıdır.
Motor sürücü aynı anda iki iş yapar:
- Arduino'nun sinyalini kullanarak motoru açar/kapatır ve yönünü seçer.
- Motorun ihtiyaç duyduğu akımı ayrı güç kaynağından (bir pil paketi) çeker, böylece Arduino'yu korur.
Üç şeyi bağlarız
Bir L298N ile tek motoru sürerken üç grup bağlantı vardır:
- Yön pinleri (IN1, IN2): Arduino'nun iki dijital pinine gider. Bu ikisinin durumu motorun ileri mi geri mi döneceğini belirler.
- Hız pini (ENA): Arduino'nun bir PWM pinine gider (kartta
~işaretli pinlerden biri). Bu pin motorun hızını ayarlar. - Güç ve ortak GND: Motorun gücü ayrı pil paketinden gelir. Çok önemli bir kural: pil paketinin GND'si ile Arduino'nun GND'si birbirine bağlanmalıdır. Buna ortak GND (ortak toprak) denir; iki devrenin aynı "sıfır noktasını" paylaşması gerekir, yoksa sinyaller anlaşamaz.
Yön nasıl seçilir?
Yön, IN1 ve IN2'nin durumuna bağlıdır. İkisi zıt olduğunda motor döner; aynı olduğunda durur.
| IN1 | IN2 | Motor |
|---|---|---|
| HIGH | LOW | İleri döner |
| LOW | HIGH | Geri döner |
| LOW | LOW | Durur (serbest) |
Hız nasıl ayarlanır? (PWM)
Hızı ayarlamak için PWM (Pulse Width Modulation, darbe genişlik modülasyonu) kullanırız. PWM, gücü çok hızlı açıp kapatmaktır. Ne kadar uzun "açık" kalırsa motor o kadar hızlı döner. Arduino'da bunu analogWrite(pin, deger) ile yaparız; deger 0 ile 255 arasındadır. 0 durak, 255 tam hız demektir.
Günlük hayattan iki örnek
- Oyuncak araba: İçindeki DC motor tekerleği döndürür. Yön pinlerini ters çevirmek, pili ters takmak gibidir: araba geri gider.
- Çamaşır makinesinin tamburu: Yıkarken bir yöne, sıkarken diğer yöne döner ve dönüş hızı değişir. Aynı fikir: bir sürücü, motorun hem yönünü hem hızını yönetir.
Yön ve hız kontrolü: tam sketch
Aşağıdaki sketch bir L298N üzerinden tek motoru ileri, sonra geri döndürür ve arada durur. Pin numaraları örnektir; kendi bağlantına göre değiştir.
const int IN1 = 8; // yön pini 1
const int IN2 = 9; // yön pini 2
const int ENA = 5; // hız pini (PWM ~)
void setup() {
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(ENA, OUTPUT);
}
Kurulum bittikten sonra asıl döngü:
void loop() {
digitalWrite(IN1, HIGH); // ileri yön
digitalWrite(IN2, LOW);
analogWrite(ENA, 90); // düşük hız (0-255)
delay(2000);
analogWrite(ENA, 0); // dur
delay(1000);
digitalWrite(IN1, LOW); // geri yön
digitalWrite(IN2, HIGH);
analogWrite(ENA, 90);
delay(2000);
analogWrite(ENA, 0); // dur
delay(1000);
}
Dikkat et: hız 90 ile başlıyor, 255 değil. Bir motoru her zaman düşük hızda test edip sonra artırırız.
Hızı yavaşça artıran örnek
for döngüsü ve analogWrite ile hızı kademeli yükseltebiliriz. Bu, robotun aniden fırlamasını önler.
void loop() {
digitalWrite(IN1, HIGH); // ileri yön
digitalWrite(IN2, LOW);
for (int hiz = 60; hiz <= 200; hiz += 20) {
analogWrite(ENA, hiz); // hızı 60'tan 200'e çıkar
delay(500);
}
analogWrite(ENA, 0); // dur
delay(1500);
}
Mini uygulama
Bir masaüstü vantilatör davranışı tasarla: motor önce yavaş, sonra orta, sonra hızlı dönsün; ardından dursun ve ters yöne düşük hızda dönsün. Önce sözde kodunu yaz, sonra bir yetişkinle birlikte sürücü ve pil paketiyle dene.
Başla
Yön: ileri
Hız 80, 2 saniye bekle
Hız 150, 2 saniye bekle
Hız 220, 2 saniye bekle
Motoru durdur (hız 0), 1 saniye bekle
Yön: geri
Hız 100, 2 saniye bekle
Motoru durdur
Bitir
Kendine kontrol soruları:
- Motoru hangi hızda başlattın? Neden düşük hız daha güvenli?
- Yön değiştirmeden önce motoru durdurdun mu?
- Güç motora ayrı pil paketinden mi geliyor, yoksa yanlışlıkla Arduino'dan mı?
- Pil paketinin GND'si ile Arduino'nun GND'si bağlı mı?
Sık yapılan hatalar
Motoru doğrudan pine bağlamak
En sık ve en tehlikeli hata budur. Motoru Arduino pinine doğrudan bağlamak pini ve kartı bozabilir. Araya her zaman bir motor sürücü koy.
Ortak GND'yi unutmak
Arduino ile pil paketinin GND'lerini birbirine bağlamazsan sürücü Arduino'nun sinyalini "anlayamaz" ve motor beklenmedik davranır. Ortak GND şart.
Güç kaynağını ayırmamak
Motoru ve Arduino'yu aynı zayıf kaynaktan beslersen kart yeniden başlayabilir ya da motor dönmez. Motora ayrı bir pil paketi ver.
Yön değişimini aniden yapmak
Motor tam hızda ileri giderken bir anda geri komutu vermek sürücüyü ve motoru zorlar. Önce analogWrite(ENA, 0) ile durdur, kısa bekle, sonra ters yönü ver.
PWM olmayan pine hız vermek
analogWrite yalnızca ~ işaretli PWM pinlerinde çalışır. ENA'yı PWM olmayan bir pine bağlarsan hız ayarı beklendiği gibi olmaz.
Güvenlik notu
DC motorlar dönen, hareketli parçalardır. Güvenli çalışmak için:
- Dönen mile, dişliye ya da pervaneye parmağını, saçını ve giysini uzak tut. Uzun saçı topla.
- Motoru her zaman bir motor sürücü üzerinden bağla; asla doğrudan Arduino pininden besleme.
- Motorun gücünü ayrı ve düşük gerilimli bir kaynaktan (pil paketi veya USB) al. Asla şebeke (priz) elektriği kullanma.
- Pil paketinin GND'si ile Arduino'nun GND'sini birbirine bağla (ortak GND).
- Motoru düşük hızda başlat, sonra yavaşça artır.
- Kablolar ısındığında, garip bir koku ya da ses geldiğinde hemen gücü kes.
- Tüm bağlantı ve denemeleri bir yetişkin gözetiminde yap.
Ders özeti
- DC motor bir LED'den çok daha fazla akım çeker; bu yüzden doğrudan Arduino pininden süremeyiz.
- Motor sürücü (L298N/L293D), Arduino'nun küçük sinyalini alıp motoru ayrı bir güç kaynağından besler ve kartı korur.
- Yön, IN1 ve IN2 pinlerinin durumuyla seçilir; ikisi zıt olduğunda motor döner.
- Hız, bir PWM pinine
analogWrite(pin, 0–255)ile ayarlanır; her zaman düşük hızda başlanır. - Ayrı güç kaynağı, ortak GND ve yetişkin gözetimi güvenli motor kontrolünün temelidir.
Kontrol soruları
- DC motoru neden doğrudan Arduino pininden süremeyiz?
- Motor sürücünün aynı anda yaptığı iki iş nedir?
analogWrite(ENA, 90)satırı ne yapar ve 90 sayısı hangi aralıktadır?- IN1 HIGH ve IN2 LOW iken motor ne yapar? Bunu tersine çevirirsek ne olur?
- "Ortak GND" ne demektir ve neden gereklidir?
Cevaplar
- DC motor, özellikle kalkışta çok fazla akım çeker; Arduino'nun pini bu akımı veremez ve pin ya da kart zarar görebilir.
- Arduino'nun sinyaliyle motoru açıp kapatmak ve yönünü seçmek; motoru ayrı güç kaynağından besleyerek gerekli akımı sağlamak.
- ENA pinine PWM ile 90 değerinde bir hız verir; yani motoru orta-düşük hızda döndürür. Değer 0 (durak) ile 255 (tam hız) arasındadır.
- IN1 HIGH, IN2 LOW iken motor bir yöne (ileri) döner. Tersine çevirince (IN1 LOW, IN2 HIGH) motor diğer yöne (geri) döner.
- Ortak GND, motor güç kaynağının ve Arduino'nun GND uçlarının birbirine bağlanmasıdır. İki devrenin aynı "sıfır noktasını" paylaşması gerekir; yoksa sürücü Arduino'nun sinyalini doğru okuyamaz.
Kaynak ve doğrulama notu
“Motor Sürücü” dersi için doğrulama odağı Motoru neden doğrudan pinden süremeyiz? ile Bir musluk gibi düşün arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Arduino uyumlu kartlarda pin, gerilim ve akım sınırları modele göre değişebilir. Kod derlense bile devre güvenli olmayabileceğinden, motor ve servo gibi yükler uygun sürücü ve harici besleme ile kullanılmalıdır.
Sonraki ders
Kütüphaneler: Motor, sensör ve ekran gibi bileşenleri kontrol etmeyi kolaylaştıran hazır kod paketlerini tanıyacak ve kendi kodumuza nasıl ekleyeceğimizi öğreneceğiz.