Talaan ng mga Nilalaman:

Tutorial ng Rotary Encoder Sa Arduino: 6 na Hakbang
Tutorial ng Rotary Encoder Sa Arduino: 6 na Hakbang

Video: Tutorial ng Rotary Encoder Sa Arduino: 6 na Hakbang

Video: Tutorial ng Rotary Encoder Sa Arduino: 6 na Hakbang
Video: How to Build LDmicro Arduino PLC (Adding Real-Time Clock Module & Rotary Encoder) 2024, Hulyo
Anonim
Tutorial ng Rotary Encoder Sa Arduino
Tutorial ng Rotary Encoder Sa Arduino

Ang rotary encoder ay isang elektronikong sangkap na may kakayahang masubaybayan ang paggalaw at posisyon kapag umiikot. Gumagamit ang rotary encoder ng mga optical sensor na maaaring makabuo ng mga pulso kapag umiikot ang rotary encoder. Ang aplikasyon ng rotary encoder karaniwang bilang isang mekanikal o robotic na monitor monitor ay maaari ding magamit para sa pagpili ng menu sa display. Ang rotary encoder ay may dalawang output upang makilala nito ang pagitan ng negatibong (CW) at positibo (CCW) na pag-ikot at mayroon ding isang solong pindutan.

Hakbang 1: Daloy ng Pulso ng Rotary Encoder

Daloy ng Pulso ng Rotary Encoder
Daloy ng Pulso ng Rotary Encoder

Ang daloy ng pulso na nabuo ng sumusunod na rotary encoder ay tulad ng larawan sa itaas.

Hakbang 2: Pinout ng Rotary Encoder

Pinout ng Rotary Encoder
Pinout ng Rotary Encoder

Paliwanag:

  • GND GND
  • + + 5V
  • SW button ng rotary encoder kapag pinindot
  • Data ng DT
  • Data ng CLK 2

Ang isa sa mga DT o CLK na pin ay dapat na konektado sa nakagambalang paa ng Arduino Uno, o pareho ng DT at CLK ay konektado sa makagambala na pin.

Hakbang 3: Skematika

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

Hakbang 4: Code

Code
Code

Sa sumusunod na tutorial, na gagamitin bilang isang nakakagambala ay ang PIN 2 ng Arduino Uno, habang ang PIN 3 ay ginagamit lamang bilang isang regular na input.

#define encoder0PinA 2 # tukuyin ang encoder0PinB 3 # tukuyin ang encoder0Btn 4 int encoder0Pos = 0; void setup () {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); Serial.print (btn); Serial.print (""); Serial.print (valRotary); kung (valRotary> lastValRotary) {Serial.print ("CW"); } kung (valRotary {

Serial.print ("CCW");

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

Sa linya 10 ng sketch sa itaas ay ginagamit upang paganahin ang makagambala ng pin 2 Arduino Uno. Sa pagpapaandar na "doEncoder" ay kinakalkula mula sa rotary encoder. Kung ang halaga ng DT at CLK (pin makagambala ng Arduino Uno) ay pareho, pagkatapos ay ang variable na "encoder0Pos" ay madagdagan / idagdag, bilang karagdagan sa kondisyong iyon, ang variable na "encoder0Pos" ay nabawasan.

Hakbang 5: Paliwanag

Ang halaga ng ValRotary ay ang halaga ng bilang ng mga hakbang na tumatakbo. Ang halaga ng ValRotary ay nakuha mula sa halaga ng pagbabasa ng rotary sensor encoder na hinati sa 2.5. Ang isang halaga ng 2.5 ay nakuha mula sa pagsubok, dahil ang isang hakbang ng rotary encoder ay maaaring lumampas sa 1, kaya hatiin ng 2.5 para sa halaga nito alinsunod sa perstep at gayundin ang pagdaragdag ng nabasa na pagkaantala.

Habang nasa linya 19 - 25 ay isang programa upang matukoy kung rotary rotary encoder CW o CCW. Ang paliwanag ng mga linya 19 - 25 ay kapag ang kasalukuyang pag-read ng rotary encoder ay mas malaki kaysa sa nakaraang rotary data pagkatapos ay ipinahayag bilang CW. Sapagkat kung ang kasalukuyang pagbabasa ay mas maliit kaysa sa nakaraang pagbabasa pagkatapos ito ay nakasaad bilang CCW.

Hakbang 6: Output

Paglabas
Paglabas

1 = ang halaga ng pagsisimula ng pindutan ng paikutin kung hindi ito nai-press

Inirerekumendang: