Komponen · 5 mnt baca

Mengendalikan Motor DC dengan L298N: Kecepatan dan Arah dengan Arduino

Bagaimana cara kerja driver motor L298N? Konsep H-bridge, pin ENA, IN1, dan IN2, jumper 5V dan pengkabelan daya, kecepatan dengan PWM, mengubah arah, kode mobil robot dua motor, serta pemakaian di ESP32 dan Pico.

Motor DC adalah motor yang paling umum, yang memutar kipas, roda robot, pompa air, dan mobil mainan. Tetapi kamu tidak bisa menghubungkan motor langsung ke pin Arduino: motor menarik arus jauh lebih besar daripada yang bisa diberikan pin, dan untuk mengubah arahnya, polaritasnya harus dibalik. Driver motor L298N menyelesaikan kedua masalah sekaligus: modul ini menjalankan dua motor DC maju dan mundur secara terpisah dan mengatur kecepatannya dengan PWM. Kamu akan menemukannya di hampir setiap proyek mobil robot.

Modul driver motor ganda L298N
Driver motor L298N: di bawah heatsink hitam ada chip L298N dengan dua H-bridge; terminal motor ada di kedua sisi, sedangkan pin daya dan kendali ada di depan.

Bagaimana cara kerja motor DC, dan kenapa butuh driver?

Beri tegangan di kedua terminal motor DC dan motor akan berputar; balik polaritasnya dan motor berputar ke arah sebaliknya; turunkan tegangannya dan motor melambat. Motor mainan kecil pun menarik ratusan miliampere ketika berputar, dan lebih dari 1 ampere ketika mulai berputar atau tertahan. Selain itu, karena motor adalah kumparan, motor menghasilkan lonjakan tegangan balik ketika dimatikan. Pin Arduino hanya bisa memberi paling banyak 20–40 mA dan tidak terlindungi dari lonjakan itu; menghubungkan motor secara langsung akan merusak pin dan bahkan bisa merusak board.

Apa itu H-bridge?

Cara menjalankan motor ke dua arah adalah dengan H-bridge: empat saklar elektronik yang disusun di sekitar motor membentuk huruf “H”. Ketika dua saklar yang berseberangan secara diagonal tertutup, arus mengalir melalui motor ke satu arah; ketika pasangan diagonal lainnya tertutup, arus mengalir ke arah sebaliknya. Chip L298N berisi dua H-bridge seperti itu, jadi bisa mengendalikan dua motor secara terpisah. Setiap motor memakai dua pin arah (IN1 dan IN2) dan satu pin kecepatan (ENA):

IN1IN2ENAYang dilakukan motor
HIGHLOWHIGH atau PWMBerputar maju
LOWHIGHHIGH atau PWMBerputar mundur
HIGHHIGHHIGHMengerem dan berhenti dengan cepat
BebasBebasLOWBerputar bebas dan melambat sendiri

Spesifikasi L298N

FiturNilai
Tegangan catu daya motor5–35 V (maks. 12 V dengan jumper 5V terpasang)
Arus per channel2 A kontinu, puncak 3 A
Tegangan logika5 V (input juga mengenali sinyal 3,3 V)
Penurunan teganganSekitar 1,5–3 V (motor menerima tegangan lebih rendah sebesar itu)
Motor yang bisa dikendalikan2 motor DC atau 1 motor stepper bipolar
ProteksiDioda flyback di board
Set motor DC bergigi dan roda
Motor DC bergigi kuning dan roda yang dipakai di mobil robot: gearbox-nya menurunkan kecepatan dan menaikkan torsi; bekerja di 3–6 V.

Pin L298N dan pengkabelan daya

Pin atau terminalFungsi
OUT1, OUT2Dua kabel motor A
OUT3, OUT4Dua kabel motor B
12V (VS)Catu daya motor: kutub positif baterai atau adaptor
GNDGround bersama: kutub negatif baterai dan GND Arduino masuk ke sini
5VOutput 5 V jika jumper 5V terpasang, input catu daya logika jika jumper dilepas
ENA, ENBInput kecepatan (PWM); jika jumper-nya terpasang, motor selalu berputar dengan kecepatan penuh
IN1, IN2, IN3, IN4Input arah
Kutub negatif baterai, GND L298N, dan GND Arduino harus terhubung semuanya; tanpa ground bersama, sinyal kendali tidak ada artinya. Kalau catu daya motor di atas 12 V, lepas jumper 5V di board dan beri 5 V terpisah ke pin 5V. Jangan pernah memberi daya motor dari pin 5V Arduino.

Menjalankan motor maju, mundur, dan dengan kecepatan berbeda

Pertama, lepas jumper di ENA lalu hubungkan ENA ke pin Arduino D9, IN1 ke D8, dan IN2 ke D7. Hubungkan motor ke OUT1 dan OUT2, lalu paket 2 × sel 18650 (7,4 V) atau 4–6 baterai AA ke terminal 12V dan GND; tarik juga GND ke GND Arduino. Fungsi motor() di bawah menerima nilai dari -255 sampai 255: positif berarti maju, negatif mundur, dan nol mengerem. Konsep di balik pengaturan kecepatan ada di Apa Itu PWM?

C++ (Arduino IDE)
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}
Sebagian besar motor hanya berdengung tanpa berputar di nilai PWM yang rendah; biasanya butuh nilai sekitar 80–120 untuk mulai bergerak. Menghentikan motor sebentar sebelum mengubah arah, dan menaikkan kecepatan secara bertahap alih-alih sekaligus, sama-sama mengurangi tarikan arus mendadak dan melindungi gigi-giginya.

Mobil robot dua motor: maju, mundur, kiri, dan kanan

Mobil robot tidak punya setir; mobil ini berbelok dengan memutar kedua roda dengan kecepatan dan arah yang berbeda. Kalau kedua motor berputar maju, mobil berjalan lurus; kalau motor kiri berputar mundur dan motor kanan maju, mobil berputar ke kiri di tempat. Fungsi drive() di bawah menerima kecepatan setiap motor secara terpisah, dari -255 sampai 255:

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

Tambahkan sensor jarak di depan mobil dan kamu punya robot yang berhenti dan berbelok ketika melihat rintangan; untuk bagian sensornya, lihat Sensor Jarak HC-SR04. Kalau kamu akan memakai library Servo di Uno, hati-hati: library itu mematikan PWM di pin 9 dan 10, jadi pindahkan ENA dan ENB ke pin 5 dan 6.

L298N dengan ESP32 dan Raspberry Pi Pico

Input L298N menganggap apa pun di atas sekitar 2,3 V sebagai HIGH, jadi langsung bisa bekerja dengan sinyal 3,3 V dari ESP32 dan Pico; catu daya logika board-nya tetap harus 5 V. Di ESP32 kamu bisa memakai kode Arduino yang sama dengan pin yang mendukung PWM untuk ENA dan ENB (misalnya GPIO 25 dan 26); pin 34–39 tidak bisa menjadi output. Di Pico dengan MicroPython, mengendalikan satu motor terlihat seperti ini:

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, TB6612FNG, atau MOSFET?

DriverKelebihanKekuranganPaling cocok untuk
L298NMurah, tangguh, 2 A per channelHilang sekitar 2 V, mudah panas, ukurannya besarRobot hobi, motor 6–12 V
TB6612FNGKecil, efisien (MOSFET), kompatibel 3,3 V1,2 A kontinu, maks. 13,5 VRobot kecil bertenaga baterai
L9110SSangat kecil dan murahSekitar 800 mA per channelMotor mini
MOSFET tunggal (seperti IRLZ44N)Sangat efisien, arus tinggiHanya satu arahKipas, pompa, LED strip

Kalau kamu hanya perlu menyalakan dan mematikan motor, relay sudah cukup, tetapi relay tidak bisa mengatur kecepatan; keduanya kami bandingkan di Apa Itu Modul Relay? Untuk memilih transistor atau MOSFET yang cocok, lihat alat Transistor.

