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.

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):
| IN1 | IN2 | ENA | Yang dilakukan motor |
|---|---|---|---|
| HIGH | LOW | HIGH atau PWM | Berputar maju |
| LOW | HIGH | HIGH atau PWM | Berputar mundur |
| HIGH | HIGH | HIGH | Mengerem dan berhenti dengan cepat |
| Bebas | Bebas | LOW | Berputar bebas dan melambat sendiri |
Spesifikasi L298N
| Fitur | Nilai |
|---|---|
| Tegangan catu daya motor | 5–35 V (maks. 12 V dengan jumper 5V terpasang) |
| Arus per channel | 2 A kontinu, puncak 3 A |
| Tegangan logika | 5 V (input juga mengenali sinyal 3,3 V) |
| Penurunan tegangan | Sekitar 1,5–3 V (motor menerima tegangan lebih rendah sebesar itu) |
| Motor yang bisa dikendalikan | 2 motor DC atau 1 motor stepper bipolar |
| Proteksi | Dioda flyback di board |

Pin L298N dan pengkabelan daya
| Pin atau terminal | Fungsi |
|---|---|
| OUT1, OUT2 | Dua kabel motor A |
| OUT3, OUT4 | Dua kabel motor B |
| 12V (VS) | Catu daya motor: kutub positif baterai atau adaptor |
| GND | Ground bersama: kutub negatif baterai dan GND Arduino masuk ke sini |
| 5V | Output 5 V jika jumper 5V terpasang, input catu daya logika jika jumper dilepas |
| ENA, ENB | Input kecepatan (PWM); jika jumper-nya terpasang, motor selalu berputar dengan kecepatan penuh |
| IN1, IN2, IN3, IN4 | Input arah |
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?
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}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:
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:
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, TB6612FNG, atau MOSFET?
| Driver | Kelebihan | Kekurangan | Paling cocok untuk |
|---|---|---|---|
| L298N | Murah, tangguh, 2 A per channel | Hilang sekitar 2 V, mudah panas, ukurannya besar | Robot hobi, motor 6–12 V |
| TB6612FNG | Kecil, efisien (MOSFET), kompatibel 3,3 V | 1,2 A kontinu, maks. 13,5 V | Robot kecil bertenaga baterai |
| L9110S | Sangat kecil dan murah | Sekitar 800 mA per channel | Motor mini |
| MOSFET tunggal (seperti IRLZ44N) | Sangat efisien, arus tinggi | Hanya satu arah | Kipas, 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.
Proyek untuk dibuat setelah membaca ini
Lihat semua proyek
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

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

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

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.

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

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.

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.

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
Artikel lainnya
Aplikasi BlueGrays
Rakit rangkaian ini langkah demi langkah di ponselmu
Skema pengkabelan, kode, dan daftar komponen dalam satu layar. 200+ proyek Arduino, ESP32, dan Pico siap dibuat.
Pindai dengan ponselmu
Arahkan kamera ke kode ini dan toko aplikasi di ponselmu akan terbuka.
atau buka toko aplikasi

