Mundarija:

Arduino bilan Rotary Encoder qo'llanmasi: 6 qadam
Arduino bilan Rotary Encoder qo'llanmasi: 6 qadam

Video: Arduino bilan Rotary Encoder qo'llanmasi: 6 qadam

Video: Arduino bilan Rotary Encoder qo'llanmasi: 6 qadam
Video: Lesson 97: Controlling Servo Motor using Rotary Encoder and Display Angle On LCD 2024, Noyabr
Anonim
Arduino bilan Rotary Enkoder qo'llanmasi
Arduino bilan Rotary Enkoder qo'llanmasi

Rotary enkoder - bu elektron komponent bo'lib, u aylanayotganda harakat va holatni kuzatishi mumkin. Rotary enkoder optik datchiklardan foydalanadi, ular aylanuvchi enkoder aylanganda impuls hosil qiladi. Aylanadigan kodlovchi odatda mexanik yoki robotli harakat monitor sifatida qo'llanilishi, shuningdek, displeyda menyuni tanlash uchun ishlatilishi mumkin. Rotary enkoderning ikkita chiqishi bor, u salbiy (CW) va musbat (CCW) aylanishni farqlay oladi va bitta tugmachaga ega.

1 -qadam: Rotary enkoderning puls oqimi

Rotary enkoderning puls oqimi
Rotary enkoderning puls oqimi

Quyidagi aylanadigan kodlovchi tomonidan hosil bo'ladigan impuls oqimi yuqoridagi rasmga o'xshaydi.

2 -qadam: Rotary Enkoderni ajratish

Rotary enkoderni belgilash
Rotary enkoderni belgilash

Tushuntirish:

  • GND GND
  • + 5V
  • Bosilganda aylanadigan kodlovchi SW tugmasi
  • DT ma'lumotlari
  • CLK ma'lumotlari 2

DT yoki CLK pinlaridan biri Arduino Uno uzilish oyog'iga ulangan bo'lishi kerak, yoki DT va CLK ikkalasi ham uzilish pimiga ulangan bo'lishi kerak.

3 -qadam: sxematik

Sxematik
Sxematik
  • GND va GND Arduino Uno
  • + 5 + Arduino Uno
  • SW à PIN 4 Arduino Uno
  • PIN kod 3 Arduino Uno
  • CLK va PIN2 Arduino Uno

4 -qadam: kod

Kod
Kod

Keyingi o'quv qo'llanmada Arduino Uno -ning PIN -2 -si uzilish sifatida ishlatiladi, PIN -3 esa oddiy kirish sifatida ishlatiladi.

#define encoder0PinA 2 #encoder0PinB 3 ni belgilang # #encoder0Btn 4 int encoder0Pos = 0; void setup () {Serial.begin (9600); pinMode (kodlovchi0PinA, INPUT_PULLUP); pinMode (kodlovchi0PinB, INPUT_PULLUP); pinMode (kodlovchi0Btn, INPUT_PULLUP); attachInterrupt (0, doEncoder, CHANGE); } int valRotary, lastValRotary; void loop () {int btn = digitalRead (encoder0Btn); Serial.print (btn); Serial.print (""); Ketma -ket chop etish (valRotary); if (valRotary> lastValRotary) {Serial.print ("CW"); } agar (valRotary {

Serial.print ("CCW");

} lastValRotary = valRotary; Serial.println (""); kechikish (250); } void doEncoder () {if (digitalRead (encoder0PinA) == digitalRead (encoder0PinB)) {encoder0Pos ++; } boshqa {encoder0Pos--; } valRotary = kodlovchi0Pos/2.5; }

Yuqoridagi eskizning 10 -qatorida Arduino Uno 2 -pinining uzilishini ta'minlash uchun foydalaniladi. "DoEncoder" funktsiyasida aylanadigan kodlovchi hisoblab chiqiladi. Agar DT va CLK (Arduino Uno -ning pinli uzilishi) qiymati bir xil bo'lsa, "encoder0Pos" o'zgaruvchisi ortadi / qo'shiladi, bu shartga qo'shimcha ravishda "encoder0Pos" o'zgaruvchisi kamayadi.

5 -qadam: tushuntirish

ValRotary qiymati - bu bajarilgan qadamlar sonining qiymati. ValRotary qiymati aylanadigan sensorli kodlovchi o'qish qiymatidan 2,5 ga bo'linadi. Tekshiruvdan 2,5 qiymat olinadi, chunki aylanuvchi kodlovchi bir qadam 1dan oshishi mumkin, shuning uchun uning qiymatiga 2,5 ga bo'linadi va o'qish kechiktirilishi qo'shiladi.

19 - 25 -qatorda - aylanadigan CW yoki CCW aylanadigan kodlovchi ekanligini aniqlash dasturi. 19-25 -qatorlarning tushuntirishlari, aylanuvchi kodlovchi o'qilishi oldingi aylanuvchi ma'lumotlardan kattaroq, keyin CW sifatida ifodalanadi. Agar hozirgi o'qish oldingi o'qishdan kichik bo'lsa, u CCW sifatida belgilanadi.

6 -qadam: Chiqish

Chiqish
Chiqish

1 = aylanmagan tugmachaning boshlang'ich tugmasi

Tavsiya: