PERCOBAAN INTERUPSI EKSTERNAL PADA ARDUINO UNO
PENGUKUR KECEPATAN ATAU JARAK (ENCODER)
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
int counter = 0;
void
setup() {
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(2),
increment, RISING);
attachInterrupt(digitalPinToInterrupt(3),
decrement, RISING);
}
void
loop() {
Serial.println(counter);
delay(500);
}
void
increment() {
counter++;
}
void
decrement() {
counter--;
}
e. Penjelasan
Program :
·
Menggunakan interupsi eksternal untuk mendeteksi
perubahan sinyal dari rotary encoder.
·
Variabel volatile int counter = 0;
o Menyimpan
nilai hitungan dari putaran encoder.
o volatile
digunakan agar nilai ini dapat berubah kapan saja karena dipengaruhi oleh
interupsi.
·
Fungsi setup()
o Serial.begin(9600);
→ Menginisialisasi komunikasi serial dengan baud rate 9600.
o attachInterrupt(digitalPinToInterrupt(2),
increment, RISING);
§ Menghubungkan
interupsi ke pin 2 untuk mendeteksi kenaikan sinyal (RISING).
§ Memanggil
fungsi increment() setiap kali terjadi perubahan dari LOW ke HIGH.
o attachInterrupt(digitalPinToInterrupt(3),
decrement, RISING);
§ Menghubungkan
interupsi ke pin 3 untuk mendeteksi perubahan arah putaran encoder.
§ Memanggil
fungsi decrement() saat terjadi transisi dari LOW ke HIGH pada pin 3.
·
Fungsi loop()
o Serial.println(counter);
→ Mencetak nilai counter ke serial monitor setiap 500ms.
o delay(500);
→ Menambahkan jeda untuk mempermudah membaca nilai di serial monitor.
·
Fungsi increment()
o counter++;
→ Menambah nilai counter saat encoder berputar ke satu arah.
·
Fungsi decrement()
Tidak ada komentar:
Posting Komentar
Mari berdiskusi dan silahkan memberi komentar berupa kritik dan saran yang bersifat membangun ya sobat smua....!