- Szükséges anyagok
- Hogyan működik a rotációs kódoló?
- Rotary Encoder típusai
- KY-040 Rotary Encoder Pinout és leírás
- Arduino Rotary Encoder áramkör diagram
- Az Arduino for Rotary Encoder programozása
- Rotary Encoder működése az Arduinóval
A forgókódoló egy olyan beviteli eszköz, amely segíti a felhasználót a rendszerrel való interakcióban. Inkább úgy néz ki, mint egy rádió potenciométer, de impulzusokat ad ki, ami egyedivé teszi az alkalmazását. A kódoló gombjának elforgatásakor az apró lépések formájában forog, ami segíti a léptető / szervo motor vezérlésében, a menüben történő navigálásban és a szám értékének növelésében / csökkentésében és még sok másban.
Ebben a cikkben megismerhetjük a Rotary Encoderek különféle típusait és működését. Azt is összekapcsoljuk az Arduino-val, és az Encoder elforgatásával vezérelhetjük egy egész szám értékét, és az értékét 16 * 2-es LCD képernyőn jelenítjük meg. A bemutató végén kényelmesen használhatja a Rotary Encodert a projektjeihez. Tehát kezdjük…
Szükséges anyagok
- Rotációs kódoló (KY-040)
- Arduino UNO
- 16 * 2 alfanumerikus LCD
- Potenciométer 10k
- Kenyérlemez
- Csatlakozó vezetékek
Hogyan működik a rotációs kódoló?
A forgókódoló egy elektromechanikus jelátalakító, vagyis a mechanikus mozgásokat elektronikus impulzusokká alakítja. Ez egy gombból áll, amely forogva lépésről lépésre mozog, és minden lépéshez előre meghatározott szélességű impulzus vonatokat állít elő. Sokféle kódoló létezik, mindegyiknek megvan a maga működési mechanizmusa, később megismerjük a típusokat, de most csak a KY040 növekményes kódolóra koncentráljunk, mivel oktatóanyagunkhoz használjuk.
A kódoló belső mechanikai felépítése az alábbiakban látható. Alapjában véve egy kör alakú lemezből (szürke szín) vezetõ betétekkel (réz színû) helyezzük a kör alakú lemez tetejét. Ezeket a vezető párnákat az alábbi ábra szerint egyenlő távolságra helyezzük el. A kimeneti csapok ennek a kör alakú lemeznek a tetején vannak rögzítve, oly módon, hogy amikor a gombot forgatják, a vezető párnák érintkezésbe kerülnek a kimeneti csapokkal. Itt két kimeneti tű van, A és B kimenet, az alábbi ábrán látható módon.
Az A kimeneti tű és a B kimenet által előállított kimeneti hullámforma kék, illetve zöld színű. Ha a vezető párna közvetlenül a csap alatt van, akkor az magasra megy, és ezt időben meghozza, és amikor a vezető pad elmozdul, a csap alacsony lesz, ami a fent látható hullámforma kikapcsolási idejét eredményezi. Most, ha megszámoljuk az impulzusok számát, meg tudjuk határozni, hogy az Encoder hány lépést mozgatott.
Most felmerülhet a kérdés, hogy miért van szükségünk két impulzusjelre, ha egy elegendő ahhoz, hogy megszámoljuk a gomb forgatása közben megtett lépések számát. Ennek az az oka, hogy meg kell határoznunk, hogy melyik irányba forgatták a gombot. Ha megnézi a két impulzust, akkor észreveheti, hogy mindkettő 90 ° -os fázison kívül van. Ezért amikor a gombot jobbra forgatják, akkor az A kimenet először magasra emelkedik, és amikor a gombot az óramutató járásával ellentétes irányba forgatja, akkor a B kimenet először magasra emelkedik.
Rotary Encoder típusai
A piacon sokféle rotációs kódoló létezik, amelyet a tervező választhat az alkalmazásának megfelelően. Az alábbiakban felsoroljuk a leggyakoribb típusokat
- Inkrementális kódoló
- Abszolút kódoló
- Mágneses kódoló
- Optikai kódoló
- Lézerkódoló
Ezeket a kódolókat a kimeneti jel és érzékelő technológia alapján, az inkrementális kódolót és az abszolút kódolókat a kimeneti jel alapján, a mágneses, optikai és lézeres kódolókat pedig az érzékelési technológiák alapján osztályozzuk. Az itt használt kódoló egy inkrementális típusú kódoló.
KY-040 Rotary Encoder Pinout és leírás
Az alábbiakban látható a KY-040 növekményes típusú forgójeladó kivezetései
Az első két csap (Ground és Vcc) a kódoló áramellátására szolgál, általában + 5 V tápellátást használnak. A jeladónak az óramutató járásával ellentétes és az óramutató járásával ellentétes irányú forgatása mellett van egy kapcsolója (Aktív alacsony), amelyet a belső gomb megnyomásával lehet megnyomni. A kapcsoló jele a 3-as (kapcsoló) csapon keresztül érkezik. Végül megvan a két kimeneti tüske, amelyek előállítják a hullámformákat, amint azt már fentebb tárgyaltuk. Most hadd megtanuljuk, hogyan kell összekapcsolni az Arduino-val.
Arduino Rotary Encoder áramkör diagram
Az Interfacing Rotary Encoder és Arduino közötti teljes kapcsolási rajz az alábbi képen látható
A Rotary Encoder 5 tűvel rendelkezik a fenti címkén látható sorrendben. Az első két érintkező a Ground és a Vcc, amelyek az Arduino földeléséhez és + 5V-os csatlakozójához vannak csatlakoztatva. A kódoló kapcsolója a D10 digitális érintkezőhöz van csatlakoztatva, és 1k ellenálláson keresztül is magasra van húzva. A két kimeneti érintkező a D9-hez és a D8-hoz van csatlakoztatva.
A változó értékének megjelenítéséhez, amelyet a Rotary kódoló forgatásával növelni vagy csökkenteni kell, szükségünk van egy kijelző modulra. Az itt használt egy általánosan elérhető 16 * 2 alfás numerikus LCD kijelző. Csatlakoztattuk a 4 bites üzemmódban működtethető kijelzőt, és az Arduino + 5 V-os tűjével tápláltuk. A potenciométer az LCD kijelző kontrasztjának beállítására szolgál. Ha többet szeretne tudni az Arduino LCD-kijelzőinek összekapcsolásáról, kövesse a linket. A teljes áramkört egy kenyérlap tetejére lehet építeni, az alábbiakban valami hasonlót néztem ki, miután az összes csatlakozás elkészült.
Az Arduino for Rotary Encoder programozása
Meglehetősen egyszerű és egyenes előre programozni az Arduino kártyát egy rotációs kódoló összekapcsolására, ha megértette a rotációs kódoló működési elvét. Egyszerűen le kell olvasnunk az impulzusszámot, hogy meghatározzuk, hány fordulatot hajtott végre a kódoló, és ellenőriznünk kell, melyik impulzus ment magasra, hogy megkeressük, melyik irányba forgatta a kódolót. Ebben az oktatóanyagban megmutatjuk az LCD első sorában növekszik vagy csökkenő számot, a második sorban pedig az Encoder irányát. Az ehhez szükséges teljes program az oldal alján található egy bemutató videóval, és ehhez nincs szükség könyvtárra. Most osszuk szét a programot kis darabokra, hogy megértsük a működést.
Mivel LCD kijelzőt használtunk, belefoglaljuk a Liquid crystal library könyvtárat, amely alapértelmezés szerint jelen van az Arduino IDE-ben. Ezután meghatározzuk az LCD és az Arduino összekapcsolására szolgáló csapokat. Végül inicializáljuk az LCD kijelzőt ezeken a csapokon.
#include
Ezután a beállítási funkción belül bemutatunk egy bevezető üzenetet az LCD képernyőn, majd várunk 2 másodpercet, hogy az üzenet olvasható legyen a felhasználó számára. Ennek célja az LCD megfelelő működésének biztosítása.
lcd.print ("Rotary Encoder"); // Intro Message line 1 lcd.setCursor (0, 1); lcd.print ("Arduinóval"); // Intro Message line delay (2000); lcd.clear ();
A forgókódolónak három kimeneti csapja van, amelyek INPUT csapok lesznek az Arduino számára. Ez a három érintkezõ a kapcsoló, az A és az B kimenet. Ezeket a pinMode függvény segítségével az alábbiak szerint bemenetként deklaráljuk.
// pin mód deklaráció pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (kódoló_kapcsoló, INPUT);
A void beállítási funkción belül kiolvassuk az A kimenet állapotát, hogy ellenőrizzük a csap utolsó állapotát. Ezután ezt az információt felhasználjuk az új érték összehasonlításához annak ellenőrzésére, hogy melyik tű (A vagy B kimenet) ment magasra.
Previous_Output = digitalRead (Encoder_OuputA); // Olvassa el az A kimenet kezdőértékét
Végül a fő hurokfunkción belül össze kell hasonlítanunk az A és B kimenetet az előző kimenettel, hogy ellenőrizzük, melyik megy előbb magasra. Ezt úgy tehetjük meg, hogy egyszerűen összehasonlítjuk A és B áramkimenetének értékét az előző kimenettel az alábbiak szerint.
if (digitalRead (Encoder_OuputA)! = Previous_Output) { if (digitalRead (Encoder_OuputB)! = Previous_Output) { Encoder_Count ++; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("óramutató járásával megegyező irányban"); }
A fenti kódban a második, ha feltétel végrehajtásra kerül, ha a B kimenet megváltozott az előző kimenethez képest. Ebben az esetben a kódoló változó értéke növekszik, és az LCD kijelzi, hogy a kódoló az óramutató járásával megegyező irányban forog. Hasonlóképpen, ha ez , ha feltétel nem teljesül, az ezt követő más feltétel is csökkentse a változó és a kijelző, hogy a kódoló forgatjuk a óramutató járásával ellentétes irányba. Ugyanennek a kódja az alábbiakban látható.
else { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Anti-Clockwise"); } }
Végül a fő hurok végén frissítenünk kell az előző kimeneti értéket az aktuális kimeneti értékkel, hogy a hurok ugyanazon logikával megismételhető legyen. A következő kód ugyanezt teszi
Previous_Output = digitalRead (Encoder_OuputA);
Egy másik opcionális dolog annak ellenőrzése, hogy az Encoder kapcsolója be van-e nyomva. Ez a forgókódoló kapcsolócsapjának ellenőrzésével ellenőrizhető. Ez a tüske aktív alacsony tüske, vagyis a gomb megnyomásakor alacsonyra süllyed. Ha nem nyomják meg a csapot, magas marad, felhúzó ellenállást is alkalmaztunk, hogy megbizonyosodjunk arról, hogy magas marad-e, ha a kapcsolót nem nyomjuk meg, így elkerülhető a lebegőpontos állapot.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Kapcsoló megnyomva"); }
Rotary Encoder működése az Arduinóval
Miután elkészült a hardver és a kód, töltse fel a kódot az Arduino táblára, és kapcsolja be az Arduino táblát. Táplálhatja az USB-kábelen keresztül, vagy használhat egy 12 V-os adaptert. A tápfeszültség bekapcsolásakor az LCD-nek meg kell jelenítenie a bevezető üzenetet, majd üresen kell maradnia. Most forgassa el a forgókódolót, és látnia kell, hogy az érték növekszik vagy csökken a forgásirány alapján. A második sor megmutatja, hogy a kódoló az óramutató járásával megegyező vagy az óramutató járásával ellentétes irányban forog-e. Az alábbi kép ugyanezt mutatja
A gomb lenyomásakor a második sor is kijelzi, hogy megnyomta a gombot. A teljes munka az alábbi videóban található. Ez csak egy példa program az Encoder és az Arduino összekapcsolására, és annak ellenőrzésére, hogy a várt módon működik-e. Ha ideért, akkor képesnek kell lennie arra, hogy bármelyik projektjéhez használja a kódolót, és ennek megfelelően programozza.
Remélem, megértette az oktatóanyagot, és a dolgok úgy működtek, ahogyan kellett. Ha bármilyen problémája van, használja a megjegyzés részt vagy a fórumokat technikai segítségért.