Ide proyek dengan L298N

  • Robot penghindar rintangan: mobil yang melihat rintangan dengan HC-SR04 lalu mengubah arah.
  • Mobil yang dikendalikan Bluetooth: robot yang diarahkan lewat HC-05 dengan aplikasi di ponselmu.
  • Mobil yang dikendalikan joystick: ubah dua sumbu joystick menjadi kecepatan dua motor; detailnya di Cara Memakai Modul Joystick.
  • Robot pengikut garis: mobil yang mengikuti garis hitam di lantai dengan sensor inframerah.
  • Gorden otomatis: sistem bermotor yang membuka gorden ketika cahaya pagi datang dan menutupnya di sore hari.
  • Ban berjalan: konveyor kecil yang kecepatannya kamu atur dengan potensiometer.

Kesalahan umum dan cara mengatasinya

  • LED board menyala tapi motor tidak berputar: ground-nya tidak disatukan, jumper ENA sudah dilepas tetapi pinnya tidak dihubungkan, atau nilai PWM terlalu rendah.
  • Arduino reset ketika motor berputar: motor dan Arduino berbagi catu daya yang lemah; beri daya secara terpisah dan solder kapasitor 100 nF di terminal motor.
  • Motor sangat lambat dan lemah: L298N “memakan” sekitar 2 V; naikkan tegangan baterai (misalnya 2 × 18650) atau pakai driver yang lebih efisien.
  • Motor hanya berputar ke satu arah: salah satu pin IN tidak terhubung, atau kodenya menulis nilai yang sama untuk kedua arah.
  • L298N sangat panas: motor menarik arus terlalu besar; pastikan heatsink-nya tidak tertutup, dan pilih driver yang lebih kuat jika perlu.
  • Memakai baterai kotak 9 V (PP3): baterai ini tidak sanggup memberi arus besar dan cepat habis; pakai paket 18650 atau AA yang bisa dicas.

Begitu kamu menguasai kendali motor dengan L298N, pintu menuju proyek robot pun terbuka. Di aplikasi BlueGrays kamu akan menemukan proyek mobil L298N yang dikendalikan Bluetooth dan robot penghindar rintangan langkah demi langkah lengkap dengan skema rangkaian dan kode.

Pertanyaan umum

Berapa banyak motor yang bisa dikendalikan L298N?

Karena L298N berisi dua H-bridge, modul ini bisa mengendalikan dua motor DC secara terpisah, maju dan mundur serta dengan kecepatan berbeda. Dengan memakai kedua channel bersamaan, L298N juga bisa mengendalikan satu motor stepper bipolar.

Apa fungsi jumper 5V di L298N?

Ketika jumper terpasang, regulator di board membuat 5 V dari catu daya motor untuk memberi daya ke chip; 5 V itu juga bisa kamu pakai untuk memberi daya ke Arduino. Kalau catu daya motor di atas 12 V, regulator bisa terlalu panas, jadi lepas jumper dan beri 5 V terpisah ke pin 5V.

Baterai apa yang sebaiknya dihubungkan ke L298N?

Untuk motor kecil 6–9 V, 2 × sel litium 18650 (7,4 V) atau 6 baterai AA (9 V) adalah pilihan yang bagus. Karena L298N kehilangan sekitar 2 V, pilih catu daya yang sedikit di atas tegangan nominal motor. Baterai kotak 9 V (PP3) tidak sanggup memberi arus yang cukup untuk menggerakkan motor.

Kenapa jumper ENA harus dilepas?

Kalau jumper di ENA terpasang, motor selalu berputar dengan kecepatan penuh. Untuk mengatur kecepatan, lepas jumper dan hubungkan pin ENA ke salah satu pin PWM Arduino; setelah itu kamu bisa mengatur kecepatan dari 0 sampai 255 dengan analogWrite.

Kenapa motorku tidak mau berputar di kecepatan rendah?

Motor butuh tegangan minimum tertentu untuk mengatasi gesekan dan mulai bergerak, dan penurunan tegangan L298N membuatnya makin sulit. Biasanya, ketika nilai PWM turun di bawah 80–120, motor hanya berdengung. Tetapkan kecepatan minimum di kodemu atau pakai catu daya bertegangan lebih tinggi.

Apakah L298N bisa dipakai dengan ESP32 dan Raspberry Pi Pico?

Bisa. Pin input L298N mengenali sinyal 3,3 V sebagai HIGH, jadi bisa dihubungkan langsung ke ESP32 dan Pico. Sisi logika board tetap harus diberi daya 5 V, dan semua ground harus disatukan.

Lihat semua proyek
Mobil Kendali Bluetooth dengan L298N
#80Mahir
Premium

Mobil Kendali Bluetooth dengan L298N

Jadikan ponselmu remote dan kendarai mobil robotmu sendiri. Arduino menerima perintah dari aplikasi remote control di ponselmu lewat modul Bluetooth dan memutar roda dengan driver motor; mobil maju, m

5.0(38)
65
Robot Penghindar Rintangan
#81Mahir
Premium

Robot Penghindar Rintangan

Bagaimana kalau membuat kendaraan pintar yang mencari jalannya sendiri? Robot Penghindar Rintangan terus memindai sekelilingnya berkat sensor ultrasonik di depannya. Ketika menemui rintangan, robot be

5.0(38)
49
Kendali Servo dengan Joystick
#60Menengah
Premium

Kendali Servo dengan Joystick

Arahkan dua motor dengan joystick, persis seperti memutar kamera keamanan. Dorong tuas ke kiri atau kanan dan servo bawah berputar perlahan, dorong ke atas atau bawah dan servo atas mendongak dan menu

4.7(42)
58
Motor Servo ESP32 (Kendali Potensiometer)
#118Menengah
Premium

Motor Servo ESP32 (Kendali Potensiometer)

Di proyek ini, kita mengendalikan motor servo SG90 memakai potensiometer. Kita mengatur sudut servo dengan memetakan nilai analog yang dibaca dari potensiometer ke rentang 0–180 derajat. Library ESP32Servo menghasilkan sinyal servo di pin GPIO ESP32 yang sesuai dan bisa menjadi output; proyek ini memakai GPIO 18. Ini metode kendali dasar untuk lengan robot, gimbal kamera, dan mekanisme pintu otomatis.

4.3(29)
42
Kendali LED dengan Joystick
#59Menengah
Premium

Kendali LED dengan Joystick

Dorong tuas kecil joystick sampai mentok ke arah mana pun dan LED untuk arah itu menyala: ada empat warna berbeda untuk kanan, kiri, atas, dan bawah. Lepaskan tuasnya, ia kembali ke tengah dan semua L

4.7(50)
67
Sensor Jarak Ultrasonik HC-SR04 ESP32
#116Menengah

Sensor Jarak Ultrasonik HC-SR04 ESP32

Sensor ultrasonik HC-SR04 menghitung jarak dengan mengukur waktu yang dibutuhkan gelombang suara yang dipancarkannya untuk memantul dari benda lalu kembali (Time of Flight). Di proyek ini, kita mengirim pulsa 10 mikrodetik dari ESP32 ke pin TRIG sensor dan membaca durasi pantulan dari pin ECHO dengan pulseIn(). Jarak hasil hitung ditampilkan dalam sentimeter di LCD I2C 16x2. Karena HC-SR04 bekerja di 5V, pembagi tegangan wajib dipasang di pin ECHO.

4.9(28)
45
Sensor Parkir ESP32 (HC-SR04 + Bar 5 LED + Buzzer + OLED)
#142Mahir
Premium

Sensor Parkir ESP32 (HC-SR04 + Bar 5 LED + Buzzer + OLED)

Versi ESP32 dari sensor parkir mobil! Kita memakai sensor ultrasonik HC-SR04 untuk mengukur jarak ke benda di depannya. Semakin dekat jaraknya, bar 5 LED semakin penuh (hijau → kuning → merah) dan jeda bunyi bip buzzer semakin pendek. Ketika benda sudah sangat dekat (di bawah 10 cm), alarm berbunyi terus dan semua LED menyala. Layar OLED SSD1306 menampilkan jarak terkini dalam cm dengan font besar, pesan status (STOP / CAUTION / CLOSE / STOP! / DANGER), dan simulasi bar jarak.

0.0(0)
14
Pengukuran Jarak HC-SR04 (Tampilan Serial)
#27Pemula

Pengukuran Jarak HC-SR04 (Tampilan Serial)

Sensor HC-SR04 bekerja persis seperti kelelawar yang mencari jalan dalam gelap: ia mengirim suara yang tidak bisa kamu dengar, mendengarkan pantulannya, dan mengukur seberapa jauh benda di depannya. A

4.6(46)
71