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
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);
danpinMode(3, INPUT_PULLUP);
: Set pin 2 & 3 sebagai input dengan pull-up.attachInterrupt(0, ai0, RISING);
danattachInterrupt(1, ai1, RISING);
: Pasang interrupt pada pin 2 & 3, panggil fungsiai0()
danai1()
saat sinyal naik.loop()
: Cek jikacounter
berubah, lalu kirim ke serial.ai0()
danai1()
: Fungsi interrupt yang baca pin lain untuk tentukan arah putaran, lalu naikkan atau turunkancounter
.
Apa yang Akan Terjadi dengan Rotaty Enconder?
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.
Saat ini belum tersedia komentar.