ArduinoEğitim

Arduino ile Rotary Encoder Kullanımı

Rotary Encoder Nedir?

Rotary Encoder (Döner Kodlayıcı), bir milin (şaftın) dönme hareketini algılayarak bunu elektriksel sinyallere çeviren elektro-mekanik bir sensördür. Bu sinyaller sayesinde dönme yönü, açısal konum, hız ve adım sayısı gibi bilgiler hassas bir şekilde ölçülebilir. Özellikle otomasyon sistemlerinden robotik projelere, CNC makinelerinden kullanıcı arayüzlerine kadar geniş bir kullanım alanına sahiptir.

Temel olarak Rotary Encoder’ler, mekanik hareketi dijital veya analog sinyallere dönüştürerek elektronik sistemlerin fiziksel hareketi “anlamasını” sağlar.

Rotary Encoder Ne İşe Yarar?

Bir Rotary Encoder sayesinde:

  • Milin hangi yönde döndüğü (sağa/sola)
  • Ne kadar döndüğü (açı bilgisi)
  • Ne hızla döndüğü (RPM)
  • Kaç adım ilerlediği (pulse sayısı)

gibi kritik veriler elde edilir. Bu nedenle özellikle hassas konum kontrolü gerektiren sistemlerde vazgeçilmez bir bileşendir.

Rotary Encoder Çeşitleri

Rotary Encoder’ler genel olarak iki ana gruba ayrılır:

1. Incremental (Artımlı) Encoder

  • En yaygın kullanılan tiptir.
  • Dönüş sırasında belirli sayıda pulse (darbecik) üretir.
  • Başlangıç konumunu bilmez, sadece hareketi takip eder.
  • Arduino projelerinde sıkça tercih edilir.

2. Absolute (Mutlak) Encoder

  • Her konum için benzersiz bir dijital değer üretir.
  • Enerji kesilse bile konum bilgisi kaybolmaz.
  • Endüstriyel uygulamalarda daha yaygındır.

Çalışma Prensibi

Rotary Encoder’lerin çalışma mantığı genellikle optik algılama teknolojisine dayanır.

Encoder içerisinde:

  • Üzerinde çizgiler veya delikler bulunan bir kod diski
  • Işık kaynağı (genellikle LED)
  • Işık algılayıcı (fotodiyot veya fotosensör)

bulunur.

Disk döndükçe:

  • Üzerindeki desenler ışığı keser veya geçirir.
  • Bu değişim algılayıcı tarafından elektrik sinyaline dönüştürülür.
  • Sonuç olarak kare dalga (pulse) sinyalleri elde edilir.

Bu sinyaller mikrodenetleyiciler (örneğin Arduino) tarafından okunarak yorumlanır.

OVW6-10-2HC 600 Pulse Rotary Encoder

Direnc.net stoklarında bulunan OVW6-10-2HC 600 Pulse Rotary Encoder, hassas ölçüm gerektiren uygulamalar için oldukça ideal bir üründür.

Öne çıkan özellikleri:

  • 600 PPR (Pulse Per Revolution) çözünürlük
  • Yüksek hassasiyetli konum algılama
  • Endüstriyel kullanım için uygun yapı
  • Stabil ve güvenilir sinyal çıkışı

Bu tip yüksek pulse değerine sahip encoder’lar, özellikle motor kontrolü ve hassas pozisyonlama uygulamalarında büyük avantaj sağlar.

Arduino ile Rotary Encoder Kullanımı

Rotary Encoder’ler Arduino ile oldukça kolay bir şekilde kullanılabilir. Genellikle 3 temel pin üzerinden bağlantı yapılır:

  • CLK (Clock) → Darbe sinyali
  • DT (Data) → Yön bilgisi
  • SW (Switch) → Buton (varsa)

Arduino, CLK ve DT pinlerinden gelen sinyalleri karşılaştırarak dönüş yönünü ve miktarını hesaplar.

Kullanım alanları:

  • Menü kontrolü (buton yerine encoder kullanımı)
  • Motor hız kontrolü
  • Robotik kol pozisyonlama
  • Ses kontrol (volume knob)
  • CNC ve 3D printer sistemleri

Rotary Encoder Avantajları

Mikrodenetleyiciler ile kolay entegrasyon

Temassız (optik) çalışma → uzun ömür

Yüksek hassasiyet

Gürültüye karşı dayanıklılık

Hızlı tepki süresi

Rotary Encoder

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.

Rotary Encoder OVW6-10-2HC 600 Pulse ürününün 5 tane kablo çıkışı bulunmaktadır. Ürünün etiketi üzerinde yazılmaktadır. Kırmızı kablo +5V, Siyah kablo GND, Sarı kablo A fazı, Yeşil kablo B fazıdır. Diğer kablo kullanılmamaktadır. Bağlantı şemamız şöyledir:

Arduino Rotary Encoder

Bağlantılar sağlandıktan sonra kodu, Arduino Ana Board’a atıyoruz. Arduino uygulamasından yeni bir sayfa açıp hazırlamış olduğumuz kodu yazıyoruz:

volatile unsigned int temp, counter = 0; //Bu değişkenleri encoder hareket ederken ve daha önceki konumu ile karşılaştırmak için kullanacağız
    
void setup() {
  Serial.begin (9600);
  pinMode(2, INPUT_PULLUP); // Encoderden çıkan yeşil yada sarı kabloyu Arduinonun 2. pinine
  pinMode(3, INPUT_PULLUP); // Encoderden çıkan yeşil yada sarıdan hangisikaldıysa kabloyu Arduinonun 3. pinine 
  
  /*  Aşağıda "interrupt" dediğimiz bölme,araya girme anlamları olan fonksiyonları tanımlıyoruz burada temel mantık şu;
   *  Bu pinlerdeki sinyalde değişiklik olduğu anda işlemci yaptığı işi yarım bırakıp bu pine bağlı fonksiyonu yapıp normal işlemlerine geri dönecek.
   *  Bu işlemi yaptırtabilemek için bu pinlere interrupt koyduğumuzu belirten kodu yazıyoruz.
   */
  
  
  //Burada 2 numaralı pinde sinyal seviyesi yükselidinde "Interrupt_fonksiyonu1" i çalıştır diyoruz
  attachInterrupt(digitalPinToInterrupt(2), Interrupt_fonksiyonu1, RISING);
   
  //Burada 3 numaralı pinde sinyal seviyesi yükselidinde "Interrupt_fonksiyonu2" i çalıştır diyoruz
  attachInterrupt(digitalPinToInterrupt(3), Interrupt_fonksiyonu2, RISING);
  }

  //Yukarıdaki kodda "Interrupt_fonksiyonu1" ve "Interrupt_fonksiyonu2" içerisinde ne olacağını en aşağıda belirledik
   
  void loop() {
  // Aşağıdaki if kodunda elimizdeki "counter" değeri ile kayıtlı olan "temp" değeri aynı mı onu kontrol ediyoruz aynı ise işlem yapmıyoruz fakat farklı 
  // ise "counter" değerimizi serial porta yazdırıyoruz ve yeni counter değerimizi "temp" değerine kayıt ediyoruz
 
  if( counter != temp ){
  Serial.println (counter);
  temp = counter;
  }
  }
   
  void Interrupt_fonksiyonu1() { 
    // bu fonksiyon 2 numaralı pinde sinyal değerimiz yükseldiğinde çalışıyor diğer pinin sinyaline bakıp saat yönünde yada tersine döndüğünü tayin ediyoruz
    // dönüş yönüne göre değeri arttırıp azaltıyoruz
  if(digitalRead(3)==LOW) {
  counter++;
  }else{
  counter--;
  }
  }
   
  void Interrupt_fonksiyonu2() {
     // bu fonksiyonda aynı üsteki fonksiyon gibi 3 numaralı pinde sinyal değerimiz yükseldiğinde çalışıyor diğer pinin sinyaline bakıp saat yönünde yada tersine döndüğünü tayin ediyoruz
    // dönüş yönüne göre değeri arttırıp azaltıyoruz
  if(digitalRead(2)==LOW) {
  counter--;
  }else{
  counter++;
  }
  }

Rotary Encoder’in şaftını/milini parmağımızla döndürdüğümüzde, Arduino Seri Port ekranından değişimi gözlemleyebilmemiz mümkün.

Rotary Encoder ürünü endüstriyel kontrol cihazlarında, robotik uygulamalarda, fotoğraf lenslerinde, bilgisayar mause’larında ve dönen radar platformlarında vs. kullanılmaktadır.

İlgili Makaleler

Bir Yorum

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu