Obsah:

Osu! Klávesnice: 8 kroků (s obrázky)
Osu! Klávesnice: 8 kroků (s obrázky)

Video: Osu! Klávesnice: 8 kroků (s obrázky)

Video: Osu! Klávesnice: 8 kroků (s obrázky)
Video: 15 triků pro iPhone, které musíš vyzkoušet. 2024, Červenec
Anonim
Osu! Klávesnice
Osu! Klávesnice

Nedávno jsem začal hrát rytmickou hru s názvem osu! a poté, co jsem viděl video komerční mini klávesnice, jsem si řekl, že by to byl zábavný projekt navrhnout si ji sám. Nedlouho poté jsem se rozhodl, že by bylo dobré dát to na instructables jako svůj první projekt.

Pokud chcete tento projekt replikovat přesně podle poslední instrukce, buďte mým hostem, ale některá rozhodnutí, která jsem udělal, nejsou založena na nejnižší ceně nebo nejlepší kvalitě. Některé komponenty jsou vybrány téměř čistě proto, že jsem je nechal ležet. Pokud to zvládnete, přiměl bych vás, abyste svůj projekt přizpůsobili.

Poznámka 1: Používají se komponenty SMD (malá elektronika), takže pokud replikujete tento projekt, jsou vyžadovány dovednosti pájení. možná bude přidána snadno pájitelná verze, ale tyto LED diody nepřicházejí v balení se žlábkovým otvorem

Poznámka 2: Kód jsem několikrát aktualizoval a nyní používám až do verze 3ish. Nechám veškerý kód online, ale doporučuji použít poslední verzi. Aktuálně nemá funkci led, ale měla by být nejvýkonnější.

Krok 1: Materiály a vysvětlení

Materiály a vysvětlení
Materiály a vysvětlení

V závislosti na tom, jak svůj projekt vytvoříte, možná budete potřebovat různé komponenty, ale tyto komponenty jsou ty, které jsem použil. Pokud máte čas a chcete ušetřit, objednejte si aliexpress a neobjednávejte PCB.

1 kabel Arduino pro micro + USB

3 červené přepínače Kailh BOX

3 10k odpor (0805 SMD)

3 kondenzátor 100nF (0805 SMD)

4 APA102 RGB LED (5050 SMD)

3 klíčenky

1 Deska s plošnými spoji (PCB) poskytovaná v tomto projektu

1 3D vytištěné pouzdro poskytnuté v tomto projektu

Proč používám Arduino pro micro?

Většina arduino desek jako Uno (Atmega328) nemá nativní podporu pro USB komunikaci. Ano, můžete je velmi snadno naprogramovat přes USB a myslím, že existují řešení, ale rád bych to zjednodušil, pokud jde o komunikaci USB, a nevím, zda jsou zástupná řešení stejně citlivá. Tyto desky používají externí čip, který umožňuje komunikaci USB, zatímco Arduino pro micro (Atmega32U4) to má vestavěné.

Přepínače

Můžete použít mnoho mechanických spínačů. Lineární, hmatové nebo klikavé od Kailh nebo Cherry MX. Vyberte si, co se vám líbí. Použil jsem přepínače Kailh, protože na Ailexpressu byly levné. Pokud se rozhodnete použít desku plošných spojů, budete potřebovat přepínače Kailh BOX. Barva určuje pocit.

Elektronické součástky

V této kapitole o nich není moc co vysvětlovat, ale pokud nepoužíváte desku plošných spojů, doporučil bych pro snadné pájení pouze běžné součásti otvorů. Použité LED diody bohužel nejsou k dispozici v balících žlabů. Také bych nedoporučoval používat vodiče na SMD balíčcích, pokud si nejste velmi jistí svými pájecími schopnostmi. I pro SMD na desce plošných spojů jsou „pokročilé“schopnosti pájení rovnocenné.

Bydlení

V tomto projektu poskytuji bydlení, ale v tuto chvíli je chybné. Pro montáž šroubů jsou nutné úpravy, otvory pro ledky nejsou optimální, arduino je odkryté a je třeba vyříznout část, aby se USB vešlo. V budoucnu může být přidáno nové bydlení. Pokud máte 3D tiskárnu, pokračujte a vytiskněte ji, ale prosím, nevyhýbejte se vytištění tohoto vadného případu, pokud ne a použijete nějaký druh projektové krabice.

Krok 2: Schéma

Schéma
Schéma

Schéma tohoto projektu je poměrně jednoduché, ale chci vysvětlit komponenty pro lidi, kteří mají zájem a neznají tuto implementaci.

Přepněte připojení k Arduinu

Přepínače jsou připojeny k pinům Arduino 0, 2 a 3, protože tyto piny lze použít jako externí přerušení. To je dále vysvětleno v sekci kódu.

Okruh odskoku

Na levé straně schématu je obvod, který je kopírován 3krát. Tento obvod se používá k odpojení přepínače. Abyste věděli, co je to odskakování, musíte porozumět skákání pomocí přepínačů a není těžké to pochopit.

První pohled na tuto simulaci namaluje první obrázek (rychle klikněte na přepínač a podívejte se na signál níže)

Když stisknete nebo uvolníte spínač, odrazí se a váš signál se několik milisekund několikrát střídá mezi vysokou a nízkou. Arduino je opravdu rychlé a během této krátké doby přečte každé maximum i minimum. Program odešle stisknutí nebo uvolnění klávesy pokaždé, když je načten vysoký nebo nízký tlak, takže při každém stisknutí bude počítač přijímat více stisknutí kláves. Není to ideální pro rytmickou hru.

Tento obvod odskoku zpomalí sestupnou hranu signálu. Signál pro Arduino se nebude moci měnit tak rychle, jak dojde k odskakování, takže bude čten jediným stisknutím. Nebojte se, že by to při příštím skutečném tisku zpomalilo, protože to bude.

Pokročilý:

Atmaga32U4 čte digitální minimum při 0,2 Vcc - 0,1 V = 0,9 voltu. Napětí kondenzátoru kdykoli při jeho vybití je Vcc * e^(-t/RC). Pokud na svém přepínači změříte jiný čas odskoku, můžete vypočítat hodnoty odporu a kondenzátoru.

formulář vzorce

LED diody

RGB LED diody jsou LED diody APA102, které lze jednotlivě adresovat pomocí hodin a datové linky. K jejich fungování nejsou potřeba žádné externí komponenty. Pro mnoho LED diod byste měli použít kondenzátor paralelně k 5 voltům a uzemnění, ale s pouhými 4 LED to nepotřebujete.

Krok 3: Návrh desky

Deskový design
Deskový design

Deska plošných spojů byla navržena v JLCPCB. Nejsem sponzorován jimi, ale pro levné prototypy dělají vynikající PCB. Za 2 dolary dostanete 10 stejné desky, ale poštovné pro mě bylo asi 11 dolarů. Pokud nutně nechcete osvětlení RGB a plánujete vytvořit pouze jedno, měli byste zvážit výrobu klávesnice bez PCB.

Design desky byl docela přímočarý. Potřeboval jsem přidat pouze komponentu pro přepínače, ale po shlédnutí některých videí jsem to pochopil. Jedinou vadou, kterou jsem si uvědomil, je umístění otvorů příliš blízko spínačů.

Chcete -li objednat desku plošných spojů, přejděte na stránku https://jlcpcb.com/ a vyberte možnost se dvěma vrstvami. Požádá vás o Gerberův soubor. stáhněte si soubor „.zip“a přetáhněte jej do okna. Není nutné jej rozbalit. Nastavení by mělo být v pořádku a můžete pokračovat a dokončit objednávku.

Krok 4: Tipy na design a montáž pouzdra

Tipy na design a montáž pouzdra
Tipy na design a montáž pouzdra
Tipy na design a montáž pouzdra
Tipy na design a montáž pouzdra
Tipy na design a montáž pouzdra
Tipy na design a montáž pouzdra
Tipy na design a montáž pouzdra
Tipy na design a montáž pouzdra

Design

Jak již bylo uvedeno výše, můj návrh je vadný, ale pokud chcete, můžete jej stále vytisknout. návrh byl vytvořen ve Fusion 360. Je to bezplatný software pro 3D modelování a podle mých zkušeností od vynálezce a Solidworks se s ním docela snadno pracovalo. Kruhy v rozích pouzdra mají zabránit odlupování z potisku.

Pokud děláte svůj vlastní případ, je opravdu důležitá jen jedna věc. Přepínače musí být pevně umístěny a nesmí se pohybovat. Poskytl jsem obrázky čtvercových výřezů s rozměry, takže je můžete použít pro svůj vlastní design za předpokladu, že používáte přepínače Kailh BOX.

Shromáždění

Nyní máte všechny komponenty potřebné k sestavení. Sestavení této první verze je zakázáno, protože přepínače jsou pájeny.

1. Pájejte součásti SMD. to jsou odpory, kondenzátory a LED diody.

2. Pájejte Arduino pro micro.

3. Před pájením umístěte 3 přepínače do 3D tištěné krycí desky. Krycí desku nelze po pájení spínačů sejmout. Odpájení spínačů se nedoporučuje a může je zničit.

4. Nyní pájejte spínače na místo. Udělejte to co nejrychleji, protože plastové spínače je mohou roztavit a zničit nebo drasticky snížit počet kliknutí.

5. Umístěte sestavenou krycí desku do 3D tištěného pouzdra a zajistěte páskou nebo použijte šrouby, pokud nepřekážejí krytům klíčů.

6. Umístěte keyCaps na přepínače a máte hotovo.

Doporučení

Po nahrání kódu odpojte nebo maskujte LED diody na arduinu. LED diody je hezké mít, pokud se váš kód nenahrává, ale není hezké je považovat za hotový produkt. Vyžaduje se dovednost a špičatá pinzeta.

Také některé úchopové nožičky ve spodní části jsou příjemné na protiskluzovou úpravu a nechávají prosvítat světlo RGB.

Krok 5: The Code V1 (hardware Debounce)

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

Kód pro tento projekt není vhodný pro začátečníky, takže pokud s programováním v arduinu teprve začínáte, tento kód vás možná trochu vyděsí. Nicméně se pokusím vysvětlit, co se děje, co nejlépe. Některé věci jsou vysvětleny později v tomto textu, takže pokud máte otázky, přečtěte si nejprve celou věc.

Nahrání kódu

Nejprve si stáhněte všechny 3 soubory „.ino“a vložte je do jedné složky. Pokud nemáte Arduino IDE, stáhněte si jej zdarma na oficiálním webu arduino.

Připojte Arduino k počítači a otevřete „OSU_Keyboard_code_V1.ino“. Na panelu nástrojů vyberte „Arduino/Genuino Micro“. Také v Nástroje vyberte správný COM port. To se někdy může změnit. Chcete -li nahrát kód do svého Arduina, klikněte na šipku v levém horním rohu obrazovky a počkejte, až vám v levém dolním rohu řekne, že je dokončen.

OSU_Keyboard_code_V1

Včetně a definování

Nejprve musíte zahrnout knihovnu klávesnice. Díky tomu je možné použít Arduino jako klávesnici.

Dále definuji některé hodnoty. Definovat je jako proměnná, ale nemohou se měnit, když je program spuštěn. Prvních 9 je pro znak klávesnice, číslo arduino pin a portové bity.

Poté portové bity LED dat a hodin.

Rovněž je definován počet LED a proměnná pro úhel barevného kolečka.

Založit

Tato část kódu bude spuštěna pouze jednou, když je připojeno arduino.

Nejprve jsou hodiny a datové piny LED nastaveny jako výstupy a spínací piny jako vstupy. Toto je pokročilá verze pinMode (). Pokud máte zájem, vyhledejte „přímou manipulaci s porty“.

Keyboard.begin () jednoduše spustí připojení USB jako klávesnice.

Další 3 přerušení jsou propojena se spínacími piny. Pokaždé, když je na přepínači detekována změna, spustí se malý program. Tento malý program bude dále dělán.

Smyčka

Tato část se bude nepřetržitě opakovat, když je arduino napájeno.

Používám ho pouze ke změně a aktualizaci barvy LED diod.

Přerušení

Zde se provádějí malé programy, které budou spuštěny pouze tehdy, když je na pinech spínače detekována změna. Jsou identické, kromě toho, na který pin reagují.

Nejprve zkontroluje, zda je tlačítko stisknuto nebo uvolněno, a odešle správný příkaz klávesnice.

LED (vysvětleno v jiném pořadí)

Pokud vás zajímá, jak jsou LED diody ovládány, měli byste se podívat na katalogový list APA102.

OneBit

Toto je opět verze digitálního zápisu s přímou manipulací s portem.

Nejprve zkontroluje, zda má odeslat 0 nebo 1, respektive vytáhne datový pin nízko nebo vysoko. Poté zapíše hodinový pin vysoký velmi krátký a znovu jej zapíše nízký.

OneByte

OneBit se to opakuje 8krát se smyčkou „pro“. Přečte první bit v bajtu a předá jeho hodnotu funkci oneBit a to samé udělá dalších 7 bitů.

LedData

Tím se oneByte opakuje 4krát, aby byla poskytnuta data potřebná pro jednu LED. První bajt začíná 111xxxxx a 5bitovou hodnotou jasu v místě xxxxx. Jas lze nastavit od 0 do 31 (2^5 = 32 úrovní).

Další 3 bajty jsou pro modré, zelené a červené hodnoty. Jeden bajt pro každou barvu.

ColorWheelThisLed

Tato funkce volá ledData a dává jí barvy rgb v závislosti na úhlu v barevném kolečku.

16bitová hodnota je dividenda v 6 rovnoměrně rozložených sekcích 60 stupňů. Pohled na obrázky vám může pomoci lépe porozumět.

(K dispozici je také 8bitová verze, ale komentovaná, protože je příliš blikající)

StartEndFrame

Úvodní rámeček je třeba použít pokaždé, když chcete odeslat nové barvy na diody a chcete aktualizovat skutečnou barvu LED diod

Používám pouze počáteční snímek, protože koncový rámeček není potřeba. Počáteční rámec je 4 bajty po 0. Koncový rámec je 4 bajty po 255 (11111111).

Krok 6: The Code V2 (software Debounce With Timers)

The Code V2 (software Debounce With Timers)
The Code V2 (software Debounce With Timers)

Po chvíli hraní jsem zaznamenal problémy s dvojitým poklepáním při odskoku hardwaru. To lze opravit některými jinými hodnotovými odpory nebo kondenzátory, ale protože tlačítka a víko nelze vyjmout, myslel jsem si, že by bylo hezké řešení odskoku softwaru. Softwarová debounce by měla fungovat bez ohledu na to, zda je hardwarová debounce implementována nebo ne. V mém aktuálním nastavení jsem nemohl odstranit víko, takže jsem nechal rezistory a kondenzátory na místě.

Nebudu vysvětlovat kód tak obšírně jako předchozí verze, protože je trochu těžší to vysvětlit.

V zásadě většina kódu funguje stejně a kód LED zůstane nedotčen. změnilo se, že externí přerušení již nepoužívají funkce arduino. Nyní to funguje v čistém C kódu. A nyní je přidáno softwarové přerušení. K tomu jsem použil časovače AVR k počkání po určitou dobu, dokud se odrážení nezastaví. Protože jsou časovače založené na přerušení, není doba dekódování ovlivněna ničím, co se děje ve smyčce.

Jedinou nevýhodou, na kterou mohu přijít, je, že funkce arduino delay již nelze používat. Protože funkce zpoždění používají časovač 0 a tento program používá časovač 0 k odskoku.

Na obrázku vidíte, jak kód zhruba funguje. Paměťový bit indikuje, zda běží časovač. Neznázorněno je, že na konci stisknutí tlačítka je vstup nízký. V tomto případě bude odesláno pouze stisknutí klávesy, zatímco tlačítko je již uvolněno. To znamená, že pokud jde o počítač, bude klíč podržen. U této vzácné výjimky bude provedena kontrola po vypršení časovače. Pokud na konci časovače tlačítko nestisknete, odešle se příkaz uvolnění klíče.

Krok 7: The Code V3 (software Debounce With Vertical Counter) (doporučeno) (bez LED)

The Code V3 (software Debounce With Vertical Counter) (doporučeno) (bez LED)
The Code V3 (software Debounce With Vertical Counter) (doporučeno) (bez LED)

Tento kód MÁ také verzi, kde nepotřebujete stahovací rezistory. Ujistěte se, že připojíte každé tlačítko ke vstupu a UZEMNĚNÍ! Použije se vestavěný výsuv

Také jsem zažil několik neregistrovaných lisů v kódu V2. Myslím, že kód se stal příliš složitým s časovačem a externím přerušením a možná jsem vynechal některé výjimky. Z tohoto důvodu jsem sterilizoval od nuly hledáním metod odstraňování softwaru na internetu.

(upřímně řečeno, nejméně polovina tohoto projektu se v tomto okamžiku stala tlačítkem debouncing)

Po nějakém hledání jsem narazil na tento příspěvek:

www.compuphase.com/electronics/debouncing….

Abych byl upřímný, trvalo mi docela dlouho, než jsem úplně pochopil, jak to přesně funguje. Zahrnuje to poměrně složité bitové manipulace, ale pokusím se to udělat co nejjednodušší. Moje vysvětlení však budou pouze doplňkem příspěvku, takže byste si měli přečíst alespoň „vertikální čítače“, „komentovanou implementaci“a „snížení latence“.

Moje vysvětlení

Časový diagram (vytvořený ve WaveDrom), který jsem přidal, by měl alespoň trochu srozumitelněji ztěžovat pochopení bitové matematiky. Všimněte si, že obrázek má 2 čítače bitů, ale můj kód má 3. To znamená delší dobu odskoku.

Jeden bit na hodnotu

S implementací vertikálního čítače je možné paralelně odpojit více tlačítek současně. Všechny hodnoty jsou typu Byte (uint8_t) a skládají se z 8 bitů. nezajímá nás, jakou hodnotu kterýkoli z těchto bajtů obsahuje, ale spíše nás zajímají bity samy o sobě. Každé tlačítko, které má být odstraněno, používá pouze jeden bit každého bajtu. První tlačítko používá pouze první bit každého bajtu, druhé tlačítko používá druhý bit atd.

Vše současně

Použitím bitové matematiky je možné provádět tyto odskoky pinů paralelně. A přestože je bitová matematika poměrně komplikovaná, je pro procesor velmi efektivní.

U 8bitového datového typu je tedy možné to provést pro 8 tlačítek. Použití větších datových typů umožňuje více debounů najednou.

Odskok

Rutina odskoku se spouští každou 1 milisekundu s přerušením časovače.

když je tlačítko stisknuto, tlačítko buttonState, což je stav odskoku, se okamžitě sníží, což znamená stisknutí tlačítka. Aby bylo možné detekovat uvolnění, musí být tlačítko dostatečně vysoké, což znamená, že po určitou dobu neodskočilo. Přepínač se používá k označení změny tlačítka. Čítače bitů se používají pro …. počítat, jak dlouho nedošlo k žádnému odrazu.

Delta označuje rozdíl mezi vstupem a stavem odskoku. Počitadlo se započítá pouze tehdy, když je rozdíl. počítadlo se vynuluje, když je detekován odraz (delta je 0).

Krok 8: Výsledek

Image
Image

Pokud vše proběhlo dobře, měli byste nyní mít funkční klávesnici pro hraní Osu! na. Osobně jsem vůbec nezaznamenal žádnou latenci. Pokud ano, dejte mi prosím vědět. Také pokud máte nějaké dotazy, neváhejte se na cokoli zeptat.

Předchozí zmínky o V2 nejsou míněny jako příslib, takže tento projekt neodkládejte, protože chcete počkat na V2.

Doufám, že se vám klávesnice líbí!

Osu! jméno: Thomazzz3

Odstraňování problémů

Pokud si myslíte, že máte problémy s klávesnicí, otevřete nejprve textový editor a každé tlačítko jednou krátce stiskněte.

Nefunguje jeden nebo více klíčů?

Je možné, že jste při pájení interně zničili spínač. Pokud máte multimetr, zapněte jej na spojitost/pípání, vložte jej paralelně k přepínači, zatímco Arduino není připojeno, a stiskněte klávesu. Mělo by to pípnout.

Odpovídají znaky, které jste právě zadali, klíčům, které jste nakonfigurovali v Osu! ?

Změňte znaky v arduino kódu v prvních 3 #Defines ('' je nutnost!).

Nebo změňte Osu! nastavení, abyste mohli používat nakonfigurované klíče.

Opakuje se několikrát jeden nebo více klíčů?

Obvod odskoku pravděpodobně nefunguje pro vaše přepínače nebo není správně připájen. Zkontrolujte připojení pájky. Pokud k tomu stále dochází, zkuste hodnotu kondenzátoru 1 uF. To bude pro uživatele PCB velmi těžké.

Pokud máte potíže s LED diodami

Blikají LED diody?

Pájecí spojení může být uvolněné. Pokud použijete desku plošných spojů, potvrďte, že pájecí cínka opravdu vytékala na podložku na tisku.

Nefunguje žádná z diod nebo z určitého počtu LED přestane fungovat?

Zkontrolujte zkraty mezi spoji první LED (sledujte stopy) a zkontrolujte dobře připojený cín na výstupech Arduina a opět první LED. Pokud je potvrzen správný a stále vadný, možná budete muset vyměnit první LED.

Pokud se to vyřeší, v případě potřeby opakujte pro další LED diody.

Doporučuje: