Obsah:

Osu! Klávesnica: 8 krokov (s obrázkami)
Osu! Klávesnica: 8 krokov (s obrázkami)

Video: Osu! Klávesnica: 8 krokov (s obrázkami)

Video: Osu! Klávesnica: 8 krokov (s obrázkami)
Video: Обзор клавиатуры DrunkDeer A75 с Rapid Trigger. И зачем теперь Wooting? 2024, Júl
Anonim
Osu! Klávesnica
Osu! Klávesnica

Nedávno som začal hrať rytmickú hru s názvom osu! a potom, čo som videl video z komerčnej mini klávesnice, som si povedal, že by to bol zábavný projekt navrhnúť si ju sám. Krátko na to som sa rozhodol, že by bolo dobré dať to na inštrukcie ako môj prvý projekt.

Ak chcete replikovať tento projekt presne podľa posledných pokynov, buďte mojím hosťom, ale niektoré nápady, ktoré som urobil, nie sú založené na najnižšej cene alebo najlepšej kvalite. Niektoré komponenty sú vybrané takmer čisto preto, že som ich nechal ležať. Ak to zvládnete, prinútim vás prispôsobiť si projekt.

Poznámka 1: Používajú sa súčiastky SMD (malá elektronika), takže ak replikujete tento projekt, sú potrebné spájkovacie schopnosti. možno bude pridaná ľahko spájkovateľná verzia, ale tieto diódy nie sú dodávané v balení s priechodnými dierami

Poznámka 2: Kód som viackrát aktualizoval a teraz mám verziu 3ish. Nechám všetok kód online, ale odporúčam vám použiť poslednú verziu. V súčasnej dobe nemá vedenú funkciu, ale mala by byť tou najvýkonnejšou.

Krok 1: Materiály a vysvetlenia

Materiály a vysvetlenia
Materiály a vysvetlenia

V závislosti od toho, ako robíte svoj projekt, možno budete potrebovať rôzne komponenty, ale tieto komponenty sú tie, ktoré som použil. Ak máte čas a chcete ušetriť, objednajte si aliexpress a neobjednávajte PCB.

1 kábel Arduino pro micro + USB

3 červené prepínače Kailh BOX

3 10k odpor (0805 SMD)

3 kondenzátor 100nF (0805 SMD)

4 APA102 rgb LED (5050 SMD)

3 kryty na kľúče

1 Doska s plošnými spojmi (PCB) poskytovaná v tomto projekte

1 3D tlačené puzdro poskytnuté v tomto projekte

Prečo používam Arduino pro micro?

Väčšina arduino dosiek, ako je Uno (Atmega328), nemá natívnu podporu pre komunikáciu USB. Áno, môžete ich veľmi ľahko naprogramovať cez USB a myslím si, že existujú riešenia, ale rád by som to zjednodušil, pokiaľ ide o komunikáciu cez USB, a neviem, či tieto riešenia reagujú tak rýchlo. Tieto dosky používajú externý čip, ktorý umožňuje komunikáciu USB, zatiaľ čo Arduino pro micro (Atmega32U4) ho má vstavaný.

Vypínače

Môžete použiť mnoho mechanických spínačov. Lineárne, hmatové alebo klikavé od Kailh alebo Cherry MX. Vyberte si, čo sa vám páči. Použil som prepínače Kailh, pretože na Ailexpress boli lacné. Ak sa rozhodnete používať DPS, budete potrebovať prepínače Kailh BOX. Farba určuje pocit.

Elektronické súčiastky

V tejto kapitole nie je o nich veľa vysvetľovať, ale ak nepoužívate DPS, pre ľahké spájkovanie by som odporučil iba bežné súčiastky do žľabu. Použité LED diódy bohužiaľ nie sú k dispozícii v baleniach žľabov. Tiež by som neodporúčal používať drôty na obaloch SMD, pokiaľ si nie ste veľmi istí svojimi schopnosťami spájkovania. Aj pre SMD na doske plošných spojov sú „pokročilé“schopnosti spájkovania rovnaké.

