Motor Shield L293D Arduino: AFMotor, 4 Motor DC, Stepper, dan Servo
Cara memakai motor shield L293D: library AFMotor, jumper PWR, pin yang masih bebas, kode mobil 4WD, motor stepper, servo, batas 0,6 A, dan solusi motor yang tidak mau berputar.
Motor shield L293D adalah board driver motor yang langsung ditancapkan di atas Arduino Uno dan memungkinkanmu menggerakkan 4 motor DC, 2 motor stepper, dan 2 servo dari satu board. Dua chip L293D di atasnya memasok arus yang dibutuhkan motor, membalik arah putarannya, dan mengatur kecepatannya dengan PWM, jadi kamu bisa mengendalikan semua motor mobil robot beroda empat tanpa satu kabel jumper pun. Hampir semua board yang beredar di pasaran adalah tiruan desain lama Adafruit, Motor Shield V1, dan diprogram dengan library yang sama: AFMotor.
Di panduan ini kamu akan belajar apa saja yang ada di shield, pin Arduino mana yang dipakainya dan mana yang tetap bebas untuk sensor, cara kerja jumper PWR yang sering membingungkan dalam tiga susunan catu daya yang berbeda, perintah-perintah library AFMotor, dan kode lengkap mobil robot beroda empat yang kamu kendalikan dari ponsel. Di bagian akhir kami membahas batas arus 0,6 A, kenapa chip-nya panas, perbandingannya dengan L298N, dan semua penyebab “motorku tidak mau berputar” yang sudah diketahui dalam satu tabel.

Apa itu motor shield L293D dan bagaimana cara kerjanya?
Untuk memutar motor DC ke dua arah, kamu butuh rangkaian empat sakelar yang disebut H-bridge; idenya kami jelaskan secara detail di Mengendalikan Motor DC dengan L298N. Chip L293D berisi dua H-bridge, dan karena shield membawa dua chip ini, totalnya kamu dapat empat kanal motor. Huruf “D” di namanya menandakan bahwa dioda proteksi yang meredam lonjakan tegangan balik dari motor ketika dimatikan sudah tertanam di dalam chip. L293D juga mematikan output-nya sendiri ketika terlalu panas.
Trik utama shield ini adalah shift register 74HC595 di tengahnya. Masing-masing dari empat motor butuh dua sinyal untuk arah dan satu untuk kecepatan, jadi totalnya 12 pin Arduino. Shield mengirim delapan sinyal arah secara serial ke 74HC595 dan hanya menghabiskan 4 pin untuk itu (D4, D7, D8, D12), ditambah 4 pin PWM untuk kecepatan (D3, D5, D6, D11). Desain ini menghemat pin, tapi ada harganya: kamu tidak bisa menggerakkan motor langsung dengan digitalWrite; kamu butuh library yang menggeser bit arah ke dalam register. Library itu adalah AFMotor.
| Fitur | Nilai |
|---|---|
| Chip driver | 2 × L293D (total 4 H-bridge) |
| Kontrol arah | Shift register 74HC595 (D4, D7, D8, D12) |
| Tegangan catu motor | 4,5–25 V (terminal daya eksternal) |
| Arus per kanal | 0,6 A kontinu, puncak sangat singkat 1,2 A |
| Kontrol kecepatan | PWM 8-bit, setSpeed(0–255) |
| Motor yang bisa digerakkan | 4 motor DC, 2 stepper, atau 2 DC + 1 stepper |
| Servo | 2, dicatu dari jalur 5 V Arduino (D9 dan D10) |
| Proteksi | Dioda bawaan, pemutusan termal |
| Board yang kompatibel | Arduino Uno R3 dan Mega 2560 (Uno R4 dan Leonardo tidak didukung) |
Apa saja yang ada di board? Terminal, header, dan jumper
| Bagian | Fungsinya |
|---|---|
| Blok terminal M1 dan M2 (kiri) | Motor DC 1 dan 2; sekrup GND di tengah untuk kabel common motor stepper unipolar |
| Blok terminal M3 dan M4 (kanan) | Motor DC 3 dan 4, atau port stepper 2 |
| EXT_PWR (+M dan GND) | Input daya motor: battery pack atau adaptor |
| Jumper PWR | Jika terpasang, menghubungkan catu motor ke jalur Vin Arduino |
| SER1 dan SERVO_2 | Dua header servo (−, +, S); D10 dan D9 |
| LED PWR | Menunjukkan ada tidaknya daya motor; kalau mati, motor tidak akan berputar |
| Tombol RESET | Salinan tombol reset Arduino di atas shield |
| Baris A0–A5 | Pin analog yang bebas; di kebanyakan board ada juga baris +5V dan GND di sebelahnya |
Pin mana yang dipakai shield dan mana yang tetap bebas?
| Pin Arduino | Tugas di shield | Kapan terpakai? |
|---|---|---|
| D3 | Kecepatan M2 (PWM, Timer2) | Ketika M2 atau stepper 1 dipakai |
| D4 | Clock 74HC595 (CLK) | Ketika motor DC atau stepper mana pun dipakai |
| D5 | Kecepatan M4 (PWM, Timer0) | Ketika M4 atau stepper 2 dipakai |
| D6 | Kecepatan M3 (PWM, Timer0) | Ketika M3 atau stepper 2 dipakai |
| D7 | Output enable 74HC595 (EN) | Ketika motor mana pun dipakai |
| D8 | Input data 74HC595 (DATA) | Ketika motor mana pun dipakai |
| D9 | Sinyal SERVO_2 (Timer1) | Hanya ketika servo itu dipakai |
| D10 | Sinyal SER1 (Timer1) | Hanya ketika servo itu dipakai |
| D11 | Kecepatan M1 (PWM, Timer2) | Ketika M1 atau stepper 1 dipakai |
| D12 | Latch 74HC595 (LATCH) | Ketika motor mana pun dipakai |
| D0, D1 | Tidak dipakai (jalur serial USB) | Selama upload dan selama Serial Monitor terbuka |
| D2 | Tidak dipakai; ada pad solder kecil di board | Tidak pernah |
| D13 | Tidak dipakai, tapi tidak dikeluarkan ke atas shield | Tidak pernah |
| A0–A5 (D14–D19) | Tidak dipakai; dikeluarkan dalam satu baris di tepi board | Tidak pernah |
Enam pin analog yang bebas sudah lebih dari cukup untuk sensor, karena A0–A5 di Uno juga bisa berfungsi sebagai pin digital 14–19 kalau perlu. Contoh susunan yang praktis: sensor jarak HC-SR04 atau modul Bluetooth lewat SoftwareSerial di A0 dan A1, sensor garis atau sensor rintangan di A2 dan A3, dan bus I2C (OLED, LCD, MPU6050) di A4 dan A5. Untuk encoder roda atau tombol yang memakai attachInterrupt(), D2 adalah satu-satunya pin yang bebas; pin interrupt Uno yang lain, D3, adalah pin kecepatan M2. Kalau kamu tidak memakai servo, D9 dan D10 juga bebas. Susunan board-mu bisa kamu lihat di alat Pinout, dan kemampuan setiap pin di Pinout Arduino Uno.
Daya dan jumper PWR: tiga cara pengkabelan yang benar
Terminal EXT_PWR dua sekrup di tepi bawah board adalah input daya untuk motor; sisi positifnya biasanya bertanda “+M” atau “+”, dan sisi negatifnya “GND”. Jumper PWR tepat di sebelahnya menghubungkan jalur motor ini ke pin Vin Arduino. Dengan jumper terpasang, kedua board berjalan dari satu sumber: tegangan yang kamu masukkan ke EXT_PWR juga mencatu Arduino lewat Vin, atau adaptor yang dicolokkan ke jack DC Arduino juga mencatu motor. Dengan jumper dilepas, kedua jalur benar-benar terpisah. LED PWR di board hanya menyala kalau ada daya motor; itulah hal pertama yang perlu dicek sebelum kamu mulai mencari masalah pada motor.
| Susunan | Daya Arduino | Daya motor | Jumper PWR |
|---|---|---|---|
| Satu sumber (baterai atau adaptor 7–12 V) | Sumber yang sama, lewat Vin | EXT_PWR atau jack DC Arduino | Terpasang |
| Arduino dari USB, motor dari baterai | Kabel USB | EXT_PWR | Dilepas |
| Dua sumber terpisah (paling aman) | Jack DC atau USB | EXT_PWR | Dilepas |
Pilihan paling umum untuk mobil robot adalah satu sumber: kamu menyambungkan battery pack berisi dua sel 18650 ke EXT_PWR, memasang jumper, dan Arduino serta motor sama-sama berjalan dari baterai yang sama. Caranya sederhana, tapi ketika motor menarik arus besar waktu mulai berputar, tegangan baterai bisa turun sekejap dan Arduino bisa reset. Kalau itu terjadi, melepas jumper dan mencatu Arduino dari sumber terpisah (power bank, USB, atau adaptor 9 V) menyelesaikannya untuk seterusnya. Di meja kerja, susunan kedua adalah yang paling praktis: Arduino tetap tersambung ke komputermu, motor berjalan dari baterai, dan jumper dilepas.
Baterai mana yang sebaiknya dipilih? Tergantung arusnya, transistor output L293D “menelan” sekitar 1,5–2,6 V, jadi motor menerima tegangan sebanyak itu lebih rendah dari tegangan baterai. Untuk motor TT kuning 3–6 V di kit robot, dua sel lithium 18650 (nominal 7,4 V, 8,4 V ketika penuh) adalah pilihan ideal: motor mendapat sekitar 5,5–6 V, dan dengan jumper terpasang regulator Arduino juga nyaman. Empat baterai AA (6 V) hanya menyisakan sekitar 4 V untuk motor dan tidak cukup untuk mencatu Arduino lewat Vin. Baterai kotak 9 V (PP3) tidak bisa memberi lebih dari beberapa ratus miliampere; motor tidak berputar sama sekali atau baterainya habis dalam hitungan menit. Lama pemakaian bisa kamu perkirakan dengan kalkulator umur baterai, dan semua pilihan catu daya bisa kamu baca di Cara Memberi Daya ke Arduino.
Menginstal library AFMotor
- Buka Library Manager di Arduino IDE (Tools > Manage Libraries atau Ctrl+Shift+I).
- Ketik Adafruit Motor Shield di kotak pencarian. Akan muncul dua hasil: Adafruit Motor Shield library, yang deskripsinya menyebut “V1 firmware”, dan Adafruit Motor Shield V2 Library.
- Untuk shield L293D, instal yang V1. Library V2 untuk board yang sama sekali berbeda, yang berkomunikasi lewat I2C dan memakai chip TB6612.
- Tambahkan baris #include <AFMotor.h> di bagian atas sketch-mu.
- Kalau mau, buka File > Examples > Adafruit Motor Shield library > MotorTest dan uji board dengan satu motor di M1.
Sketch pertama: memutar motor DC maju, mundur, dan dengan kecepatan berbeda
Kencangkan dua kabel motor ke dua sekrup terluar terminal M1 dan biarkan sekrup GND di tengah kosong. Sambungkan battery pack ke EXT_PWR, colokkan Arduino ke komputermu lewat USB, dan lepas jumper PWR (susunan kedua di atas). Kalau LED PWR menyala, upload kode di bawah: motor mula-mula berakselerasi lalu melambat dengan halus, kemudian berputar mundur selama dua detik dan berhenti.
1#include <AFMotor.h> // Adafruit Motor Shield V1 kütüphanesi / library
2
3AF_DCMotor motor(1); // M1 klemensi / M1 terminal
4
5void setup() {
6 Serial.begin(9600);
7 Serial.println(F("L293D motor testi / motor test"));
8 motor.setSpeed(200); // 0–255; bunu unutursan motor dönmez / skip this and the motor won't turn
9 motor.run(RELEASE); // başlangıçta dur / start stopped
10}
11
12void loop() {
13 motor.run(FORWARD); // ileri / forward
14 for (int s = 60; s <= 255; s++) { // yavaşça hızlan / ramp up
15 motor.setSpeed(s);
16 delay(10);
17 }
18 for (int s = 255; s >= 60; s--) { // yavaşça yavaşla / ramp down
19 motor.setSpeed(s);
20 delay(10);
21 }
22 motor.run(RELEASE); // dur / stop
23 delay(500);
24
25 motor.setSpeed(180);
26 motor.run(BACKWARD); // geri / backward
27 delay(2000);
28 motor.run(RELEASE);
29 delay(1000);
30}| Perintah | Fungsinya |
|---|---|
| AF_DCMotor motor(1); | Membuat motor di terminal M1; menerima angka 1 sampai 4 |
| AF_DCMotor motor(1, MOTOR12_64KHZ); | Sekaligus memilih frekuensi PWM untuk M1 dan M2 |
| motor.setSpeed(200); | Mengatur kecepatan dari 0 sampai 255 (0 berhenti, 255 kecepatan penuh) |
| motor.run(FORWARD); | Berputar maju |
| motor.run(BACKWARD); | Berputar mundur |
| motor.run(RELEASE); | Berhenti menggerakkan motor; motor berhenti |
| motor.run(BRAKE); | Didefinisikan di library, tapi tidak melakukan apa-apa di V1 |
Kecepatan diatur dengan menyalakan dan mematikan daya motor ribuan kali per detik; detailnya ada di Apa Itu PWM?. Karena M1 dan M2 memakai Timer2, frekuensinya bisa kamu pilih: MOTOR12_64KHZ, MOTOR12_8KHZ (default), MOTOR12_2KHZ, dan MOTOR12_1KHZ. Dengan 64 kHz, dengingan motor tidak terdengar lagi, tapi L293D jadi lebih panas pada frekuensi itu. Sebaliknya, M3 dan M4 terikat ke Timer0; karena timer itu juga menjalankan millis() dan delay(), library tidak mengubah frekuensinya, dan kedua kanal ini selalu berjalan di sekitar 1 kHz.
Kode mobil robot empat roda (4WD)

Pemakaian favorit motor shield L293D adalah mobil robot empat roda, karena masing-masing dari empat motor mendapat terminalnya sendiri dan tidak ada kabel yang semrawut. Mobil seperti ini tidak punya kemudi; ia berbelok seperti tank: kalau dua roda kiri berputar ke satu arah dan dua roda kanan ke arah sebaliknya, mobil berputar di tempat. Karena itu kode tidak mengendalikan motor satu per satu, melainkan sebagai dua kelompok, sisi kiri dan sisi kanan. Untuk kendali dari ponsel, kita menyambungkan modul Bluetooth HC-05 ke pin A0 dan A1 yang bebas dengan SoftwareSerial; modul ini dibahas secara detail di Modul Bluetooth HC-05.
| Bagian | Sambungan |
|---|---|
| Motor kiri depan | M1 |
| Motor kiri belakang | M2 |
| Motor kanan belakang | M3 |
| Motor kanan depan | M4 |
| TXD HC-05 | A0 (RX SoftwareSerial) |
| RXD HC-05 | A1, lewat pembagi tegangan 1 kΩ + 2 kΩ (5 V → 3,3 V) |
| VCC dan GND HC-05 | Baris +5V dan GND di shield |
| 2 × sel 18650 (7,4 V) | EXT_PWR (+M dan GND), jumper PWR terpasang |
1#include <AFMotor.h>
2#include <SoftwareSerial.h>
3
4AF_DCMotor frontLeft(1); // M1: sol ön / front left
5AF_DCMotor rearLeft(2); // M2: sol arka / rear left
6AF_DCMotor rearRight(3); // M3: sağ arka / rear right
7AF_DCMotor frontRight(4); // M4: sağ ön / front right
8
9SoftwareSerial bt(A0, A1); // RX = A0 (HC-05 TXD), TX = A1 (HC-05 RXD, bölücüyle / via a divider)
10
11int speed = 200; // 0–255 arası sürüş hızı / driving speed 0–255
12
13void setSide(AF_DCMotor &a, AF_DCMotor &b, int value) { // -255 … 255
14 uint8_t dir = value > 0 ? FORWARD : (value < 0 ? BACKWARD : RELEASE);
15 uint8_t pwm = constrain(abs(value), 0, 255);
16 a.setSpeed(pwm);
17 b.setSpeed(pwm);
18 a.run(dir);
19 b.run(dir);
20}
21
22void drive(int left, int right) { // sol ve sağ taraf / left and right side
23 setSide(frontLeft, rearLeft, left);
24 setSide(frontRight, rearRight, right);
25}
26
27void setup() {
28 Serial.begin(9600); // hata ayıklama / debugging
29 bt.begin(9600); // HC-05 varsayılan hızı / default baud rate
30 drive(0, 0);
31}
32
33void loop() {
34 if (!bt.available()) return;
35 char c = bt.read();
36 Serial.println(c);
37
38 switch (c) {
39 case 'F': drive(speed, speed); break; // ileri / forward
40 case 'B': drive(-speed, -speed); break; // geri / backward
41 case 'L': drive(-speed, speed); break; // yerinde sola / spin left
42 case 'R': drive(speed, -speed); break; // yerinde sağa / spin right
43 case 'G': drive(speed / 3, speed); break; // ileri-sola kavis / curve forward-left
44 case 'I': drive(speed, speed / 3); break; // ileri-sağa kavis / curve forward-right
45 case 'S': drive(0, 0); break; // dur / stop
46 case 'q': speed = 255; break; // tam hız / full speed
47 default:
48 if (c >= '0' && c <= '9') speed = map(c - '0', 0, 9, 90, 240); // hız kademesi / speed step
49 }
50}Inti kodenya adalah fungsi drive(left, right): fungsi ini menerima nilai -255 sampai 255 untuk tiap sisi, dengan positif berarti maju, negatif berarti mundur, dan nol berarti berhenti. setSide() memberi kedua motor di satu sisi kecepatan dan arah yang sama. Perintahnya berupa huruf tunggal yang dikirim aplikasi bergaya “Arduino Bluetooth RC Car” dari toko aplikasi: F maju, B mundur, L dan R berputar di tempat, G dan I berbelok melengkung, S berhenti. Slider kecepatan di aplikasi mengirim angka 0 sampai 9; kode mengubahnya menjadi nilai PWM antara 90 dan 240, dan karena batas bawahnya 90, motor tetap bisa mulai berputar di pengaturan terendah. Kalau ada roda yang berputar ke arah yang salah, jangan ubah kodenya; tukar dua kabel motor itu di terminalnya. Untuk perakitan sasis dan versi dua motor, lihat Cara Membuat Mobil Robot Arduino.
Menggerakkan motor stepper: 28BYJ-48 dan NEMA 17
Shield bisa menggerakkan dua stepper sekaligus: port stepper 1 memakai terminal M1 dan M2, dan port 2 memakai M3 dan M4. Dengan motor bipolar (4 kabel, seperti NEMA 17), satu kumparan disambungkan ke M1 dan kumparan lainnya ke M2. Dengan motor unipolar (5 atau 6 kabel), kedua kumparan juga masuk ke M1 dan M2, dan kabel common-nya ke sekrup GND di tengah blok terminal. Untuk 28BYJ-48 yang populer, pengkabelannya: kabel biru dan kuning ke M1, kabel pink dan oranye ke M2, dan kabel common merah ke GND. Memakai motor ini dengan board ULN2003 dibahas di Apa Itu Motor Stepper?.
| Gaya langkah | Cara kerjanya | Kapan dipakai |
|---|---|---|
| SINGLE | Satu kumparan dialiri arus pada satu waktu | Arus paling kecil, torsi paling rendah |
| DOUBLE | Dua kumparan dialiri arus bersamaan | Torsi lebih besar; pilihan paling umum |
| INTERLEAVE | Bergantian antara satu dan dua kumparan (half-step) | Resolusi dua kali lipat, putaran lebih halus |
| MICROSTEP | Arus kumparan berubah bertahap dengan PWM; setiap langkah penuh dibagi menjadi 16 | Putaran pelan dan senyap; torsi turun |
28BYJ-48 adalah motor 5 V; untuk uji ini, catu motornya dari 4 baterai AA (6 V), lepas jumper, dan jalankan Arduino dari USB. Karena ada gearbox di dalam motor, satu putaran sama dengan 2048 langkah penuh:
1#include <AFMotor.h>
2
3// 28BYJ-48: tam adımda tur başına 2048 adım / 2048 full steps per revolution
4AF_Stepper stepper(2048, 1); // 1 = M1 + M2, 2 = M3 + M4
5
6void setup() {
7 stepper.setSpeed(10); // dakikada 10 tur / 10 RPM
8}
9
10void loop() {
11 stepper.step(2048, FORWARD, DOUBLE); // bir tur ileri, güçlü tork / one turn forward, more torque
12 delay(500);
13 stepper.step(4096, BACKWARD, INTERLEAVE); // yarım adımla bir tur geri / one turn back in half steps
14 stepper.release(); // bobinleri kapat, ısınmasın / de-energise the coils
15 delay(1000);
16}setSpeed() mengatur jumlah putaran per menit; karena gearbox-nya, 28BYJ-48 tidak bisa berputar lebih cepat dari sekitar 10–15 RPM. Yang perlu diwaspadai adalah step() bersifat blocking: sampai motor menyelesaikan langkah yang diminta, loop() tidak melakukan apa pun. Kalau kamu ingin membaca sensor atau menggerakkan motor DC selagi stepper berputar, pakai fungsi onestep() dari library ini bersama library AccelStepper; contoh AFMotor_ConstantSpeed yang ikut dengan library menunjukkan persis hal itu. Memanggil release() ketika motor sedang menunggu akan mematikan kumparan dan mencegah panas, tapi selama itu porosnya kehilangan torsi penahan.
Menyambungkan servo: header SER1 dan SERVO_2
Dua header tiga pin di sudut shield adalah untuk servo. Menurut tanda di board, pin-pinnya adalah − (GND), + (5 V), dan S (sinyal): kabel cokelat servo ke −, yang merah ke +, dan yang oranye ke S. Menurut skema rangkaian board, header SER1 tersambung ke D10 dan header SERVO_2 ke D9 (beberapa sumber menulis nomornya terbalik; kalau servo tidak bergerak, coba pin yang satunya di kode). Servo digerakkan dengan library Servo standar, dan Timer1 yang dipakainya di Uno tidak bentrok dengan timer motor, jadi motor DC dan servo bisa bekerja bersamaan tanpa masalah.
Servo tidak dicatu dari baterai motor, melainkan dari jalur 5 V Arduino. Itu tidak masalah untuk SG90, tapi servo besar seperti MG996R bisa menarik lebih dari 1 A ketika bergerak; regulator Arduino jadi panas, tegangannya anjlok, dan board reset. Dengan servo besar, colokkan hanya kabel sinyalnya ke header, catu + dan − servo dari sumber 5–6 V terpisah, dan satukan ground-nya. Detailnya ada di Servo MG996R dengan Arduino dan Apa Itu Motor Servo?. Kode di bawah menggerakkan servo di SER1 ke kiri dan ke kanan selagi motor di M3 berputar:
1#include <AFMotor.h>
2#include <Servo.h>
3
4AF_DCMotor motor(3); // M3 klemensi / M3 terminal
5Servo servo1; // SER1 başlığı / SER1 header
6
7void setup() {
8 servo1.attach(10); // SER1 = D10, SERVO_2 = D9
9 motor.setSpeed(170);
10 motor.run(FORWARD); // motor dönerken servo tarar / servo sweeps while the motor runs
11}
12
13void loop() {
14 for (int a = 20; a <= 160; a += 2) { // sağa tara / sweep right
15 servo1.write(a);
16 delay(15);
17 }
18 for (int a = 160; a >= 20; a -= 2) { // sola tara / sweep left
19 servo1.write(a);
20 delay(15);
21 }
22}Batas arus (0,6 A) dan panas
Baris terpenting di datasheet L293D adalah 0,6 A kontinu dan puncak 1,2 A per kanal. Nilai puncak hanya untuk pulsa yang sangat singkat; kalau sebuah motor menarik 1 A selama beberapa detik, chip-nya kewalahan. Hitungan sederhana menunjukkan kenapa chip ini panas: L293D adalah driver model lama dengan transistor bipolar, dan pada 0,6 A biasanya ada jatuh tegangan 1,4 V di transistor atas dan 1,2 V di transistor bawah. Jadi ketika motor menarik 0,6 A, 0,6 A × 2,6 V ≈ 1,6 W panas dihasilkan di dalam chip; dua motor di chip yang sama menghasilkan dua kali lipatnya, sekitar 3 W. Chip DIP kecil tanpa heatsink tidak bisa membuang panas sebanyak itu, suhunya naik cepat, dan akhirnya pemutusan termal mematikan output-nya. Gejalanya sudah akrab: motor berjalan sebentar, berhenti, lalu jalan lagi begitu chip-nya dingin.
Motor TT kuning menarik sekitar 150 mA tanpa beban dan 200–300 mA ketika melaju di lantai, masih dalam batas shield. Masalahnya ada di momen ketika roda mendorong rintangan atau mobil berputar di tempat: motor TT yang macet bisa menarik 1–1,5 A, dan di mobil 4WD keempat motor bekerja keras bersamaan ketika berputar di tempat. Untuk mengetahui arus motormu yang sebenarnya, sambungkan multimeter secara seri dengan motor dan ukur sambil menahan roda sebentar dengan tangan; caranya ada di Cara Memakai Multimeter. Agar shield tetap dingin:
- Pakai soft start: Jangan langsung lompat dari 0 ke 255; naikkan kecepatan bertahap selama 200–300 ms, dan arus awal turun cukup banyak.
- Jangan biarkan motor macet: Di robot penghindar rintangan, hentikan mobil sebelum menabrak rintangan; motor yang macet menghasilkan panas paling banyak.
- Tempelkan heatsink di chip: Heatsink aluminium kecil dengan thermal tape sedikit menurunkan suhu L293D.
- Solder L293D kedua di atasnya: Adafruit juga mencatat bahwa kamu bisa menumpuk L293D kedua tepat di atas chip yang ada, kaki ke kaki, untuk menambah kapasitas arus; kedua chip berbagi arus.
- Jangan pakai tegangan lebih dari yang dibutuhkan: Memberi 12 V ke motor 6 V menaikkan arus sekaligus panasnya.
- Ganti ke driver yang tepat: Kalau motormu terus-menerus menarik lebih dari 0,6 A, pakai driver berbasis L298N atau TB6612FNG.
Motor shield L293D atau L298N?

| Fitur | Motor shield L293D | Modul L298N |
|---|---|---|
| Jumlah motor | 4 DC, atau 2 stepper + 2 servo | 2 DC atau 1 stepper |
| Arus per kanal | 0,6 A kontinu, puncak 1,2 A | 2 A kontinu, puncak 3 A |
| Tegangan motor | 4,5–25 V | 5–35 V |
| Jatuh tegangan | Sekitar 1,5–2,6 V | Sekitar 2–3 V |
| Sambungan | Ditancapkan ke Uno, tanpa kabel | Kabel jumper; pin-nya kamu pilih sendiri |
| Pin yang dipakai | 8 pin tetap + D9 dan D10 untuk servo | 6 pin (ENA, IN1–IN4, ENB) |
| Library | Wajib AFMotor | Tidak perlu (digitalWrite, analogWrite) |
| ESP32 dan Pico | Tidak cocok | Langsung bisa |
| Paling cocok untuk | Mobil 4WD dengan motor TT, kit belajar | Motor yang lebih kuat, robot 2WD |
Singkatnya, kalau kamu membuat mobil 4WD dengan motor TT di Arduino Uno, shield L293D membuat pengkabelan seminimal mungkin dan menaruh keempat motor di satu board. Kalau motormu lebih kuat, board-mu ESP32 atau Pico, atau kamu ingin bebas memilih pin, L298N lebih fleksibel; detailnya ada di Mengendalikan Motor DC dengan L298N. Kalau kamu ingin yang lebih efisien dari keduanya, TB6612FNG berbasis MOSFET punya jatuh tegangan yang sangat rendah dan membuat baterai lebih awet. Jenis motor mana yang cocok untuk pekerjaan apa kami bandingkan di Motor DC vs Servo vs Stepper.
Bisakah dipakai dengan ESP32, Raspberry Pi Pico, atau Mega?
Shield ini bekerja dengan baik di Arduino Mega 2560: shield duduk di pin digital dan analog pertama Mega, dan AFMotor mengenali timer Mega. Shield ini tidak bisa dipakai dengan Uno R4, Leonardo, ESP32, atau Raspberry Pi Pico, karena AFMotor menulis langsung ke register timer ATmega328P dan ATmega2560. Kalau ESP32 dipilih, kompilasi berhenti dengan 'DC_MOTOR_PWM_RATE' was not declared in this scope, dan kalau Leonardo dipilih, berhenti dengan #error "This chip is not supported!". Board ESP32 berbentuk Uno (seperti ESPDuino-32) secara fisik muat di shield, tapi nomor pin dan level sinyal 3,3 V-nya berbeda. Di board-board ini jauh lebih mudah memakai L298N, TB6612FNG, atau satu chip L293D saja sebagai ganti shield. Input L293D menganggap apa pun di atas 2,3 V sebagai HIGH, jadi chip ini langsung bisa dipakai dengan board 3,3 V:
| Pin L293D | Fungsi | Raspberry Pi Pico | ESP32 |
|---|---|---|---|
| 1 (1,2EN) | Kecepatan (PWM) | GP15 | GPIO 25 |
| 2 (1A) | Arah 1 | GP14 | GPIO 26 |
| 7 (2A) | Arah 2 | GP13 | GPIO 27 |
| 3 dan 6 (1Y, 2Y) | Terminal motor | Ke motor | Ke motor |
| 4, 5, 12, 13 | GND (panas juga keluar lewat pin-pin ini) | GND | GND |
| 16 (VCC1) | Catu logika, 5 V | VBUS (pin 40) | 5V (VIN) |
| 8 (VCC2) | Catu motor | Positif baterai | Positif baterai |
1from machine import Pin, PWM
2import time
3
4en = PWM(Pin(15)) # L293D pin 1 (1,2EN): hız / speed
5en.freq(1000)
6in1 = Pin(14, Pin.OUT) # L293D pin 2 (1A): yön / direction
7in2 = Pin(13, Pin.OUT) # L293D pin 7 (2A): yön / direction
8
9def motor(speed): # -100 … 100
10 in1.value(1 if speed > 0 else 0)
11 in2.value(1 if speed < 0 else 0)
12 en.duty_u16(int(abs(speed) * 655.35))
13
14while True:
15 motor(80) # ileri / forward
16 time.sleep(2)
17 motor(0) # dur / stop
18 time.sleep(0.5)
19 motor(-60) # geri / backward
20 time.sleep(2)
21 motor(0)
22 time.sleep(0.5)Ground Pico dan baterai harus disambungkan. Di ESP32 kamu membuat logika yang sama dalam bahasa Arduino: arah dengan digitalWrite dan kecepatan dengan analogWrite di pin-pin pada tabel. Kalau board-board ini masih baru buatmu, mulailah dari Apa Itu ESP32? dan Apa Itu Raspberry Pi Pico?.
Motor tidak berputar: kesalahan umum dan solusinya
| Gejala | Kemungkinan penyebab | Solusi |
|---|---|---|
| Tidak ada motor yang berputar, LED PWR mati | Tidak ada daya motor: EXT_PWR kosong atau hanya USB yang tersambung | Sambungkan baterai 6–12 V ke EXT_PWR; motor tidak akan berputar sampai LED menyala |
| LED menyala, kode sudah di-upload, tapi motor tidak bergerak | Tidak ada setSpeed() di kode, atau nomor motor tidak cocok dengan terminal | Tambahkan setSpeed(200) di setup(); cek bahwa AF_DCMotor(1) cocok dengan M1 |
| Motor mendengung tapi tidak berputar | Nilai PWM terlalu rendah atau baterai lemah | Mulai di atas 100; isi ulang baterai atau pakai dua sel 18650 |
| “AFMotor.h: No such file or directory” | Library belum terinstal, atau yang terinstal malah V2 | Instal Adafruit Motor Shield library V1 dari Library Manager |
| “This chip is not supported!” atau error “DC_MOTOR_PWM_RATE” | Uno R4, Leonardo, atau ESP32 dipilih sebagai board | Pilih Uno atau Mega di Tools > Board |
| Arduino reset ketika motor mulai berputar | Arus awal menarik turun tegangan baterai (brownout) | Lepas jumper dan catu Arduino secara terpisah; solder kapasitor 100 nF di antara terminal motor |
| Motor berjalan sebentar lalu berhenti, chip sangat panas | Pemutusan termal L293D sudah aktif | Kurangi beban, pakai soft start, tambahkan heatsink, atau pindah ke L298N |
| Motor berganti arah secara acak | D4, D7, D8, atau D12 dipakai untuk keperluan lain di kode | Pindahkan sensormu ke A0–A5 |
| Kecepatan M1 dan M2 tidak berubah, M3 dan M4 normal | tone() atau IRremote sedang memakai Timer2 | Pindahkan motor-motor ini ke M3 dan M4 atau hapus kode yang bentrok |
| Satu roda berputar mundur | Kabel motor terbalik di terminal | Tukar dua kabel motor itu |
| Board berperilaku aneh begitu shield dipasang | Soket USB Uno menyentuh titik solderan di bawah shield, atau ada pin yang bengkok | Tempelkan isolasi listrik di atas soket USB, luruskan pin, lalu pasang ulang shield |
Ide proyek dengan motor shield L293D
- Mobil 4WD kendali Bluetooth: Robot penggerak empat roda yang kamu kendalikan dari ponsel dengan kode di atas.
- Robot penghindar rintangan: Mobil yang memindai bagian depannya dengan HC-SR04 yang dipasang di servo SER1 lalu berbelok ke arah yang paling lapang; panduan lengkapnya ada di Robot Penghindar Rintangan dengan Arduino.
- Robot pengikut garis: Ikuti garis hitam di lantai dengan sensor inframerah di A0–A3; tuning PID dibahas di Robot Pengikut Garis dengan Arduino.
- Slider kamera: Gerakkan kamera pelan-pelan di sepanjang rel dengan motor stepper dan rekam video time-lapse.
- Kepala pan-tilt: Colokkan dua servo ke dua header servo dan arahkan kamera atau laser di dua sumbu; untuk servo yang lebih banyak, lihat Lengan Robot Arduino.
- Gorden otomatis atau ban berjalan: Buka dan tutup gorden dengan motor DC tergantung cahaya, atau buat ban berjalan (conveyor) kecil.
Ringkasan memakai motor shield L293D dengan benar: instal library V1, cek LED PWR, atur jumper sesuai susunan catu dayamu, jangan lupa setSpeed(), sambungkan sensor ke A0–A5, dan jaga motormu di bawah batas 0,6 A. Ikuti aturan-aturan ini, dan shield kecil ini sanggup menanggung seluruh “otot” robot empat motor sendirian. Di aplikasi BlueGrays kamu akan menemukan proyek mobil kendali Bluetooth, robot penghindar rintangan, motor stepper, dan servo langkah demi langkah, lengkap dengan skema rangkaian dan kodenya.
Pertanyaan umum
Berapa motor yang bisa digerakkan motor shield L293D?
Shield ini bisa menggerakkan 4 motor DC sekaligus, masing-masing secara independen maju, mundur, dan dengan kecepatan berbeda. Sebagai ganti motor DC, kamu juga bisa menyambungkan 2 stepper (pasangan M1–M2 dan M3–M4), atau 2 motor DC ditambah 1 stepper. Selain itu ada dua header servo; servo digerakkan dari D9 dan D10, terpisah dari motor.
Apa fungsi jumper PWR di motor shield L293D?
Dengan jumper terpasang, catu motor shield terhubung ke jalur Vin Arduino dan kedua board berjalan dari satu sumber. Kalau kamu mencatu Arduino dari USB dan motor dari baterai terpisah, jumper harus dilepas. Menyambungkan sumber terpisah ke jack DC dan EXT_PWR sekaligus dengan jumper terpasang membuat kedua catu daya terhubung singkat.
Baterai apa yang sebaiknya dipakai dengan motor shield L293D?
Untuk mobil robot dengan motor TT, pilihan terbaik adalah dua sel lithium 18650 (7,4 V); karena L293D kehilangan sekitar 2 V, motor menerima 5,5–6 V. Empat baterai AA hanya menyisakan sekitar 4 V untuk motor, dan baterai kotak 9 V (PP3) tidak bisa memasok arus yang cukup untuk menggerakkan motor. Perhatikan polaritas ketika menyambungkan baterai ke EXT_PWR, karena terminalnya tidak punya proteksi polaritas terbalik.
Bagaimana cara mengatasi “AFMotor.h: No such file or directory”?
Error ini berarti library AFMotor belum terinstal. Cari Adafruit Motor Shield di Library Manager dan instal Adafruit Motor Shield library yang deskripsinya menyebut V1. Library V2 untuk board lain dan tidak berisi file AFMotor.h.
Berapa arus yang sanggup ditangani motor shield L293D, dan kenapa bisa panas?
Setiap kanal bisa memberi 0,6 A secara kontinu dan 1,2 A untuk puncak yang sangat singkat. Karena transistor L293D menjatuhkan sekitar 2,6 V pada 0,6 A, hampir 1,5 W panas dihasilkan per motor; itulah sebabnya chip-nya panas dan mematikan dirinya sendiri ketika batasnya terlampaui. Pastikan motormu tidak macet, dan pakai driver yang lebih kuat seperti L298N untuk motor yang terus-menerus menarik lebih dari 0,6 A.
Mana yang lebih baik, motor shield L293D atau L298N?
Kalau kamu membuat mobil 4WD dengan motor TT di Arduino Uno, shield L293D lebih praktis karena langsung ditancapkan tanpa kabel dan punya empat kanal motor. Kalau kamu memakai motor yang lebih kuat, ESP32 atau Pico, atau ingin memilih pin sendiri, L298N dengan 2 A per kanal lebih cocok. Keduanya kehilangan sekitar 2 V dari tegangan motor.
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

