Arduino ile Rotary Encoder Eğitimi

Döner kodlayıcı, dönerken hareketi ve konumu izleyebilen elektronik bir bileşendir. Döner kodlayıcı, döner kodlayıcı döndüğünde darbeler oluşturabilen optik sensörler kullanır. Döner kodlayıcının genellikle mekanik veya robotik bir hareket monitörü olarak uygulanması da ekrandaki menü seçimi için kullanılabilir. Döner kodlayıcı, negatif (CW) ve pozitif (CCW) dönüşü arasında ayrım yapabilmesi için iki çıkışa sahiptir ve ayrıca tek bir düğmeye sahiptir.

Adım 1: Döner Enkoderin Darbe Akışı

Aşağıdaki döner kodlayıcı tarafından üretilen darbe akışı yukarıdaki resim gibidir.

Adım 2: Rotary Encoder'ın pin çıkışı

Açıklama:

  • GND -> GND
  • + -> + 5V
  • SW -> basıldığında döner kodlayıcının düğmesi
  • DT -> Veri
  • CLK -> Veri 2

DT veya CLK pimlerinden biri Arduino Uno'nun kesme ayağına veya DT ve CLK'nın her ikisi de kesme pimine bağlı olmalıdır.

3. Adım: Şematik

  • GND à GND Arduino Uno
  • + à + 5V Arduino Uno
  • SW à PIN 4 Arduino Uno
  • DT à PIN 3 Arduino Uno
  • CLK à PIN2 Arduino Uno

4. Adım: Kod

Aşağıdaki öğreticide kesme olarak kullanılacak Arduino Uno'nun PIN 2'si, PIN 3 ise yalnızca normal giriş olarak kullanılır.

#define encoder0PinA 2
#define encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; void setup () {Serial.begin (9600); pinMode (kodlayıcı0PinA, INPUT_PULLUP); pinMode (kodlayıcı0PinB, INPUT_PULLUP); pinMode (kodlayıcı0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, CHANGE); int valRotary, lastValRotary; void loop () {int btn = digitalRead (kodlayıcı0Btn); Serial.print (btn); Serial.print (""); Serial.print (valRotary); if (valRotary> lastValRotary) {Seri.print ("CW"); } if (valRotary {

Serial.print ("CCW"); } lastValRotary = valRotary; Serial.println (""); gecikmesi (250); } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } başka {encoder0Pos--; } valRotary = kodlayıcı0Pos / 2.5; }

Yukarıdaki çizimin 10. satırında, pin 2 Arduino Uno'nun kesilmesini sağlamak için kullanılır. "DoEncoder" fonksiyonunda döner kodlayıcıdan hesaplanır. DT ve CLK (Arduino Uno'nun pin kesmesi) değeri aynıysa, "encoder0Pos" değişkeni artırılır / eklenir, bu koşula ek olarak, "encoder0Pos" değişkeni azaltılır.

5. Adım: Açıklama

ValRotary değeri, yürütülmekte olan adım sayısının değeridir. ValRotary değeri, döner sensör kodlayıcı okuma değerinin 2.5'e bölünmesiyle elde edilir. Testten 2.5 değeri elde edilir, çünkü döner kodlayıcının bir adımı 1'i aşabilir, bu nedenle perstep değerine ve ayrıca okuma gecikmesine ek olarak değeri için 2.5'e bölün.

19-25 hattında döner döner kodlayıcı CW veya CCW olup olmadığını belirlemek için bir programdır. 19 - 25 satırlarının açıklaması, mevcut döner kodlayıcı okumasının önceki döner verilerden daha büyük olması ve daha sonra CW olarak ifade edilmesidir. Halihazırdaki okuma bir önceki okumadan daha küçükse CCW olarak ifade edilir.

6. Adım: Çıktı

1 = basılmamışken döner düğmenin başlat düğmesi değeri

İlgi̇li̇ Makaleler