Turinys:

Rotacinis kodavimo įrenginys - supraskite ir naudokite („Arduino“/kitas valdiklis): 3 žingsniai
Rotacinis kodavimo įrenginys - supraskite ir naudokite („Arduino“/kitas valdiklis): 3 žingsniai

Video: Rotacinis kodavimo įrenginys - supraskite ir naudokite („Arduino“/kitas valdiklis): 3 žingsniai

Video: Rotacinis kodavimo įrenginys - supraskite ir naudokite („Arduino“/kitas valdiklis): 3 žingsniai
Video: Interfacing Rotary Encoder With Arduino Uno Using ChatGPT Generated Arduino Code | Coders Cafe 2024, Liepa
Anonim
Rotacinis kodavimo įrenginys - supraskite ir naudokite jį („Arduino“/kitas Μ valdiklis)
Rotacinis kodavimo įrenginys - supraskite ir naudokite jį („Arduino“/kitas Μ valdiklis)

Sukamasis kodavimo įrenginys yra elektromechaninis įtaisas, kuris sukamąjį judesį paverčia skaitmenine ar analogine informacija. Jis gali pasukti pagal laikrodžio rodyklę arba prieš laikrodžio rodyklę. Yra dviejų tipų sukamieji kodavimo įrenginiai: absoliutus ir santykinis (papildomas).

Nors absoliutus kodavimo įrenginys pateikia vertę, proporcingą dabartiniam veleno kampui, inkrementinis kodavimo įrenginys pateikia veleno žingsnį ir jo kryptį. (Šiuo atveju turime inkrementinį kodavimo įrenginį)

Rotaciniai kodavimo įrenginiai tampa vis populiaresni, nes jūs galite naudoti dvi funkcijas viename elektros modulyje: Paprastas jungiklis, patvirtinantis veikimą, ir sukamasis koduotojas, skirtas naršyti, pvz. per meniu.

Inkrementinis sukamasis kodavimo įrenginys sukuria du išėjimo signalus, kol jo velenas sukasi. Priklausomai nuo krypties, vienas iš signalų veda kitą. (žr. žemiau)

1 žingsnis: Išvesties duomenų supratimas

Išvesties duomenų supratimas
Išvesties duomenų supratimas

Kaip matote, kai kodavimo velenas pradeda suktis pagal laikrodžio rodyklę, išėjimas A pirmiausia nukrenta iki LOW, o išėjimas B - po jo. Prieš laikrodžio rodyklę operacija pasisuka priešingai.

Dabar mes tiesiog turime tai įdiegti savo µController (aš naudojau „Arduino Nano“).

2 žingsnis: sukurkite grandinę

Sukurkite grandinę
Sukurkite grandinę
Sukurkite grandinę
Sukurkite grandinę

Kaip aprašiau anksčiau, išėjimai sukuria AUKŠTĄ ir ŽEMĄ šoną. Norėdami gauti švarų AUKŠTUMĄ prie „µController“duomenų kaiščio A ir B, turime pridėti traukimo rezistorius. Bendras kaištis C eina tiesiai į žemę, kad būtų žemas šonas.

Norėdami gauti informacijos apie vidinį jungiklį (mygtuką), naudosime kitus du kaiščius. Vienas iš jų eina į VCC, o kitas - į µController duomenų kaištį. Mes taip pat turime pridėti ištraukiamąjį rezistorių prie duomenų kaiščio, kad gautume švarų LOW.

Taip pat galima naudoti vidinius „µController“traukimo ir ištraukimo rezistorius!

Mano atveju spuogas atrodo taip:

  • +3, 3V => +3, 3V („Arduino“) (taip pat galima +5V)
  • GND => GND (Arduino)
  • A => Pin10
  • B =>

    Smeigtukas

    11

  • C => GND
  • SW =>

    Smeigtukas

    12

3 žingsnis: kodo rašymas

int pinA = 10; // vidinis jungiklis A int pinB = 11; // vidinis jungiklis B int pinSW = 12; // jungiklis (spaudžiamas kodavimo įrenginys) int encoderPosCount = 0; // prasideda nuo nulio, jei norite, pakeiskite

int positionval;

bool switchval; int mrotateLast; int mrotate;

void setup () {

int mrotateLast = digitalRead (pinA); Serial.begin (9600); vėlavimas (50); }

void loop () {readencoder (); if (readswitch () == 1) {Serial.println ("Switch = 1"); }}

int readencoder () {

mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// rankenėlė sukasi, jei (digitalRead (pinB)! = mrotate) {// pirmiausia pakeistas jungiklis A -> besisukantis pagal laikrodžio rodyklę encoderPosCount ++; Serial.println („pasuktas pagal laikrodžio rodyklę“); } else {// pirmiausia pakeistas jungiklis B-> besisukantis prieš laikrodžio rodyklę encoderPosCount--; Serial.println („pasuktas prieš laikrodžio rodyklę“); }

Serial.print („Kodavimo įrenginio padėtis:“); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = mrotate; return encoderPosCount; } bool readswitch () {

if (digitalRead (pinSW)! = 0) {// jungiklis paspaustas

while (digitalRead (pinSW)! = 0) {} // jungiklis šiuo metu yra paspaustas switchval = 1; } else {switchval = 0;} // jungiklis yra nespaustas grįžimas switchval; }

Dabar galite pasukti koduotuvą, o kintamasis „encoderPosCount“bus skaičiuojamas, jei sukate pagal laikrodžio rodyklę, ir skaičiuokite atgal, jei sukate prieš laikrodžio rodyklę.

Viskas! Paprasta ir naudinga.

Nesivaržykite pakeisti ir atlikti kodą. Galite tai įgyvendinti savo projekte.

Aš taip pat įkelsiu LED projektą, kuriame naudoju kodavimo priemonę savo šviesos diodų ryškumui nustatyti.

Rekomenduojamas: