Pada proyek ini, akan menggunakan IC L293D motor driver yang terkenal
Keuntungan dari L293D adalah dapat mengatur 2 motor dalam sekali waktu, dan arah putaran dapat diatur juga. L293D juga dapat digunakan untuk mengatur stepper motor.
L393D sudah ada diode internal, jadi tidak perlu menggunakan diode lagi.
Komponen
- DC Motor
- L293D or SN754410
- Motor Driver IC
- 10KΩ Potentiometer
- Slide Switch
- 10KΩ Resistor
- Heatsink
Skema

Sketch
#define switchPin 2 // switch input
#define motorPin1 3 // L293D Input 1
#define motorPin2 4 // L293D Input 2
#define speedPin 9 // L293D enable pin 1
#define potPin 0 // Potentiometer on analog Pin 0
int Mspeed = 0; // a variable to hold the current speed value
void setup() {
//set switch pin as INPUT
pinMode(switchPin, INPUT);
// set remaining pins as outputs
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(speedPin, OUTPUT);
}
void loop() {
Mspeed = analogRead(potPin)/4; // read the speed value from the potentiometer
analogWrite (speedPin, Mspeed); // write speed to Enable 1 pin
if (digitalRead(switchPin)) { // If the switch is HIGH, rotate motor clockwise
digitalWrite(motorPin1, LOW); // set Input 1 of the L293D low
digitalWrite(motorPin2, HIGH); // set Input 2 of the L293D high
}
else { // if the switch is LOW, rotate motor anti-clockwise
digitalWrite(motorPin1, HIGH); // set Input 1 of the L293D low
digitalWrite(motorPin2, LOW); // set Input 2 of the L293D high
}
}
Setelah code selesai diupload, atur potensiometer ditengah lalu hubungkan external power supply. Motor akan berputar, atur kecepatan motor menggunakan potentiometer.
Untuk mengubah arah putaran, atur dahulu kecepatan ke minimum kemudia tekan switch. Motor akan berputar kearah sebaliknya.
PERHATIAN, chips mudah panas, wajib menggunakan heatsink.
Penjelasan Sketch
Pertama, definiskan dahulu pin
#define switchPin 2 // switch input #define motorPin1 3 // L293D Input 1 #define motorPin2 4 // L293D Input 2 #define speedPin 9 // L293D enable pin 1 #define potPin 0 // Potentiometer on analog Pin 0
Kemudian set sebuah integer untuk menyimpan nilai bacaan kecepatan motor dari potentiometer.
int Mspeed = 0; // a variable to hold the current speed value
Pada fungsi setup, set pin yang telah didefinisikan.
void setup() {
//set switch pin as INPUT
pinMode(switchPin, INPUT);
// set remaining pins as outputs
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(speedPin, OUTPUT);
}
Pada main loop, baca nilai dari potentiometer yang terhubung pada analog pin 0 dan simpan di variable Mspeed.
Mspeed = analogRead(potPin)/4; // read the speed value from the potentiometer
Kemudian set nilai PWM di pin 9 dengan kecepatan dari variable Mspeed.
analogWrite (speedPin, Mspeed); // write speed to Enable 1 pin
Lalu gunakan statemen if untuk menentukan nilai bacaan dari switch, HIGH atau LOW.
Jika, HIGH, maka output 1 pada IC L293D di set LOW and output 2 di set to HIGH. Ini artinya, output 2 memiliki positive voltage dan output 1 adalah ground, menyebabkan motor berputar pada 1 arah.
if (digitalRead(switchPin)) { // If the switch is HIGH, rotate motor clockwise<br>
digitalWrite(motorPin1, LOW); // set Input 1 of the L293D low<br>
digitalWrite(motorPin2, HIGH); // set Input 2 of the L293D high<br>
}
Jika switch pin bernilai LOW, maka output 1 di set HIGH dan output 2 di set LOW, ini akan memutar balik arah putar motor.
else { // if the switch is LOW, rotate motor anti-clockwise<br>
digitalWrite(motorPin1, HIGH); // set Input 1 of the L293D low<br>
digitalWrite(motorPin2, LOW); // set Input 2 of the L293D high<br>
}
Fungsi loop akan kembali ke awal procedure.
IC L293D sangat mempermudah dalam mengatur motor. Tanpa IC L293D, skema dan sketch akan lebih rumit.
Jadi, jangan mudah terintimidasi oleh IC, karena IC dibuat untuk memudahkan kerja. Pelajari aturan pakainya dengan membaca datasheet.