Bývanie

V tomto projekte poskytujem bývanie, ale v tejto chvíli je chybné. Na osadenie skrutiek sú potrebné úpravy, otvory pre diódy nie sú optimálne, arduino je odkryté a je potrebné vyrezať časť, aby sa USB zmestilo. V budúcnosti môže pribudnúť nové bývanie. Ak máte 3D tlačiareň, pokračujte v tlači, ale prosím, nevyhýbajte sa tlačeniu tohto chybného prípadu, ak tak neurobíte a použijete nejaký druh projektovej škatule.

Krok 2: Schéma

Schéma
Schéma

Schéma tohto projektu je pomerne jednoduchá, ale chcem vysvetliť komponenty pre ľudí, ktorí majú záujem a nepoznajú túto implementáciu.

Prepnite pripojenia na Arduino

Prepínače sú pripojené k pinom Arduino 0, 2 a 3, pretože tieto piny je možné použiť ako externé prerušenia. To je ďalej vysvetlené v časti kódu.

Okruh debounce

Na ľavej strane schémy je obvod, ktorý je skopírovaný 3 krát. Tento obvod sa používa na odpojenie spínača. Aby ste vedeli, čo je to odskakovanie, musíte porozumieť prepínaniu medzi odrazmi a nie je ťažké tomu porozumieť.

Prvý pohľad na túto simuláciu a nakreslenie prvého obrázku (rýchlo kliknite na prepínač a pozrite sa na signál nižšie)

Keď stlačíte alebo uvoľníte spínač, odrazí sa a váš signál sa niekoľko milisekúnd niekoľkokrát strieda medzi vysokým a nízkym. Arduino je skutočne rýchle a v tomto krátkom čase číta každé vysoké a nízke. Program odošle stlačenie alebo uvoľnenie klávesu pri každom prečítaní vysokej alebo nízkej hodnoty, takže pri každom stlačení počítača váš počítač opakovane stlačí. Nie je to ideálne pre rytmickú hru.

Tento obvod odskoku spomalí klesajúcu hranu signálu. Signál pre Arduino sa nebude môcť meniť tak rýchlo, ako k odrazom dochádza, takže bude prečítaný jediným stlačením. Nebojte sa, že pri nasledujúcom skutočnom tlači sa spomalí, pretože bude.

Pokročilé:

Atmaga32U4 číta digitálne minimum pri 0,2 Vcc - 0,1 V = 0,9 voltu. Napätie kondenzátora kedykoľvek pri jeho vybití je Vcc * e^(-t/RC). Ak na prepínači zmeráte iný čas odskoku, môžete vypočítať hodnoty odporu a kondenzátora.

formulár vzorca

LED diódy

RGB LED diódy sú LED diódy APA102, ktoré je možné individuálne adresovať pomocou hodinového a dátového vedenia. Na to, aby fungovali, nie sú potrebné žiadne externé komponenty. Pre mnohé diódy LED by ste mali použiť kondenzátor rovnobežný s 5 voltami a so zemou, ale iba so 4 diódami LED to nepotrebujete.

Krok 3: Návrh dosky

Dizajn dosky
Dizajn dosky

Doska plošných spojov bola navrhnutá v JLCPCB. Nie som sponzorovaný nimi, ale pre lacné prototypy robia vynikajúce PCB. Za 2 doláre dostanete 10 na rovnakú dosku, ale poštovné pre mňa bolo asi 11 dolárov. Ak nepotrebujete osvetlenie RGB a plánujete vyrobiť iba jedno, mali by ste zvážiť výrobu klávesnice bez PCB.

Dizajn dosky bol dosť priamy. Potreboval som pridať iba komponent pre prepínače, ale po zhliadnutí niektorých videí som to pochopil. Jediná chyba, ktorú som si uvedomil, je umiestnenie otvorov príliš blízko prepínačov.

Ak chcete objednať DPS, choďte na https://jlcpcb.com/ a zvoľte 2 -vrstvovú možnosť. Požiada vás o súbor Gerber. stiahnite si súbor „.zip“a presuňte ho do okna. Rozbaľovať ho nemusíte. Nastavenia by mali byť v poriadku a môžete pokračovať a dokončiť objednávku.

Krok 4: Tipy na dizajn a montáž puzdra

Tipy na dizajn a montáž puzdra
Tipy na dizajn a montáž puzdra
Tipy na dizajn a montáž puzdra
Tipy na dizajn a montáž puzdra
Tipy na dizajn a montáž puzdra
Tipy na dizajn a montáž puzdra
Tipy na dizajn a montáž puzdra
Tipy na dizajn a montáž puzdra

Dizajn

Ako už bolo uvedené vyššie, môj dizajn je chybný, ale ak chcete, stále ho môžete vytlačiť. návrh bol vytvorený vo Fusion 360. Je to bezplatný softvér pre 3D modelovanie a podľa mojich skúseností od vynálezcu a Solidworks sa s ním celkom ľahko pracovalo. Kruhy v rohoch puzdra majú zabrániť odlupovaniu z tlačovej podložky.

Ak robíte svoj vlastný prípad, je skutočne dôležitá iba jedna vec. Prepínače musia byť pevne umiestnené a nesmú sa pohybovať. Poskytol som obrázky štvorcových výrezov s rozmermi, aby ste ich mohli použiť pre svoj vlastný návrh za predpokladu, že používate prepínače Kailh BOX.

zhromaždenie

Teraz máte všetky komponenty potrebné na zostavenie. Zostavenie tejto prvej verzie je nariadené, pretože spínače sú spájkované.

1. Spájkujte súčiastky SMD. to sú odpory, kondenzátory a diódy LED.

2. Spájkujte Arduino pro micro.

3. Pred spájkovaním umiestnite 3 prepínače do 3D tlačenej krycej dosky. Po spájkovaní prepínačov nemožno kryciu dosku odstrániť. Odspájkovanie spínačov sa neodporúča a môže ich zničiť.

4. Teraz spájkujte prepínače na mieste. Urobte to čo najskôr, pretože plastové spínače ich môžu roztaviť a zničiť alebo drasticky znížiť počet kliknutí.

5. Vložte zostavenú kryciu dosku do puzdra s 3D tlačou a zaistite páskou alebo použite skrutky, ak nerušia kryty klávesov.

6. Umiestnite klávesovú skratku na vypínač a máte hotovo.

Odporúčania

Po nahraní kódu odpojte alebo maskujte diódy LED na arduine. LED diódy sú pekné, ak sa váš kód nenahrá, ale nie je pekné ich považovať za hotový výrobok. Vyžadujú sa šikovné a špicaté pinzety.

Tiež niektoré úchopové nožičky v spodnej časti sú protišmykové a nechávajú presvitať svetlo RGB.

Krok 5: Kód V1 (odbúranie hardvéru)

The Code V1 (hardware Debounce)
The Code V1 (hardware Debounce)
The Code V1 (hardware Debounce)
The Code V1 (hardware Debounce)

Kód pre tento projekt nie je priateľský pre začiatočníkov, takže ak s programovaním v arduine len začínate, tento kód vás možno trochu vydesí. Pokúsim sa však čo najlepšie vysvetliť, čo sa deje. Niektoré veci sú vysvetlené neskôr v tomto texte, takže ak máte otázky, prečítajte si najskôr celú vec.

Nahrávanie kódu

Najprv stiahnite všetky 3 súbory „.ino“a vložte ich do jedného priečinka. Ak nemáte Arduino IDE, stiahnite si ho zadarmo na oficiálnej stránke arduino.

Pripojte Arduino k počítaču a otvorte „OSU_Keyboard_code_V1.ino“. Na paneli nástrojov vyberte „Arduino/Genuino Micro“. V nástrojoch vyberte aj správny port COM. To sa môže niekedy zmeniť. Ak chcete nahrať kód do svojho Arduina, kliknite na šípku v ľavom hornom rohu obrazovky a počkajte, kým vám vľavo dole neoznámi, že je dokončený.

OSU_Keyboard_code_V1

Vrátane a definovania

Najprv musíte zahrnúť knižnicu klávesnice. Vďaka tomu je možné používať Arduino ako klávesnicu.

Ďalej definujem niektoré hodnoty. Definovať je rovnako ako premenná, ale nemôžu sa meniť, keď je program spustený. Prvých 9 je pre znak klávesnice, číslo arduino pinu a portové bity.

Potom portové bity LED dát a hodiny.

Tiež je definovaný počet LED a premenná pre uhol farebného kolieska.

Nastaviť

Táto časť kódu sa spustí iba raz, keď je arduino zapojené.

Najprv sú hodiny a dátové piny LED diód nastavené ako výstupy a prepínacie piny ako vstupy. Toto je pokročilá verzia programu pinMode (). Ak máte záujem, vyhľadajte „priamu manipuláciu s portom“.

Keyboard.begin () jednoducho spustí pripojenie USB ako klávesnica.

Ďalšie 3 prerušenia sú prepojené s prepínacími kolíkmi. Zakaždým, keď je na prepínacom kolíku detekovaná zmena, spustí sa malý program. Tento malý program bude prebiehať ďalej.

Slučka

Táto časť sa bude nepretržite opakovať, kým je arduino napájané.

Používam ho iba na zmenu a aktualizáciu farby LED diód.

Preruší

Tu sa vykonávajú malé programy, ktoré sa budú vykonávať iba vtedy, keď je na prepínacích kolíkoch zistená zmena. Sú identické, okrem toho, na ktorý kolík reagujú.

Najprv skontroluje, či je tlačidlo stlačené alebo uvoľnené, a odošle správny príkaz z klávesnice.

LED (vysvetlené v inom poradí)

Ak vás zaujíma, ako sa LED diódy ovládajú, mali by ste sa pozrieť na technický list APA102.

OneBit

Toto je opäť verzia digitálneho zápisu s priamou manipuláciou s portom.

Najprv skontroluje, či má odoslať 0 alebo 1, respektíve vytiahne dátový kolík nízko alebo vysoko. Potom napíše vysoký a veľmi nízky pin hodín.

OneByte

OneBit sa to zopakuje 8 -krát so slučkou „pre“. Načíta prvý bit v bajte a prenesie svoju hodnotu do funkcie oneBit a to isté urobí pre ďalších 7 bitov.

LedData

OneByte sa to zopakuje štyrikrát, aby sa získali údaje potrebné pre jednu diódu LED. Prvý bajt začína číslom 111xxxxx a 5 -bitovou hodnotou jasu na mieste xxxxx. Jas je možné nastaviť od 0 do 31 (2^5 = 32 úrovní).

Nasledujúce 3 bajty sú pre modrú, zelenú a červenú hodnotu. Jeden bajt pre každú farbu.

ColorWheelThisLed

Táto funkcia volá ledData a dáva jej farby rgb v závislosti od uhla vo farebnom koliesku.

16 -bitová hodnota je dividenda v 6 rovnomerne rozložených častiach 60 stupňov. Pohľad na obrázky vám môže pomôcť lepšie porozumieť.

(K dispozícii je aj 8 -bitová verzia, ktorá je však komentovaná, pretože je príliš blikajúca)

StartEndFrame

Štartovací rámček je potrebné použiť zakaždým, keď chcete odoslať nové farby na diódy LED a chcete aktualizovať skutočnú farbu diód

Používam iba počiatočný rámec, pretože koncový rám nie je potrebný. Počiatočný rámec je 4 bajty po 0. Koncový rámec je 4 bajty 255 (11111111).

Krok 6: The Code V2 (softvér Debounce With Timers)

The Code V2 (softvér Debounce With Timers)
The Code V2 (softvér Debounce With Timers)

Po chvíli hrania som si všimol niekoľko problémov s dvojitým poklepaním pri odbúraní hardvéru. To je možné opraviť pomocou iných hodnotných rezistorov alebo kondenzátorov, ale keďže tlačidlá a veko nie sú odnímateľné, myslel som si, že by bolo pekným riešením odstránenie softvéru. Softvérové odbúranie by malo fungovať bez ohľadu na to, či je alebo nie je implementované hardvérové odbúranie. V mojom aktuálnom nastavení nemôžem odstrániť veko, takže som nechal rezistory a kondenzátory na mieste.

Kód nebudem vysvetľovať tak obšírne ako predchádzajúcu verziu, pretože je trochu ťažšie ho vysvetliť.

V zásade väčšina kódu funguje rovnako a kód LED zostane nedotknutý. čo sa zmenilo, externé prerušenia už nepoužívajú funkcie arduino. Teraz to funguje v čistom C kóde. A teraz je pridané prerušenie softvéru. Na tento účel som použil časovače AVR určitý čas na čakanie, kým sa odrážanie nezastaví. Pretože sú časovače založené na prerušení, čas dekódovania nie je ovplyvnený ničím, čo sa deje v slučke.

Jediné mínus, na ktoré môžem prísť, je to, že funkcie arduino delay už nemožno používať. Pretože funkcie oneskorenia používajú časovač 0 a tento program používa časovač 0 na odblokovanie.

Na obrázku môžete vidieť, ako kód zhruba funguje. Pamäťový bit indikuje, či beží časovač. Čo nie je zobrazené, je prípad, že na konci stlačenia tlačidla je vstup nízky. V tomto prípade bude odoslané iba stlačenie klávesu, kým je tlačidlo už uvoľnené. To znamená, že kláves bude podržaný, pokiaľ ide o počítač. V prípade tejto vzácnej výnimky bude po uplynutí časovača vykonaná kontrola. Ak na konci časovača nie je tlačidlo stlačené, odošle sa príkaz na uvoľnenie kľúča.

Krok 7: Kód V3 (softvér Debounce s vertikálnym počítadlom) (odporúča sa) (bez diódy LED)

The Code V3 (softvér Debounce With Vertical Counter) (odporúča sa) (bez LED)
The Code V3 (softvér Debounce With Vertical Counter) (odporúča sa) (bez LED)

Tento kód má aj verziu, v ktorej nepotrebujete sťahovacie odpory. Uistite sa, že každé tlačidlo pripojíte k vstupu a UZEMNENÍ! Použije sa vstavaný výsuv

Zažil som aj niekoľko neregistrovaných lisov v kóde V2. Myslím si, že kód sa stal príliš zložitým s časovým a externým prerušením a možno som vynechal niektoré výnimky. Z tohto dôvodu som od začiatku sterilizoval vyhľadávaním metód odstraňovania softvéru na internete.

(úprimne povedané, najmenej polovica tohto projektu sa v tomto bode stala tlačidlom debounting)

Po krátkom hľadaní som narazil na tento príspevok:

www.compuphase.com/electronics/debouncing….

Ak mám byť úprimný, trvalo mi celkom dlho, kým som úplne pochopil, ako to presne funguje. Zahŕňa to dosť zložité bitové manipulácie, ale pokúsim sa to urobiť čo najľahším. Moje vysvetlenia však budú iba dodatkom k príspevku, takže by ste si mali prečítať aspoň „vertikálne počítadlá“, „komentovanú implementáciu“a „zníženie latencie“.

Moje vysvetlenie

Časový diagram (vytvorený vo WaveDrom), ktorý som pridal, by mal urobiť túto trochu ťažšie zrozumiteľnú bitovú matematiku. Všimnite si toho, že obrázok má 2 počítadlá bitov, ale môj kód má 3. To znamená dlhší čas na odstránenie chyby.

Jeden bit na hodnotu

Vďaka implementácii vertikálneho počítadla je možné paralelne odpojiť viacero tlačidiel súčasne. Všetky hodnoty sú typu Byte (uint8_t) a pozostávajú z 8 bitov. Nezaujíma nás, akú hodnotu niektorý z týchto bajtov obsahuje, ale skôr nás zaujímajú bity samy o sebe. Každé tlačidlo, ktoré sa má zrušiť, používa iba jeden bit z každého bajtu. Prvé tlačidlo používa iba prvý bit z každého bajtu, druhé tlačidlo používa druhý bit atď.

Všetky súčasne

Použitím bitovej matematiky je možné tieto odbúranie pinov vykonávať paralelne. A aj keď je bitová matematika dosť komplikovaná, je pre procesor veľmi efektívna.

S 8 -bitovým dátovým typom je to teda možné vykonať pre 8 tlačidiel. Použitie väčších dátových typov umožňuje viac debounov naraz.

Odskok

Rutina odskoku sa vykonáva každú 1 milisekundu s prerušením časovača.

keď je tlačidlo stlačené, tlačidlo stav, čo je stav zrušenia, sa okamžite zníži, čo naznačuje stlačenie tlačidla. Na rozpoznanie uvoľnenia musí byť tlačidlo dostatočne vysoké, čo znamená, že určitý čas neodskočilo. Prepínač sa používa na označenie zmeny tlačidla. Počitadlá sa používajú na … počítajúc, ako dlho nedošlo k odrazu.

Delta označuje rozdiel medzi vstupom a stavom zrušenia. Počítadlo sa započíta iba vtedy, ak je rozdiel. počítadlo sa vynuluje, keď je detekovaný odraz (delta je 0).

Krok 8: Výsledok

Image
Image

Ak všetko šlo dobre, mali by ste mať funkčnú klávesnicu na hranie Osu! na. Osobne som si vôbec nevšimol žiadnu latenciu. Ak áno, dajte mi prosím vedieť. Tiež, ak máte nejaké otázky, neváhajte sa na čokoľvek opýtať.

Predchádzajúce zmienky o V2 nie sú myslené ako prísľub, takže tento projekt neodkladajte, pretože na V2 chcete počkať.

Dúfam, že sa vám klávesnica páči!

Osu! meno: Thomazzz3

Riešenie problémov

Ak si myslíte, že máte problémy s klávesnicou, najskôr otvorte textový editor a každé tlačidlo jedenkrát krátko stlačte.

Nefunguje jeden alebo viac kľúčov?

Je možné, že ste pri spájkovaní interne zničili spínač. Ak máte multimetr, zapojte ho/pípnete, umiestnite ho rovnobežne s prepínačom, kým Arduino nie je pripojené, a stlačte kláves. Malo by to zapípať.

Zodpovedajú znaky, ktoré ste práve zadali, klávesom, ktoré ste nakonfigurovali v Osu! ?

Zmeňte znaky v kóde arduino v prvých 3 #Defines ('' je nevyhnutné!).

Alebo zmeňte svoje Osu! nastavenia na používanie nakonfigurovaných klávesov.

Opakuje sa jeden alebo viac kľúčov niekoľkokrát?

Obvod odskoku pravdepodobne nefunguje pre vaše prepínače alebo nie je správne spájkovaný. Skontrolujte spájkovacie spojenia. Ak k tomu stále dôjde, vyskúšajte hodnotu kondenzátora 1 uF. To bude pre užívateľov PCB veľmi ťažké.

Ak máte problémy s LED diódami

Blikajú LED diódy?

Spájkovacie spojenie môže byť uvoľnené. Ak použijete DPS, potvrďte, že spájkovacia forma naozaj tiekla na podložke na výtlačku.

Nefunguje žiadna z diód LED alebo prestane fungovať určitý počet diód LED?

Skontrolujte skraty medzi spojmi prvej LED (sledujte stopy) a skontrolujte dobre zapojený cín na výstupoch Arduina a opäť prvej LED. Ak je potvrdený správny a stále je chybný, možno budete musieť vymeniť prvú diódu LED.

Ak sa to vyrieši, v prípade potreby zopakujte pre ďalšie LED diódy.

Odporúča: