Untuk mengendalikan motor DC, kita tidak dapat menggunakan pin arduino secara langsung, karena ada batasan-batasan yang akan dijelaskan pada artikel dibawah ini. Oleh karena itu, kali ini saya menuliskan tutorial driver motor L293D Arduino untuk Pemula.
Apa yang dimaksud dengan motor DC?
Motor DC atau Motor Direct Current adalah jenis motor listrik yang menggunakan arus searah untuk menggerakkan porosnya. Motor ini banyak digunakan dalam berbagai aplikasi elektronik, seperti robotika, kendaraan listrik, mesin-mesin industri, dan lain sebagainya. Namun, untuk mengendalikan motor DC, diperlukan komponen tambahan yaitu driver motor, salah satunya adalah L293D.
Apa yang dimaksud Driver Motor?
Driver motor adalah sebuah komponen elektronik yang digunakan untuk mengendalikan motor DC. Komponen ini bertugas mengubah sinyal input dari mikrokontroler menjadi sinyal output yang dapat menggerakkan motor DC.
Mengapa kita butuh Driver Motor?
Kita butuh driver motor untuk menggerakkan motor DC karena motor DC membutuhkan arus listrik yang lebih tinggi dari pada yang dapat disediakan oleh mikrokontroler seperti Arduino. Pin digital Arduino board misalnya, hanya mampu menyuplai arus maksimal 20 mA, sedangkan motor DC dapat mencapai 500mA hingga 1A lebih.
Selain itu, motor DC juga memiliki karakteristik bahwa arus listrik yang mengalir ke motor akan meningkat seiring dengan peningkatan beban yang diberikan pada motor. Hal ini dapat menyebabkan motor DC terbakar atau rusak jika arus listrik yang mengalir ke motor terlalu tinggi. Dengan menggunakan driver motor, arus listrik yang mengalir ke motor DC dapat dikendalikan dengan baik dan dijaga dalam batas yang aman untuk motor.
Driver motor juga biasanya dilengkapi dengan proteksi untuk melindungi motor dari kerusakan akibat overcurrent atau overheating. Hal ini dapat meningkatkan masa pakai motor DC dan menjaga keamanan saat menggunakannya.
Bagaimana cara kerja Motor Driver?
Motor driver bekerja dengan mengendalikan arus listrik yang mengalir ke motor DC. Saat sinyal input dari mikrokontroler masuk ke driver motor, driver motor akan mengubah sinyal tersebut menjadi sinyal output yang sesuai dengan arah putaran dan kecepatan yang diinginkan. Sinyal output tersebut akan diteruskan ke motor DC melalui rangkaian H-bridge yang terdapat pada driver motor.
Apa itu rangkaian H-Bridge?
Rangkaian H-Bridge adalah sebuah rangkaian elektronik yang digunakan untuk mengubah arah putaran motor DC. Rangkaian ini terdiri dari empat buah transistor yang disusun dalam bentuk jembatan. Saat transistor-transistor tersebut dinyalakan, arus listrik akan mengalir ke motor DC dalam satu arah. Namun, saat transistor-transistor tersebut dimatikan, arus listrik akan mengalir ke motor DC dalam arah yang berlawanan.
Apa itu Driver Motor L293D?
Deskripsi | L293D PinOut |
Driver Motor L293D adalah salah satu jenis IC driver motor yang digunakan untuk mengendalikan motor DC. Semua teori yang dijelaskan diatas, tersedia didalam IC L293D ini. IC Driver DC Motor ini dapat mengendalikan arah putaran dan kecepatan motor DC dengan mudah. Ada juga IC lain yang sering digunakan sebagai driver motor DC yaitu, L298N. Adapun fitur utama dan tabel perbedaan kedua IC ini dapat anda baca disini. |
Bagaimana prinsip kerja motor driver menggunakan IC L293D?
Prinsip kerja motor driver menggunakan IC L293D didasarkan pada prinsip kerja rangkaian H-bridge. Dimana rangkaian ini digunakan untuk mengendalikan arah dan kecepatan motor DC dengan memutar arah aliran arus pada motor tersebut.
L293D memiliki dua jalur pengontrol H-bridge, yang masing-masing terdiri dari dua buah transistor NPN dan dua buah transistor PNP didalamnya. Transistor NPN digunakan untuk mengalirkan arus positif ke motor DC, sedangkan transistor PNP digunakan untuk mengalirkan arus negatif ke motor DC.
Ketika sinyal input diberikan ke satu jalur pengontrol H-bridge, maka transistor NPN pada jalur tersebut akan terbuka dan mengalirkan arus positif ke motor DC, sementara transistor PNP pada jalur yang sama akan tertutup. Ini akan membuat motor DC berputar ke satu arah.
Ketika sinyal input diberikan ke jalur pengontrol lainnya, maka transistor NPN pada jalur tersebut akan tertutup dan transistor PNP pada jalur yang sama akan terbuka. Ini akan membuat arus mengalir ke motor DC dengan arah yang berlawanan, sehingga membuat motor DC berputar ke arah yang berlawanan.
Dioda Pelindung dari EMF
Dalam menggunakan IC L293D, perlu juga dilengkapi dengan dioda pelindung (protection diode) yang ditempatkan pada bagian kaki motor (dapat anda lihat pada rangkaian dibawah). Dioda ini berfungsi untuk melindungi IC driver motor dari tegangan balik (back EMF) yang muncul saat motor DC berhenti berputar dan arus terputus. Tegangan balik ini dapat merusak transistor pada IC driver motor, sehingga keberadaan dioda pelindung sangat penting untuk melindungi IC driver motor.
Ada beberapa jenis dioda pelindung yang dapat digunakan untuk melindungi IC driver motor dari tegangan balik (back EMF) pada motor DC, di antaranya:
- 1N4001 – Dioda silikon 1A 50V
- 1N4002 – Dioda silikon 1A 100V
- 1N4004 – Dioda silikon 1A 400V
- 1N4007 – Dioda silikon 1A 1000V
- 1N4148 – Dioda silikon kecil 200mA 100V
- 1N5819 – Dioda Schottky 1A 40V
- 1N5822 – Dioda Schottky 3A 40V
- MBR0520L – Dioda Schottky ultra cepat 0.5A 20V
Pilihan dioda pelindung yang digunakan harus disesuaikan dengan arus dan tegangan pada motor DC yang digunakan. Hal ini untuk memastikan dioda pelindung dapat memberikan perlindungan yang cukup pada IC driver motor.
Rangkaian L293D Arduino
Untuk menggunakan driver motor L293D dengan Arduino, pertama-tama kita harus membuat terlebih dahulu rangkaian L293D untuk motor DC. Setelah itu, hubungkan driver motor L293D ke Arduino. Hubungkan pin VCC dan GND pada driver motor L293D ke pin 5V dan GND pada Arduino. Selanjutnya, hubungkan pin IN1 dan IN2 pada driver motor L293D ke pin digital pada Arduino yang akan digunakan sebagai sinyal input. Kemudian, hubungkan pin EN1 pada driver motor L293D ke pin PWM pada Arduino yang akan digunakan untuk mengatur kecepatan motor DC.
Perhatikan gambar rangkaian berikut ini:
Jika anda kesulitan melihat jalur rangkaian diatas, berikut saya menyediakan dalam bentuk PDF:
Kode program Dasar L293D
Setelah semua komponen telah selesai dihubungkan berdasarkan rangkaian diatas, selanjutkan kita akan menjalankan motor DC tersebut. Untuk dapat memutar motor ke kanan atau ke kiri dengan kecepatan tertentu, anda dapat menggunakan kode program dibawah ini
int in1 = 2; // input 1
int in2 = 3; // input 2
int in3 = 4; // input 3
int in4 = 5; // input 4
int en12 = 6; // enable 1 & 2
int en34 = 7; // enable 3 & 4
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(en12, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(en34, OUTPUT);
}
void loop() {
//Putar motor ke Kanan
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(en12, 255); // set kecepatan motor maksimum
//Putar motor ke Kiri
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(en34, 255); // set kecepatan motor maksimum
}
Penjelasan Kode Program
Baris 1-6: Pendefinisian pin input dan output pada Arduino yang terhubung ke driver L293D.
Fungsi setup() untuk mengatur pin yang digunakan sebagai output.
Fungsi loop() untuk mengontrol motor DC. Pada kode program ini, terdapat dua blok perintah untuk mengontrol arah putaran motor, dimana:
- Untuk memutar motor ke kanan, pin in1 diberi sinyal LOW dan pin in2 diberi sinyal HIGH.
- Untuk memutar motor ke kiri, pin in3 diberi sinyal HIGH dan pin in4 diberi sinyal LOW.
Pada setiap blok perintah untuk mengontrol arah putaran motor, juga terdapat perintah analogWrite(), gunanya untuk mengatur kecepatan motor. Nilai kecepatan yang dapat diatur berkisar dari 0 (motor tidak berputar) hingga 255 (motor dengan kecepatan maksimum).
Atur Kecepatan Motor
Untuk mengatur kecepatan motor, Anda bisa menggunakan fungsi PWM dengan analogWrite()
pada pin ENA dan ENB (atau ena1 dan ena2 dalam kode Anda). Nilai PWM bisa diatur dari 0 (motor mati) hingga 255 (kecepatan penuh).
Berikut adalah contoh modifikasi kode Anda untuk mengatur kecepatan menggunakan parameter kecepatan:
// Pin configuration
int ena1 = 6;
int ena2 = 7;
int in1 = 2;
int in2 = 3;
int in3 = 4;
int in4 = 5;
void setup() {
pinMode(ena1, OUTPUT);
pinMode(ena2, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
Serial.begin(9600);
Serial.println("Starting Motor Test");
}
void loop() {
// Test forward with speed 128 (50% of max)
Serial.println("Forward with speed 128");
runMotor("on", "on", "forward", 128);
delay(3000); // 3 seconds
// Test backward with speed 200 (78% of max)
Serial.println("Backward with speed 200");
runMotor("on", "on", "backward", 200);
delay(3000); // 3 seconds
// Test stop
Serial.println("Stop");
runMotor("off", "off", "stop", 0);
delay(3000); // 3 seconds
// Test right with speed 150 (60% of max)
Serial.println("Right with speed 150");
runMotor("on", "on", "right", 150);
delay(3000); // 3 seconds
// Test left with speed 100 (40% of max)
Serial.println("Left with speed 100");
runMotor("on", "on", "left", 100);
delay(3000); // 3 seconds
// Test stop again
Serial.println("Stop");
runMotor("off", "off", "stop", 0);
delay(3000); // 3 seconds
}
void runMotor(String leftMotor, String rightMotor, String direction, int speed) {
speed = constrain(speed, 0, 255); // Constrain speed between 0 and 255
if ((leftMotor == "on") && (rightMotor == "on") && (direction == "forward")) {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
analogWrite(ena1, speed);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(ena2, speed);
}
if ((leftMotor == "on") && (rightMotor == "on") && (direction == "backward")) {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(ena1, speed);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
analogWrite(ena2, speed);
}
if ((leftMotor == "off") && (rightMotor == "off") && (direction == "stop")) {
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
if ((leftMotor == "on") && (rightMotor == "on") && (direction == "right")) {
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
analogWrite(ena1, speed);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
analogWrite(ena2, speed);
}
if ((leftMotor == "on") && (rightMotor == "on") && (direction == "left")) {
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
analogWrite(ena1, speed);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
analogWrite(ena2, speed);
}
}
Penjelasan
- Kecepatan PWM: Parameter
kecepatan
diteruskan ke fungsianalogWrite()
pada pin ENA dan ENB.- Nilai kecepatan bisa diatur antara 0 (berhenti) hingga 255 (kecepatan penuh).
- Fungsi
constrain()
memastikan nilai kecepatan tetap dalam rentang valid.
- Contoh Kecepatan:
- Maju dengan kecepatan 128 (50%).
- Mundur dengan kecepatan 200 (78%).
- Kanan dengan kecepatan 150 (60%).
- Kiri dengan kecepatan 100 (40%).
Sekarang Anda dapat mengatur kecepatan sesuai kebutuhan hanya dengan mengubah nilai parameter kecepatan
saat memanggil fungsi jalankan
.
Kesimpulan
Driver motor L293D adalah salah satu jenis driver motor yang dapat digunakan untuk mengendalikan motor DC dengan mudah. Dalam penggunaannya dengan Arduino, driver motor L293D dapat dikontrol menggunakan sinyal input dari pin digital dan sinyal PWM dari pin analog. Dengan mengerti prinsip kerja driver motor dan rangkaian H-Bridge, kita dapat mengontrol arah putaran dan kecepatan motor DC dengan mudah menggunakan driver motor L293D dan Arduino. Semoga tutorial ini bermanfaat bagi para pemula yang ingin belajar mengendalikan motor DC menggunakan driver motor L293D dengan Arduino.