Percobaan 2
Interrupt pada Arduino
1. Foto Hardware dan Diagram Blok [Kembali]
4. DIP Switch
5. L293D
6. Motor DC
7. Potensiomotor
Diagram Blok:
2. Prosedur Percobaan [Kembali]
+ Rangkai semua komponen
+ buat program di aplikasi arduino IDE
+ setelah selesai masukkan program ke arduino
+ jalankan program pada simulasi dan cobakan dengan modul
Prinsip Kerja
Rangkaian ini menggunakan komponen antara lain yaitu Arduino Uno, motor DC, LCD, PCF8574, DIP Switch, Driver L293D, Potensiometer, Baterai, Resistor, power supply, dan Ground.
Rangkaian ini memanfaatkan Arduino Uno sebagai pusat kendali, yang terhubung dengan motor DC dan LCD 16x2 untuk menampilkan informasi dan mengontrol gerakan motor. Untuk menampilkan informasi, Arduino memanfaatkan LCD 16x2. Namun, karena keterbatasan jumlah pin I/O yang dimiliki, perantara berupa PCF8574 dibutuhkan untuk menghubungkan keduanya. PCF8574 bertindak sebagai ekspander I/O, memperluas jangkauan pin Arduino sehingga dapat berinteraksi dengan LCD secara efisien.
Sementara itu, motor DC yang terhubung ke Arduino melalui pin digital akan berputar ke kanan. Arah putaran ini dikontrol oleh program yang diunggah ke Arduino. Lalu terdapat switch yang terhubung ke Arduino. Switch ini berfungsi untuk memicu interrupt yang mana ketika switch ditekan, interrupt dipicu. Interrupt ini menyebabkan program menunda sementara eksekusi fungsi utama dan beralih ke fungsi penanganan interrupt.
Selama interrupt aktif, program yang telah ditetapkan untuk menangani interrupt akan dijalankan. Dalam rangkaian ini, program yang dijalankan saat interrupt adalah menghentikan motor DC selama 4 detik. Selain menghentikan motor, fungsi penanganan interrupt juga dapat diprogram untuk menghentikan "Counting" pada LCD. Artinya, nilai hitungan yang ditampilkan pada LCD akan "membeku" pada angka terakhir yang ditampilkan saat tombol ditekan. Setelah durasi interrupt selesai (4 detik berlalu), program akan kembali menjalankan fungsi utama. Fungsi utama ini melanjutkan pengendalian motor dan penghitung mundur dari kondisi terakhir sebelum interupsi.
4. Flowchart dan Listing Program [Kembali]
Listing Program:
#include <Wire.h>
#include <LiquidCrystal_PCF8574.h>
// Inisialisasi pin
const int MOTOR_OUT1_PIN = 12; // Pin untuk kontrol motor (output 1)
const int MOTOR_OUT2_PIN = 13; // Pin untuk kontrol motor (output 2)
const int DIPSW_2_PIN = 2;
// Inisialisasi objek LCD
LiquidCrystal_PCF8574 lcd(0x27); // Alamat PCF8574
// Variabel global
volatile bool dipsw_2_state = false; // Volatile digunakan untuk variable yang bisa diakses secara asinkron oleh interrupt
void setup() {
// Inisialisasi pin mode
pinMode(MOTOR_OUT1_PIN, OUTPUT); // Mengatur pin motor sebagai output
pinMode(MOTOR_OUT2_PIN, OUTPUT); // Mengatur pin motor sebagai output
pinMode(DIPSW_2_PIN, INPUT_PULLUP); // Dipsw_2 menggunakan pull-up resistor
// Inisialisasi LCD
lcd.begin(16, 2);
// Attach interrupt untuk Dipsw_2
attachInterrupt(digitalPinToInterrupt(DIPSW_2_PIN), dipsw2Interrupt, CHANGE);
// Memulai motor berputar ke kanan
digitalWrite(MOTOR_OUT1_PIN, HIGH);
digitalWrite(MOTOR_OUT2_PIN, LOW);
}
void loop() {
// Tampilkan counting dari 100 sampai 0 di LCD
for (int i = 100; i >= 0; i--) {
lcd.setCursor(0, 0);
lcd.print("Counting: ");
lcd.print(i);
delay(1000); // Delay 1 detik
// Cek status Dipsw_2 setiap detik
if (dipsw_2_state) {
// Berhenti motor selama 4 detik jika Dipsw_2 aktif
digitalWrite(MOTOR_OUT1_PIN, LOW);
digitalWrite(MOTOR_OUT2_PIN, LOW);
delay(4000); // Delay 4 detik
// Menghidupkan kembali motor berputar ke kanan setelah 4 detik
digitalWrite(MOTOR_OUT1_PIN, HIGH);
digitalWrite(MOTOR_OUT2_PIN, LOW);
}
}
}
// Fungsi interrupt untuk Dipsw_2
void dipsw2Interrupt() {
// Membaca status Dipsw_2
dipsw_2_state = digitalRead(DIPSW_2_PIN);
}
Pada kondisi 2 dari percobaan 2, Motor ke kanan,LCD menampilkan counting dari 100 sampai 0, interrupt maka motor DC berhenti 4 detik.
᭒ HTML↠ klik disini
᭒ Aplikasi↠ klik disini
᭒ Video Percobaan↠ klik disini
Tidak ada komentar:
Posting Komentar