Minggu, 08 Juni 2025

PERCOBAAN INTERUPSI EKSTERNAL PADA ARDUINO UNO : PENANGANAN SENSOR YANG SANGAT SENSITIF (SENSOR PIR ATAU HALL EFFECT)

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.

 

Tidak ada komentar:

Posting Komentar

Mari berdiskusi dan silahkan memberi komentar berupa kritik dan saran yang bersifat membangun ya sobat smua....!