Parçalar · 4 dk okuma

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.

L298N çift motor sürücü modülü
L298N motor sürücü: siyah soğutucunun altında iki H-köprüsü bulunan L298N yongası; iki yanda motor klemensleri, önde güç ve kontrol pinleri yer alır.

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:

IN1IN2ENAMotorun durumu
HIGHLOWHIGH ya da PWMİleri döner
LOWHIGHHIGH ya da PWMGeri döner
HIGHHIGHHIGHFren yapar, hızlıca durur
HerhangiHerhangiLOWSerbest bırakılır, kendi kendine yavaşlar

L298N teknik özellikleri

ÖzellikDeğer
Motor besleme gerilimi5–35 V (5V jumper takılıyken en fazla 12 V)
Kanal başına akım2 A sürekli, 3 A anlık
Lojik gerilim5 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 motor2 DC motor ya da 1 bipolar step motor
KorumaTers gerilim diyotları kartın üzerinde
Redüktörlü DC motor ve tekerlek seti
Robot arabalarda kullanılan sarı redüktörlü DC motor ve tekerlek: dişli kutusu hızı düşürüp torku artırır; 3–6 V ile çalışır.

L298N pinleri ve güç bağlantısı

Pin ya da klemensGörevi
OUT1, OUT2A motorunun iki ucu
OUT3, OUT4B motorunun iki ucu
12V (VS)Motor beslemesi: pilin ya da adaptörün artı ucu
GNDOrtak toprak: pilin eksi ucu ve Arduino'nun GND'si buraya
5V5V jumper takılıysa 5 V çıkış, çıkarılmışsa lojik besleme girişi
ENA, ENBHız girişleri (PWM); üzerlerindeki jumper takılıysa motor hep tam hızda
IN1, IN2, IN3, IN4Yön girişleri
Pilin eksi ucu, L298N'in GND'si ve Arduino'nun GND'si mutlaka birbirine bağlanmalıdır; ortak toprak olmazsa kontrol sinyalleri anlamsızlaşır. Motor beslemesi 12 V'u geçiyorsa kartın üzerindeki 5V jumper'ını çıkar ve 5V pinine ayrı bir 5 V ver. Motorları asla Arduino'nun 5V pininden besleme.

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.

Arduino (C++)
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}
Çoğu motor düşük PWM değerlerinde dönmek yerine vınlar; harekete geçmesi için genelde 80–120 arası bir değer gerekir. Yön değiştirmeden önce motoru kısa bir süre durdurmak ve hızı birden değil yavaş yavaş artırmak hem ani akım çekişini azaltır hem de dişlileri korur.

İ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:

Arduino (C++)
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:

MicroPython
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 / backward

L298N mi, TB6612FNG mi, MOSFET mi?

SürücüAvantajıDezavantajıUygun kullanım
L298NUcuz, sağlam, kanal başına 2 AYaklaşık 2 V kayıp, ısınır, büyükHobi robotları, 6–12 V motorlar
TB6612FNGKüçük, verimli (MOSFET), 3,3 V uyumlu1,2 A sürekli, en fazla 13,5 VKüçük pilli robotlar
L9110SÇok küçük ve ucuzKanal başına yaklaşık 800 mAMini motorlar
Tek MOSFET (IRLZ44N gibi)Çok verimli, yüksek akımYalnızca tek yönFan, 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.

Tüm projeleri gör
L298N ile Bluetooth Kontrollü Araba
#80İleri
Premium

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

5.0(38)
64
Engelden Kaçan Robot
#81İleri
Premium

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

5.0(38)
49
Joystick İle Servo Kontrol
#60Orta
Premium

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.

4.7(42)
58
ESP32 Servo Motor (Potansiyometre Kontrolü)
#118Orta
Premium

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.

4.3(29)
42
Joystick İle Led Kontrol
#59Orta
Premium

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.

4.7(50)
66
ESP32 HC-SR04 Ultrasonik Mesafe Ölçer
#116Orta
Premium

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.

4.9(27)
43
ESP32 Park Sensörü (HC-SR04 + 5 LED Bar + Buzzer + OLED)
#142İleri
Premium

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

0.0(0)
14
HC-SR04 Mesafe Ölçme (Serial Ekran)
#27Başlangıç

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.

4.6(44)
65

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.

L298N ile DC Motor Kontrolü: Arduino ile Hız ve Yön Ayarı | BlueGrays