Tutorial Rotary Encoder Dengan Arduino

Rotary encoder adalah komponen elektronik yang mampu memonitor pergerakan dan posisi ketika berputar. Rotary encoder menggunakan sensor optik yang dapat menghasilkan pulsa ketika rotary encoder berputar. Aplikasi rotary encoder biasanya sebagai monitor gerak mekanis atau robot juga dapat digunakan untuk pemilihan menu pada layar. Rotary encoder memiliki dua output sehingga dapat membedakan antara rotasi negatif (CW) dan positif (CCW) dan juga memiliki satu tombol.

Langkah 1: Aliran Pulsa dari Rotary Encoder

Aliran pulsa yang dihasilkan oleh rotary encoder berikut seperti gambar di atas.

Langkah 2: Pinout dari Rotary Encoder

Penjelasan:

  • GND -> GND
  • + -> + 5V
  • SW -> tombol rotary encoder saat ditekan
  • DT -> Data
  • CLK -> Data 2

Salah satu pin DT atau CLK harus terhubung ke kaki interupsi Arduino Uno, atau keduanya DT dan CLK terhubung ke pin interrupt.

Langkah 3: Skema

  • GND à GND Arduino Uno
  • + à + 5V Arduino Uno
  • SW à PIN 4 Arduino Uno
  • DT à PIN 3 Arduino Uno
  • CLK à PIN2 Arduino Uno

Langkah 4: Kode

Dalam tutorial berikut, yang akan digunakan sebagai interupsi adalah PIN 2 Arduino Uno, sedangkan PIN 3 hanya digunakan sebagai input biasa.

#define encoder0PinA 2
#define encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; void setup () {Serial.begin (9600); pinMode (encoder0PinA, INPUT_PULLUP); pinMode (encoder0PinB, INPUT_PULLUP); pinMode (encoder0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, CHANGE); } int valRotary, lastValRotary; void loop () {int btn = digitalRead (encoder0Btn); Serial.print (btn); Serial.print (""); Serial.print (valRotary); if (valRotary> lastValRotary) {Serial.print ("CW"); } if (valRotary {

Serial.print ("CCW"); } lastValRotary = valRotary; Serial.println (""); keterlambatan (250); } membatalkan doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } else {encoder0Pos--; } valRotary = encoder0Pos / 2.5; }

Pada baris 10 sketsa di atas digunakan untuk mengaktifkan interupsi pin 2 Arduino Uno. Dalam fungsi "doEncoder" dihitung dari rotary encoder. Jika nilai DT dan CLK (pin interupsi dari Arduino Uno) adalah sama, maka variabel "encoder0Pos" akan bertambah / ditambahkan, di samping kondisi itu, variabel "encoder0Pos" dikurangi.

Langkah 5: Penjelasan

Nilai ValRotary adalah nilai dari jumlah langkah yang telah berjalan. Nilai ValRotary diperoleh dari nilai pembacaan encoder sensor putar dibagi 2, 5. Nilai 2, 5 diperoleh dari pengujian, karena satu langkah rotary encoder mungkin melebihi 1, jadi bagi dengan 2, 5 untuk nilainya menurut perstep dan juga penambahan penundaan baca.

Sedangkan pada saluran 19 - 25 adalah program untuk menentukan apakah rotary rotary encoder CW atau CCW. Penjelasan dari baris 19 - 25 adalah ketika pembacaan rotary encoder saat ini lebih besar dari data rotary sebelumnya kemudian dinyatakan sebagai CW. Sedangkan jika bacaan saat ini lebih kecil dari bacaan sebelumnya maka dinyatakan sebagai CCW.

Langkah 6: Keluaran

1 = nilai tombol mulai dari rotari ketika belum ditekan

Artikel Terkait