Kazalo:

Osu! Tipkovnica: 8 korakov (s slikami)
Osu! Tipkovnica: 8 korakov (s slikami)

Video: Osu! Tipkovnica: 8 korakov (s slikami)

Video: Osu! Tipkovnica: 8 korakov (s slikami)
Video: 8 инструментов в Excel, которыми каждый должен уметь пользоваться 2024, Julij
Anonim
Osu! Tipkovnica
Osu! Tipkovnica

Pred kratkim sem začel igrati ritmično igro, imenovano osu! in potem, ko sem videl video komercialne mini tipkovnice, sem pomislil, da bi bil zabaven projekt, da bi jo sam oblikoval. Kmalu zatem sem se odločil, da bi bilo dobro, da ga postavim na navodila za prvi projekt.

Če želite natančno ponoviti ta projekt do zadnjega navodila, potem bodite moj gost, vendar nekatere moje odločitve ne temeljijo na najnižji ceni ali najboljši kakovosti. Nekatere komponente so izbrane skoraj izključno, ker sem jih imel naokoli. Če zmorete, bi vas spodbudil, da svoj projekt prilagodite.

Opomba 1: Uporabljajo se komponente SMD (majhna elektronika), zato je pri ponovitvi tega projekta potrebno spajkanje. morda bo dodana različica, ki je enostavna za spajkanje, vendar te LED diode niso v paketu z luknjami

Opomba 2: Kodo sem večkrat posodobil in zdaj do različice 3ish. Vso kodo bom pustil na spletu, vendar priporočam, da uporabite zadnjo različico. Trenutno nima funkcionalnosti LED, vendar bi morala biti najučinkovitejša.

1. korak: Materiali in pojasnila

Materiali in pojasnila
Materiali in pojasnila

Odvisno od tega, kako naredite svoj projekt, boste morda potrebovali različne komponente, vendar sem te komponente uporabil jaz. Če imate čas in želite prihraniti denar, naročite aliexpress in ne naročite tiskanega vezja.

1 Arduino pro micro + USB kabel

3 rdeča stikala Kailh BOX

3 10k upor (0805 SMD)

3 100nF kondenzator (0805 SMD)

4 APA102 rgb LED (5050 SMD)

3 tipke za ključe

1 Tiskano vezje (PCB), predvideno v tem projektu

V tem projektu je na voljo 1 3D tiskana ohišja

Zakaj uporabljam Arduino pro micro?

Večina arduino plošč, kot je Uno (Atmega328), nima domače podpore za komunikacijo USB. Da, zelo enostavno jih lahko programirate prek USB -ja in mislim, da obstajajo rešitve, vendar mi je všeč, da je preprosto pri komunikaciji USB in ne vem, ali so rešitve tako odzivne. Te plošče uporabljajo zunanji čip za omogočanje komunikacije USB, medtem ko ima Arduino pro micro (Atmega32U4) vgrajen.

Stikala

Uporabite lahko veliko mehanskih stikal. Linearno, otipljivo ali kliktno od Kailh ali Cherry MX. Izberite, kar vam je všeč. Uporabil sem stikala Kailh, ker so bila na Ailexpressu poceni. Če se odločite za uporabo tiskanega vezja, boste potrebovali stikala Kailh BOX. Barva določa občutek.

Elektronske komponente

V tem poglavju o njih ni veliko razlage, če pa ne uporabljate tiskanega vezja, bi za lažje spajkanje priporočil le običajne sestavne dele. Na žalost uporabljene svetleče diode niso na voljo v paketih z luknjami. Prav tako ne priporočam uporabe žic na paketih SMD, razen če ste zelo prepričani v svoje sposobnosti spajkanja. Tudi za SMD na tiskanem vezju so pridobljene "napredne" sposobnosti spajkanja.

Ohišje

V tem projektu nudim stanovanje, vendar je v tem trenutku pomanjkljivo. Za pritrditev vijakov so potrebne spremembe, odprtine za svetleče diode niso optimalne, arduino je izpostavljen in del je treba izrezati, da se USB prilega. V prihodnosti se lahko doda novo stanovanje. Če imate 3D -tiskalnik, ga natisnite, vendar se ne potrudite, da natisnete to pomanjkljivo ohišje, če tega ne storite, in uporabite samo nekakšno škatlo za projekt.

2. korak: Shema

Shema
Shema

Shema tega projekta je precej preprosta, vendar želim pojasniti komponente za ljudi, ki jih zanima in ne poznajo te izvedbe.

Preklopite povezave na Arduino

Stikala so povezana z Arduino zatiči 0, 2 in 3, ker se ti zatiči lahko uporabljajo kot zunanji prekinitve. To je dodatno razloženo v razdelku s kodo.

Krog debounce

Na levi strani sheme je vezje, ki se kopira 3 -krat. To vezje se uporablja za odklop stikala. Če želite vedeti, kaj je odvračanje, morate razumeti odbijanje stikala in ni težko razumeti.

Najprej si oglejte to simulacijo, da narišete prvo sliko (hitro pritisnite stikalo in poglejte spodnji signal)

Ko pritisnete ali spustite stikalo, se odbije in vaš signal nekaj milisekund nekajkrat izmenično prehaja med visoko in nizko. Arduino je zelo hiter in v tem kratkem času bere vse visoko in nizko. Program bo poslal pritisk na tipko ali sprostitev ob vsakem branju visoke ali nizke vrednosti, zato bo računalnik ob vsakem pritisku prejel več pritiskov tipk. Ni idealno za igro ritma.

To vezje za upočasnitev upočasni padajoči rob signala. Signal na Arduino se ne bo mogel spremeniti tako hitro, kot se pojavi odbijanje, zato bo prebran kot en pritisk. Ne skrbite, da se bo za naslednji pravi tisk upočasnilo, ker bo.

Napredno:

Atmaga32U4 bere digitalno nizko vrednost pri 0,2Vcc - 0,1V = 0,9 volta. Napetost kondenzatorja kadar koli pri njegovem praznjenju je Vcc * e^(-t/RC). Če na stikalu izmerite drugačen čas odvajanja, lahko izračunate vrednosti upora in kondenzatorja.

obrazec formule

LED diode

LED diode rgb so LED lučke APA102, ki jih je mogoče individualno nasloviti z uro in podatkovno vrstico. Za njihovo delovanje niso potrebne zunanje komponente. Za mnoge LED diode morate uporabiti kondenzator, vzporeden na 5 voltov in ozemljen, vendar le s 4 LED ne potrebujete.

3. korak: Oblikovanje plošče

Oblikovanje plošče
Oblikovanje plošče

PCB je bil zasnovan v JLCPCB. Nisem jih sponzoriral, ampak za poceni prototipe izdelujejo odlične tiskane vezje. Za 2 dolarja dobite 10 istih plošč, zame pa je bila poštnina približno 11 dolarjev. Če si ne želite nujno rgb osvetlitve in nameravate narediti samo eno, razmislite o tem, da bi tipkovnico naredili brez tiskanega vezja.

Zasnova plošče je bila precej preprosta. Moral sem dodati le komponento za stikala, a po ogledu nekaterih videoposnetkov sem se tega lotil. Edina napaka, ki sem jo spoznal, je, da so luknje nekoliko preblizu stikal.

Če želite naročiti tiskano vezje, pojdite na https://jlcpcb.com/ in izberite 2 -slojno možnost. Od vas bo zahteval datoteko Gerber. prenesite datoteko ".zip" in jo povlecite v okno. Ni vam treba razpakirati. Nastavitve bi morale biti v redu in lahko nadaljujete in dokončate naročilo.

4. korak: Nasveti za oblikovanje ohišja in montažo

Nasveti za oblikovanje ohišja in montažo
Nasveti za oblikovanje ohišja in montažo
Nasveti za oblikovanje ohišja in montažo
Nasveti za oblikovanje ohišja in montažo
Nasveti za oblikovanje ohišja in montažo
Nasveti za oblikovanje ohišja in montažo
Nasveti za oblikovanje ohišja in montažo
Nasveti za oblikovanje ohišja in montažo

Oblikovanje

Kot že omenjeno, je moj dizajn napačen, vendar ga lahko še vedno natisnete, če želite. zasnova je bila narejena v Fusion 360. Je brezplačna programska oprema za 3D modeliranje in z mojimi izkušnjami izumitelja in solidworks je bilo z njo precej enostavno delati. Krogi na vogalih ohišja so namenjeni preprečevanju luščenja s tiskalne postelje.

Če ustvarite svoj primer, je samo ena stvar resnično pomembna. Vaša stikala morajo biti trdno nameščena in se ne morejo premikati. Zagotovil sem slike kvadratnih izrezov z dimenzijami, tako da jih lahko uporabite za lastno zasnovo ob predpostavki, da uporabljate stikala Kailh BOX.

Montaža

Zdaj imate vse sestavne dele, potrebne za sestavljanje. Obstaja naročilo za sestavljanje te prve različice, ker so stikala spajkana.

1. Spajkajte komponente SMD. to so upori, kondenzatorji in LED.

2. Spajkajte Arduino pro micro.

3. Pred spajkanjem 3 stikala vstavite v 3D natisnjeno ploščo. Po spajkanju stikal pokrova ni mogoče odstraniti. Odpakiranje stikal ni priporočljivo in jih lahko uničite.

4. Zdaj spajkajte stikala na mestu. Naredite to čim prej, ker se plastična stikala lahko stopijo in uničijo ali drastično zmanjšajo število klikov.

5. Sestavljeno zaščitno ploščo položite v 3D natisnjeno ohišje in jo pritrdite s trakom ali uporabite vijake, če ne ovirajo pokrovčkov.

6. Pokrovčke namestite na stikala in končali ste.

Priporočila

Po nalaganju kode odlepite ali zamaskirajte LED na arduinu. Svetleče diode so lepe, če se vaša koda ne naloži, vendar jih ni lepo videti kot končni izdelek. Potrebna je spretnost in ostrina pinceta.

Tudi nekatere oprijemne noge na dnu so primerne za preprečevanje zdrsa in puščajo svetlobo rgb.

5. korak: Koda V1 (strojna opustitev)

Koda V1 (strojna opustitev)
Koda V1 (strojna opustitev)
Koda V1 (strojna opustitev)
Koda V1 (strojna opustitev)

Koda za ta projekt ni prijazna začetnikom, zato vas bo ta koda morda malo prestrašila, če šele začenjate programirati v arduinu. Bom pa poskušal čim bolje razložiti, kaj se dogaja. Nekatere stvari so kasneje razložene v tem tekstu, zato, če imate vprašanja, najprej preberite celoto.

Nalaganje kode

Najprej prenesite vse 3 datoteke ».ino« in jih shranite v eno mapo. Če nimate Arduino IDE, ga brezplačno prenesite na uradno spletno mesto arduino.

Arduino povežite z računalnikom in odprite »OSU_Keyboard_code_V1.ino«. V orodni plošči izberite "Arduino/Genuino Micro". Tudi v orodju izberite desna vrata COM. To se včasih lahko spremeni. Če želite naložiti kodo na svoj Arduino, samo kliknite puščico v zgornjem levem kotu zaslona in počakajte, da vam v spodnjem levem kotu sporoči, da je dokončana.

OSU_Keyboard_code_V1

Vključuje in opredeljuje

Najprej morate vključiti knjižnico tipkovnice. To omogoča uporabo Arduina kot tipkovnice.

Nato določim nekaj vrednosti. Define je tako kot spremenljivka, vendar se med izvajanjem programa ne morejo spremeniti. Prvih 9 je za tipkovnico, številko pin arduino in bite vrat.

Nato vratni bitovi podatkov LED in ure.

Določeno je tudi število LED in spremenljivka za kot barvnega kolesa.

Nastaviti

Ta del kode se bo izvedel le enkrat, ko bo priključen arduino.

Najprej so ura in podatkovni zatiči LED nastavljeni kot izhodi, stikalni zatiči pa kot vhodi. To je napredna različica pinMode (). Če vas zanima, poiščite "neposredno manipuliranje z vrati".

Keyboard.begin () preprosto zažene usb povezavo kot tipkovnico.

Naslednji 3 prekinitve so povezane s stikalnimi zatiči. Vsakič, ko se na stikalnem zatiču zazna sprememba, se izvede majhen program. Ta mali program bo izdelan naprej.

Zanka

Ta del se bo neprestano ponavljal, medtem ko je arduino napajan.

Uporabljam ga le za spreminjanje in posodabljanje barve LED.

Prekine

Tu so narejeni majhni programi, ki se bodo izvajali le, če se na stikalnih zatičih zazna sprememba. So enaki, razen na kateri pin se odzovejo.

Najprej preveri, ali je gumb pritisnjen ali sproščen, in pošlje pravilen ukaz s tipkovnice.

LED (razloženo v drugačnem vrstnem redu)

Če vas zanima, kako se LED upravlja, si oglejte podatkovni list APA102.

OneBit

To je spet različica digitalnega pisanja z neposredno manipulacijo vrat.

Najprej preveri, ali naj pošlje 0 ali 1, in potegne podatkovni zatič nizko ali visoko. Nato zapiše zelo visoko kratek zapis ure in ga znova zapiše nizko.

OneByte

To se ponavlja 8 -krat z zanko "za". Prebere prvi bit v bajtu in prenese njegovo vrednost v funkcijo oneBit in enako naredi za naslednjih 7 bitov.

LedData

To se enkrat ponovi 4 -krat, da se zagotovijo podatki, potrebni za eno vodilno enoto. Prvi bajt se začne z 111xxxxx in 5 -bitno vrednostjo svetlosti na mestu xxxxx. Svetlost lahko nastavite od 0 do 31 (2^5 = 32 stopenj).

Naslednji 3 bajti so za modre, zelene in rdeče vrednosti. En bajt za vsako barvo.

ColorWheelThisLed

Ta funkcija kliče ledData, ki ji daje barve rgb, odvisno od kota v barvnem kolesu.

16 -bitna vrednost je dividenda v 6 enakomerno razporejenih odsekih po 60 stopinj. Ogled slik vam bo morda pomagal bolje razumeti.

(na voljo je tudi 8 -bitna različica, vendar komentirana, ker je preveč utripajoča)

StartEndFrame

Začetni okvir je treba uporabiti vsakič, ko želite LED poslati nove barve in želite posodobiti dejansko barvo LED

Uporabljam samo začetni okvir, ker končni okvir ni potreben. Začetni okvir je 4 bajtov 0. Končni okvir je 4 bajtov 255 (11111111).

Korak 6: Koda V2 (programska oprema Debounce With Timers)

Code V2 (programska oprema Debounce With Timers)
Code V2 (programska oprema Debounce With Timers)

Po nekaj časa igranja sem opazil nekaj težav z dvojnim dotikom pri odpravljanju strojne opreme. To bi lahko popravili z nekaterimi drugimi vrednostnimi upori ali kondenzatorji, a ker gumbi in pokrov niso odstranljivi, sem mislil, da bi bilo odstranjevanje programske opreme dobra rešitev. Odprava programske opreme bi morala delovati, če je odprava strojne opreme izvedena ali ne. V trenutni nastavitvi ne morem odstraniti pokrova, zato sem upora in kondenzatorje pustil na mestu.

Kode ne bom razlagal tako obsežno kot prejšnjo različico, ker je nekoliko težje razložiti.

V bistvu večina kode deluje enako, vodilna koda pa ostane nedotaknjena. spremenilo se je, da zunanji prekinitve ne uporabljajo več funkcij arduino. Zdaj deluje v čisti kodi C. In zdaj je dodano prekinitev programske opreme. Za to sem uporabil časovnike AVR, da počakam določen čas, dokler se skakanje ne ustavi. Ker so časovniki prekinjeni, na čas odklona ne vpliva nič, kar se dogaja v zanki.

Edina slaba stran, ki jo lahko najdem, je, da funkcij zamika arduino ni več mogoče uporabljati. Ker funkcije zakasnitve uporabljajo Timer 0 in ta program uporablja Timer 0 za debounce.

Na sliki lahko vidite, kako koda približno deluje. Mem mem označuje, ali deluje časovnik. Kar ni prikazano, je primer, da je na koncu pritiska na gumb vhod nizek. V tem primeru bi bil poslan le pritisk tipke, medtem ko je gumb že sproščen. Kar pomeni, da bo ključ zadržan, kar zadeva računalnik. Za to redko izvzetje bo preverjanje izvedeno, ko časovnik poteče. Če gumba ob koncu časovnika ne pritisnete, se pošlje ukaz za sprostitev tipke.

7. korak: Koda V3 (programska oprema Debounce With Vertical Counter) (priporočeno) (brez LED)

Koda V3 (programska oprema Debounce With Vertical Counter) (priporočeno) (brez LED)
Koda V3 (programska oprema Debounce With Vertical Counter) (priporočeno) (brez LED)

Ta koda ima tudi različico, kjer uporov ni treba spuščati. Prepričajte se, da ste vsak gumb priključili na vhod in OZEMLJENJE! Uporablja se vgrajen vlečni element

Doživel sem tudi nekaj neregistriranih tiskov v kodi V2. Mislim, da je koda postala preveč zapletena s časovno in zunanjo prekinitvijo in morda sem zamudil nekatere izjeme. Zato sem od začetka iskal metode iskanja programske opreme.

(iskreno, vsaj polovica tega projekta je na tej točki postala opustitev gumbov)

Po nekaj iskanju sem naletel na to objavo:

www.compuphase.com/electronics/debouncing….

Če sem iskren, je trajalo kar nekaj časa, da sem popolnoma razumel, kako točno deluje. Vključuje nekaj precej zapletenih manipulacij, vendar bom poskušal čim bolj olajšati. Vendar bodo moje razlage le dodatek k objavi, zato morate prebrati vsaj "navpične števce", "označeno izvedbo" in "zmanjšanje zakasnitev".

Moja razlaga

Časovni diagram (narejen v WaveDromu), ki sem ga dodal, bi moral vsaj malo bolj razumljivo to težko razumeti bitno matematiko. Upoštevajte, da ima slika 2 številska bita, moja koda pa 3. To pomeni daljši čas odprave.

En bit na vrednost

Z izvedbo navpičnega števca je mogoče istočasno odstraniti več gumbov hkrati. Vse vrednosti so tipa Byte (uint8_t) in so sestavljene iz 8 bitov. ne zanima nas, kakšno vrednost vsebuje kateri od teh bajtov, temveč nas zanimajo biti sami. Vsak buton, ki ga je treba odstraniti, uporablja le en bit vsakega bajta. Prvi gumb uporablja samo prvi bit vsakega bajta, drugi gumb uporablja drugi bit itd.

Vse hkrati

Z uporabo bitne matematike je možno vzporedno izvajati te zatiče. Čeprav je bitna matematika precej zapletena, je za procesor zelo učinkovita.

Z 8 -bitnim podatkovnim tipom je to mogoče narediti za 8 gumbov. Uporaba večjih podatkovnih tipov omogoča več odpovedi hkrati.

Odpoved

Rutina debounce se izvede vsakih 1 milisekundo s časovno prekinitvijo.

ko je gumb pritisnjen, se bo stanje, ki je debuncirano stanje, hitro znižalo, kar kaže na pritisk gumba. Če želite zaznati sprostitev, mora biti gumb dovolj dolgo visok, kar pomeni, da se nekaj časa ni odbijal. Preklop se uporablja za označbo spremembe gumba. Števec se uporablja za…. štetje, kako dolgo ni prišlo do odklona.

Delta označuje razliko med vhodnim in odmrznjenim stanjem. Števec se šteje le, če je razlika. števec se ponastavi, ko zazna odboj (delta je 0).

8. korak: Rezultat

Image
Image

Če bi bilo vse v redu, bi morali imeti delujočo tipkovnico za igranje Osuja! naprej. Osebno sploh nisem opazil nobene zakasnitve. Če želite, mi to sporočite. Tudi če imate kakršna koli vprašanja, vas prosimo, da vprašate karkoli.

Prejšnje omembe V2 niso mišljene kot obljuba, zato tega projekta ne odlašajte, ker želite počakati na V2.

Upam, da vam bo klaviatura všeč!

Osu! ime: Thomazzz3

Odpravljanje težav

Če menite, da imate težave s tipkovnico, najprej odprite urejevalnik besedil in za kratek čas enkrat pritisnite vsako tipko.

Ali en ali več ključev ne deluje?

Možno je, da ste med spajkanjem notranje uničili stikalo. Če imate multimeter na neprekinjenem/pisku, ga postavite vzporedno s stikalom, medtem ko Arduino ni povezan, in pritisnite tipko. Moral bi piskati.

Ali se znaki, ki ste jih pravkar vnesli, ujemajo s tipkami, ki ste jih nastavili v Osu! ?

Spremenite znake v kodi arduino v prvih 3 #Defines ('' je nepotrebno!).

Ali pa zamenjajte svoj Osu! nastavitve za uporabo konfiguriranih tipk.

Ali se ena ali več tipk nekajkrat ponovi?

Vezje debounce verjetno ne deluje za vaša stikala ali ni pravilno spajkano. Preverite spajkalne povezave. Če se še vedno pojavi, poskusite z vrednostjo kondenzatorja 1uF. Za uporabnike PCB bo to zelo težko.

Če imate težave z LED diodami

Ali LED utripajo?

Spajkalna povezava je lahko ohlapna. Če uporabljate tiskano vezje, potrdite, da je spajkalnik resnično tekel po blazinici na tisku.

Ali nobena od LED ne deluje ali zaradi določenega števila LED ne deluje?

Preverite kratke stike med priključki prve LED (sledite skladbam) in preverite, ali je na izhodih Arduina dobro povezana kositra in spet prva LED. Če je potrjeno pravilno in še vedno okvarjeno, boste morda morali zamenjati prvo LED.

Če se to popravi, po potrebi ponovite za naslednje LED.

Priporočena: