Button Box 1.0

Button Box
Button Box

Button Box, neboli čudlíková krabička je je projekt na který jsem si už delší dobu brousil drápky. Jde o příslušenství k PC, které umožní rozšířit herní ovladače jako joystick atd. o nepřeberné množství čudlíků. Zvláště se hodí u leteckých simulátorů, ale nejen tam 🙂 Zvýší herní prožitek nejen gamblerům, ale i svátečním hráčům. První prototyp je určen k otcově simulátoru IL-2 Sturmovik, či Warthunder. Proto jsem vzhled navrhl trochu více do retro stylu. Vypínače jsou páčkové, tlačítka pak panelová, kovová. Knoflíky enkodérů mají také příjemný „přístrojový“ design. Celý button box se pak chová jako další klasický joystick USB HID zařízení a není třeba jej nějak instalovat

Návrh

Teorie byla velmi jednoduchá, praxe už trošku složitější. Zejména proto, že jsem si na sebe upletl bič v podobě páčkových spínačů. Pro začátek jsem vyšel z již dobře popsaného projektu podobné krabičky zde.  Kod je použitelný, není tedy třeba vynalézat vynalezené. Jedná se jen o propojení knihoven Keypad.h a Joystick.h, pokud byste chtěli zůstat jen u tlačítek a enkodérů, tak zde je v podstatě vše hotovo. Na jedno Arduino Micro jde pověsit až 22 tlačítek a tři enkodéry. Na základě počtu pinů na Arduinu a požadavku, aby tam bylo co nejvíce „točítek“ jsem ve Fusion360 vymodeloval návrh celé sestavy.

Nakonec jsem se ustálil na 9 spínačích, každý s LED indikací sepnutí, 4 enkodéry. (Tedy nekonečné točítko které vysílá několikrát za otočku stejný puls – vlevo, či  vpravo) hodí se na jemné doladění hodnot, trimování atd. – jeden enkodér tedy ovládá celkem 3 tlačítka. 1 -mačká otáčením vlevo, 2- mačká otáčením vpravo, 3- je bonus, ovládá se stiskem osy a funguje jako klasické tlačítko. Dále jsem pro testovací účely použil otočný 6 pozicový přepínač.

Nechal jsem si vypálit nerezové čelo. Krabici jsem použil standardizovanou z GM Electronic viz seznam komponentů. Objednal jsem součástky a při čekání na zásilku jsem se pustil do návrhu software.

Button Box

Požadované funkce

Většina her je navržena tak, aby šla ovládat ze standardní PC klávesnice. A pokud připojíte nějaký joystick, nebo další ovládací zařízení, všechna jsou opatřena pouze tlačítky. Nikoli spínačem ON-OFF. Proto všechny vstupy ve hrách většinou očekávají pouze krátký impulz, který přijde z klávesnice. Zapnutí světel: stisk klávesy „L“ ; vypnutí světel: opětovné stisknutí klávesy „L“. Hra tedy neočekává, že budete stále držet sepnutou klávesu „L“ tak dlouho, dokud budete chtít svítit. Bylo tedy nutno nějak ošetřit jak se bude vypínač chovat.

Všechny páčkové spínače jsou tedy softwarově řešeny tak, že při ZMĚNĚ vyšlou 100ms impuls na HIGH a potom pošlou LOW. Vypínač se tedy chová tak, že když jej přepneme do horní pozice „klikne“ jako zvolené tlačítko a dále je nečinný, když jej vrátíme do spodní pozice, opět „klikne“ na to stejné tlačítko a opět je nečinný. Tímto tedy simuluji „mačkání“ dané klávesy na klávesnici. Problém však je, že ve stavu LOW, zůstává jen softwarově, fyzicky je ale sepnutý a s tím si matrix knihovna neporadí.

Problém se jmenuje matrix

Bohužel, jak jsem se již zmínil, níže popsaný kód využívá k namapování tlačítek knihovnu keypad.h , která využívá tzv. matrix, tedy síť tlačítek, kdy stačí propojit pouze řady a sloupce. Důvod je jednoduchý a to je ten, že Arduino má omezený počet pinů a pomocí matrixu můžete na 5+5 pinů pověsit 5×5 tlačítek. Tedy 10 vs. 25. Bohužel tato knihovna nepracuje s možností, že by bylo stisknutých více tlačítek najednou a to je problém právě spínačů, které zůstávají sepnuté.

Dostal jsem se takto do velmi prekérní situace, kdy jsem měl již nakoupené součástky a hlavně vypálený nerezový plech na míru a díry na spínače byly menší než na panelová tlačítka. Mohl jsem to hodit za hlavu, použít původní plastový kryt a pověsit na to jen tlačítka a bylo by vymalováno. Nicméně mi to nedalo a chtěl jsem tam ty páčkové spínače prostě mít 🙂

Naštěstí jsem objevil velmi užitečnou věcičku jménem I/O expander, která se přes I2C sběrnici rozšíří Arduino o 8 vstupů/výstupů. Navíc se tyto expandéry dají spojit za sebe a to až 8x, takže 64 vstupně výstupních pinů, s tím už se dá pracovat (pomocí jumperů se změní adresa). Nakonec jsem použil dva, tedy 16 vstupů.

A jsme zase na začátku

Vlivem výše uvedených okolností jsem se dostal zpět k návrhu, protože použitím expanderů mi vysvitla nová možnost rozšířit Button Box o další tlačítka. Všech 9 páčkových spínačů + otočný přepínač jsem tedy napojil na dva expandery, kde mi zbyly ještě dvě pozice pro další spínače. No a na uvolněné piny arduina jsem tak mohl pověsit matici  4×4,  tedy dalších 16 tlačítek navíc! Respektive 12, protože čtyři pozice využiji pro středová tlačítka enkodérů. Takže nakonec slušná nálož 40 unikátních joystick výstupů. Už jsem se s tím moc nepáral  a vyvrtal do plastové skříně dalších 12 otvorů pro tlačítka a spínače.

Program

Jelikož jsem věčný začátečník, tak je program poslepován z různých příkladů a jiných řešení. Nicméně funguje perfektně. Stejně jsem musel většinu odladit řádek po řádku. Hojně se pracuje s poli (array). Nechal jsem tam několik zakomentovaných pasáží, které mi sloužily pro ladění programu. Kód je celkem dobře okomentovaný, takže by neměl být problém se v něm vyznat. V principu jde o to, že program hlídá změny tlačítek a ukládá si informaci o tom, zda jsme tlačítko zmáčkli nebo uvolnili a podle toho reaguje. Nejvíce jsem se pral s expanderem. Existuje mnoho knihoven, ale s každou se pracuje trošku jinak a v INO se mi křížily, takže jsem musel všechny PCF8574.h odinstalovat a nahrát pouze jednu, ke které jsem našel patřičný návod.

Jdeme do finále

Ač se zdálo, že spájet to vše dohromady bude nejsnadnější, nebylo tomu tak. S přibývajícím počtem spojů se z toho stávalo čím dál větší klubko drátů a někdy se s horkám hrotem manévrovalo hodně těsně kolem bužírek. Jako třešničku na dortu jsem ještě zjistil, že jsem nechal vypálit špatný průměr (samozřejmě menší) pro otočný přepínač, takže jsem ještě musel vyrobit konstrukci, která jej drží na dně krabice, místo aby byl zašroubovaný v panelu.

Diody nejsou ošetřeny programově ale natvrdo připájené k druhé větvi dvoupólového vypínače. Předřadné rezistory jsem naskládal vedle sebe na univerzální „dírkovanou“ desku DPS, stejně tak patici pro Arduino. Sofistikovanější by bylo navrhnout nějaký tištěný spoj, ale na to teď nebyl čas, hlavně se vše ještě ladí.

Ještě jsem doplnil jednu blbinku a to je „ARM“ tedy zajištění dvou dvojic spínačů s indikací červená/zelená. Kterými můžete zajistit tlačítka proti nechtěnému stisknutí (třeba u nouzového opuštění letadla, odhození bomba atd)

Pro finální vzhled jsem ještě na plotru vyřezal z vinylové folie čísla tlačítek pro lepší orientaci. Při ostrém provozu zřejmě pak doplníme přímo o nápisy funkcí, které se ustálí u jednotlivých ovládacích prvků.

Total Page Visits: 2158 - Today Page Visits: 24

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

*

code