Menggunakan Motor Stepper
Motor yang berputar selangkah demi selangkah, persis sejauh yang kamu mau, seperti jarum jam. Lewat board driver, Arduino memutar motor stepper kecil satu putaran penuh ke satu arah, menunggu satu det

Servo 360 Derajat dari Motor Stepper
Ajari motor stepper biasa untuk pergi ke sudut mana pun yang kamu mau, satu lingkaran penuh. Arduino menghitung berapa langkah yang dibutuhkan setiap sudut; motor bergerak ke 0, 90, 45, 180, 135, dan

Menggunakan Motor Servo
Lengan motor servo kecil berputar ke tiga posisi bergantian: penuh ke awal, tepat ke tengah, dan penuh ke akhir, menunggu dua detik di setiap perhentian. Arduino memberi tahu motor sudut mana yang har

Menggerakkan Motor Servo dengan Potensiometer
Ketika kamu memutar kenop potensiometer, lengan motor servo ikut berputar: satu ujung kenop berarti nol derajat, ujung lainnya berarti setengah putaran. Arduino terus membaca posisi kenop dan servo la

Kendalikan LED dari Ponselmu lewat Bluetooth
Latihan kecil untuk menyalakan dan mematikan lampu kamarmu dari ponsel. Modul Bluetooth meneruskan huruf yang dikirim dari ponselmu ke Arduino; satu huruf menyalakan LED merah, huruf lain menyalakan L

Deteksi Permukaan Hitam dan Putih TCRT5000
Dengan sensor kecil yang menjadi mata robot pengikut garis, kamu bisa tahu apakah lantainya hitam atau putih. TCRT5000 menyinari lantai dengan cahaya tak terlihat dan mengecek berapa banyak yang terpa
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

