Site icon Teknikerler

Arduino Rotary Encoder – Sonsuz Potans – iRE – Rotary Enkoder – 63 –

rotary_encoder_63

rotary_encoder_63

Arduino Rotary Encoder – Sonsuz Potans – iRE – Rotary Enkoder  nedir? Nasıl çalışır? Özellikleri nelerdir?

Encoder (Sinyal üretici), bir milin dönme ya da ötelenme hareketine karşılık, sayısal bir elektrik sinyali üreten elektromekanik bir mekanizmadır. Bu kodlayıcılar konum, sayım, hız veya yönü belirlemek için geri bildirim sinyali gönderir.

Encoderler, sinyal oluşturabilmek için mekanik, manyetik, optik ve dirençli sistemlerini kullanır. Optik algılamada encoder ışık kesitine bağlı olarak geri bildirim sağlar.

Rotary encoder;

rotary_encoder

Optik algılama teknolojisinin kullanıldığı Rotary Encoder cihazlarında, üzerinde mat çizgiler ve desenler bulunan bir dahili kod diskinin dönmesi üzerine işlem görür. Disk, bir LED gibi bir ışık demeti içinde döndürülür. Disk üzerindeki desenler, ışığı engeller veya önünü açar.

rotary-encoder-disk

Dahili bir foto-diyot veya foto-transistör, değişen ışık demetini algılar. Ardından Rotary Encoder çıkışı, değişen ışık demetini harici bir kontrol sistemine ileterek bir elektrik sinyali oluşturur.

Arduino Rotary Encoder – Sonsuz Potans – iRE – Rotary Enkoder dendiği zaman hobi projeleri yapılabildiği gibi endüstriyel amaçlı da kullanılabilmektedir. Bu yazımızda arduino ile rotary encoder kullanımını kavrayacağız ve bir örnek ile rotary encoder kullanarak servo motor kontrolü yapacağız.

encoder_şema_1

 

//Görsel İşitsel Teknoloji Kanalı
//wwww.teknikerler.com
//Kerim Arı Youtube kanalı Rotary Encoder Kodları - kullanımı örnek Kodları



#define buton 4
#define dt_pin 5
#define clk_pin 6

int sayac = 0;
int ilk_durum;
int son_durum;
int btn_durum;

void setup() {
  pinMode (dt_pin, INPUT);
  pinMode (clk_pin, INPUT);
  pinMode (buton, INPUT);

  Serial.begin (9600);
  son_durum = digitalRead(dt_pin);

}

void loop() {
 
  ilk_durum = digitalRead(dt_pin);

  if (ilk_durum != son_durum) {

    if (digitalRead(clk_pin) != ilk_durum) {
      sayac ++;

    } else {
      sayac --;

    }
    Serial.print("Pozisyon: ");
    Serial.println(sayac);

  }
  son_durum = ilk_durum;

////////////////////// buton kısmı //////////////////
  btn_durum = digitalRead(buton);
  if (btn_durum == LOW)

  {

    Serial.println("Butona Basıldı ");
    delay(250);
    sayac = 0;

  }




}

Servo Motor kontrolü için aşağıdaki şemayı ve kodları kullanabilirsiniz.

encoder_şema_2

 

//Görsel İşitsel Teknoloji Kanalı
//wwww.teknikerler.com
//Kerim Arı Youtube kanalı Rotary Encoder ile Servo Kodları - kullanımı örnek Kodları



#define buton 4
#define dt_pin 5
#define clk_pin 6

#include <Servo.h>
Servo servo_git;



int sayac = 0;
int ilk_durum;
int son_durum;
int btn_durum;
int servo_konum;

void setup() {

  Serial.begin (9600);
  pinMode (dt_pin, INPUT);
  pinMode (clk_pin, INPUT);
  pinMode (buton, INPUT);
  servo_git.attach(9);
  son_durum = digitalRead(dt_pin);

}

void loop() {

  ilk_durum = digitalRead(dt_pin);

  if (ilk_durum != son_durum) {

    if (digitalRead(clk_pin) != ilk_durum) 
    {
       sayac ++;
    } 
    else
    {
      sayac --;
    }
    
    Serial.print("Pozisyon: ");
    Serial.println(sayac);
 }

  son_durum = ilk_durum;

  ////////////////////// buton kısmı //////////////////
  
  btn_durum = digitalRead(buton);
  if (btn_durum == LOW)

  {
    Serial.println("Butona Basıldı ");
    delay(250);
    sayac = 0;
  }

 ////////////////Servo Kontrol///////////

  servo_konum = sayac;
  if (sayac >= 180)  servo_konum = 180;
  if (sayac <= 0)    servo_konum = 0;
  if (sayac <= 0 || sayac >= 180) sayac = servo_konum;

  servo_git.write(servo_konum);


}
Exit mobile version