Obsah:
- Krok 1: Rotační kodéry uvnitř
- Krok 2: Bída, která mnohým způsobuje skutečnou bolest
- Krok 3: Řešení konečného stavu stroje (FSM)
- Krok 4: Arduino kód
- Krok 5: Bezchybná integrace
Video: Kompletní rotační řešení Arduino: 5 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:22
Rotační kodéry jsou otočné ovládací knoflíky pro elektronické projekty, často používané s mikrokontroléry rodiny Arduino. Lze je použít k jemnému doladění parametrů, procházení nabídek, přesouvání objektů na obrazovce, nastavování hodnot jakéhokoli druhu. Jsou běžnou náhradou potenciometrů, protože je lze otáčet přesněji a nekonečně, zvyšují nebo snižují jednu diskrétní hodnotu najednou a často jsou integrovány s posuvným přepínačem pro funkce výběru druhu. Přicházejí ve všech tvarech a velikostech, ale nejnižší cenové rozpětí je obtížné propojit, jak je vysvětleno níže.
Existuje nespočet článků o pracovních podrobnostech a režimech použití rotačních kodérů a řada ukázkových kódů a knihoven o tom, jak je používat. Jediným problémem je, že žádný z nich nepracuje 100% přesně s čínskými rotačními moduly v nejnižší cenové kategorii.
Krok 1: Rotační kodéry uvnitř
Otočná část kodéru má tři kolíky (a dva další pro volitelnou část spínače). Jeden je společný (černý GND), další dva jsou pro určení směru při otočení knoflíku (často se jim říká modrá CLK a červená DT). Oba jsou připojeny ke vstupnímu kolíku PULLUP mikrokontroléru, takže úroveň HIGH je jejich výchozí hodnotou. Když je knoflík otočen dopředu (nebo ve směru hodinových ručiček), nejprve modrá CLK klesne na úroveň LOW, poté následuje červená DT. Při dalším otáčení modrá CLK stoupá zpět na HIGH, pak jak společná GND patch opouští oba připojovací piny, červená DT také stoupá zpět na HIGH. Dokončení jednoho úplného zaškrtnutí FWD (nebo ve směru hodinových ručiček). Totéž platí pro druhý směr BWD (nebo proti směru hodinových ručiček), ale nyní červená padá jako první a modrá stoupá zpět jako poslední, jak je znázorněno na dvouúrovňových obrázcích.
Krok 2: Bída, která mnohým způsobuje skutečnou bolest
Běžným problémem pro fandy Arduina je to, že levné rotační enkodérové moduly odrážejí zvláštní změny ve výstupních úrovních, což způsobuje další a nesprávné měření směru. To zabraňuje bezchybnému počítání a znemožňuje integraci těchto modulů do přesných rotačních projektů. Tyto zvláštní odskoky jsou způsobeny mechanickými pohyby záplat přes připojovací kolíky a dokonce ani použití přídavných kondenzátorů je nemůže zcela eliminovat. Odrazy se mohou objevit kdekoli v úplných cyklech zaškrtnutí a jsou ilustrovány skutečnými scénáři na obrázcích.
Krok 3: Řešení konečného stavu stroje (FSM)
Obrázek ukazuje plný stavový prostor možných změn úrovně pro dva piny (modrý CLK a červený DT), a to jak pro správné, tak pro falešné odrazy. Na základě tohoto stavového stroje lze naprogramovat kompletní řešení, které vždy funguje 100% přesně. Protože v tomto řešení nejsou nutná žádná zpoždění filtrování, je také nejrychlejší. Další výhodou oddělení stavového prostoru kolíků od pracovního režimu je to, že lze podle svého vkusu použít režimy pollingu nebo přerušení. Polling nebo přerušení mohou detekovat změny úrovně na pinech a samostatná rutina vypočítá nový stav na základě aktuálního stavu a skutečných událostí změn úrovně.
Krok 4: Arduino kód
Níže uvedený kód počítá zaškrtnutí FWD a BWD na sériovém monitoru a také integruje volitelnou funkci přepínače.
// Peter Csurgay 2019-04-10
// Piny rotátoru mapované na porty Arduino
#define SW 21 #define CLK 22 #define DT 23
// Aktuální a předchozí hodnota čítače vyladěná rotátorem
int curVal = 0; int prevVal = 0;
// Sedm stavů FSM (konečný stavový automat)
#define IDLE_11 0 #define SCLK_01 1 #define SCLK_00 2 #define SCLK_10 3 #define SDT_10 4 #define SDT_00 5 #define SDT_01 6 int state = IDLE_11;
neplatné nastavení () {
Serial.begin (250000); Serial.println ("Start …"); // Úroveň VYSOKÁ bude výchozí pro všechny piny pinMode (SW, INPUT_PULLUP); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); // CLK i DT spustí přerušení pro všechny změny úrovně attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); }
prázdná smyčka () {
// Ovládání volitelného přepínače integrovaného do některých rotačních kodérů if (digitalRead (SW) == LOW) {Serial.println ("Pressed"); while (! digitalRead (SW)); } // Jakákoli změna hodnoty čítače se zobrazí v Serial Monitor if (curVal! = PrevVal) {Serial.println (curVal); prevVal = curVal; }}
// Přechody State Machine pro změny na úrovni CLK
void rotaryCLK () {if (digitalRead (CLK) == LOW) {if (state == IDLE_11) state = SCLK_01; else if (state == SCLK_10) state = SCLK_00; else if (state == SDT_10) state = SDT_00; } else {if (state == SCLK_01) state = IDLE_11; else if (state == SCLK_00) state = SCLK_10; else if (state == SDT_00) state = SDT_10; else if (state == SDT_01) {state = IDLE_11; curVal--; }}}
// Přechody State Machine pro změny na úrovni DT
neplatné rotaryDT () {if (digitalRead (DT) == LOW) {if (state == IDLE_11) state = SDT_10; else if (state == SDT_01) state = SDT_00; else if (state == SCLK_01) state = SCLK_00; } else {if (state == SDT_10) state = IDLE_11; else if (state == SDT_00) state = SDT_01; else if (state == SCLK_00) state = SCLK_01; else if (stav == SCLK_10) {stav = IDLE_11; curVal ++; }}}
Krok 5: Bezchybná integrace
V přiloženém videu si můžete ověřit, že řešení FSM funguje přesně a rychle i v případě rotačních kodérů s nízkým dosahem s různými sporadickými efekty odrazu.
Doporučuje:
Kompletní sada webového rozhraní Python pro PhidgetSBC3: 6 kroků
Kompletní sada webového rozhraní Python pro PhidgetSBC3: Deska PhidgetSBC3 je plně funkční jednodeskový počítač se systémem Debain Linux. Je podobný malinovému Pi, ale má 8 analogových senzorových vstupů a 8 digitálních vstupů a 8 digitálních výstupů. Dodává se s webovým serverem a webovou aplikací, aby
Arduino -Teensy4 pro Teensy 4.0 - kompletní montáž: 10 kroků
Arduino-Teensy4 pro Teensy 4.0-Kompletní montáž: Tento návod vás provede montáží rozšiřující desky Arduino-Teensy4 pro Teensy 4.0. Můžete si ji zakoupit v mém obchodě Tindie zde: https: //www.tindie.com/products/ cburgess129/arduin … Teensy 4 si můžete objednat spolu s bo
Kompletní DIY meteorologická stanice Raspberry Pi se softwarem: 7 kroků (s obrázky)
Kompletní DIY meteorologická stanice Raspberry Pi se softwarem: Koncem února jsem viděl tento příspěvek na webu Raspberry Pi. http://www.raspberrypi.org/school-weather-station-..Vytvořili meteorologické stanice Raspberry Pi pro školy. Úplně jsem jeden chtěl! Ale v té době (a věřím, že stále jako při psaní
Posuvník kamery pro sledování objektu s rotační osou. 3D vytištěno a postaveno na ovladači stejnosměrného motoru RoboClaw a Arduino: 5 kroků (s obrázky)
Posuvník kamery pro sledování objektu s rotační osou. 3D vytištěno a postaveno na RoboClaw DC Motor Controller & Arduino: Tento projekt je jedním z mých oblíbených projektů, protože jsem spojil svůj zájem o tvorbu videa s DIY. Vždy jsem se díval a chtěl jsem napodobit ty filmové záběry ve filmech, kde se kamera pohybuje po obrazovce při posouvání, aby sledovala
2 $ Arduino. ATMEGA328 jako samostatný. Snadné, levné a velmi malé. kompletní průvodce .: 6 kroků (s obrázky)
2 $ Arduino. ATMEGA328 jako samostatný. Snadné, levné a velmi malé. Kompletní průvodce: V tomto návodu se naučíte používat čip mikrokontroléru Arduino ATMEGA328 jako samostatný mikrokontrolér. Stojí jen 2 dolary, mohou dělat to samé jako váš Arduino a vaše projekty budou extrémně malé. Pokryjeme rozložení pinů