Interface Motor DC menggunakan Arduino
1. Tujuan [Kembali]
a. Merangkai dan menguji aplikasi output pada mikrokontroller Arduino
b. Merangkai dan menguji input pada mikrokontroller Arduino
c. Merangkai dan menguji I/O pada mikrokontroller Arduino
b. Merangkai dan menguji input pada mikrokontroller Arduino
c. Merangkai dan menguji I/O pada mikrokontroller Arduino
2. Alat [Kembali]
2.1 Mikrokontroler ARDUINO
2.2 Motor DC
2.3 Switch
2.4 Driver Motor DC L293D
3. Teori [Kembali]
3.1. Mikrokontroler ARDUINO
Arduino adalah kit elektronik atau papan rangkaian elektronik open source yang di dalamnya terdapat komponen utama yaitu sebuah chip mikrokontroler dengan jenis AVR dari perusahaan Atmel. Arduino yang kita gunakan pada prkatikum ini adalah arduino mega yang menggunakan chip AVR ATmega 2560 yang memiliki fasilitas PWM, komunikasi serial, ADC, timer, interupt, SPI dan I2C. Sehingga Arduino bisa digabungkan bersama modul atau alat lain dengan protocol yang berbeda-beda. Bahasa pemograman yang digunakan adalah bahasa C. Tetapi bahasa ini sudah dipermudah menggunakan fungsi-fungsi yang sederhana sehingga lebih mudah dalam memprogramnya. Dalam memprogram arduino, kita bisa menggunakan serial komunikasi agar arduino dapat berhubungan dengan komputer ataupun aplikasi lain.
3.1.1 Fitur-Fitur ARDUINO
1. Microcontroller ATmega2560
2. Operating Voltage 5V
3. Input Voltage (recommended) 7-12V
4. Input Voltage (limits) 6-20V
5. Digital I/O Pins 54 (of which 15 provide PWM output)
6. Analog Input Pins 16
7. DC Current per I/O Pin 20 mA
8. DC Current for 3.3V Pin 50 mA
9. Flash Memory 256 KB of which 8 KB used by bootloader
10. SRAM 8 KB
11. EEPROM 4 KB
12. Clock Speed 16 MHz
2. Operating Voltage 5V
3. Input Voltage (recommended) 7-12V
4. Input Voltage (limits) 6-20V
5. Digital I/O Pins 54 (of which 15 provide PWM output)
6. Analog Input Pins 16
7. DC Current per I/O Pin 20 mA
8. DC Current for 3.3V Pin 50 mA
9. Flash Memory 256 KB of which 8 KB used by bootloader
10. SRAM 8 KB
11. EEPROM 4 KB
12. Clock Speed 16 MHz
3.1.2 Pin Out Arduino
Soket USB
Soket USB adalah soket untuk kabel USB yang disambungkan ke komputer atau laptop.
Berfungsi untuk mengirimkan program ke Arduino dan juga sebagai port komunikasi serial.
Input / Output Digital Input/Output Digital atau digital pin adalah pin-pin untuk menghubungkan Arduino dengan komponen atau rangkaian digital. Pada Arduino Mega terdapat 53 I/O Digital dimana 16 diantaranya dapat dijadikan sebagai output PWM
Input Analog Input Analog atau analog pin adalah pin-pin yang berfungsi untuk menerima sinyal dari komponen atau rangkaian analog. Misalnya dari potensiometer, sensor suhu, sensor cahaya, dsb. Terdapat 16 input analog pada arduino mega 2560.
Pin POWER Pin-pin catu daya adalah pin yang memberikan tegangan untuk komponen atau rangkaian yang dihubungkan dengan Arduino. Pada bagian catu daya ini terdapat juga pin Vin dan Reset.Vin digunakan untuk memberikan tegangan langsung kepada Arduino tanpa melalui tegangan USB atau adaptor.
Tombol RESET Reset adalah pin untuk memberikan sinyal reset melaui tombol atau rangkaian eksternal.
Jack Baterai/Adaptor Soket baterai atau adaptor digunakan untuk menyuplai Arduino dengan tegangan dari baterai/adaptor 9V pada saat Arduino sedang tidak disambungkan ke komputer. Kalau Arduino sedang disambungkan ke komputer melalui USB, Arduino mendapatkan suplai tegangan dari USB, jadi tidak perlu memasang baterai/adaptor saat memprogram Arduino.
Input / Output Digital Input/Output Digital atau digital pin adalah pin-pin untuk menghubungkan Arduino dengan komponen atau rangkaian digital. Pada Arduino Mega terdapat 53 I/O Digital dimana 16 diantaranya dapat dijadikan sebagai output PWM
Input Analog Input Analog atau analog pin adalah pin-pin yang berfungsi untuk menerima sinyal dari komponen atau rangkaian analog. Misalnya dari potensiometer, sensor suhu, sensor cahaya, dsb. Terdapat 16 input analog pada arduino mega 2560.
Pin POWER Pin-pin catu daya adalah pin yang memberikan tegangan untuk komponen atau rangkaian yang dihubungkan dengan Arduino. Pada bagian catu daya ini terdapat juga pin Vin dan Reset.Vin digunakan untuk memberikan tegangan langsung kepada Arduino tanpa melalui tegangan USB atau adaptor.
Tombol RESET Reset adalah pin untuk memberikan sinyal reset melaui tombol atau rangkaian eksternal.
Jack Baterai/Adaptor Soket baterai atau adaptor digunakan untuk menyuplai Arduino dengan tegangan dari baterai/adaptor 9V pada saat Arduino sedang tidak disambungkan ke komputer. Kalau Arduino sedang disambungkan ke komputer melalui USB, Arduino mendapatkan suplai tegangan dari USB, jadi tidak perlu memasang baterai/adaptor saat memprogram Arduino.
3.2. Pengertian Motor DC
Motor DC adalah motor listrik yang memerlukan suplai tegangan arus searah pada kumparan medan untuk diubah menjadi energi gerak mekanik. Kumparan medan pada motor dc disebut stator (bagian yang tidak berputar) dan kumparan jangkar disebut rotor (bagian yang berputar). Motor arus searah, sebagaimana namanya, menggunakan arus langsung yang tidak langsung/direct-unidirectional.
3.3. Pengertian Driver Motor L293D
IC L293D adalah IC yang didesain khusus sebagai driver motor DC dan dapat dikendalikan dengan rangkaian TTL maupun mikrokontroler. Motor DC yang dikontrol dengan driver IC L293D dapat dihubungkan ke ground maupun ke sumber tegangan positif karena di dalam driver L293D sistem driver yang digunakan adalah totem pool. Dalam 1 unit chip IC L293D terdiri dari 4 buah driver motor DC yang berdiri sendiri sendiri dengan kemampuan mengalirkan arus 1 Ampere tiap drivernya. Sehingga dapat digunakan untuk membuat driver H-bridge untuk 2 buah motor DC. Konstruksi pin driver motor DC IC l293D adalah sebagai berikut.
Fungsi Pin Driver Motor DC IC L293D
1. Pin EN (Enable, EN1.2, EN3.4) berfungsi untuk mengijinkan driver menerima perintah untuk menggerakan motor DC.
2. Pin In (Input, 1A, 2A, 3A, 4A) adalah pin input sinyal kendali motor DC
3. Pin Out (Output, 1Y, 2Y, 3Y, 4Y) adalah jalur output masing-masing driver yang dihubungkan ke motor DC
3. Pin VCC (VCC1, VCC2) adalah jalur input tegangan sumber driver motor DC, dimana VCC1 adalah jalur input sumber tegangan rangkaian kontrol dirver dan VCC2 adalah jalur input sumber tegangan untuk motor DC yang dikendalikan.
4. Pin GND (Ground) adalah jalu yang harus dihubungkan ke ground, pin GND ini ada 4 buah yang berdekatan dan dapat dihubungkan ke sebuah pendingin kecil.
Fungsi Pin Driver Motor DC IC L293D
1. Pin EN (Enable, EN1.2, EN3.4) berfungsi untuk mengijinkan driver menerima perintah untuk menggerakan motor DC.
2. Pin In (Input, 1A, 2A, 3A, 4A) adalah pin input sinyal kendali motor DC
3. Pin Out (Output, 1Y, 2Y, 3Y, 4Y) adalah jalur output masing-masing driver yang dihubungkan ke motor DC
3. Pin VCC (VCC1, VCC2) adalah jalur input tegangan sumber driver motor DC, dimana VCC1 adalah jalur input sumber tegangan rangkaian kontrol dirver dan VCC2 adalah jalur input sumber tegangan untuk motor DC yang dikendalikan.
4. Pin GND (Ground) adalah jalu yang harus dihubungkan ke ground, pin GND ini ada 4 buah yang berdekatan dan dapat dihubungkan ke sebuah pendingin kecil.
4. Rangkaian [Kembali]
Rangkaian diatas merupakan rangkaian sederhana dari pengunaan Arduino untuk Mengatur kecepatan Putaran dari Motor DC. Pada rangkaian terdapat tiga buah switch yang mana switch pertama digunakan untuk mengatur gerak motor DC dengan kecepatan pelan, sedangkan switch kedua digunakan untuk mengatur gerak dari motor DC dengan kecepatan sedang. sedangkan switch ketiga digunakan untuk mengatur gerak dari motor DC dengan kecepatan cepat.
5. Program [Kembali]
#include <liquidcrystal .h> //library untuk LCD
LiquidCrystal lcd (41,39,37,35,33,31); // menunjukkan pin yang dihubungkan pada di LCD
int m1 = 7; //pin m1 pada L293 dihubungkan ke pin 14 pada Arduino
int m2 = 6; //pin m2 pada L293 dihubungkan ke pin 15 pada Arduino
int m3 = 5; //pin m3 pada L293 dihubungkan ke pin 16 pada Arduino
int m4 = 4; //pin m4 pada L293 dihubungkan ke pin 17 pada Arduino
const int s1 = 16; // switch 1 dihubungkan ke pin 19 pada Arduino
const int s2 = 17; // switch 2 dihubungkan ke pin 20 pada Arduino
const int s3 = 18; // switch 3 dihubungkan ke pin 21 pada Arduino
void setup() // Settingan kondisi yang akan digunakan
{
pinMode(m1,OUTPUT); // menjelaskan bahwa pin m1 sebagai output
pinMode(m2,OUTPUT); // menjelaskan bahwa pin m2 sebagai output
pinMode(m3,OUTPUT); // menjelaskan bahwa pin m3 sebagai output
pinMode(m4,OUTPUT); // menjelaskan bahwa pin m4 sebagai output
pinMode(s1, INPUT); // menjelaskan switch 1 sebagai input
pinMode(s2, INPUT); // menjelaskan switch 2 sebagai input
pinMode(s3, INPUT); // menjelaskan switch 3 sebagai input
digitalWrite(s1, HIGH); // menjelaskan kondisi awal dari switch 1 berlogika high
digitalWrite(s2, HIGH); // menjelaskan kondisi awal dari switch 2 berlogika high
digitalWrite(s3, HIGH); // menjelaskan kondisi awal dari switch 3 berlogika high
lcd.begin(16,2);
}
void loop() // Perulangan dari semua kondisi yang ditetapkan
{
int switch1 = digitalRead (s1); // tetapkan switch 1 sebagai input dengan pembacaan digital
int switch2 = digitalRead (s2); // tetapkan switch 1 sebagai input dengan pembacaan digital
int switch3 = digitalRead (s3); // tetapkan switch 1 sebagai input dengan pembacaan digital
if (switch1 == LOW && switch2 == LOW && switch3 == LOW)
{
lcd.setCursor (0,0); // posisi kursor lcd
lcd.print ("Motor Mati"); // cetak LCD
delay(50); // delay selama 50 ms
lcd.clear(); // reset LCD
digitalWrite (m1,LOW); // m1 kondisi mati
digitalWrite (m2,LOW); // m1 kondisi mati
digitalWrite (m3,LOW); // m1 kondisi mati
digitalWrite (m4,LOW); // m1 kondisi mati
}
else if (switch1 == HIGH && switch2 == LOW && switch3 == LOW)
{
lcd.setCursor (0,0); // posisi kursor lcd
lcd.print ("Motor Pelan"); // cetak pada lcd
delay(50); // delay selama 50 ms
lcd.clear(); // reset LCD
analogWrite (m1,50); // m1 kondisi dengan nilai analog 50 dari 255
analogWrite (m2,0); // m2 kondisi mati
analogWrite (m3,50); // m3 kondisi dengan nilai analog 50 dari 255
analogWrite (m4,0); // m4 kondisi mati
}
else if (switch1 == LOW && switch2 == HIGH && switch3 == LOW)
{
lcd.setCursor (0,0); // posisi lcd
lcd.print ("Motor Sedang"); // cetak tulisan pada LCD
delay(50); // delay selama 50 ms
lcd.clear(); // reset lcd
analogWrite (m1,100); // m1 kondisi dengan nilai analog 150 dari 255
analogWrite (m2,0); // m2 kondisi mati
analogWrite (m3,100); // m3 kondisi dengan nilai analog 150 dari 255
analogWrite (m4,0); // m4 kondisi mati
}
else if (switch1 == LOW && switch2 == LOW && switch3 == HIGH)
{
lcd.setCursor (0,0); // posisi lcd
lcd.print ("Motor Cepat"); // cetak tulisan pada lcd
delay(50); // delay selama 50 ms
lcd.clear(); // reset lcd
analogWrite (m1,200); // m1 kndisi dengan nilai 200 dari 255
analogWrite (m2,0); // m2 kondisi mati
analogWrite (m3,200); // m3 kondisi denga nilai 200 dari 255
analogWrite (m4,0); // m4 kondisi mati
}
else
{
lcd.setCursor (0,0); // posisi lcd
lcd.print ("Tidak Ada Kondisi !!"); // cetak tulisan pada lcd
lcd.clear(); // reset lcd
analogWrite (m1,0); // m1 kondisi mati
analogWrite (m2,0); // m2 kondisi mati
analogWrite (m3,0); // m3 kondisi mati
analogWrite (m4,0); } } // m4 kondisi mati
</liquidcrystal>
LiquidCrystal lcd (41,39,37,35,33,31); // menunjukkan pin yang dihubungkan pada di LCD
int m1 = 7; //pin m1 pada L293 dihubungkan ke pin 14 pada Arduino
int m2 = 6; //pin m2 pada L293 dihubungkan ke pin 15 pada Arduino
int m3 = 5; //pin m3 pada L293 dihubungkan ke pin 16 pada Arduino
int m4 = 4; //pin m4 pada L293 dihubungkan ke pin 17 pada Arduino
const int s1 = 16; // switch 1 dihubungkan ke pin 19 pada Arduino
const int s2 = 17; // switch 2 dihubungkan ke pin 20 pada Arduino
const int s3 = 18; // switch 3 dihubungkan ke pin 21 pada Arduino
void setup() // Settingan kondisi yang akan digunakan
{
pinMode(m1,OUTPUT); // menjelaskan bahwa pin m1 sebagai output
pinMode(m2,OUTPUT); // menjelaskan bahwa pin m2 sebagai output
pinMode(m3,OUTPUT); // menjelaskan bahwa pin m3 sebagai output
pinMode(m4,OUTPUT); // menjelaskan bahwa pin m4 sebagai output
pinMode(s1, INPUT); // menjelaskan switch 1 sebagai input
pinMode(s2, INPUT); // menjelaskan switch 2 sebagai input
pinMode(s3, INPUT); // menjelaskan switch 3 sebagai input
digitalWrite(s1, HIGH); // menjelaskan kondisi awal dari switch 1 berlogika high
digitalWrite(s2, HIGH); // menjelaskan kondisi awal dari switch 2 berlogika high
digitalWrite(s3, HIGH); // menjelaskan kondisi awal dari switch 3 berlogika high
lcd.begin(16,2);
}
void loop() // Perulangan dari semua kondisi yang ditetapkan
{
int switch1 = digitalRead (s1); // tetapkan switch 1 sebagai input dengan pembacaan digital
int switch2 = digitalRead (s2); // tetapkan switch 1 sebagai input dengan pembacaan digital
int switch3 = digitalRead (s3); // tetapkan switch 1 sebagai input dengan pembacaan digital
if (switch1 == LOW && switch2 == LOW && switch3 == LOW)
{
lcd.setCursor (0,0); // posisi kursor lcd
lcd.print ("Motor Mati"); // cetak LCD
delay(50); // delay selama 50 ms
lcd.clear(); // reset LCD
digitalWrite (m1,LOW); // m1 kondisi mati
digitalWrite (m2,LOW); // m1 kondisi mati
digitalWrite (m3,LOW); // m1 kondisi mati
digitalWrite (m4,LOW); // m1 kondisi mati
}
else if (switch1 == HIGH && switch2 == LOW && switch3 == LOW)
{
lcd.setCursor (0,0); // posisi kursor lcd
lcd.print ("Motor Pelan"); // cetak pada lcd
delay(50); // delay selama 50 ms
lcd.clear(); // reset LCD
analogWrite (m1,50); // m1 kondisi dengan nilai analog 50 dari 255
analogWrite (m2,0); // m2 kondisi mati
analogWrite (m3,50); // m3 kondisi dengan nilai analog 50 dari 255
analogWrite (m4,0); // m4 kondisi mati
}
else if (switch1 == LOW && switch2 == HIGH && switch3 == LOW)
{
lcd.setCursor (0,0); // posisi lcd
lcd.print ("Motor Sedang"); // cetak tulisan pada LCD
delay(50); // delay selama 50 ms
lcd.clear(); // reset lcd
analogWrite (m1,100); // m1 kondisi dengan nilai analog 150 dari 255
analogWrite (m2,0); // m2 kondisi mati
analogWrite (m3,100); // m3 kondisi dengan nilai analog 150 dari 255
analogWrite (m4,0); // m4 kondisi mati
}
else if (switch1 == LOW && switch2 == LOW && switch3 == HIGH)
{
lcd.setCursor (0,0); // posisi lcd
lcd.print ("Motor Cepat"); // cetak tulisan pada lcd
delay(50); // delay selama 50 ms
lcd.clear(); // reset lcd
analogWrite (m1,200); // m1 kndisi dengan nilai 200 dari 255
analogWrite (m2,0); // m2 kondisi mati
analogWrite (m3,200); // m3 kondisi denga nilai 200 dari 255
analogWrite (m4,0); // m4 kondisi mati
}
else
{
lcd.setCursor (0,0); // posisi lcd
lcd.print ("Tidak Ada Kondisi !!"); // cetak tulisan pada lcd
lcd.clear(); // reset lcd
analogWrite (m1,0); // m1 kondisi mati
analogWrite (m2,0); // m2 kondisi mati
analogWrite (m3,0); // m3 kondisi mati
analogWrite (m4,0); } } // m4 kondisi mati
</liquidcrystal>
6. Flowchart [Kembali]
7. Video Simulasi [Kembali]
8. Analisa Hubungan Rangkaian & Program [Kembali]
Rangkaian di atas menggunakan komponen pendukung yaitu, Motor DC, Driver L293D, LCD dan Switch. Pertama pada program dibuat inisiasi LCD untuk mengkoneksi LCD ke in Arduino. selajutnya program logika if, yang mana ketika switch 1 diaktifkan maka motor DC diberi suplay digital yang randah yang diinput pada program dan juga program akan memberikan tulisan yang kemudian dicetak pada LCD. selanjutnya jika switch 2 diaktifkan maka sinyal keluaran digital dari Arduino nilainya lebih besar yang kemudian dikirimkan pada Motor DC sehingga motor DC berputar dengan kecepatan sedang dan program akan mengirimkan data tulisan ke LCD. Terakhir, Jika Switch 3 aktif maka Arduino diprogramkan untuk memberikan sinyal digital yang besar ke Driver Motor DC untuk menggerakkan motor DC berputar dengan Kecepatan yang cepat, dan program akan mengirimkan data digital ke LCD. Jika tidak ada kondisi yang terpenuhi dari 3 diatas, program arduino tidak mengirimkan sinyal digital ke Motor DC, tetapi program mengirimkan data ke LCD.