2025 Autor: John Day | [email protected]. Naposledy zmenené: 2025-01-13 06:58
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
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
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.