- Gerekli malzemeler
- Rotary Encoder Nasıl Çalışır?
- Rotary Enkoder Çeşitleri
- KY-040 Rotary Encoder Pinout ve açıklaması
- Arduino Rotary Enkoder Devre Şeması
- Arduino'nuzu Rotary Encoder için Programlama
- Rotary Enkoderin Arduino ile Çalışması
Bir döner kodlayıcı, bir sistem ile etkileşime kullanıcıya yardımcı olan bir giriş cihazıdır. Daha çok bir Radyo potansiyometresine benziyor, ancak uygulamasını benzersiz kılan bir darbe dizisi çıkarıyor. Kodlayıcının düğmesi döndürüldüğünde, küçük adımlar halinde dönerek, adım / Servo motor kontrolü, bir dizi menüde gezinme ve bir sayının değerini artırma / azaltma ve çok daha fazlası için kullanılmasına yardımcı olur.
Bu yazıda, farklı Rotary Encoder türleri ve nasıl çalıştıkları hakkında bilgi edineceğiz. Ayrıca Arduino ile arayüz oluşturacak ve Kodlayıcıyı döndürerek bir tamsayının değerini kontrol edecek ve değerini 16 * 2 LCD ekranda görüntüleyeceğiz. Bu eğitimin sonunda, projeleriniz için bir Rotary Encoder kullanma konusunda rahat olacaksınız. Öyleyse başlayalım…
Gerekli malzemeler
- Döner Kodlayıcı (KY-040)
- Arduino UNO
- 16 * 2 Alfanümerik LCD
- Potansiyometre 10k
- Breadboard
- Bağlantı telleri
Rotary Encoder Nasıl Çalışır?
Döner Kodlayıcı, elektromekanik bir dönüştürücüdür, yani mekanik hareketleri elektronik darbelere dönüştürür. Döndüğünde adım adım hareket eden ve her adım için önceden tanımlanmış genişlikte bir dizi darbe dizisi üreten bir düğmeden oluşur. Her biri kendi çalışma mekanizmasına sahip birçok Kodlayıcı türü vardır, türleri daha sonra öğreneceğiz, ancak şimdilik sadece KY040 Artımlı Kodlayıcıya odaklanalım çünkü onu eğitimimizde kullandığımız için.
Kodlayıcı için dahili mekanik yapı aşağıda gösterilmiştir. Temel olarak, bu dairesel diskin üzerine yerleştirilmiş iletken pedlere (bakır renkli) sahip dairesel bir diskten (gri renkli) oluşur. Bu iletken pedler, aşağıda gösterildiği gibi eşit mesafede yerleştirilir. Çıkış pimleri, düğme döndüğünde iletken pedler çıkış pimleri ile temas edecek şekilde bu dairesel diskin üzerine sabitlenmiştir. Burada, aşağıdaki şekilde gösterildiği gibi Çıkış A ve Çıkış B olmak üzere iki çıkış pini vardır.
Çıkış pini A ve Çıkış B tarafından üretilen çıkış dalga formu sırasıyla mavi ve yeşil renkte gösterilir. İletken ped doğrudan pimin altındayken, zamanında yükselir ve iletken ped uzaklaştığında pim düşük olur ve yukarıda gösterilen dalga formunun kapalı kalma süresine neden olur. Şimdi, darbe sayısını sayarsak, Kodlayıcının kaç adım taşındığını belirleyebiliriz.
Şimdi şu soru ortaya çıkabilir, düğme döndürülürken atılan adımların sayısını saymak için biri yeterliyken neden iki darbe sinyaline ihtiyacımız var? Bunun nedeni, topuzun hangi yönde döndürüldüğünü belirlememiz gerektiğidir. İki darbeye bakarsanız, ikisinin de 90 ° faz dışı olduğunu fark edebilirsiniz. Bu nedenle, düğme saat yönünde döndürüldüğünde, önce Çıkış A yükselecek ve düğme saat yönünün tersine döndürüldüğünde Çıkış B ilk önce yüksek olacaktır.
Rotary Enkoder Çeşitleri
Piyasada tasarımcı, uygulamasına göre birini seçebileceği birçok döner kodlayıcı türü vardır. En yaygın türler aşağıda listelenmiştir
- Artımlı Kodlayıcı
- Mutlak Kodlayıcı
- Manyetik Kodlayıcı
- Optik Kodlayıcı
- Lazer Kodlayıcı
Bu kodlayıcılar, Çıkış sinyali ve algılama teknolojisine göre sınıflandırılır, Artımlı Kodlayıcı ve Mutlak Kodlayıcılar Çıkış sinyaline göre sınıflandırılır ve Manyetik, Optik ve Lazer Kodlayıcı, Algılama Teknolojisine göre sınıflandırılır. Encoder burada kullanılan bir artımsal Encoder.
KY-040 Rotary Encoder Pinout ve açıklaması
KY-040 Artımlı tip döner kodlayıcının pin çıkışları aşağıda gösterilmiştir
İlk iki pin (Topraklama ve Vcc) Kodlayıcıya güç sağlamak için kullanılır, tipik olarak + 5V besleme kullanılır. Düğmeyi saat yönünde ve saat yönünün tersine döndürmenin yanı sıra, kodlayıcı ayrıca içindeki düğmeye basılarak basılabilen bir anahtar (Aktif düşük) içerir. Bu anahtardan gelen sinyal, pim 3 (Anahtar) aracılığıyla elde edilir. Son olarak, yukarıda tartışıldığı gibi dalga formlarını üreten iki çıkış pimine sahiptir. Şimdi Arduino ile nasıl arayüz oluşturacağımızı öğrenelim.
Arduino Rotary Enkoder Devre Şeması
Aşağıdaki resimde Arduino ile Rotary Encoder Arayüzü için eksiksiz devre şeması gösterilmektedir.
Döner Kodlayıcı, yukarıdaki etikette gösterilen sırada 5 pime sahiptir. İlk iki pin, Arduino'nun Ground ve + 5V pinine bağlı olan Ground ve Vcc'dir. Kodlayıcının anahtarı dijital pin D10'a bağlanır ve ayrıca 1k'lık bir dirençle yükseğe çekilir. İki çıkış pini sırasıyla D9 ve D8'e bağlanır.
Döner kodlayıcı döndürülerek artırılacak veya azaltılacak değişkenin değerini görüntülemek için bir ekran modülüne ihtiyacımız var. Burada kullanılan, yaygın olarak bulunan 16 * 2 Alpha sayısal LCD ekrandır. 4 bit modunda çalışacak ekranı bağladık ve Arduino'nun + 5V pinini kullanarak güç sağladık. Potansiyometre, LCD ekranın kontrastını ayarlamak için kullanılır. Arduino ile Arayüz LCD ekran hakkında daha fazla bilgi edinmek istiyorsanız bağlantıyı takip edin. Devrenin tamamı bir devre tahtasının üzerine inşa edilebilir, tüm bağlantılar yapıldıktan sonra aşağıda şöyle göründüm.
Arduino'nuzu Rotary Encoder için Programlama
Bir Rotary Encoder'ın çalışma prensibini anladıysanız, Arduino kartını bir Rotary Encoder ile arabirim oluşturacak şekilde programlamak oldukça kolay ve basittir. Kodlayıcının kaç dönüş yaptığını belirlemek ve kodlayıcının hangi yönde döndürüldüğünü bulmak için önce hangi darbenin yüksek gittiğini kontrol etmek için sadece darbe sayısını okumamız gerekir. Bu eğitimde, LCD'nin ilk satırında artan veya azalan sayıyı ve ikinci satırda Kodlayıcının yönünü göstereceğiz. Tüm program aynı şeyi bir bu sayfanın alt kısmında bulunabilir Gösterme video, herhangi bir kitaplık gerektirmez. Şimdi, çalışmayı anlamak için programı küçük parçalara ayıralım.
Bir LCD ekran kullandığımız için, Arduino IDE'de varsayılan olarak bulunan Sıvı kristal kütüphanesini dahil ediyoruz. Ardından LCD'yi Arduino ile bağlamak için pinler tanımlıyoruz. Son olarak bu pinlerdeki LCD ekranı başlatıyoruz.
#Dahil etmek
İnside Sonraki kurulum fonksiyonu, biz LCD ekranında bir tanıtım mesajı görüntüler ve ardından 2 saniye böylece ileti kullanıcının okunabilir hale getirecek bekleyin. Bu, LCD'nin düzgün çalıştığından emin olmak içindir.
lcd.print ("Döner Kodlayıcı"); // Giriş Mesajı 1. satır lcd.setCursor (0, 1); lcd.print ("Arduino ile"); // Giriş Mesajı 2. satır gecikmesi (2000); lcd.clear ();
Rotary encoder, Arduino için bir INPUT pin olacak üç çıkış pinine sahiptir. Bu üç pim sırasıyla Anahtar, Çıkış A ve Çıkış B'dir. Bunlar, aşağıda gösterildiği gibi pinMode işlevi kullanılarak Giriş olarak ilan edilir.
// pin Modu bildirimi pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
İçinde boşluk kurulum fonksiyonu, biz iğnenin son durumunu kontrol etmek için çıktı bir pin durumunu okuyun. Daha sonra bu bilgiyi, hangi pinin (Çıkış A veya Çıkış B) yüksek olduğunu kontrol etmek için yeni değerle karşılaştırmak için kullanacağız.
Previous_Output = digitalRead (Encoder_OuputA); // Çıkış A'nın başlangıç değerini okuyun
Son olarak ana döngü işlevinin içinde, hangisinin önce yüksek olduğunu kontrol etmek için Çıkış A ve Çıkış B'nin değerini Önceki Çıktıyla karşılaştırmalıyız. Bu, A ve B'nin akım çıkışının değerini aşağıda gösterildiği gibi önceki çıkışla basitçe karşılaştırarak yapılabilir.
if (digitalRead (Encoder_OuputA)! = Previous_Output) { if (digitalRead (Encoder_OuputB)! = Previous_Output) { Encoder_Count ++; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Saat yönünde"); }
Yukarıdaki kodda, eğer Çıkış B önceki çıktıdan değişmişse, ikinci if koşulu yürütülür. Bu durumda kodlayıcı değişkeninin değeri artar ve LCD, kodlayıcının saat yönünde döndürüldüğünü gösterir. Benzer şekilde, eğer koşul başarısız olursa, sonraki else koşulunda değişkeni azaltırız ve kodlayıcının saat yönünün tersine döndürüldüğünü gösteririz. Aynı kod aşağıda gösterilmiştir.
else { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Saat Yönünün Tersi"); } }
Son olarak, ana döngünün sonunda, önceki çıktı değerini mevcut çıktı değeriyle güncellemeliyiz, böylece döngü aynı mantıkla tekrarlanabilir. Aşağıdaki kod aynı şeyi yapar
Previous_Output = digitalRead (Encoder_OuputA);
Diğer bir isteğe bağlı şey, Kodlayıcı üzerindeki anahtara basılı olup olmadığını kontrol etmektir. Bu, döner kodlayıcı üzerindeki anahtar pimi kontrol edilerek izlenebilir. Bu pim aktif bir düşük pindir, yani düğmeye basıldığında aşağı inecektir. Basılmazsa, pim yüksek kalır, ayrıca, anahtara basılmadığında yüksek kalmasını sağlamak ve böylece kayan nokta durumunu önlemek için bir yukarı çekme direnci kullandık.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Anahtar basılı"); }
Rotary Enkoderin Arduino ile Çalışması
Donanım ve kod hazır olduğunda, kodu Arduino kartına yükleyin ve Arduino Kartını çalıştırın. Ya USB kablosuyla çalıştırabilir ya da 12V adaptör kullanabilirsiniz. Güç verildiğinde, LCD giriş mesajını göstermeli ve ardından kararmalıdır. Şimdi döner kodlayıcıyı döndürün ve döndürdüğünüz yöne göre değerin artmaya veya azalmaya başladığını görmelisiniz. İkinci satır, kodlayıcının saat yönünde mi yoksa saat yönünün tersine mi döndürüldüğünü gösterecektir. Aşağıdaki resim aynı şeyi gösteriyor
Ayrıca butona basıldığında ikinci satırda butona basıldığı gösterilecektir. Tam çalışma aşağıdaki videoda bulunabilir. Bu, Kodlayıcı ile Arduino arasında arayüz oluşturmak ve beklendiği gibi çalışıp çalışmadığını kontrol etmek için örnek bir programdır. Buraya geldiğinizde kodlayıcıyı projelerinizden herhangi biri için kullanabilir ve buna göre programlayabilirsiniz.
Umarım öğreticiyi anladınız ve işler olması gerektiği gibi çalıştı. Herhangi bir sorun yaşarsanız, teknik yardım için yorum bölümünü veya forumları kullanın.