İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
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 darbe üretebilen optik sensörler kullanır. Döner kodlayıcının genellikle mekanik veya robotik hareket monitörü olarak uygulanması, ekrandaki menü seçimi için de kullanılabilir. Döner enkoder, negatif (CW) ve pozitif (CCW) dönüşü ayırt edebilmesi için iki çıkışa sahiptir ve ayrıca tek bir tuşa sahiptir.
Adım 1: Döner Kodlayıcının Darbe Akışı
Aşağıdaki döner kodlayıcı tarafından üretilen darbe akışı, yukarıdaki resim gibidir.
Adım 2: Döner Kodlayıcının Pin Çıkışı
Açıklama:
- GND GND
- + +5V
- Basıldığında döner kodlayıcının SW düğmesi
- DT Verileri
- CLK Verileri 2
DT veya CLK pinlerinden biri Arduino Uno'nun kesme ayağına bağlanmalıdır veya DT ve CLK'nın her ikisi de kesme pinine bağlanmalıdır.
Adım 3: Şematik
- GND ve GND Arduino Uno
- + à +5V Arduino Uno
- SW à PIN 4 Arduino Uno
- DT ve PIN 3 Arduino Uno
- CLK ve PIN2 Arduino Uno
4. Adım: Kod
Aşağıdaki öğreticide, kesme olarak kullanılacak olan Arduino Uno'nun PIN 2'sidir, PIN 3 ise yalnızca normal bir giriş olarak kullanılır.
#define encoder0PinA 2#define encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; geçersiz kurulum() { Serial.begin(9600); pinMode(encoder0PinA, INPUT_PULLUP); pinMode(encoder0PinB, INPUT_PULLUP); pinMode(encoder0Btn, INPUT_PULLUP); AttachInterrupt(0, doEncoder, CHANGE); } int valRotary, lastValRotary; void loop() { int btn = digitalRead(encoder0Btn); Seri.print(btn); Seri.print(" "); Serial.print(valRotary); if(valRotary>lastValRotary) { Serial.print(" CW"); } if(valRotary {
Serial.print(" CCW");
} lastValRotary = valRotary; Seri.println(" "); gecikme(250); } void doEncoder() { if (digitalRead(encoder0PinA) == digitalRead(encoder0PinB)) { encoder0Pos++; } else { kodlayıcı0Pos--; } 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" işlevinde döner kodlayıcıdan hesaplanır. DT ve CLK (Arduino Uno'nun pin kesmesi) değeri aynı ise, "encoder0Pos" değişkeni artırılır/eklenir, bu koşula ek olarak "encoder0Pos" değişkeni azaltılır.
Adım 5: Açıklama
ValRotary değeri, çalışmakta olan adım sayısının değeridir. ValRotary değeri, döner sensör enkoder okuma değerinin 2.5'e bölünmesinden 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 değeri her adıma ve ayrıca okuma gecikmesinin eklenmesine göre 2.5'e bölün.
19 - 25 satırındayken, döner döner kodlayıcının CW veya CCW olup olmadığını belirleyen bir programdır. 19 - 25 satırlarının açıklaması, mevcut döner kodlayıcı okumasının önceki döner veriden daha büyük olduğu ve ardından CW olarak ifade edildiği zamandır. Oysa mevcut okuma önceki okumadan daha küçükse CCW olarak belirtilir.
Adım 6: Çıktı
1 = basılmadığında döner düğmenin başlatma düğmesi değeri