Percobaan 2
Interrupt Arduino
1. Arduino Uno
2. LCD
3. Sensor LDR (ADC)
8. Baterai
9. Resistor
10. Power Supply
11. Ground
1. Susun semua elemen perangkat
2. Buatlah sebuah skrip di dalam aplikasi Arduino IDE
3. Setelah selesai, unggulkan skrip ke papan Arduino
4. Aktifkan skrip dalam simulasi dan uji dengan modul yang ada
Rangkaian Simulasi
Prinsip Kerja
Rangkaian ini melibatkan beberapa komponen, termasuk Arduino Uno, motor DC, LCD 16x2, PCF8574, DIP Switch, Driver L293D, Potensiometer, Baterai, Resistor, power supply, dan Ground. Arduino Uno berperan sebagai otak utama dalam rangkaian ini, terhubung dengan motor DC dan LCD 16x2 untuk mengontrol gerakan motor dan menampilkan informasi. LCD 16x2 digunakan untuk menampilkan informasi, namun karena keterbatasan pin I/O pada Arduino Uno, PCF8574 digunakan sebagai ekspander I/O untuk menghubungkan keduanya. PCF8574 bertindak sebagai perantara, memperluas jangkauan pin Arduino sehingga dapat berinteraksi dengan LCD secara efisien. Motor DC dikontrol oleh Arduino melalui pin digital untuk berputar ke kanan, dan arah putarannya dikendalikan oleh program yang diunggah ke Arduino. Terdapat juga switch yang terhubung ke Arduino, yang berfungsi sebagai pemicu interrupt. Ketika switch ditekan, interrupt dipicu, yang menyebabkan program menunda sementara eksekusi fungsi utama dan beralih ke fungsi penanganan interrupt. Selama interrupt aktif, program yang telah ditetapkan akan dijalankan, dimana dalam rangkaian ini, program yang dijalankan saat interrupt adalah menghentikan motor DC selama 4 detik. Fungsi penanganan interrupt juga dapat diprogram untuk menghentikan "Counting" pada LCD, sehingga nilai hitungan yang ditampilkan pada LCD akan tetap pada angka terakhir yang ditampilkan saat tombol ditekan. Setelah durasi interrupt selesai (4 detik berlalu), program akan kembali menjalankan fungsi utama, melanjutkan pengendalian motor dan penghitung mundur dari kondisi terakhir sebelum interupsi. Potensiometer digunakan untuk mengatur kontras layar LCD, sedangkan resistor berfungsi untuk membatasi arus pada rangkaian agar berjalan dengan baik dan terhindar dari kerusakan akibat arus atau tegangan yang berlebihan.
Listing Program:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat LCD I2C dan ukuran (16 karakter, 2 baris)
volatile boolean interrupted = false; // Flag untuk interupsi
const int motorPin1 = 12; // Pin untuk kontrol motor (output 1)
const int motorPin2 = 13; // Pin untuk kontrol motor (output 2)
const int interruptPin = 2; // Pin yang digunakan untuk interupsi
unsigned int counter = 100; // Variabel untuk menghitung mundur
void setup() {
pinMode(motorPin1, OUTPUT); // Mengatur pin motor sebagai output
pinMode(motorPin2, OUTPUT); // Mengatur pin motor sebagai output
pinMode(interruptPin, INPUT_PULLUP); // Mengatur pin interupsi sebagai input dengan resistor pull-up
attachInterrupt(digitalPinToInterrupt(interruptPin), stopMotor, RISING); // Mengaktifkan interupsi pada pin 2 (FALLING = terjadi ketika tegangan turun)
// Inisialisasi LCD
lcd.init();
lcd.backlight(); // Nyalakan pencahayaan belakang LCD
lcd.clear(); // Bersihkan layar LCD
}
void loop() {
while (true) {
lcd.setCursor(0, 0); // Set kursor ke baris 1 kolom 1
lcd.print("Countdown: "); // Tampilkan teks "Countdown: "
// Menambahkan angka nol di depan jika counter kurang dari 100
if (counter < 100) {
lcd.print("0"); // Tambahkan angka nol di depan
}
// Menambahkan angka nol di depan jika counter kurang dari 10
if (counter < 10) {
lcd.print("0"); // Tambahkan angka nol di depan
}
lcd.print(counter); // Tampilkan nilai counter
digitalWrite(motorPin1, LOW); // Aktifkan motor (putaran searah)
digitalWrite(motorPin2, HIGH);
delay(100); // Jeda 1 detik
if (counter == 0) {
// Jika mencapai 0, reset counter ke 100
counter = 100;
break; // Keluar dari loop saat mencapai 0
}
if(interrupted){
// Jika terjadi interupsi, keluar dari loop countdown
break;
}
counter--; // Kurangi nilai counter
}
digitalWrite(motorPin1, LOW); // Matikan motor setelah countdown selesai
digitalWrite(motorPin2, LOW);
if(interrupted){
// Matikan LCD
lcd.clear(); // Bersihkan layar LCD
lcd.noBacklight(); // Matikan pencahayaan belakang LCD
// Tunda selama 4 detik
delay(4000);
// Nyalakan kembali pencahayaan belakang LCD
lcd.backlight();
// Reset counter
counter = 100;
// Reset flag interupsi
interrupted = false;
}
}
void stopMotor() {
// Fungsi yang dipanggil saat interupsi terjadi
// Atur flag interupsi menjadi true
interrupted = true;
}
5. Kondisi [Kembali]
Motor ke kanan,LCD menampilkan counting dari 100 sampai 0, interrupt maka motor DC berhenti 4 detik
Download HTML
Download Rangkaian
Download Program
Download Video Simulasi
Download Datasheet SW-SPDT
Download Datasheet Sensor LDR
Download Datasheet Arduino Uno
Download Datasheet Motor DC
Download Datasheet L293D
Download Datasheet LCD 2x16