Arduino L298N motor sürücü kullanımı; akıllı robot projelerinden, uzaktan kumandalı (RC) araçlara ve endüstriyel prototiplere kadar oldukça geniş bir uygulama yelpazesine sahiptir. Arduino veya benzeri bir mikrodenetleyicinin dijital pinlerini kullanarak doğrudan bir LED’i açıp kapatabilirsiniz. Çünkü mikrokontrolcü pinlerinden çekilen yaklaşık 20mA seviyesindeki akım, bir LED’i sürmek için fazlasıyla yeterlidir. Ancak DC motorlar veya solenoidler gibi yüksek güç ve akım gerektiren endüktif yükleri sürmek söz konusu olduğunda, mikrodenetleyici pinleri hem yetersiz kalır hem de aşırı akım çekilmesi durumunda mikrokontrolcünün yanmasına sebep olabilir. İşte bu noktada yüksek akım ve gerilim toleransına sahip L298N çift H-Köprüsü (Dual H-Bridge) motor sürücüsü devreye girer.
Bir DC motorun dönüş hızını, motora uygulanan ortalama gerilimi değiştirerek kontrol edebiliriz. Bu işlemi mikrokontrolcülerle yapmanın en verimli ve yaygın yolu ise PWM (Darbe Genişlik Modülasyonu) sinyali kullanmaktır.
Bu kapsamlı rehberimizde, en temel seviyeden gelişmiş joystick kontrolüne kadar çok sayıda L298N uygulama örneğini bulabilirsiniz. Projeyi uygularken aklınıza takılan veya yardıma ihtiyaç duyduğunuz bir aşama olursa, yorumlar kısmından bize ulaşmaktan çekinmeyin!
PWM ile DC Motor Hız Kontrolü Nasıl Çalışır?
PWM (Pulse Width Modulation – Darbe Genişlik Modülasyonu), gücün çok yüksek frekanslarda hızlı bir şekilde açılıp kapatılması (anahtarlanması) prensibine dayanan ve yüke aktarılan ortalama voltaj değerini ayarlamamızı sağlayan bir tekniktir. Buradaki ortalama gerilim, sinyalin bir periyot boyunca lojik-1 (AÇIK) kalma süresinin, lojik-0 (KAPALI) kalma süresine oranını belirten görev döngüsü (duty cycle) değerine doğrudan bağlıdır.

PWM kontrolünün teorik altyapısı ve motor üzerindeki matematiksel etkileri hakkında daha fazla bilgi edinmek için PWM ile DC Motor Kontrolü başlıklı detaylı içeriğimizi inceleyebilirsiniz.
Sürmek istediğiniz DC motorun güç tüketimine bağlı olarak, bir Arduino PWM çıkışını doğrudan bir N-Kanal MOSFET veya güç transistörünün Gate/Base pinine bağlayarak motor hızını kolayca kontrol edebilirsiniz. Düşük akımlı Arduino PWM sinyali, yüksek güç taşıma kapasitesine sahip yarı iletken anahtarı kontrol ederek motorun dönmesini sağlar.

H-Köprüsü (H-Bridge) ve Yön Kontrolü
Motorun dönüş yönünü kontrol edebilmek için motor sargılarından geçen elektrik akımının yönünü tersine çevirmemiz gerekir. Bunu gerçekleştirmenin en klasik ve güvenli yolu bir H-Köprüsü (H-Bridge) devresi tasarlamaktır. H-Köprüsü; merkezinde motorun bulunduğu, “H” harfi şeklinde konumlandırılmış dört adet elektronik anahtarlama elemanından (transistör veya MOSFET) oluşur. Karşılıklı iki anahtar çiftini (örneğin S1 ve S4) aynı anda iletime geçirerek akımın motor üzerinden belirli bir yönde akmasını sağlarız. Diğer iki anahtarı (S2 ve S3) aktif ettiğimizde ise akım ters yönde akar ve böylece motor ters yönde dönmeye başlar.

Sonuç olarak; H-Köprüsü mimarisi ile PWM (hız kontrolü) sinyalini birleştirdiğimizde, DC motorların hem yönünü hem de hızını tam parametrik olarak kontrol edebiliriz. L298N modülü de bu iki özelliği tek bir kılıfta sunan popüler bir entegredir.
L298N Sürücü Kartının Özellikleri
L298N, aynı anda birbirinden bağımsız iki adet DC motorun (veya 1 adet çift fazlı step motorun) hız ve yön kontrolünü sağlayabilen çift kanallı bir H-Köprüsü sürücü kartıdır. Modül, kanal başına sürekli 2A (anlık tepe noktası 3A) akım taşıma kapasitesiyle 5V ile 35V arasındaki DC motorları sürebilir.

Modülün bağlantı klemenslerine daha yakından bakalım: Motor A ve Motor B için iki ayrı çıkış klemensi bulunur. Güç giriş tarafında ise Motor Besleme Voltajı (VMS/VCC), Toprak (GND) ve 5V pinleri yer alır. Buradaki 5V pini, modülün durumuna göre hem bir giriş hem de regüleli bir çıkış olarak çalışabilir.

Dahili 5V Voltaj Regülatörü ve Jumper Kullanımı: Modül üzerinde yerleşik bir 78M05 voltaj regülatörü bulunur. Motor besleme geriliminiz (VMS) 12V veya altındaysa, modül üzerindeki siyah regülatör aktif etme jumper’ını (EN5V) takılı bırakabilirsiniz. Bu durumda sürücü kartı, motor beslemesinden aldığı gerilimi 5V’a düşürür ve klemense 5V çıkış verir; bu çıkışı Arduino kartınızı beslemek için kullanabilirsiniz. Ancak motor besleme voltajınız 12V’tan yüksekse (örneğin 24V), bu jumper’ı mutlaka sökmelisiniz. Aksi takdirde regülatör aşırı ısınarak yanabilir. Jumper söküldüğünde ise, klemens üzerindeki 5V pini lojik devreleri beslemek amacıyla dışarıdan harici +5V regüleli gerilim girişi olarak kullanılmalıdır.
Önemli Teknik Detay (Voltaj Düşümü / Voltaj Drop): L298N, eski nesil bipolar Darlington transistör teknolojisi (BJT) kullandığı için kendi üzerinde yaklaşık 1.8V ila 2V seviyelerinde ciddi bir voltaj düşüşüne neden olur. Örneğin, sürücüye 12V güç kaynağı bağladığınızda motor terminallerine maksimum 10V civarında gerilim ulaşır. Bu durum hem motorların tam verimde çalışmasını engeller hem de kaybolan bu enerjinin ısıya dönüşmesine neden olur. Bu yüzden yüksek akım çeken projelerinizde sürücü üzerindeki metal soğutucu bloğun ısınacağını göz önünde bulundurmalı ve gerekirse modern MOSFET tabanlı sürücüleri (TB6612FNG, DRV8833 vb.) alternatif olarak değerlendirmelisiniz.

Hız ve Yön Kontrol Girişleri (ENA, ENB ve IN Pinleri): Enable A (ENA) ve Enable B (ENB) pinleri ilgili motor kanalını aktif etmek ve PWM hız kontrolü uygulamak için kullanılır. Bu pinler üzerinde siyah jumper takılıyken motorlar sürekli maksimum hızda (%100 duty cycle) çalışır. Hız kontrolü yapmak için bu jumper’ı sökmeli ve pinleri Arduino’nun PWM destekli dijital pinlerine bağlamalısınız.

Input 1 (IN1) ve Input 2 (IN2) pinleri Motor A’nın; Input 3 (IN3) ve Input 4 (IN4) ise Motor B’nin dönüş yönünü belirler. Bu pinleri lojik-1 (HIGH) veya lojik-0 (LOW) durumuna getirerek H-Köprüsü yön anahtarlarını tetikleriz. Örneğin; IN1=HIGH ve IN2=LOW yapıldığında motor ileri yönde dönerken, IN1=LOW ve IN2=HIGH yapıldığında motor geri yönde dönecektir. Her iki giriş aynı lojik seviyeye (HIGH-HIGH veya LOW-LOW) çekilirse motor frenleme yaparak anında durur.
Arduino ile L298N Uygulama Projeleri
Bu bölümde, L298N sürücüsünü Arduino ile kontrol etmek için üç farklı pratik senaryoyu inceleyeceğiz. Tüm projelerde ortak şasi (GND) hattının çekildiğinden emin olmalısınız.
Senaryo 1: Potansiyometresiz Temel Hız ve Yön Kontrolü
Bu devrede, motorun hızını ve dönüş yönünü kod içerisinde tanımladığımız zaman döngüsüne göre otomatik olarak değiştireceğiz.
Devre Şeması

Proje Kodu
Senaryo 2: Potansiyometre ve Buton ile İnteraktif Kontrol
Bu senaryoda, harici bir potansiyometre kullanarak motor hızını gerçek zamanlı ayarlayacak ve bir basma butonu (push button) yardımıyla motorun dönüş yönünü değiştireceğiz.
Devre Şeması

Proje Kodu
Kodun Detaylı Açıklaması
İlk olarak, giriş/çıkış pini olarak kullanacağımız Arduino pinlerini ve durum kontrolü yapacak değişkenleri tanımlıyoruz. setup() fonksiyonunda buton pinini dahili dirençleri korumak için uygun modda ayarlar, motor pinlerini çıkış yaparız. loop() döngüsünde potansiyometreden gelen 0-1023 arasındaki analog gerilim değerini okuyup, map() fonksiyonu ile motor PWM değeri olan 0-255 aralığına ölçeklendiririz. Ardından analogWrite() komutuyla bu hızı modülün ENA pinine göndeririz.
Butonun basılıp basılmadığını kontrol ederek lojik durum geçişini (toggle) gerçekleştirir ve IN1 ile IN2 pinlerinin durumunu tersine çevirerek motorun dönüş yönünü anında değiştiririz.
Senaryo 3: Çift Eksenli Joystick ile İki Tekerlekli Robot Araba Kontrolü
Diferansiyel sürüşlü robot araba projelerinin temelini oluşturan bu uygulamada, iki eksenli bir analog joystick yardımıyla iki DC motorun hızını ve dönüş yönünü eş zamanlı olarak kontrol edeceğiz.
Devre Şeması

Gerekli Ekipmanlar: Projede 2 adet sarı DC motor tekerlek seti, L298N sürücü modülü, Arduino UNO kartı, çift eksenli analog joystick ve harici güç kaynağı (örneğin 3 adet 3.7V Lityum İyon 18650 pil) kullanılmıştır. Motorların yüksek akım çekmesi nedeniyle sistemin bağımsız bir pil bloğundan beslenmesi ve pilin eksi (-) kutbunun Arduino GND hattı ile birleştirilmesi zorunludur.
Analog Kontrol ve Matematiksel Mantık
Analog joystick, birbirine dik iki eksende (X ve Y) çalışan iki adet potansiyometreden oluşur ve Arduino’nun analog girişlerinden 0-1023 arasında değer üretir. Joystick fiziksel olarak tam merkezdeyken okunan değer yaklaşık 512’dir.

Potansiyometrelerin orta noktadaki mekanik dalgalanmalarını önlemek amacıyla 470 ile 550 aralığını “ölü bölge” (dead zone) veya durağan merkez kabul ediyoruz. Eğer joystick’in Y eksenini geriye çeker ve okuma değerini 470’in altında tespit edersek, motorları geri gitmeye yönlendirip aradaki farkı PWM değerine oranlayarak hızı artırırız. Tam tersi durumda 550 değerinin üzerinde ise ileri yönü aktif ederiz.
Ana Proje Kodu
İleri ve Geri Yön Algoritması Kod Bloğu
Eksenlerden elde ettiğimiz veriler doğrultusunda joystick’in orta bölgeden sapma miktarını PWM sinyaline dönüştürerek motor hızlarını belirleriz. Eksen orta noktada kaldığında motorların durmasını sağlarız.
Şimdi diferansiyel dönüşleri (sağa ve sola yönelme) gerçekleştiren X ekseni kontrol algoritmasını inceleyelim:
Sola dönüş yaparken, X eksenindeki değişim oranına göre sol tekerin hızını kademeli olarak düşürürken sağ tekerin hızını artırırız. Böylece araç sola doğru yumuşak bir kavis çizer. Yazılan aritmetik işlemlerde taşma olmaması için hız sınırını 0 ile 255 aralığında tutan ek durum filtreleri (if blokları) uygulanmıştır.

Aracın sağa yönelmesi de aynı mantık temelinde, tekerlek hız oranlarının tersine çevrilmesiyle gerçekleştirilir.
Lojik Eşik ve Motor Kalkış Akımı (Önemli Not): DC motorlar, iç sürtünme ve mekanik yük nedeniyle çok düşük PWM voltaj değerlerinde (genellikle 70 PWM değerinin altında) hareket edemezler ancak sargılardan akım geçtiği için vızıltı şeklinde bir ses çıkarırlar. Bu durum motorların aşırı ısınmasına ve pilin boş yere tükenmesine yol açar. Bu sorunun önüne geçebilmek için kodumuzda alt limit filtresi uygulayarak motorların sadece 70 ile 255 PWM değerleri arasında çalışmasını sağladık. Son olarak hesaplanan hız değerlerini sürücünün ilgili ENA ve ENB pinlerine göndeririz:
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.
