DC motorlar Arduino projelerinin en heyecan verici bileşenlerindendir. Bu motorlarla uzaktan kumandalı bir araba, denge veya çizgi takip robotu gibi bol hareketli projeler yapabiliyoruz. Sadece bir pervane takıp serinlemek bile mümkün!
Ancak bu DC motorları Arduino’da çalışır hale getirmek düşündüğümüz kadar kolay değil. Mutlaka harici bir güç kaynağı (6-12V arası) ve uygun bir motor sürücü modülüne ihtiyacımız var. Tüm bu ek bileşenlere ihtiyaç duymamızın tek sebebi DC motorların oldukça fazla güç gerektirmeleri.
Arduino’nun pin çıkışları basit bir DC motorun ortalama akım ihtiyacının ancak ellide birini sağlayabilir. Motor sürücü modülleri Arduino board’dan verilen sinyalleri güç kaynağından aldığı akım ile güçlendirerek motora iletirler ve motorları Arduino pinleri aracılığıyla kontrol edebilmemizi sağlarlar.
Bu yazıda en yaygın motor sürücü modüllerinden biri olan L298N‘in kullanımını açıklayacağız.
Genel Bilgi
L298N aslında oldukça eski ve yaygın bir motor sürücü entegresidir. Arduino dünyasında ise soğutucusu, koruma diyotları, motor, güç ve kontrol bağlantıları ile birlikte bir modül halinde kullanılır. Hatta bu modülün üzerinde harici güç kaynağından gelen akımla Arduino’yu beslemek için bir 5 Volt gerilim regülatör entegresi bile bulunur.
L298 aynı anda iki DC motoru birden kontrol edebilecek şekilde tasarlandığı için üzerinde giriş ve çıkış dahil çoğu bileşenden ikişer tane bulunur. Modülün iki yanındaki ikili bağlantılar DC motorların bağlantılarıyken, ön bölümdeki pinler motor başına 3 adet olmak üzere 6 adet giriş pini bağlantılarıdır. Ön bölümde bir de üç pinli güç bağlantıları yer alır.
Motor Bağlantıları
DC motor bağlantı pinleri modülün altında A motoru için OUT1-OUT2 ve B motoru için OUT3-OUT4 olarak belirtilmiştir. DC motorların iki bağlantısı bu iki bağlantıya takılır.
DC motorları modüle bağlarken bağlantı yönü çok önemli değildir. Motorun ne yöne döneceğini sketch kodumuz üzerinden ayarlayabiliriz. Yine de kodda yazılandan farklı yöne dönmesini istiyorsak bağlantıları sonradan ters çevirebiliriz.
Giriş Bağlantıları
Arduino’ya bağlayacağımız giriş pinlerinin motor başına 3 adet olduğundan bahsetmiştik. Bu pinler A motoru için ENA, IN1 ve IN2’dir. ENA (ENABLE MOTOR A) pini motorun dönüş hızı ayarını yapmak için kullanılır. IN1 ve IN2 pinleri ile motorun çalışıp durması ve hangi yöne döneceği ayarlanır.
B motoru bağlantıları da tahmin edeceğimiz gibi ENB, IN3 ve IN4. Yani modül birbirinden tamamen bağımsız iki farklı motor sürücü gibi bağlanıyor.
Resme veya çizime dikkat edersek ENA ve ENB pinlerinin hemen üzerinde 5V yazan birer bağlantı daha var ve hatta bu iki pin birer jumper ile birbirlerine bağlı. Bu jumper motor hızı ayarı gerekmediği durumlarda motoru her zaman tam hızda çalıştırmak için kullanılıyor. Bu durumda ENA ve ENB pinlerini Arduino’ya bağlamak zorunda kalmıyoruz. Ancak elbette bu kez de hız ayarından mahrum kalıyoruz. Biz jumper’ları çıkarıp bu pinleri her zaman Arduino’ya bağlayalım ki, kontrol her zaman elimizde olsun.
Güç Bağlantıları
Geldik en dikkatli olmamız gereken bölüm olan güç bağlantılarına. DC motorların çok fazla akıma ihtiyaç duyduklarını öğrendik. Bu akımı USB kablosu ile elde edemeyiz, harici bir güç kaynağı ile sağlamamız gerekiyor. Bu güç kaynağı seri bağlı 4 veya 6 adet kalem pil, 9 Volt pil, Li-Po pil veya bir kuru akü olabilir. 12 Volt’a kadar gerilim ve 3-4 Amper’e kadar verebilen bir adaptör de kullanabiliriz.
Bu güç bağlantısını L298N modülünün 12V (+) ve GND (-) bağlantılarına bağlıyoruz. Böylece modül Arduino’dan gelen sinyalleri kullanarak motorlara yeterli güç sağlayabilir.
Elbette Arduino board’un da çalışabilmesi için bir güç bağlantısına ihtiyacı var. L298N modülü üzerinde bunun için küçük bir 5 Volt gerilim regülatörü bulunuyor. Böylece Arduino’yu ek bir güç kaynağı yerine doğrudan modül üzerinden çalıştırabiliyoruz.
Burada dikkat etmemiz gereken birkaç şey var. Öncelikle modüle 12 Volt’tan daha yüksek gerilim vermemeliyiz. Çünkü üzerindeki gerilim regülatörü 12 Volt’a kadar giriş kabul ediyor. Aslında modül 50 Volt’a kadar gerilim ile çalışabiliyor. Ancak narin gerilim regülatörü bu giriş değeri ile çalışamayacağı için bu tür kullanımlarda devre dışı bırakılması gerekiyor.
Bunun için modül üzerinde 5VEN adında bir jumper yer alıyor. İki pini birleştiren bu jumper takılı olduğunda 5V gerilim regülatörü güç alıyor ve Arduino’yu besleyebilir hale geliyor. Modülü 12 Volt’tan daha fazla gerilim ile kullanacaksak bu jumper’ı sökerek 5 Volt gerilim regülatörünü devre dışı bırakmamız gerekiyor. Modülü çoğunlukla 9-12 Volt gerilim ile kullanacağımızdan dolayı bu jumper’ı sökmemize gerek yok.
Dikkat etmemiz gereken bir diğer şey ise Arduino’yu modül üzerinden beslemesek bile modül ve Arduino’nun GND bağlantılarının birleştirilmiş olmasının gerektiği. Arduino board sürücü modüle HIGH veya LOW sinyali gönderecek, ancak modül sinyaldeki HIGH’ın neye göre HIGH olduğunu nereden bilecek? İşte bu yüzden GND’leri birleştiriyoruz ve Arduino ile modülü aralarında anlaşabilir hale getiriyoruz.
L298N ile İlk Proje: Tek Motor ile Başlayalım
İhtiyacımız olan her bilgiyi öğrendik. Şimdi L298N ile ilk motorumuzu çalıştıralım. Devre kurulumu aşağıdaki şekilde;
Bu kurulumda tek motor kullanıyoruz. Güç kaynağı olarak 9 Volt pil kullandık. Ancak bu tip pillerin verebilecekleri akım sınırlıdır, o yüzden sadece kısa denemeler için kullanılabilir. 6 adet AA kalem pili birleştiren pil kutularından edinmek ve Alkalin piller kullanmak tavsiye edilir.
Devreden açıkça görüldüğü gibi tek motor için sürücü modülün sol tarafını kullanıyoruz. Pilden gelen negatif (-) bağlantı ve Arduino’nun GND bağlantısının modül üzerinde aynı noktaya takıldığına dikkat edelim.
Aşağıdaki sketch L298N modülüne bağlı bir motoru önce bir yöne, sonra diğer yöne döndürüyor ve bu dönmelerin hızlarını ayarlıyor.
ENA pinini analogWrite() komutu ile PWM sinyali vererek kullanıyoruz ve böylece motorun dönüş hızını 0-255 değerleri arasında ayarlayabiliyoruz. DC motorlar düşük güçlerde ilk hareketi yapmakta zorlanırlar. O yüzden çok düşük (50’den az) dönüş hızı belirlemekten kaçınalım. Bu durum kullandığımız harici güç kaynağının verebildiği akım ve kullandığımız motor ile değişkenlik gösterir. Elimizdeki bileşenlere göre deneme yanılma ile kullanabileceğimiz en düşük değeri bulabiliriz.
IN1 ve IN2 pinlerini birini HIGH, diğerini LOW yaptığımızda motor bir yöne dönerken, terse çevirdiğimizde diğer yöne dönmeye başlıyor. İki pini birden LOW yaptığımızda da motor duruyor.
Arduino’da iyi olmak için öncelikle elektronikte iyi olmak gerekir. Türkiye’nin en iyi temel elektronik eğitim seti ARDUINO ÖNCESİ TEMEL ELEKTRONİK EĞİTİM VE DENEY SETİ‘ni keşfedin. Gereksiz bilgilerden arındırılmış basit ve eğlenceli anlatımla ELEKTRONİK öğrenin ve Arduino’ya METE HOCA farkıyla güçlü başlayın!
Sketch kodunu kopyalamak için pencerenin sağ üst köşesindeki butona tıklayabilir veya buraya tıklayarak ZIP dosyası olarak indirebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
/* L298N Motor Sürücü Kartı Arduino ile Nasıl Kullanılır? (1 Motor) L298N çift motor sürücü modülünün detaylı açıklaması ve örnek projelerini web sitemizde bulabilirsiniz. Mete Hoca https://www.metehoca.com/ */ int IN1 = 3; // Sürücü kartın IN1 bağlantısı int IN2 = 2; // Sürücü kartın IN2 bağlantısı int ENA = 9; // Motorun çalışma ve hız kontrol pini // IN1 ve IN2 pinleri motorun bağlı olduğu OUT1 ve OUT2 // çıkışlarını, ENA pini ise motor hızını kontrol ediyor // ENA = ENABLE MOTOR A demek, yani sola takılan motor // Bu pini PWM (~) destekli bir pin header'a bağlamalıyız void setup() { pinMode(IN1, OUTPUT); // Pinler çıkış olarak ayarlanıyor pinMode(IN2, OUTPUT); } void loop() { analogWrite(ENA, 75); // Hız ayarı yapılıyor (0-255 arası yazılabilir) digitalWrite(IN1, HIGH); // Dönüş yönü IN1-IN2 pinlerinin hangisinin HIGH digitalWrite(IN2, LOW); // hangisinin LOW yapıldığıyla ayarlanıyor delay(4000); // Motorun dönüş süresini ayarlıyoruz digitalWrite(IN1, LOW); // IN1 ve IN2'yi LOW yaptığımızda motor durur digitalWrite(IN2, LOW); delay(1000); // Motorun durduğu süre. Hızlı dönüşlerden sonra // yön değişimi yapacaksak bir süre beklemek // sürücü kart ve motoru zorlamamak için faydalıdır analogWrite(ENA, 150); // Yeni hız ayarı yapılıyor. Biraz daha hızlı olsun! digitalWrite(IN1, LOW); // IN1 ve IN2 yukarıya göre ters ayarlandı digitalWrite(IN2, HIGH); // yani bu kez motoru diğer yöne döndüreceğiz delay(2000); // Motorun dönüş süresi digitalWrite(IN1, LOW); // Motoru tekrar durduruyor digitalWrite(IN2, LOW); // ve delay(1000); // yine biraz bekliyoruz... } |
Çift Motor Kullanalım
Sıra geldi L298N modülü ile çift DC motor kullanmaya. Şimdiye kadar öğrendiğimiz bilgiler ile çift motorun nasıl kullanılacağını aşağı yukarı tahmin edebiliyoruz.
Devre kurulumu ile başlayalım. Kafa karıştırmayacak hoş bir görüntü için pin bağlantı sıralarını biraz değiştirdik. Aslında tek yaptığımız sağda kalan ikinci motor bağlantılarını doldurmak.
NOT: Bu projenin Arduino kütüphaneleri kullanılarak anlatımını bu yazımızda bulabilirsiniz.
Sketch kodu ile de bitirelim. Aşağıdaki sketch L298N modülüne bağlı iki motoru sırayla önce bir yöne, sonra diğer yöne döndürüyor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
/* L298N Motor Sürücü Kartı Arduino ile Nasıl Kullanılır? (2 Motor) L298N çift motor sürücü modülünün detaylı açıklaması ve örnek projelerini web sitemizde bulabilirsiniz. Mete Hoca https://www.metehoca.com/ */ int IN1 = 5; // Sürücü kartın IN1 bağlantısı int IN2 = 4; // Sürücü kartın IN2 bağlantısı int IN3 = 3; // Sürücü kartın IN3 bağlantısı int IN4 = 2; // Sürücü kartın IN4 bağlantısı int ENA = 10; // 1. motorun (A) çalışma ve hız kontrol pini int ENB = 9; // 2. motorun (B) çalışma ve hız kontrol pini // IN1 ve IN2 pinleri 1. motorun bağlı olduğu OUT1 ve OUT2 // çıkışlarını, ENA pini ise motor hızını kontrol ediyor // ENA = ENABLE MOTOR A demek, yani sola takılan motor // IN3 ve IN4 pinleri 2. motorun bağlı olduğu OUT3 ve OUT4 // çıkışlarını, ENB pini ise motor hızını kontrol ediyor // ENB = ENABLE MOTOR B demek, yani sağa takılan motor // Bu pinler PWM (~) destekli bir header'a bağlanmalı void setup() { pinMode(IN1, OUTPUT); // Pinler çıkış olarak ayarlanıyor pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); analogWrite(ENA, 100); // 1. motora hız ayarı yapılıyor (0-255) analogWrite(ENB, 100); // 2. motora hız ayarı yapılıyor (0-255) } void loop() { digitalWrite(IN1, HIGH); // 1. motor kısa bir süre döndürülüyor digitalWrite(IN2, LOW); delay(1000); digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); // 2. motor kısa bir süre döndürülüyor digitalWrite(IN4, LOW); delay(1000); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); digitalWrite(IN1, LOW); // 1. motor TERS YÖNE kısa bir süre döndürülüyor digitalWrite(IN2, HIGH); delay(1000); digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); // 2. motor TERS YÖNE kısa bir süre döndürülüyor digitalWrite(IN4, HIGH); delay(1000); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); } |