PERCOBAAN INTERUPSI EKSTERNAL PADA ARDUINO UNO
PENANGANAN SENSOR YANG
SANGAT SENSITIF (SENSOR PIR ATAU HALL EFFECT)
a. Deskripsi:
Program ini menghitung putaran roda
menggunakan rotary encoder. Dengan mendeteksi pulsa dari encoder, Arduino dapat
menentukan kecepatan atau jarak tempuh roda berdasarkan jumlah pulsa yang
terdeteksi. Rotary encoder adalah sensor elektromekanis yang mengubah gerakan
rotasi menjadi sinyal digital. Sinyal ini dapat diolah oleh Arduino untuk
menghitung jumlah putaran roda dan menentukan arah putaran.
Dasar teori yang digunakan dalam program ini adalah prinsip kerja rotary encoder yang menghasilkan sinyal pulsa saat porosnya berputar. Dengan menggunakan dua jalur sinyal (A dan B), Arduino dapat membedakan arah putaran berdasarkan urutan pulsa yang diterima. Dengan menerapkan interupsi, sistem dapat membaca perubahan sinyal secara cepat dan akurat tanpa harus terus-menerus memeriksa status encoder dalam loop utama.
b. Bahan:
·
Rotary encoder (1 Buah)
· Arduino Uno (1 Buah)
c. Gambar
Schematich.
d.
Kode Sketch Program:
volatile
bool motionDetected = false;
void
setup() {
pinMode(13,
OUTPUT);
attachInterrupt(digitalPinToInterrupt(2),
detectMotion, RISING);
}
void
loop() {
if (motionDetected) {
digitalWrite(13, HIGH);
delay(5000);
digitalWrite(13, LOW);
motionDetected = false;
}
}
void
detectMotion() {
motionDetected = true;
}
e. Penjelasan
Program :
·
Menggunakan interupsi eksternal untuk menangani
sinyal dari sensor PIR atau Hall Effect.
·
Variabel volatile bool motionDetected = false;
o Menyimpan
status deteksi gerakan atau perubahan medan magnet.
o volatile
digunakan agar nilai ini dapat berubah kapan saja akibat interupsi.
·
Fungsi setup()
o pinMode(13,
OUTPUT); → Mengatur pin 13 sebagai output untuk mengendalikan LED.
o attachInterrupt(digitalPinToInterrupt(2),
detectMotion, RISING);
§ Menghubungkan
interupsi ke pin 2 untuk mendeteksi perubahan sinyal sensor.
§ Memanggil
fungsi detectMotion() saat terjadi transisi dari LOW ke HIGH.
·
Fungsi loop()
o Jika
motionDetected bernilai true, LED pada pin 13 akan menyala selama 5 detik.
o digitalWrite(13,
HIGH); → Menyalakan LED sebagai indikasi deteksi gerakan.
o delay(5000);
→ Menahan LED menyala selama 5 detik.
o digitalWrite(13,
LOW); → Mematikan LED setelah jeda waktu selesai.
o motionDetected
= false; → Mengembalikan status deteksi ke kondisi awal setelah LED mati.
·
Fungsi detectMotion()
o motionDetected
= true; → Mengubah status deteksi menjadi true saat interupsi dipicu.