IC L293 adalah IC Quadruple Half H Driver yang dapat digunakan sebagai driver 2 arah untuk arus yang cukup besar (1A, untuk tipe L293D maks 600mA). datasheet ICL293 dapat diunduh disini .
Sebagaimana kita ketahui bahwa pin digital Arduino (umumnya) hanya bisa meng handle arus sekitar 40 mA, sehingga untuk menggerakan motor DC, stepper Motor, ataupun beban lainnya yang memerlukan arus besar perlu driver.
Tulisan ini menjelaskan cara menggerakan motor DC (asumsi motor DC 5V dengan konsumsi arus di bawah 500mA) dengan menggunakan IC L293 pada Arduino. Dengan formasi Biderectional Motor Control (informasi lanjut lihat data sheet) ,satu IC L293 dapat mengendalikan 2 motorDC dan masing2 motor dapat dikendalikan pada dua arah (bidirectional) putaran (ClockWise atau CounterClockWise), dan arah putaran dapat dianalogikan sebagai maju dan mundur.
Berikut ini dibuat suatu aplikasi Kendali 2 motor DC untuk maju ,berhenti dan mundur yang ditentukan oleh kekuatan cahaya, bila cahaya cukup, motor tidak bergerak (berhenti), bila terang, motor bergerak kearah tertentu (maju) dan bila gelap, motor bergerak kearah yg berlawanan (mundur).Sensor cahaya yang digunakan adalah LDR yang dihubungan ke analog input (A0) dan secara sederhana dalam tulisan ini pembagian daerah kerja sensor thd respon cahaya dibagi 3 daerah yaitu daerah gelap (nilai sensor 0-341), daerah cukup cahaya (342-682) dan daerah terang (683-1023), artinya pada program variabel batasbawah=341 dan batasatas=682; Tentu saja untuk nilai daerah kerja (batasbawah dan batasatas) yang sebenarnya thd lingkungan anda buat harus disesuaikan dengan kondisi cahaya setempat.
demo video
Skema rangkaian
List Program:
/*
Kendali 2 motor DC untuk maju ,berhenti dan mundur
yang ditentukan oleh kekuatan cahaya
bila cahaya cukup motor tidak bergerak (berhenti)
bila terang, motor bergerak kearah tertentu (maju) dan
bila gelap, motor bergerak kearah yg berlawanan (mundur)
Motor 1 dan Motor 2 dihubungkan ke IC L293 (lihat skema)
sensor menggunakan 1 buah LDR sambung ke pin A0 dan Vcc
pin A0 ke ground pasang R = 10KOhm
Oleh : Aan Darmawan
Blog : http://valfa.blogspot.com
Date : 14 Februari 2011 */
const int batasbawah=341;
const int batasatas=682;
// set batas atas dan bawah (threshold) dibagi 3 daerah sama rata
// (0-341) gelap, (342-682) cukup, (683-1023)terang
// nilai batas atas dan bawah ini bisa diubah sesuai dengan kondisi cahaya
int s1; // variabel untuk sensor
void setup() {
pinMode(2,OUTPUT); // kendali motor 1
pinMode(3,OUTPUT); // motor 1 +
pinMode(4,OUTPUT); // motor 1 -
pinMode(5,OUTPUT); // kendali motor 2
pinMode(6,OUTPUT); // motor 2 +
pinMode(7,OUTPUT); // motor 2 -
}
void maju(void){
digitalWrite(2,LOW);
digitalWrite(5,LOW);
delayMicroseconds(100);
digitalWrite(3,LOW);
digitalWrite(4,HIGH);
delayMicroseconds(100);
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
delayMicroseconds(100);
digitalWrite(2,HIGH);
digitalWrite(5,HIGH);
delayMicroseconds(200);
}
void mundur(void){
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
delayMicroseconds(100);
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
delayMicroseconds(100);
digitalWrite(2,HIGH);
digitalWrite(5,HIGH);
delayMicroseconds(200);
}
void henti(void){
// berhenti
digitalWrite(3,LOW);
digitalWrite(4,LOW);
delayMicroseconds(100);
digitalWrite(6,LOW);
digitalWrite(7,LOW);
delayMicroseconds(100);
digitalWrite(2,LOW);
digitalWrite(5,LOW);
delayMicroseconds(200);
}
// main program
void loop() {
s1=analogRead(A0); // ambil nilai dr sensor LDR
if(s1<=batasbawah) { //mundur
mundur();
}
if(s1>batasbawah && s1<=batasatas) { // berhenti
henti();
}
if(s1>batasatas) { //maju
maju();
}
delay(10); // tunggu 10 mdetik
}