Jumat, 06 Juni 2025

PERCOBAAN INTERUPSI EKSTERNAL PADA ARDUINO UNO : PENGUKUR KECEPATAN ATAU JARAK (ENCODER)

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()

counter--; → Mengurangi nilai counter saat encoder berputar ke arah sebaliknya.

Tidak ada komentar:

Posting Komentar

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