Isi kandungan:

Tutorial Rotary Encoder With Arduino: 6 Langkah
Tutorial Rotary Encoder With Arduino: 6 Langkah

Video: Tutorial Rotary Encoder With Arduino: 6 Langkah

Video: Tutorial Rotary Encoder With Arduino: 6 Langkah
Video: Rotary Encoder Incremental rotary Encoder How to use it with Arduino 2024, November
Anonim
Tutorial Rotary Encoder Dengan Arduino
Tutorial Rotary Encoder Dengan Arduino

Rotary encoder adalah komponen elektronik yang mampu memantau pergerakan dan kedudukan semasa berpusing. Pengekod putar menggunakan sensor optik yang dapat menghasilkan denyutan ketika pengekod putar berputar. Aplikasi pengekod putar biasanya sebagai monitor gerakan mekanikal atau robotik juga dapat digunakan untuk pemilihan menu pada paparan. Pengekod putar mempunyai dua output sehingga dapat membezakan antara putaran negatif (CW) dan positif (CCW) dan juga mempunyai satu butang.

Langkah 1: Aliran Nadi Rotary Encoder

Aliran Nadi Pengekod Rotary
Aliran Nadi Pengekod Rotary

Aliran nadi yang dihasilkan oleh pengekod putar berikut adalah seperti gambar di atas.

Langkah 2: Pinout Rotary Encoder

Pinout Rotary Encoder
Pinout Rotary Encoder

Penjelasan:

  • GND GND
  • + + 5V
  • Butang SW pengekod putar semasa ditekan
  • Data DT
  • Data CLK 2

Salah satu pin DT atau CLK mesti disambungkan ke kaki gangguan Arduino Uno, atau kedua-dua DT dan CLK disambungkan ke pin interrupt.

Langkah 3: Skematik

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

Langkah 4: Kod

Kod
Kod

Dalam tutorial berikut, yang akan digunakan sebagai gangguan adalah PIN 2 dari Arduino Uno, sedangkan PIN 3 hanya digunakan sebagai input biasa.

#define encoder0PinA 2 # define encoder0PinB 3 #define encoder0Btn 4 int encoder0Pos = 0; batal persediaan () {Serial.begin (9600); pinMode (encoder0PinA, INPUT_PULLUP); pinMode (encoder0PinB, INPUT_PULLUP); pinMode (encoder0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, TUKAR); } int valRotary, lastValRotary; gelung void () {int btn = digitalRead (encoder0Btn); Serial.print (btn); Cetakan bersiri (""); Serial.print (valRotary); if (valRotary> lastValRotary) {Serial.print ("CW"); } jika (valRotary {

Serial.print ("CCW");

} lastValRotary = valRotary; Serial.println (""); kelewatan (250); } batal doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } lain {encoder0Pos--; } valRotary = encoder0Pos / 2.5; }

Pada baris 10 lakaran di atas digunakan untuk membolehkan gangguan pin 2 Arduino Uno. Dalam fungsi "doEncoder" dikira dari rotary encoder. Sekiranya nilai DT dan CLK (pin interrupt Arduino Uno) adalah sama, maka pemboleh ubah "encoder0Pos" akan ditambah / ditambahkan, selain syarat itu, pemboleh ubah "encoder0Pos" dikurangkan.

Langkah 5: Penjelasan

Nilai ValRotary adalah nilai bilangan langkah yang telah dijalankan. Nilai ValRotary diperoleh daripada nilai bacaan encoder sensor putar dibahagi dengan 2.5. Nilai 2.5 diperoleh dari ujian, kerana satu langkah pengekod putar mungkin melebihi 1, jadi bahagi dengan 2.5 untuk nilainya mengikut perstep dan juga penambahan kelewatan baca.

Semasa di talian 19 - 25 adalah program untuk menentukan sama ada pengekod putar berputar CW atau CCW. Penjelasan garis 19 - 25 adalah apabila bacaan rotary encoder semasa lebih besar daripada data putaran sebelumnya yang kemudian dinyatakan sebagai CW. Manakala jika bacaan semasa lebih kecil daripada bacaan sebelumnya maka dinyatakan sebagai CCW.

Langkah 6: Keluaran

Pengeluaran
Pengeluaran

1 = nilai butang mula putar apabila belum ditekan

Disyorkan: