Tartalomjegyzék:
- 1. lépés: Rotary Encoders Inside
- 2. lépés: Sokak számára valódi fájdalmat okozó nyomor
- 3. lépés: Véges állapotú gép (FSM) megoldás
- 4. lépés: Arduino kód
- 5. lépés: Hibátlan integráció
Videó: Teljes Arduino rotációs megoldás: 5 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:42
A forgó kódolók elfordítható vezérlőgombok elektronikus projektekhez, gyakran használják az Arduino család mikrovezérlőivel. Használhatók a paraméterek finomhangolására, a menükben való navigálásra, objektumok mozgatására a képernyőn, bármilyen érték beállítására. Ezek gyakori helyettesítői a potenciométereknek, mivel pontosabban és végtelenül elforgathatók, egy -egy diszkrét értéket növelnek vagy csökkentenek, és gyakran egy tolható kapcsolóval vannak integrálva a kiválasztási jellegű funkciókhoz. Mindenféle formában és méretben megtalálhatók, de a legalacsonyabb árkategóriát nehéz kezelni, amint azt az alábbiakban ismertetjük.
Számtalan cikk található a forgó kódolók működési részleteiről és használati módjairól, valamint számos mintakód és könyvtár a használatukról. Az egyetlen probléma az, hogy egyik sem működik 100% -osan pontosan a legalacsonyabb árkategóriájú kínai forgó modulokkal.
1. lépés: Rotary Encoders Inside
A jeladó forgó részének három csapja van (és további kettő az opcionális kapcsoló részhez). Az egyik közös (fekete GND), a másik kettő az irány meghatározására szolgál, amikor a gombot elfordítják (ezeket gyakran kék CLK -nak és piros DT -nek hívják). Mindkettő a mikrokontroller PULLUP bemeneti érintkezőjéhez van csatlakoztatva, így a HIGH szint az alapértelmezett érték. Ha a gombot előre (vagy az óramutató járásával megegyező irányba) forgatja, először a kék CLK a LOW szintre csökken, majd a piros DT következik. Tovább fordulva a kék CLK visszamarad a HIGH -ra, majd amikor a közös GND -patch elhagyja mindkét csatlakozócsapot, a piros DT is visszaáll a HIGH -ra. Így töltsön ki egy teljes pipát FWD (vagy az óramutató járásával megegyezően). Ugyanez vonatkozik a BWD másik irányára (vagy az óramutató járásával ellentétes irányba), de most először a piros esik le, a kék pedig utoljára emelkedik vissza, ahogy a kétszintes képeken látható.
2. lépés: Sokak számára valódi fájdalmat okozó nyomor
Gyakori probléma az Arduino hobbisták számára, hogy az olcsó Rotary encoder modulok extra változásokat eredményeznek a kimeneti szintekben, ami extra és rossz irányszám -leolvasást okoz. Ez megakadályozza a hibátlan számlálást, és lehetetlenné teszi ezen modulok integrálását a pontos forgó projektekbe. Ezeket az extra visszapattanásokat a tapaszok mechanikus mozgása okozza a csatlakozócsapokon, és még extra kondenzátorok alkalmazása sem tudja teljesen megszüntetni őket. Az ugrálások a teljes kullancsciklusban bárhol megjelenhetnek, és a képeken látható valós forgatókönyvek illusztrálják.
3. lépés: Véges állapotú gép (FSM) megoldás
A kép a két csap (kék CLK és piros DT) lehetséges szintváltozásainak teljes állapotterületét mutatja, mind a helyes, mind a hamis visszapattanások esetén. Ennek az állapotgépnek az alapján egy teljes megoldás programozható, amely mindig 100% -osan működik. Mivel ebben a megoldásban nincs szükség szűrési késleltetésre, ez a lehető leggyorsabb is. A csapok állapottérének a munkamódtól való elválasztásának másik előnye, hogy tetszés szerint alkalmazhat lekérdezési vagy megszakítási módokat. A lekérdezés vagy a megszakítások észlelhetik a csapok szintváltozásait, és egy külön rutin kiszámítja az új állapotot az aktuális állapot és a szintváltozások tényleges eseményei alapján.
4. lépés: Arduino kód
Az alábbi kód megszámolja az FWD és BWD kullancsokat a soros monitoron, és integrálja az opcionális kapcsoló funkciót is.
// Csurgay Péter 2019-04-10
// A forgó csapjai az Arduino portokhoz vannak hozzárendelve
#define SW 21 #define CLK 22 #define DT 23
// A forgó által hangolt számláló aktuális és előző értéke
int curVal = 0; int prevVal = 0;
// Az FSM (véges állapotú gép) hét állapota
#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;
void setup () {
Serial.begin (250000); Serial.println ("Start…"); // A HIGH szint lesz az alapértelmezett minden csapnál pinMode (SW, INPUT_PULLUP); pinMode (CLK, INPUT_PULLUP); pinMode (DT, INPUT_PULLUP); // Mind a CLK, mind a DT megszakításokat vált ki minden szintváltozáshoz attachInterrupt (digitalPinToInterrupt (CLK), rotaryCLK, CHANGE); attachInterrupt (digitalPinToInterrupt (DT), rotaryDT, CHANGE); }
void loop () {
// Az opcionális kapcsoló kezelése néhány forgó jeladóba, ha (digitalRead (SW) == LOW) {Serial.println ("Pressed"); while (! digitalRead (SW)); } // A számláló értékének bármilyen változása megjelenik a Soros monitorban, ha (curVal! = PrevVal) {Serial.println (curVal); prevVal = curVal; }}
// Állapotgép -átmenetek CLK szintű változásokhoz
void rotaryCLK () {if (digitalRead (CLK) == LOW) {if (state == IDLE_11) state = SCLK_01; else if (állapot == SCLK_10) állapot = SCLK_00; else if (állapot == SDT_10) állapot = SDT_00; } else {if (állapot == SCLK_01) állapot = IDLE_11; else if (állapot == SCLK_00) állapot = SCLK_10; else if (állapot == SDT_00) állapot = SDT_10; else if (állapot == SDT_01) {állapot = IDLE_11; curVal--; }}}
// Állapotgép -átmenetek a DT szintű változásokhoz
void rotaryDT () {if (digitalRead (DT) == LOW) {if (state == IDLE_11) state = SDT_10; else if (állapot == SDT_01) állapot = SDT_00; else if (állapot == SCLK_01) állapot = SCLK_00; } else {if (állapot == SDT_10) állapot = IDLE_11; else if (állapot == SDT_00) állapot = SDT_01; else if (állapot == SCLK_00) állapot = SCLK_01; else if (állapot == SCLK_10) {állapot = IDLE_11; curVal ++; }}}
5. lépés: Hibátlan integráció
A mellékelt videóban ellenőrizheti, hogy az FSM megoldás pontosan és gyorsan működik -e, még akkor is, ha a szórványos visszapattanási effektusokkal rendelkező kis hatótávolságú forgó jeladók vannak.
Ajánlott:
Rotációs kódoló - megértése és használata (Arduino/egyéb Μvezérlő): 3 lépés
Rotációs kódoló - Ismerje meg és használja (Arduino/más vezérlő): A forgó kódoló egy elektromechanikus eszköz, amely a forgó mozgást digitális vagy analóg információvá alakítja. Az óramutató járásával megegyező vagy az óramutató járásával ellentétes irányba foroghat. Kétféle forgó jeladó létezik: abszolút és relatív (növekményes) kódolók
Rotációs kódoló az Arduino Nano használatával: 4 lépés
Rotációs kódoló az Arduino Nano használatával: Sziasztok! Ebben a cikkben bemutatok egy tutorialt arról, hogyan kell használni a forgó kódolót Arduino Nano használatával. A Rotary kódoló használatához nincs szükség külső könyvtárra. Tehát közvetlenül létrehozhatunk programokat anélkül, hogy először könyvtárakat adnánk hozzá. ok kezdjük el
Rotációs kódoló: Hogyan működik és hogyan kell használni az Arduino -val: 7 lépés
Rotary Encoder: Hogyan működik és hogyan kell használni az Arduino -val: Ezt és más csodálatos oktatóanyagokat elolvashatja az ElectroPeak hivatalos weboldalán. Áttekintés Ebben az oktatóanyagban megismerheti a forgó kódoló használatát. Először néhány információt lát a forgó kódolóról, majd megtanulja, hogyan kell
Arduino Projekt: Teszttartomány LoRa RF1276 modul GPS nyomkövetéshez Megoldás: 9 lépés (képekkel)
Arduino Projekt: Vizsgálati tartomány LoRa modul RF1276 GPS nyomkövetéshez Megoldás: Csatlakozás: USB - soros Szükség: Chrome böngésző igény: 1 X Arduino Mega igény: 1 X GPS igény: 1 X SD kártya igény: 2 X LoRa modem RF1276 Funkció: Arduino GPS érték küldése a fő bázishoz - A Dataino Server Lora modul fő adatait tárolja: Ultra nagy hatótávolság
Arduino menü Nokia 5110 LCD -n rotációs kódoló használatával: 6 lépés (képekkel)
Arduino menü a Nokia 5110 LCD -n Rotációs kódoló használatával: Kedves barátaim, üdvözöljük egy újabb oktatóanyagban! Ebben a videóban megtanuljuk, hogyan készíthetjük el saját menünket a népszerű Nokia 5110 LCD kijelzőhöz, hogy felhasználóbarátabbá és hatékonyabbá tegyük projektjeinket. Kezdjük! Ez a projekt