MODUL II PWM, ADC, dan Interrupt
- Rangkailah seperti rangkaian berikut
- Buka Arduino IDE dan masukan listing program Upload program ke arduino
- Variasikan tombol yang ditekan dan amati keluarannya pada LCD
Hardware |
Flowchart |
Program mengimpor dua library yaitu Servo.h untuk mengontrol motor servo dan Keypad.h untuk mengontrol keypad.
Mendefinisikan Variabel: Program mendefinisikan beberapa variabel seperti servoPin untuk menentukan pin PWM untuk motor servo, numRows dan numCols untuk menentukan jumlah baris dan kolom pada keypad, keys sebagai array karakter untuk menyimpan layout keypad, rowPins dan colPins untuk menentukan pin pada Arduino yang terhubung dengan baris dan kolom keypad, dan keypad untuk menginisialisasi keypad.
Pada bagian setup, program menginisialisasi motor servo, menentukan posisi awal motor servo (90 derajat), dan mengatur komunikasi serial dengan kecepatan 9600 baud.
Loop: Program masuk ke dalam loop utama. Pada setiap iterasi loop, program memeriksa apakah ada tombol keypad yang ditekan dengan menggunakan fungsi keypad.getKey().
Pemrosesan Input: Jika ada tombol yang ditekan (key != NO_KEY), program akan mencetak tombol yang ditekan ke Serial Monitor dan melakukan aksi sesuai dengan tombol yang ditekan menggunakan struktur switch-case.
Aksi Motor Servo: Setiap case dalam switch-case mengatur posisi motor servo sesuai dengan tombol yang ditekan pada keypad. Misalnya, jika tombol '1' ditekan, motor servo akan diposisikan pada 0 derajat, jika tombol '2' ditekan, motor servo akan diposisikan pada 45 derajat, dan seterusnya.
Loop Continues: Setelah menjalankan aksi yang sesuai dengan tombol yang ditekan, program kembali ke awal loop untuk terus memonitor input dari keypad dan mengontrol motor servo.
Prinsip kerja utama dari program ini adalah membaca input dari keypad dan mengubahnya menjadi perintah untuk mengatur posisi motor servo.
Listing Program
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
#define PB1 2
#define PB2 3
#define PB3 4
#define PB4 5
int step = 100;
int delaytime=5; //makin kecil delay, makin cepat motor berputar
void setup(){
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(PB1, INPUT);
pinMode(PB2, INPUT);
pinMode(PB3, INPUT);
pinMode(PB4, INPUT);
}
void loop(){
int b4 = digitalRead(PB4);
int b3 = digitalRead(PB3);
int b2 = digitalRead(PB2);
int b1 = digitalRead(PB1);
if (b4 == HIGH){
maju();
}
else if (b3 == HIGH){
mundur();
}
else if (b2 == HIGH){
for (int i = 0; i < 60; i ++){
maju();
}
for (int i = 0; i < 60; i++){
mundur();
}
}
else if (b1 == HIGH){
for (int i = 0; i < 50; i++){
maju();
}
delay(2000);
for (int i = 0; i < 50; i++){
mundur();
}
}
}
void maju(){
//step 4
step1();
delay(delaytime);
//step 3
step2();
delay(delaytime);
//step 2
step3();
delay(delaytime);
//step 1
step4();
delay(delaytime);
}
void mundur(){
//step 4
step4();
delay(delaytime);
//step 3
step3();
delay(delaytime);
//step 2
step2();
delay(delaytime);
//step 1
step1();
delay(delaytime);
}
void step1(){
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,HIGH);
}
void step2(){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
}
void step3(){
digitalWrite(IN1,HIGH);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
}
void step4(){
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
}
Percobaan 6 Kontrol Putaran Motor Stepper
File HTML klik disini
Rangkaian Simulasi Proteus klik disini
File Video Rangkaian klik disini
File Arduino klik disini
Datasheet klik disini
Rangkaian Simulasi Proteus klik disini
File Video Rangkaian klik disini
File Arduino klik disini
Datasheet klik disini
Tidak ada komentar:
Posting Komentar