L298N ile DC Motor Kontrolü: Arduino ile Hız ve Yön Ayarı
L298N motor sürücü nasıl çalışır? H-köprüsü mantığı, ENA, IN1 ve IN2 pinleri, 5V jumper'ı ve güç bağlantısı, PWM ile hız, yön değiştirme, iki motorlu robot araba kodu, ESP32 ve Pico ile kullanım.
DC motorlar fanları, robot tekerleklerini, su pompalarını ve oyuncak arabaları döndüren en yaygın motorlardır. Ancak bir motoru Arduino pinine doğrudan bağlayamazsın: hem pinin verebileceğinden çok daha fazla akım çeker hem de dönüş yönünü değiştirmek için kutuplarının ters çevrilmesi gerekir. L298N motor sürücü bu iki sorunu birden çözer: iki DC motoru ayrı ayrı ileri-geri döndürür ve PWM ile hızlarını ayarlar. Robot araba projelerinin neredeyse hepsinde karşına çıkar.

DC motor nasıl çalışır, neden sürücü gerekir?
Bir DC motorun iki ucuna gerilim verdiğinde döner; kutupları ters çevirirsen ters yöne döner, gerilimi düşürürsen yavaşlar. Küçük bir oyuncak motoru bile çalışırken yüzlerce miliamper, ilk kalkışta ya da sıkıştığında ise 1 amperin üzerinde akım çeker. Ayrıca motor bir bobin olduğu için kapanırken ters yönde gerilim sıçramaları üretir. Arduino pini ise en fazla 20–40 mA verebilir ve bu sıçramalara karşı korumasızdır; motoru doğrudan bağlamak pini ve hatta kartı bozar.
H-köprüsü nedir?
Motoru iki yöne de döndürmenin yolu H-köprüsüdür: motorun etrafına "H" harfi şeklinde dizilmiş dört elektronik anahtar. Çaprazdaki iki anahtar kapandığında akım motordan bir yönde, diğer çapraz çift kapandığında ters yönde geçer. L298N yongasının içinde böyle iki H-köprüsü bulunur, bu yüzden iki motoru bağımsız kontrol edebilir. Her motor için iki yön pini (IN1 ve IN2) ve bir hız pini (ENA) kullanılır:
| IN1 | IN2 | ENA | Motorun durumu |
|---|---|---|---|
| HIGH | LOW | HIGH ya da PWM | İleri döner |
| LOW | HIGH | HIGH ya da PWM | Geri döner |
| HIGH | HIGH | HIGH | Fren yapar, hızlıca durur |
| Herhangi | Herhangi | LOW | Serbest bırakılır, kendi kendine yavaşlar |
L298N teknik özellikleri
| Özellik | Değer |
|---|---|
| Motor besleme gerilimi | 5–35 V (5V jumper takılıyken en fazla 12 V) |
| Kanal başına akım | 2 A sürekli, 3 A anlık |
| Lojik gerilim | 5 V (girişler 3,3 V sinyali de tanır) |
| Gerilim kaybı | Yaklaşık 1,5–3 V (motor bu kadar daha az gerilim görür) |
| Sürebildiği motor | 2 DC motor ya da 1 bipolar step motor |
| Koruma | Ters gerilim diyotları kartın üzerinde |

L298N pinleri ve güç bağlantısı
| Pin ya da klemens | Görevi |
|---|---|
| OUT1, OUT2 | A motorunun iki ucu |
| OUT3, OUT4 | B motorunun iki ucu |
| 12V (VS) | Motor beslemesi: pilin ya da adaptörün artı ucu |
| GND | Ortak toprak: pilin eksi ucu ve Arduino'nun GND'si buraya |
| 5V | 5V jumper takılıysa 5 V çıkış, çıkarılmışsa lojik besleme girişi |
| ENA, ENB | Hız girişleri (PWM); üzerlerindeki jumper takılıysa motor hep tam hızda |
| IN1, IN2, IN3, IN4 | Yön girişleri |
Bir motoru ileri-geri ve farklı hızlarda döndürmek
Önce ENA üzerindeki jumper'ı çıkar ve ENA'yı Arduino'nun D9 pinine, IN1'i D8'e, IN2'yi D7'ye bağla. Motoru OUT1 ve OUT2'ye, 2 adet 18650 pilden (7,4 V) ya da 4–6 AA pilden oluşan bir paketi 12V ve GND klemenslerine bağla; GND'yi Arduino'nun GND'sine de götür. Aşağıdaki motor() fonksiyonu -255 ile 255 arasında bir değer alır: artı ileri, eksi geri, sıfır fren demektir. Hız ayarının mantığı PWM Nedir? yazısında.
1const int ENA = 9; // hız (PWM) / speed (PWM)
2const int IN1 = 8;
3const int IN2 = 7;
4
5void motor(int speed) { // -255 … 255
6 if (speed == 0) { // fren / brake
7 digitalWrite(IN1, HIGH);
8 digitalWrite(IN2, HIGH);
9 analogWrite(ENA, 255);
10 return;
11 }
12 digitalWrite(IN1, speed > 0); // ileri ya da geri / forward or backward
13 digitalWrite(IN2, speed < 0);
14 analogWrite(ENA, abs(speed));
15}
16
17void setup() {
18 pinMode(ENA, OUTPUT);
19 pinMode(IN1, OUTPUT);
20 pinMode(IN2, OUTPUT);
21}
22
23void loop() {
24 motor(200); delay(2000); // ileri / forward
25 motor(0); delay(500); // dur / stop
26 motor(-120); delay(2000); // yavaşça geri / slowly backward
27 motor(0); delay(500);
28}İki motorlu robot araba: ileri, geri, sağa, sola
Robot arabalarda direksiyon yoktur; dönüşler iki tekerleğin farklı hız ve yönlerde dönmesiyle yapılır. İki motor da ileri dönerse araba düz gider; sol motor geri, sağ motor ileri dönerse araba olduğu yerde sola döner. Aşağıdaki drive() fonksiyonu iki motorun hızını -255 ile 255 arasında ayrı ayrı alır:
1// Sol motor / left motor: ENA=9, IN1=8, IN2=7 — Sağ motor / right motor: ENB=10, IN3=5, IN4=4
2const int ENA = 9, IN1 = 8, IN2 = 7;
3const int ENB = 10, IN3 = 5, IN4 = 4;
4
5void drive(int left, int right) { // her biri -255 … 255 / each -255 … 255
6 digitalWrite(IN1, left >= 0); digitalWrite(IN2, left < 0);
7 digitalWrite(IN3, right >= 0); digitalWrite(IN4, right < 0);
8 analogWrite(ENA, abs(left));
9 analogWrite(ENB, abs(right));
10}
11
12void setup() {
13 int pins[] = {ENA, IN1, IN2, ENB, IN3, IN4};
14 for (int p : pins) pinMode(p, OUTPUT);
15}
16
17void loop() {
18 drive(200, 200); delay(1500); // ileri / forward
19 drive(-200, 200); delay(600); // sola dön / turn left
20 drive(200, -200); delay(600); // sağa dön / turn right
21 drive(-180, -180); delay(1000); // geri / backward
22 drive(0, 0); delay(1000); // dur / stop
23}Arabanın önüne bir mesafe sensörü eklersen engel gördüğünde duran ve dönen bir robot yaparsın; sensör tarafı için HC-SR04 Mesafe Sensörü yazısına bak. Uno'da Servo kütüphanesini kullanacaksan dikkat: bu kütüphane 9 ve 10. pinlerdeki PWM'i devre dışı bırakır, bu durumda ENA ve ENB'yi 5 ve 6. pinlere taşı.
ESP32 ve Raspberry Pi Pico ile L298N
L298N'in girişleri yaklaşık 2,3 V'un üzerini HIGH kabul ettiği için ESP32 ve Pico'nun 3,3 V'luk sinyalleriyle doğrudan çalışır; kartın lojik beslemesi yine 5 V olmalıdır. ESP32'de aynı Arduino kodunu ENA ve ENB için PWM verebilen pinlerle (örneğin GPIO 25 ve 26) kullanabilirsin; 34–39 arasındaki pinler çıkış veremez. Pico'da MicroPython ile tek motor kontrolü şöyledir:
1from machine import Pin, PWM
2import time
3
4ena = PWM(Pin(15), freq=1000)
5in1 = Pin(14, Pin.OUT)
6in2 = Pin(13, Pin.OUT)
7
8def motor(speed): # -100 … 100
9 in1.value(speed > 0)
10 in2.value(speed < 0)
11 ena.duty_u16(int(abs(speed) * 655.35))
12
13while True:
14 motor(80); time.sleep(2) # ileri / forward
15 motor(0); time.sleep(0.5) # dur / stop
16 motor(-50); time.sleep(2) # geri / backwardL298N mi, TB6612FNG mi, MOSFET mi?
| Sürücü | Avantajı | Dezavantajı | Uygun kullanım |
|---|---|---|---|
| L298N | Ucuz, sağlam, kanal başına 2 A | Yaklaşık 2 V kayıp, ısınır, büyük | Hobi robotları, 6–12 V motorlar |
| TB6612FNG | Küçük, verimli (MOSFET), 3,3 V uyumlu | 1,2 A sürekli, en fazla 13,5 V | Küçük pilli robotlar |
| L9110S | Çok küçük ve ucuz | Kanal başına yaklaşık 800 mA | Mini motorlar |
| Tek MOSFET (IRLZ44N gibi) | Çok verimli, yüksek akım | Yalnızca tek yön | Fan, pompa, LED şerit |
Motorun yalnızca açılıp kapanması yetiyorsa bir röle de iş görür, ama hız ayarı yapamaz; bu farkı Röle Modülü Nedir? yazısında karşılaştırdık. Uygun transistör ve MOSFET seçimi için Transistörler aracına göz atabilirsin.
L298N ile proje fikirleri
- Engelden kaçan robot: HC-SR04 ile önündeki engeli görüp yön değiştiren bir araba.
- Bluetooth kumandalı araba: Telefondaki bir uygulamayla HC-05 üzerinden yönetilen robot.
- Joystick kumandalı araba: Joystick'in iki eksenini iki motorun hızına çevir; ayrıntılar Joystick Modülü Kullanımı yazısında.
- Çizgi izleyen robot: Kızılötesi sensörlerle yerdeki siyah çizgiyi takip eden araba.
- Otomatik perde: Sabah ışık gelince perdeyi açan, akşam kapatan bir motorlu sistem.
- Konveyör bant: Hızı potansiyometreyle ayarlanan küçük bir taşıyıcı bant.
Sık yapılan hatalar ve çözümleri
- Kartın LED'i yanıyor ama motor dönmüyor: GND'ler ortak değil, ENA jumper'ı çıkarılmış ama pin bağlanmamış ya da PWM değeri çok düşük.
- Motor çalışınca Arduino yeniden başlıyor: Motor ve Arduino aynı zayıf kaynaktan besleniyor; ayrı besle ve motor uçlarına 100 nF kondansatör lehimle.
- Motor çok yavaş ve güçsüz: L298N yaklaşık 2 V yutar; pil gerilimini artır (örneğin 2 adet 18650) ya da daha verimli bir sürücü kullan.
- Motor yalnızca bir yöne dönüyor: IN pinlerinden biri bağlı değil ya da kodda iki yön için aynı değerler yazılıyor.
- L298N çok ısınıyor: Motor fazla akım çekiyor; soğutucunun açıkta kaldığından emin ol, gerekirse daha güçlü bir sürücü seç.
- 9 V kare pil kullanmak: Bu piller yüksek akım veremez ve çabuk biter; şarj edilebilir 18650 ya da AA pil paketi kullan.
L298N ile motor kontrolünü öğrendiğinde robot projelerinin kapısı açılır. BlueGrays uygulamasında L298N ile Bluetooth kontrollü araba ve engelden kaçan robot projelerini devre şemaları ve kodlarıyla adım adım bulabilirsin.
Sıkça sorulan sorular
L298N ile kaç motor sürülebilir?
L298N'in içinde iki H-köprüsü olduğu için iki DC motoru bağımsız olarak ileri-geri ve farklı hızlarda sürebilir. İki kanal birlikte kullanılarak bir adet bipolar step motor da sürülebilir.
L298N'deki 5V jumper'ı ne işe yarar?
Jumper takılıyken kartın üzerindeki regülatör motor beslemesinden 5 V üretir ve yongayı besler; bu 5 V'u Arduino'yu beslemek için de kullanabilirsin. Motor beslemesi 12 V'un üzerindeyse regülatör aşırı ısınabileceği için jumper'ı çıkarıp 5V pinine ayrı bir 5 V vermelisin.
L298N'e hangi pil bağlanmalı?
6–9 V'luk küçük motorlar için 2 adet 18650 lityum pil (7,4 V) ya da 6 adet AA pil (9 V) iyi bir seçimdir. L298N yaklaşık 2 V kaybettiği için motorun etiket geriliminden biraz yüksek bir kaynak seç. 9 V kare piller motorları sürecek akımı veremez.
ENA jumper'ı neden çıkarılır?
ENA üzerindeki jumper takılıyken motor her zaman tam hızda döner. Hızı ayarlamak istiyorsan jumper'ı çıkarıp ENA pinini Arduino'nun bir PWM pinine bağlaman gerekir; böylece analogWrite ile hızı 0–255 arasında ayarlayabilirsin.
Motor neden düşük hızlarda dönmüyor?
Motorun sürtünmeyi yenip harekete geçmesi için belirli bir minimum gerilime ihtiyacı vardır ve L298N'in gerilim kaybı bunu daha da zorlaştırır. Genelde PWM değeri 80–120'nin altına düştüğünde motor yalnızca vınlar. Kodda bir minimum hız belirle ya da daha yüksek gerilimli bir kaynak kullan.
L298N ESP32 ve Raspberry Pi Pico ile çalışır mı?
Evet. L298N'in giriş pinleri 3,3 V sinyali HIGH olarak tanır, bu yüzden ESP32 ve Pico'ya doğrudan bağlanabilir. Kartın lojik kısmı yine 5 V ile beslenmeli ve tüm GND'ler ortak olmalıdır.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
L298N ile Bluetooth Kontrollü Araba
Arduino ve HC-05 Bluetooth modülü ile telefondan kontrol edilebilen 2WD (iki motorlu, dört tekerlekli) robot araba projesi. L298N motor sürücü kartı üzerinden her bir taraftaki iki motor paralel bağla

Engelden Kaçan Robot
Kendi yolunu bulan akıllı bir araç yapmaya ne dersin? Engelden Kaçan Robot, önündeki ultrasonik sensör sayesinde çevresini sürekli tarar. Bir engelle karşılaştığında durur, servo motoruyla sağına ve s

Joystick İle Servo Kontrol
Joystick modülü ile iki servo motoru X ve Y eksenlerinde bağımsız olarak kontrol eden pan-tilt projesi. Joystick-servo entegrasyonu ve konum takibi mantığını öğretir.

ESP32 Servo Motor (Potansiyometre Kontrolü)
Bu projede potansiyometre ile SG90 servo motoru kontrol ediyoruz. Potansiyometreden okunan analog değeri 0-180 derece aralığına map'leyerek servo açısını ayarlıyoruz. ESP32Servo kütüphanesi sayesinde ESP32'nin herhangi bir GPIO'su PWM sinyali üretebiliyor. Bu, robotik kollar, kamera gimbal'ları ve otomatik kapı mekanizmaları için temel bir kontrol yöntemidir.

Joystick İle Led Kontrol
Joystick modülünün X ve Y eksen değerlerine göre 4 farklı yönde LED'leri yakan kontrol projesi. Analog joystick okuma ve yön algılama mantığını öğretir.

ESP32 HC-SR04 Ultrasonik Mesafe Ölçer
HC-SR04 ultrasonik sensör, gönderdiği ses dalgasının nesneye çarpıp geri dönme süresini (Time of Flight) ölçerek mesafe hesaplar. Bu projede ESP32 ile TRIG pinine 10 mikrosaniyelik darbe gönderip, ECHO pininden gelen yankı süresini `pulseIn()` ile okuyacağız. Hesaplanan mesafeyi cm cinsinden Serial Monitor'e yazdıracağız. HC-SR04 5V çalıştığı için ECHO pinine **gerilim bölücü** zorunludur — aksi halde ESP32'nin 3.3V GPIO'su zarar görür.

ESP32 Park Sensörü (HC-SR04 + 5 LED Bar + Buzzer + OLED)
Otomobil park sensörünün ESP32 versiyonu! HC-SR04 ultrasonik sensör ile önündeki nesneye olan mesafeyi ölçüyoruz. Mesafe azaldıkça 5 LED'lik bar dolar (yeşil → sarı → kırmızı) ve buzzer bip aralığı kısalır. Çok yakınlaşınca (10 cm altında) sürekli alarm çalar ve tüm LED'ler yanar. SSD1306 OLED ekranda büyük fontla anlık cm değeri, durum metni (SAKIN / DIKKAT / YAKIN / DUR! / TEHLIKE) ve LED bar simülasyonu gösterilir. Klasik ve öğretici bir proje — HC-SR04 pulseIn, digital multi-output, buzzer P

HC-SR04 Mesafe Ölçme (Serial Ekran)
HC-SR04 ultrasonik sensör ile mesafe ölçüp sonucu Serial Monitor'da cm cinsinden gösteren proje. Ses dalgası ile mesafe hesaplama prensibini öğretir.
Diğer yazılar
DC motorun neden doğrudan Arduino'ya bağlanmadığını, H-köprüsünü, L298N'in pinlerini ve güç bağlantısını, PWM ile hız ve yön kontrolünü ve iki motorlu bir robot arabayı adım adım öğren.

