Obsah:

Rotačný kodér - porozumenie a používanie (Arduino/iný Μkontrolér): 3 kroky
Rotačný kodér - porozumenie a používanie (Arduino/iný Μkontrolér): 3 kroky

Video: Rotačný kodér - porozumenie a používanie (Arduino/iný Μkontrolér): 3 kroky

Video: Rotačný kodér - porozumenie a používanie (Arduino/iný Μkontrolér): 3 kroky
Video: Leap Motion SDK 2024, November
Anonim
Rotačný kodér - porozumieť mu a používať ho (Arduino/iný Μkontrolér)
Rotačný kodér - porozumieť mu a používať ho (Arduino/iný Μkontrolér)

Rotačný snímač je elektromechanické zariadenie, ktoré prevádza rotačný pohyb na digitálne alebo analógové informácie. Môže sa otáčať v smere alebo proti smeru hodinových ručičiek. Existujú dva typy rotačných snímačov: absolútne a relatívne (inkrementálne).

Kým absolútny snímač vydáva hodnotu úmernú aktuálnemu uhlu hriadeľa, inkrementálny snímač vydáva krok hriadeľa a jeho smer. (V tomto prípade máme inkrementálny snímač)

Rotačné snímače sú stále obľúbenejšie, pretože v jednom elektrickom module môžete používať dve funkcie: Jednoduchý spínač na potvrdenie prevádzky a otočný snímač na navigáciu, napr. prostredníctvom ponuky.

Inkrementálny rotačný snímač generuje dva výstupné signály počas otáčania hriadeľa. Podľa smeru jeden zo signálov vedie druhý. (Pozri nižšie)

Krok 1: Pochopenie výstupných údajov

Pochopenie výstupných údajov
Pochopenie výstupných údajov

Ako vidíte, keď sa hriadeľ snímača začne otáčať v smere hodinových ručičiek, výstup A najskôr klesne na LOW a výstup B ho nasleduje. V smere hodinových ručičiek sa operácia otáča opačne.

Teraz to musíme implementovať do nášho µController (použil som Arduino Nano).

Krok 2: Vybudujte obvod

Vybudujte obvod
Vybudujte obvod
Vybudujte obvod
Vybudujte obvod

Ako som už popísal, výstupy vytvoria VYSOKÝ a NÍZKY bok. Aby sme dosiahli čistý VYSOKÝ na dátovom kolíku A a B µController, musíme pridať vyťahovacie odpory. Spoločný kolík C smeruje priamo na zem pre LOW bok.

Na získanie informácií o vnútornom prepínači (tlačidle) použijeme ďalšie dva piny. Jeden z nich ide do VCC a druhý na dátový pin µController. Na dátový kolík musíme tiež pridať sťahovací odpor, aby sme získali čistý LOW.

Je tiež možné použiť interné vyťahovacie a sťahovacie odpory vášho µController!

V mojom prípade pinout vyzerá takto:

  • +3, 3V => +3, 3V (Arduino) (možné aj +5V)
  • GND => GND (Arduino)
  • A => Pin10
  • B =>

    Pin

    11

  • C => GND
  • SW =>

    Pin

    12

Krok 3: Napíšte kód

int pinA = 10; // interný prepínač A int pinB = 11; // interný prepínač B int pinSW = 12; // prepínač (stlačený kodér) int encoderPosCount = 0; // začína na nule, zmeňte, ak chcete

int positionval;

bool switchval; int mrotateLast; int mrotate;

neplatné nastavenie () {

int mrotateLast = digitalRead (pinA); Serial.begin (9600); oneskorenie (50); }

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

int readencoder () {

mrotate = digitalRead (pinA); if (mrotate! = mrotateLast) {// gombík sa otáča, ak (digitalRead (pinB)! = mrotate) {// prepínač A sa najskôr zmenil -> otáča sa v smere hodinových ručičiek kodérPosCount ++; Serial.println ("otočený v smere hodinových ručičiek"); } else {// prepínač B sa najskôr zmenil-> otáčanie proti smeru hodinových ručičiek kodérPosCount--; Serial.println ("otočený proti smeru hodinových ručičiek"); }

Serial.print ("Poloha kodéra:"); Serial.println (encoderPosCount); Serial.println (""); } mrotateLast = mrotate; vrátiť kodérPosCount; } bool readswitch () {

ak je stlačený prepínač (digitalRead (pinSW)! = 0) {//

while (digitalRead (pinSW)! = 0) {} // prepínač je aktuálne stlačený switchval = 1; } else {switchval = 0;} // prepínač je nestlačený návrat switchval; }

Teraz môžete otočiť kodér a premenná encoderPosCount sa bude odpočítavať, ak otáčate v smere hodinových ručičiek, a odpočítavať, ak otáčate proti smeru hodinových ručičiek.

To je všetko! Jednoducho a užitočne.

Neváhajte kód zmeniť a vykonať ho. Môžete to implementovať do svojho projektu.

Tiež nahrám LED projekt, kde som pomocou kodéra nastavil jas svojich LED diód.

Odporúča: