Kategori
IoT

Praktek Rotary Encoder (IoT)

Pengertian Rotary Encoder

Rotary encoder, juga disebut shaft encoder, yaitu perangkat elektro-mekanis yang mengubah posisi sudut atau gerakan poros atau gandar menjadi sinyal keluaran analog atau digital.

Komponen ini memiliki dua pin keluaran yang menghasilkan sinyal pulsa yang diproses dahulu untuk mendapatkan arah putarannya.

Rotary Encoder menggunakan 2 pin untuk mendeteksi adanya pergerakan. Pin CLK (A) dan DT (B) yang memberikan pulsa HIGH dan LOW sesuai dengan putaran encoder yang diberikan.Cara Kerja

Rotary Encoder biasa digunakan pada berbagai banyak hal, terutama pada mesin otomatis.

Contoh: pemotong bahan otomatis, robot lengan pemindah barang, pengatur RPM motor, dll.

Rangkaian Rotary Encoder

Kode Program

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);

#define ENCODER_CLK 2
#define ENCODER_DT  3
#define ENCODER_SW  4

int counter = 0;

void setup() {
  // Initialize LCD
  lcd.init();
  lcd.backlight();

  // Initialize encoder pins
  pinMode(ENCODER_CLK, INPUT);
  pinMode(ENCODER_DT, INPUT);
  pinMode(ENCODER_SW, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(ENCODER_CLK), readEncoder, FALLING);
}

void readEncoder() {
  int dtValue = digitalRead(ENCODER_DT);
  if (dtValue == HIGH) {
    counter++; // Clockwise
  }
  if (dtValue == LOW) {
    counter--; // Counterclockwise
  }
}

// Get the counter value, disabling interrupts.
// This make sure readEncoder() doesn't change the value
// while we're reading it.
int getCounter() {
  int result;
  noInterrupts();
  result = counter;
  interrupts();
  return result;
}

void resetCounter() {
  noInterrupts();
  counter = 0;
  interrupts();
}

void loop() {
  lcd.setCursor(3, 0);
  lcd.print("Counter:");
  lcd.setCursor(7, 1);
  lcd.print(getCounter());
  lcd.print("        ");

  if (digitalRead(ENCODER_SW) == LOW) {
    resetCounter();
  }
}

Jalankan Program

  • Klik Rotary Encoder, Klik panah ke kanan (searah jarum jam) untuk menambah nilai counter.
  • Klik panah ke kiri (berlawanan arah jarum jam) untuk mengurangi nilai counter.
  • Klik rotary encoder (tengah), untuk mereset nilai counter.
  • Klik Stop Simulation untuk menghentikan simulasi.

Ref : [1][2][3]