Cessna 172 cockpit otthon

Építsünk szimulátort

Építsünk szimulátort

16 kapcsoló ellenőrzése 8 digitális lábbal

2019. január 30. - C172Peti

A szimulátorunk műszerfalán számos kapcsoló helyezkedik el. Egy arduino micrót asználunk arra, hogy ezek állapotát ellenőrizzük és továbbítsuk a szimulátort futtató számítógépre. Az arduinóval egy joystickot emulálunk, amivel 32 nyomógomb állapotot tudunk küldeni. Ez a része nem gond. A probléma az, hogy ennyi digitális vagy analóg lába nincs ennek a kicsi arduino boardnak, így valamit ki kellett találni, hogyan lehetne ezt mégis kezelni. A megoldás egy kapcsoló mátrix építése.

tinkercad.jpg

Ez igazából egy példa, a mátrix mérete voltaképp tetszőlegesen növelhető. Nézzük, hogy működik ez a 4x4-es mátrix.

4 lábat kimenetként használunk, 4 lábat pedig bemenetként. A kimeneti lábak lesznek a sorok, a bemeneti lábak pedig az oszlopok. Ez annyit tesz, hogy az egy sorban levő kapcsolók egyik vége ugyanarra a kimeneti lábra lesznek kötve, az egy oszlopban levő kapcsolók másik lába pedig ugyanarra a bemenetre.

Például az első sor így néz ki:

tinkercad_sor.jpg

Az arduino 2-es lába a kimenet, ide egy diódán keresztül rákötjük a kapcsolókat. A kapcsolók másik lábait pedig rendre a bemeneti lábakra kötjük, Ezt ismételjük soronként.

Ha egy oszlopot nézünk, azt látjuk, hogy minden sor külön kimeneti lábról egy diódán keresztül csatlakozik a kapcsolóhoz, a kapcsolók másik lába pedig ugyanarra a bemenetre megy.

tinkercad_oszlop.jpg

A működési elv:

Alaphelyzetben a bemeneti lábakra bekapcsoljuk a PULL_UP regisztert (ha nincs földelve, stabil HIGH érték legyen), a kimeneti lábakat pedig HIGH értékre állítjuk (+5V -ot kapcsolunk rá, azaz nem földeljük!).

A kapcsolók állapotát soronként ellenőrizzük. Először földeljük az első kimeneti sort (LOW értékre állítjuk az első kimeneti lábat). Végig ellenőrizzük a bemeneti lábakat. Ahol az érték LOW, ott a kapcsolónk be van kapcsolva. Értelemszerűen ahol HIGH, ott a kapcsoló ki van kapcsolva. Ahogy megvizsgáltuk a bemeneteket, a kimeneti lábat HIGH értékre visszaállítjuk, így alaphelyzetbe kerül megint a mátrixunk és jöhet a következő sor. Itt ugyanezt kell tenni. A sorhoz tartozó kimeneti lábat LOW-ra, majd az oszlopokhoz tartozó bemeneti lábakat beolvassuk. A beolvasások végén mindig tegyük vissza a sorhoz tartozó kimenetet HIGH-ra!

Miért kell a dióda?

A sorokat úgy ellenőrizzük, hogy rendre leföldeljük őket. Mivel oszloponként a kapcsolók lábai is össze vannak kötve, ezért ha egy oszlopban bekapcsolunk egy kapcsolót, akkor ott az összes kapcsoló lábán megjelenik a föld. Itt gyönyörű áramkörök alakulhatnak ki, ráadásul mivel mindig csak egy kimenet van földelve, a többi pedig +5V-ra rakva, jó eséllyel akár a boardunkat is elfüstölhetjük egy remek kis rövidzárral (bár lehet van erre benne valami védelem, én inkább nem próbálom ki).

A dióda katódját a kimeneti lábra kötjük, az anódját pedig a kapcsolóra. Ezzel biztosítjuk, hogy csak az adott sor kimeneti lábáról érkező föld tud megjelenni a bemeneten (egy másik soron keresztül nem fog záródni a kör a dióda miatt), illetve két kimenet sosem kerülhet összezárásra (kivéve, ha mindkettő föld, de azzal meg nincs gond).

Mekkora mátrixot lehet így kezelni?

Elméletileg csak az arduino I/O lábainak száma korlátoz minket.  Íme egy teljesen felesleges táblázat, mert nem igényel bonyolult számítást, de kiváló térkitöltő ebben a posztban. Feltétlenül jelezd, ha te is így gondolod.

Mátrix  I/O láb  Kapcsoló 
3x3 6 9
3x4 7 12
4x4 8 16
4x5 9 20
5x5 10 25

 

 Tinkercad-en összeraktam egy áramkört erre (a képek onnan kerültek kivágásra), megmutatom az arduino code-ot és hogyan fut a szimuláció:

 

 

 

 

 

A bejegyzés trackback címe:

https://repszim.blog.hu/api/trackback/id/tr2614597402

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

kpetya 2019.06.05. 10:51:23

nézz rá az mcp23017-re. 16 bites (2x8 bit) IO bővítő. Interruptot is tud.
Amire még figyelned kell az a debuonce , nem tudom hogy van magyarul, a lényeg, hogy ha lenyomod a gombot vagy átváltod, nem simán lesz 1 vagy 0 a kimenet hanem a mechanikus kivitel miatt jó pár millisec ideig ugrál az érték.. Van rá szoftveres megoldás is de én 74hc14 ic-vel csináltam meg.

pl
hackaday.com/2015/12/09/embed-with-elliot-debounce-your-noisy-buttons-part-i/

Karfiol 2019.06.05. 14:10:29

esetleg multiplexer/demultiplexer is használható lenne, és akkor kevesebb lábat veszel el. Cserébe plusz alkatrész kerül be a körbe.

C172Peti · http://repszim.blog.hu 2019.06.05. 17:39:53

@Karfiol: köszi a tippet! Tudsz erre nekem egy mintát küldeni? Mindenre vevő vagyok, amivel tovább tudom csökkenteni az elhasznált lábak számát. Köszi!
süti beállítások módosítása