Bir cümlelik özet
Bir robotun iki tekerleğini DC motor ve motor sürücüyle bağımsız kontrol ederek ileri, geri ve dönme hareketlerini oluşturmayı öğreniyoruz.
Neden önemli?
Şimdiye kadar robotun "algıla, karar ver, hareket et" döngüsünün ilk iki adımını çalıştık. Sensörler ortamı okur, mikrodenetleyici karar verir. Ama robot hareket etmezse yaptığımız iş bir masaüstü programından farksızdır.
Hareket, robotu robot yapan şeydir. Bir çizgi izleyen araç da, engelden kaçan bir gezgin de aynı temel beceriye dayanır: iki tekerleği ayrı ayrı sürebilmek. Sol tekerlek sağdan hızlı dönerse robot sağa kıvrılır. İki tekerlek ters yönde dönerse robot olduğu yerde döner. Bütün yön kontrolü bu basit fikirden doğar.
Bu derste motoru neden doğrudan Arduino'ya bağlayamadığımızı, motor sürücünün ne işe yaradığını ve ileri/geri/dön mantığının kodda nasıl göründüğünü göreceğiz.
Motor neden doğrudan Arduino'ya bağlanmaz?
Bir önceki derste güç kaynağı seçimini konuştuk. Şimdi o bilgiyi motorlara bağlıyoruz.
DC motor akım ister
DC motor, içinden akım geçince dönen basit bir parçadır. Ne kadar çok yük taşırsa (robotun ağırlığı, zemindeki sürtünme) o kadar çok akım çeker. Küçük bir robot motoru bile kalkışta yüzlerce miliamper, hatta bazen bir amperi aşan akım isteyebilir.
Arduino'nun bir pininden güvenle verebileceği akım ise sadece 20 miliamper civarındadır. Motoru doğrudan pine bağlarsak pin yanabilir ve karttaki hassas parçalar zarar görebilir.
Kısa kural: Arduino pini bir motoru döndüremez. Pin yalnızca "emir" verir; asıl gücü başka bir devre sağlar.
Motor sürücü aradaki köprüdür
Motor sürücü (motor driver), Arduino'dan gelen küçük sinyali alıp motora giden büyük akımı açıp kapayan bir devredir. Bir çeşit kontrollü anahtar gibi düşünebilirsin: Arduino "aç" der, sürücü de kalın kablodan gelen gücü motora ulaştırır.
Sık kullanılan bir sürücü çipi L298N'dir. Bu çip içinde H-köprüsü denen bir düzen bulunur. H-köprüsü, motora giden akımın yönünü değiştirebilir; yani motoru hem ileri hem geri döndürebilir. Yön değişimi, robotun geri gitmesini ve dönmesini sağlar.
Ayrı güç kaynağı ve ortak toprak
Motorlar çalışırken kısa dalgalanmalar üretir. Bu dalgalanmalar Arduino'yu aynı pilden besliyorsak kartı resetleyebilir veya bozabilir. Bu yüzden iki ayrı besleme kullanırız:
- Arduino kendi USB'sinden veya küçük pilinden beslenir.
- Motorlar, motor sürücüye bağlı ayrı bir pil paketinden (örneğin 4–6 adet AA pil) beslenir.
Tek şart şudur: iki devrenin toprak (GND) hatları birbirine bağlanmalıdır. Buna ortak toprak denir. Ortak toprak olmadan Arduino'nun gönderdiği sinyal sürücü tarafından doğru "okunamaz". Aynı anlaşmayı konuşmak için ikisinin de aynı sıfır noktasını paylaşması gerekir.
İki tekerleği bağımsız sürmek
Robotumuzun solda ve sağda birer motoru var. Her motor bir tekerleği döndürüyor. Sürücü çipinde her motor için genelde şu sinyaller bulunur:
- İki yön pini (motorun ileri mi geri mi döneceğini seçer).
- Bir hız pini (PWM ile ne kadar hızlı döneceğini ayarlar).
PWM (Pulse Width Modulation), pini çok hızlı açıp kapayarak "yarım güç", "çeyrek güç" gibi ara hızlar üretme yöntemidir. micro:bit ve Arduino derslerinde LED parlaklığı için kullandığımız fikrin aynısıdır; burada parlaklık yerine hızı ayarlıyoruz.
İleri, geri ve dönme mantığı
Yön kontrolünün tamamı iki tekerleğin hızının ve yönünün karşılaştırılmasıyla açıklanır:
| Hareket | Sol tekerlek | Sağ tekerlek |
|---|---|---|
| İleri | ileri | ileri |
| Geri | geri | geri |
| Sağa dön | ileri | dur veya geri |
| Sola dön | dur veya geri | ileri |
| Yerinde sağa dön | ileri | geri |
Sözde kodla düşünürsek:
İLERİ:
sol motor = ileri, hız 200
sağ motor = ileri, hız 200
SAĞA DÖN:
sol motor = ileri, hız 200
sağ motor = ileri, hız 90
İkinci örnekte sağ tekerlek yavaşladığı için robot yavaş kalan tarafa, yani sağa kıvrılır. Tıpkı bir kürek teknesinde bir kolu yavaş çekince o yöne dönmen gibi.
Örnek 1: Yumuşak dönüş mü, keskin dönüş mü?
- Yumuşak dönüş: İki tekerlek de ileri döner ama biri daha yavaştır. Robot geniş bir yay çizer. Çizgi izleyen araçlarda kullanışlıdır.
- Keskin (yerinde) dönüş: Bir tekerlek ileri, diğeri geri döner. Robot neredeyse olduğu yerde döner. Dar alanda yön değiştirmek için idealdir.
Aynı iki motorla, sadece hız ve yön değerlerini değiştirerek çok farklı hareketler elde ederiz.
Örnek 2: Neden robot düz gitmiyor?
İki motora aynı hız değerini (örneğin 200) verdin ama robot hafifçe sola kayıyor. Bu çok normaldir: hiçbir iki motor tam olarak birbirinin aynısı değildir; biri biraz daha güçlü olabilir. Çözüm, yazılımda bir motora küçük bir düzeltme eklemektir; örneğin sağ motora 200, sol motora 210 vermek. Bu, gerçek robotlarda sık yapılan ince ayardır.
Mini uygulama
Aşağıdaki Arduino kodu, bir L298N sürücüye bağlı iki motoru önce ileri sürer, sonra sağa döner. Kod 25 satırın altındadır ve mantık sözde kodla birebir aynıdır.
// Sol motor pinleri
int solYon = 7; // yön
int solHiz = 5; // PWM hız
// Sağ motor pinleri
int sagYon = 8;
int sagHiz = 6;
void setup() {
pinMode(solYon, OUTPUT);
pinMode(sagYon, OUTPUT);
}
void ileri() {
digitalWrite(solYon, HIGH);
digitalWrite(sagYon, HIGH);
analogWrite(solHiz, 200); // eşit hız
analogWrite(sagHiz, 200);
}
void sagaDon() {
digitalWrite(solYon, HIGH);
digitalWrite(sagYon, HIGH);
analogWrite(solHiz, 200); // sol hızlı
analogWrite(sagHiz, 90); // sağ yavaş
}
void loop() {
ileri();
delay(1000);
sagaDon();
delay(600);
}
Robotu yere koymadan önce tekerleklerini havaya kaldır (örneğin bir kutunun üstüne oturt) ve tekerleklerin doğru yönde döndüğünü izle. Bir tekerlek ters dönüyorsa o motorun iki kablosunun yerini değiştir ya da kodda yön pinini LOW yap.
Sık yapılan hatalar
Motoru doğrudan Arduino pinine bağlamak
Bu, pini yakabilir. Arada mutlaka bir motor sürücü olmalıdır.
Ortak toprağı unutmak
Arduino ve motor pili ayrı beslenir ama GND hatları birbirine bağlanmalıdır. Bağlanmazsa motorlar hiç dönmez veya rastgele davranır.
Motorları tek pilden beslemek
Motorları Arduino ile aynı pilden beslersen kart sürekli resetlenebilir. Motorlara ayrı pil paketi ver.
Hemen tam hızla başlamak
255 (tam hız) ile başlamak robotu masadan uçurabilir. İlk denemede düşük hız (örneğin 120) kullan, davranışı gördükten sonra artır.
Tekerlek yönünü kontrol etmeden yere koymak
Bir tekerlek ters bağlıysa robot beklenmedik yöne fırlar. Önce havada test et.
Güvenlik notu
Hareket eden bir robot; parmağı sıkıştırabilir, masadan düşebilir veya bir yere çarpabilir. Bu yüzden:
- Test alanını temizle. Robotu düz, açık ve kenarları belli bir zeminde dene. Masa kenarından uzak tut; ilk testleri yerde yap.
- Parmak, saç ve kabloları uzak tut. Dönen tekerlek ve dişliler saçı veya gevşek kabloyu yakalayabilir.
- Düşük hızda başla. Davranışı anlamadan hızı artırma.
- Motor sürücü ve ayrı, düşük gerilimli pil kullan. Motorları asla şebeke (priz) elektriğine bağlama; yalnızca pil paketi kullan. Arduino ile motor pilinin toprağını ortak bağla.
- Yetişkin gözetiminde çalış. Motor, kablo ve gerekiyorsa lehim/alet işlerinde bir yetişkinden yardım iste.
- Acil durdurmayı bil. Bir şeyler ters giderse motor pilinin bağlantısını hızlıca kesebileceğin bir düzen kur (örneğin pil kutusunun anahtarı).
Ders özeti
- DC motor çok akım çeker; Arduino pini bu akımı veremez, bu yüzden motor sürücü kullanırız.
- Motor sürücü (örneğin L298N) içindeki H-köprüsü, akımın yönünü değiştirerek motoru ileri ve geri döndürebilir.
- Motorlar ayrı bir pil paketinden beslenir; Arduino ile motor pilinin toprağı ortak bağlanmalıdır.
- İki tekerleğin hız ve yönünü karşılaştırarak ileri, geri, yumuşak dönüş ve yerinde dönüş elde ederiz.
- PWM ile hızı ayarlar; robotu her zaman önce havada, sonra düşük hızda test ederiz.
Kontrol soruları
- DC motoru neden doğrudan Arduino pinine bağlayamayız?
- Motor sürücü çipinin (H-köprüsü) sağladığı temel yetenek nedir?
- "Ortak toprak" ne demektir ve neden gereklidir?
- Robotun sağa yumuşak dönmesi için sol ve sağ tekerlek nasıl sürülmelidir?
- Robotu yere koymadan önce hangi güvenlik kontrolünü yapmalıyız ve neden?
Cevaplar
- Çünkü DC motor Arduino pininin güvenle verebileceğinden (yaklaşık 20 mA) çok daha fazla akım çeker; doğrudan bağlamak pini ve kartı yakabilir.
- H-köprüsü motora giden akımın yönünü değiştirebilir; böylece motor hem ileri hem geri dönebilir. Ayrıca Arduino'nun küçük sinyaliyle büyük akımı açıp kapatır.
- Arduino ve motor pili ayrı beslense de iki devrenin GND (toprak) hatlarının birbirine bağlanmasıdır. Sinyalin sürücü tarafından doğru okunması için ortak sıfır noktası gerekir.
- Her iki tekerlek de ileri döner, ama sağ tekerlek sol tekerlekten daha yavaş sürülür; robot yavaş kalan tarafa, sağa kıvrılır.
- Tekerlekleri havaya kaldırıp doğru yönde döndüklerini kontrol etmeliyiz. Ters bağlı bir motor robotu beklenmedik yöne fırlatabilir; havada test etmek bunu güvenle görmemizi sağlar.
Kaynak ve doğrulama notu
“Motorlar ve Sürücüler” dersi için doğrulama odağı Motor neden doğrudan Arduino'ya bağlanmaz? ile Motor sürücü aradaki köprüdür arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Robot davranışı yalnız kodla açıklanamaz; mekanik yapı, güç sistemi, sensör konumu ve zemin koşulları birlikte değerlendirilmelidir. Test sonuçları aynı parkurda birkaç tekrar yapılarak kaydedilmelidir.
Sonraki ders
Engel Algılama: Robotun önündeki engeli mesafe sensörüyle fark edip durması veya yön değiştirmesi.