İçindekiler:

Arduino ile Döner Kodlayıcı Eğitimi: 6 Adım
Arduino ile Döner Kodlayıcı Eğitimi: 6 Adım

Video: Arduino ile Döner Kodlayıcı Eğitimi: 6 Adım

Video: Arduino ile Döner Kodlayıcı Eğitimi: 6 Adım
Video: ARDUİNO EĞİTİM DERS | 1 (Sıfırdan, Led Ampul Yakmak) 2024, Kasım
Anonim
Arduino ile Döner Kodlayıcı Eğitimi
Arduino ile Döner Kodlayıcı 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 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ışı

Döner Enkoder Darbe Akışı
Döner Enkoder 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ışı

Döner Kodlayıcının Pin Çıkışı
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

Şematik
Ş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

kod
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ı

Çıktı
Çıktı

1 = basılmadığında döner düğmenin başlatma düğmesi değeri

Önerilen: