Mengendalikan Motor DC pada Arduino/mikrokontroler diperlukan driver/penguat (karena maksimum beban arus yang dapat 'ditangani' oleh Arduino/mikrokontroler terbatas, yaitu sekitar 40mA), solusinya adalah menggunakan Motorshield.
Motorshield Elmarino dirangkai dengan menggunakan IC L298 yang dapat menangani beban maksimum 2A (Data sheet menunjukan Peak Current 4A), Motorshield ini dapat mengatur 2 motor DC (tiap motor
dpt diatur fwd,backward,stop), pada Arduino hanya membutuhkan 3 pin kendali saja dan kecepatan bisa diatur dengan sinyal PWM, selain itu Motorshield ini dapat juga digunakan untuk
mengatur gerakan stepper motor dan Servo Motor.
Satu hal lagi keunggulan Motorshield Elmarino sudah merupakan shield untuk Arduino (Severino/ Duemilanove/ UNO) pin-pin kaki (default) yang digunakan adalah 9,10,11.
Motorshield Elmarino
Contoh Aplikasi Elmarino Motorshield untuk mengendalikan 2 motor DC dengan (Arduino) Severino:
1.Rakit 2 motor DC sebagai penggerak roda mobil/tank
2.Pasang Board (Arduino) Severino
3.Pasang MotorShield Elmarino ke Severino
4.Hasil Instalasi Motorshield pada (Arduino) Severino
5.Hubungkan terminal-terminal motor ke Terminal Block Motor A dan B pada Motorshield Elmarino
6.Hubungkan Sumber tegangan ke Severino,Motorshield Elmarino dan Motor
7.Program Severino dengan IDE Arduino melalui komunikasi Serial (saat pemrograman,hubungan
sumber tegangan untuk Motor di LEPAS)
Contoh Program:
/*
Kendali 2 motor DC dengan Motorshield Elmarino
Pin 9 Enable/Disable
sinyal PWM akan mengatur kecepatan putaran
0 Stop - 255 kecepatan maksimum
Pin 10 Motor B -> HIGH=Forward, LOW=Backward
Pin 11 Motor A -> HIGH=Forward, LOW=Backward
Oleh : Aan Darmawan
Blog : http://valfa.blogspot.com
Date : 10 Maret 2011 */
void maju(int kecepatan){
digitalWrite(10,HIGH);
digitalWrite(11,HIGH);
analogWrite(9,kecepatan);
}
void mundur(int kecepatan){
digitalWrite(10,LOW);
digitalWrite(11,LOW);
analogWrite(9,kecepatan);
}
void henti(void){
analogWrite(9,0);
}
void putarkiri(int kecepatan){
digitalWrite(10,HIGH);
digitalWrite(11,LOW);
analogWrite(9,kecepatan);
}
void putarkanan(int kecepatan){
digitalWrite(10,LOW);
digitalWrite(11,HIGH);
analogWrite(9,kecepatan);
}
void setup() {
//Serial.begin(9600);
pinMode(10,OUTPUT); // Kendali Motor A
pinMode(11,OUTPUT); // Kendali Motor B
pinMode(9,OUTPUT); // Enable Motor (PWM ->Speed)
delay(1000);
}
int n;
// main program
void loop() {
// maju 2 detik
maju(255); //kecepatan penuh
delay(2000);
henti();
delay(300);
// mundur 2 detik
mundur(255); //kecepatan penuh
delay(2000);
henti();
delay(300);
// putar kiri
putarkiri(155); //kecepatan ~60%
delay(2000);
henti();
delay(300);
// putar kanan
putarkanan(155); //kecepatan ~60%
delay(2000);
henti();
delay(300);
}
Video Hasil Uji: