Talaan ng mga Nilalaman:
2025 May -akda: John Day | [email protected]. Huling binago: 2025-01-13 06:58
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
Ang daloy ng pulso na nabuo ng sumusunod na rotary encoder ay tulad ng larawan sa itaas.
Hakbang 2: 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
- GND à GND Arduino Uno
- + à + 5V Arduino Uno
- SW à PIN 4 Arduino Uno
- DT à PIN 3 Arduino Uno
- CLK à PIN2 Arduino Uno
Hakbang 4: 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
1 = ang halaga ng pagsisimula ng pindutan ng paikutin kung hindi ito nai-press