Jenis Rotary Encoder

Rotary encoder terdiri dari dua komponen utama: poros yang berputar dan elemen sensor. Saat poros berputar, elemen sensor menghasilkan pulsa listrik yang sesuai dengan putaran tersebut. Dua jenis utama rotary encoder adalah encoder inkremental dan encoder absolut.

1. Rotary Encoder Incremental

Encoder incremental menghasilkan pulsa elektrik ketika poros berputar, dan frekuensi pulsa ini meningkat atau berkurang sesuai dengan kecepatan dan arah rotasi. Ini memberikan informasi tentang perubahan sudut atau pergerakan relatif dari posisi awalnya. Jumlah pulsa yang dihasilkan dalam satu putaran penuh dari poros encoder inkremental disebut “resolusi.”

Rotary encoder incremental cocok untuk aplikasi di mana Anda perlu mengetahui perubahan relatif dalam rotasi, seperti mengukur putaran roda kendaraan atau memantau kecepatan rotasi mesin.

2. Rotary Encoder Absolute

Encoder absolut memberikan informasi yang sangat akurat tentang posisi sudut. Ini memiliki beberapa jalur yang menghasilkan kode biner unik yang mewakili posisi sudut yang tepat dari poros. Ketika poros berputar, kode biner ini membantu menentukan sudutnya dengan presisi tinggi.

Encoder absolut sering digunakan dalam aplikasi di mana pengetahuan tentang posisi yang akurat diperlukan, seperti dalam robotik, mesin CNC, dan sistem kontrol industri yang rumit.

Alat dan Bahan yang Diperlukan

Untuk menjalankan proyek ini, berikut yang kamu butuhkan :

  • Rotaty Encoder
  • Arduino Uno
  • Breadboard dan kabel jumper
  • Software:
    • Arduino IDE

Wiring Rangkaian Rotaty Enconder

Susun rangkaian dengan panduan seperti ini:

  • Pin VCC ke 5v
  • Pin GND ke GND
  • Pin A (putih) ke pin 2
  • Pin B (hijau) ke pin 3

Wiring Rangkaian Rotaty Enconder dengan Arduino Uno

Gambar 1. Wiring Rangkaian Rotaty Enconder dengan Arduino Uno

Menulis Program Data Rotaty Enconder

Setelah semua komponen terpasang, buka software Arduino IDE dan tulis kode berikut :

volatile unsigned int temp, counter = 0; 
    
void setup() {
  Serial.begin (9600);

  pinMode(2, INPUT_PULLUP); 
  pinMode(3, INPUT_PULLUP); 
  attachInterrupt(0, ai0, RISING);
  attachInterrupt(1, ai1, RISING);
  }
   
  void loop() {
  if( counter != temp ){
  Serial.println (counter);
  temp = counter;
  }
  }
   
  void ai0() {
  if(digitalRead(3)==LOW) {
  counter++;
  }else{
  counter--;
  }
  }
   
  void ai1() {
  if(digitalRead(2)==LOW) {
  counter--;
  }else{
  counter++;
  }
  }

Penjelasan Kode

  • volatile unsigned int temp, counter;: Variabel yang bisa berubah di interrupt, untuk hitung dan simpan nilai.
  • pinMode(2, INPUT_PULLUP); dan pinMode(3, INPUT_PULLUP);: Set pin 2 & 3 sebagai input dengan pull-up.
  • attachInterrupt(0, ai0, RISING); dan attachInterrupt(1, ai1, RISING);: Pasang interrupt pada pin 2 & 3, panggil fungsi ai0() dan ai1() saat sinyal naik.
  • loop(): Cek jika counter berubah, lalu kirim ke serial.
  • ai0() dan ai1(): Fungsi interrupt yang baca pin lain untuk tentukan arah putaran, lalu naikkan atau turunkan counter.

Apa yang Akan Terjadi dengan Rotaty Enconder?

Hasil Percobaan Rangkaian Rotaty Enconder dengan Arduino Uno

Gambar 2. Hasil Percobaan Rangkaian Rotaty Enconder dengan Arduino Uno

Ketika kode di upload, maka hasil percobaan menunjukkan bahwa sistem berhasil membaca perubahan posisi dari rotary encoder secara real-time menggunakan interrupt pada pin 2 dan 3. Saat poros encoder diputar, nilai counter bertambah atau berkurang sesuai arah putaran, dan nilai tersebut ditampilkan melalui Serial Monitor. Hal ini membuktikan bahwa kombinasi interrupt dan pembacaan logika pada kedua pin mampu mendeteksi arah rotasi dengan akurat. Tidak terjadi lonjakan atau pembacaan ganda karena penggunaan INPUT_PULLUP dan metode deteksi pada sinyal naik (RISING) yang mengurangi noise.