• Forumu şuan da Ziyaretçi olarak görüntülüyorsunuz. Forum ziyaretçileri tüm konu ve bağlantıları görüntüleyemez ve kaynaklara erişimi yoktur. Eğer üye iseniz buradan üye girişi yapın ya da burayı tıklayarak şimdi üye olun.
  • Ubden® Topluluk Projelerine, Aracılığınızla Destek Vermektedir.

    Topluluk projelerine katkı yapmak ve topluğumuza ulaşan genç girişimcilere destek olmak için Buradaki  bağlantıdan işlem kanallarına ulaşabilirsiniz.

    Desteklerinizle 7.000 kişilik bir ekosistem olduk ve büyümeye devam ediyoruz. Desteğiniz için teşekkürler.

Arduino ile Rotary Encoder Kullanımı

  • Konbuyu başlatan Fırat Ürper
  • Başlangıç tarihi
F

Fırat Ürper

Misafir
Misafir
Rotary Encoder Nedir?

Bu yazımızda Arduino ile Rotary Encoder kullanımını ele alacağız. Öncelikle Rotary Encoder’in tanımına değinelim. Türkçe karşılığı “Döner Kodlayıcı” olan Rotary Encoder’ler, şaftındaki/milindeki harekete bağlı olarak elektriksel sinyal üreten ve bu sinyal yardımı ile şaftın/milin konumunu tespit etmemize yarayan bir elektro-mekanik cihazdır.

Direnc.net stoklarında çok sayıda encoder ürünü mevcuttur. Bizler bu yazımızda Rotary Encoder OVW6-10-2HC 600 Pulse ürünü üzerine duracağız. Ancak öncesinde Rotary Encoder’lerin çalışma mantığına değinelim.

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


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.

The post
Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
appeared first on
Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
.

Bu bağlantıyı görüntüleyebilmek için kayıt olmalı zaten üyeyseniz üye girişi yapmalısınız.
 
Üst