ENCODER MODÜLÜ
Encoder sensör modülü, giriş birimi olarak kullanılan bir modüldür. Encoder yönü değiştiğinde farklı dijital çıkış vermektedir.
Arduino uyumlu Rotary Encoder / Döner Enkoder Modülü çeşitli projelerde kolayca kullanabileceğiniz bir giriş birimidir. 5V ile çalışan bu encoder çıkışları dijital olup saat yönünde farklı saat yönünün tersinde farklı çıkış vermektedir.
Nerede Kullanılır?
Arduino ile robotik kodlama projelerinde rotary enkoder modülü ile ekranlar için menüler yapabilirsiniz. Sonsuz turdaki dönüş özelliği sayesinde özellikle LCD ekran projelerinde sıkça kullanılmaktadır.
Çalışma Voltajı | 5V DC |
Data Çıkışı | Dijital |
En | 40.58mm |
Boy | 52.3mm |
Vida Delik Çapı | 3.2mm |
Bu projede encoder sensör modülü, okuduğu değeri seri porta yazdıracaktır. Encoder çevrildiğinde okuduğu değer değişecektir. Projede rotary enkoder modülü ile Arduino Uno Breadboard kullanılmıştır.
Encoder Modülü | Arduino Uno Breadboard |
- | 5V |
+ | GND |
D1 | D3 |
D2 | D2 |
Örnek Proje Arduino Kodu
/* ALPGEN Robotics // Encoder Modülü Kullanımı// 15.05.2021 // Soru ve Yardım İçin: proje@alpgenrobotics.com// www.alpgenrobotics.com */volatileunsignedinttemp,counter=0;//Bu değişkenleri encoder hareket ederken ve daha önceki konumu ile karşılaştırmak için kullanacağız voidsetup(){ Serial.begin(9600); pinMode(2,INPUT_PULLUP);// Arduinonun 2. pininin giriş ve dahili PULLUP dirençli olduğunun tanımlanması pinMode(3,INPUT_PULLUP);// Arduinonun 3. pininin giriş ve dahili PULLUP dirençli olduğunun tanımlanması /* 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 voidloop(){ // 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; } } voidInterrupt_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--; } } voidInterrupt_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++; } }