Sadržaj:

Osu! Tipkovnica: 8 koraka (sa slikama)
Osu! Tipkovnica: 8 koraka (sa slikama)

Video: Osu! Tipkovnica: 8 koraka (sa slikama)

Video: Osu! Tipkovnica: 8 koraka (sa slikama)
Video: КОНЕЦ МУЧЕНИЯМ. Трава больше не проблема! 2024, Srpanj
Anonim
Osu! Tipkovnica
Osu! Tipkovnica

Nedavno sam počeo igrati ritam igru koja se zove osu! a nakon što sam vidio video zapis komercijalne mini tipkovnice pomislio sam da bi to bio zabavan projekt da je dizajniram sam. Nedugo nakon toga odlučio sam da bi bilo dobro staviti ga na instrukcije kao svoj prvi projekt.

Ako želite ponoviti ovaj projekt točno do posljednje upute, izvolite, ali neki od mojih odluka nisu temeljeni na najnižoj cijeni ili najboljoj kvaliteti. Neke su komponente odabrane gotovo čisto zato što sam ih držao naokolo. Ako možete to podnijeti, potaknuo bih vas da prilagodite svoj projekt.

Napomena 1: Koriste se SMD komponente (mala elektronika) pa ako ponovite ovaj projekt, potrebne su vještine lemljenja. možda će se dodati verzija za lako lemljenje, ali ove LED diode ne dolaze u pakiranju s rupama

Napomena 2: Ažurirao sam kôd više puta i sada ih ažuriram na verziju 3ish. Ostavit ću sav kôd na mreži, ali preporučujem da upotrijebite posljednju verziju. Trenutno nema LED funkciju, ali bi trebala biti najbolja.

Korak 1: Materijali i objašnjenja

Materijali i objašnjenja
Materijali i objašnjenja

Ovisno o tome kako izrađujete projekt, možda će vam trebati različite komponente, ali te su komponente one koje sam ja koristio. Ako imate vremena i želite uštedjeti novac, naručite obrazac aliexpress i nemojte naručiti PCB.

1 Arduino pro micro + USB kabel

3 prekidača Kailh BOX crvena

3 10k otpornik (0805 SMD)

3 100nF kondenzator (0805 SMD)

4 APA102 rgb LED (5050 SMD)

3 tipkovnice

1 Tiskana ploča (PCB) isporučena u ovom projektu

1 3D tiskana kutija osigurana u ovom projektu

Zašto koristim Arduino pro micro?

Većina arduino ploča poput Uno (Atmega328) nema izvornu podršku za USB komunikaciju. Da, možete ih programirati putem USB -a vrlo jednostavno i mislim da postoje zaobilazna rješenja, ali volim pojednostaviti što se tiče USB komunikacije i ne znam jesu li zaobilazna rješenja tako osjetljiva. Ove ploče koriste vanjski čip kako bi omogućile USB komunikaciju, dok je Arduino pro micro (Atmega32U4) ugrađen.

Prekidači

Postoje mnogi mehanički prekidači koje možete koristiti. Linearno, taktilno ili kliknuto od Kailh ili Cherry MX. Odaberite što god želite. Koristio sam prekidače Kailh jer su bili jeftini na Ailexpressu. Ako odlučite koristiti PCB, trebat će vam prekidači Kailh BOX. Boja određuje osjećaj.

Elektroničke komponente

U ovom poglavlju nema puno objašnjenja o njima, ali ako ne koristite tiskanu ploču, preporučio bih samo uobičajene komponente s rupama radi lakšeg lemljenja. Nažalost, LED diode koje se koriste nisu dostupne u pakiranjima s rupama. Također ne bih preporučio korištenje žica na SMD paketima osim ako ste vrlo sigurni u svoje sposobnosti lemljenja. Čak i za SMD na PCB -u postoje "napredne" sposobnosti lemljenja.

Kućište

Dajem stambeni prostor u ovom projektu, ali on je u ovom trenutku pogrešan. Potrebne su izmjene kako bi se uklopili vijci, otvori za LED diode nisu optimalni, arduino je izložen i dio je potrebno izrezati da bi USB mogao stati. U budućnosti bi se moglo dodati novo stanovanje. Ako imate 3D pisač, isprintajte ga, ali nemojte se potruditi ispisati ovu manjkavu futrolu ako to nemate i samo upotrijebite neku vrstu projektne kutije.

Korak 2: Shema

Shema
Shema

Shema za ovaj projekt je prilično jednostavna, ali želim objasniti komponente za ljude koji su zainteresirani i ne poznaju ovu implementaciju.

Prebacite veze na Arduino

Prekidači su spojeni na Arduino pinove 0, 2 i 3 jer se ti pinovi mogu koristiti kao vanjski prekidi. To je dalje objašnjeno u odjeljku koda.

Krug debounce

S lijeve strane sheme nalazi se krug koji se kopira 3 puta. Ovaj se krug koristi za uklanjanje prekidača. Da biste znali što je odricanje, morate razumjeti odskakanje prekidača i to nije teško razumjeti.

Prvo pogledajte ovu simulaciju kako biste naslikali prvu sliku (brzo pritisnite prekidač i pogledajte donji signal)

Kada pritisnete ili otpustite prekidač, on odskoči i vaš signal se nekoliko puta izmjenjuje između visokog i niskog na nekoliko milisekundi. Arduino je jako brz i čita sve visoke i niske tonove u ovom kratkom vremenu. Program će poslati pritisak na tipku ili otpuštanje svaki put kad se pročita visoka ili niska vrijednost pa će pri svakom pritisku vaše računalo više puta pritisnuti tipke. Nije idealno za igru s ritmom.

Ovaj krug debounce usporit će padajući rub signala. Signal na Arduinu neće se moći promijeniti onoliko brzo koliko se odskok dogodi pa će se čitati jednim pritiskom. Ne brinite hoće li se usporiti za sljedeći pravi tisak jer hoće.

Napredna:

Atmaga32U4 očitava digitalno nisko na 0,2Vcc - 0,1V = 0,9 volta. Napon kondenzatora u bilo kojem trenutku u njegovom pražnjenju je Vcc * e^(-t/RC). Ako mjerite drugačije vrijeme debounce na vašem prekidaču, možete izračunati vrijednosti vašeg otpornika i kondenzatora.

obrazac formule

LED diode

RGB LED diode su LED diode APA102 koje se mogu pojedinačno adresirati pomoću sata i podatkovne linije. Nisu potrebne vanjske komponente da bi funkcionirale. Za mnoge LED diode trebate koristiti kondenzator paralelno na 5 V i uzemljenje, ali sa samo 4 LED diode vam ne treba.

Korak 3: Dizajn ploče

Dizajn ploče
Dizajn ploče

PCB je dizajniran u JLCPCB -u. Ne sponzoriram ih, ali za jeftine prototipe prave izvrsne PCB -e. Za 2 dolara dobivate 10 istih ploča, ali poštarina je za mene bila oko 11 dolara. Ako ne želite nužno rgb rasvjetu i planirate napraviti samo jedno, razmislite o izradi tipkovnice bez PCB -a.

Dizajn ploče bio je prilično jednostavan. Trebao sam samo dodati komponentu za prekidače, ali nakon što sam pogledao neke video zapise, snašao sam se u tome. Jedina stvar koju sam shvatio je da je postavljanje rupa malo preblizu prekidača.

Za naručivanje PCB -a idite na https://jlcpcb.com/ i odaberite opciju 2 sloja. Od vas će se tražiti Gerberov dosje. preuzmite datoteku ".zip" i povucite je do prozora. Ne morate ga raspakirati. Postavke bi trebale biti u redu i možete nastaviti dovršiti narudžbu.

Korak 4: Savjeti za oblikovanje kućišta i montažu

Savjeti za oblikovanje kućišta i montažu
Savjeti za oblikovanje kućišta i montažu
Savjeti za oblikovanje kućišta i montažu
Savjeti za oblikovanje kućišta i montažu
Savjeti za oblikovanje kućišta i montažu
Savjeti za oblikovanje kućišta i montažu
Savjeti za oblikovanje kućišta i montažu
Savjeti za oblikovanje kućišta i montažu

Oblikovati

Kao i ranije, moj dizajn je pogrešan, ali ga i dalje možete ispisati ako želite. dizajn je napravljen u Fusion 360. To je besplatni softver za 3D modeliranje i s mojim iskustvom izumitelja i solidworks -a s njim je bilo prilično lako raditi. Krugovi na uglovima kućišta sprječavaju ljuštenje s tiskane podloge.

Ako napravite vlastiti slučaj, samo je jedna stvar zaista važna. Prekidači moraju biti čvrsto postavljeni i nesposobni za pomicanje. Dostavio sam slike kvadratnih izreza dimenzija tako da ih možete koristiti za vlastiti dizajn pod pretpostavkom da koristite prekidače Kailh BOX.

Skupština

Sada imate sve komponente potrebne za sastavljanje. Postoji naredba za sastavljanje ove prve verzije jer su prekidači lemljeni.

1. Lemiti SMD komponente. to su otpornici, kondenzatori i LED diode.

2. Lemite Arduino pro micro.

3. Prije lemljenja postavite 3 prekidača u 3D tiskanu naslovnu ploču. Zaštitna ploča se ne može ukloniti nakon lemljenja prekidača. Otpakivanje prekidača se ne preporučuje i može ih uništiti.

4. Sada lemite prekidače na mjesto. Učinite to što je brže moguće jer se plastični prekidači mogu rastopiti i uništiti ili drastično smanjiti njihov broj klikova.

5. Postavite poklopnu ploču u 3D tiskano kućište i učvrstite je trakom ili upotrijebite vijke ako ne ometaju poklopce tipki.

6. Postavite kapice na prekidače i gotovi ste.

Preporuke

Odlijepite ili maskirajte LED diode na arduinu nakon učitavanja koda. LED diode je lijepo imati ako se vaš kod ne učitava, ali nije lijepo gledati ih kao gotov proizvod. Potrebna je vještina i šiljata pinceta.

Također neke drške na dnu su dobre za sprječavanje klizanja i dopuštaju da svjetlo rgb svijetli.

Korak 5: Kod V1 (hardversko uklanjanje)

Kod V1 (hardversko deblokiranje)
Kod V1 (hardversko deblokiranje)
Kod V1 (hardversko deblokiranje)
Kod V1 (hardversko deblokiranje)

Kôd za ovaj projekt nije prilagođen početnicima, pa ako vas tek počinje programirati u arduinu, ovaj će vas kôd možda malo uplašiti. Ipak ću pokušati objasniti što se događa najbolje što mogu. Neke stvari su kasnije objašnjene u ovom tekstu pa ako imate pitanja, prvo pročitajte cijelu stvar.

Učitavanje koda

Prvo preuzmite sve 3 ".ino" datoteke i stavite ih u jednu mapu. Ako nemate Arduino IDE, preuzmite ga besplatno na službenoj arduino web stranici.

Povežite svoj Arduino s računalom i otvorite "OSU_Keyboard_code_V1.ino". Na Alatnoj ploči odaberite "Arduino/Genuino Micro". Također u Alatima odaberite desni COM port. To se ponekad može promijeniti. Da biste učitali kôd na svoj Arduino, samo kliknite strelicu u gornjem lijevom kutu zaslona i pričekajte dok vam u donjem lijevom kutu ne kaže da je dovršen.

OSU_Kod tipke_koda_V1

Uključujući i definirajući

Prvo morate uključiti knjižnicu tipkovnice. To omogućuje korištenje Arduina kao tipkovnice.

Zatim definiram neke vrijednosti. Define je poput varijable, ali se ne mogu promijeniti dok je program pokrenut. Prvih 9 su za znak tipkovnice, broj pina arduina i bitove porta.

Zatim portovi bita LED podataka i sata.

Također je definiran broj LED dioda i varijabla za kut kotača u boji.

Postaviti

Ovaj dio koda izvršit će se samo jednom kada je arduino priključen.

Najprije su sat i podatkovni pinovi LED dioda postavljeni kao izlazi, a iglice prekidača kao ulazi. Ovo je napredna verzija pinMode (). Ako ste zainteresirani potražite "izravna manipulacija portom".

Keyboard.begin () jednostavno započinje USB vezu kao tipkovnica.

Sljedeća 3 prekida su povezana s iglicama prekidača. Svaki put kad se otkrije promjena na iglici prekidača, izvest će se mali program. Ovaj mali program bit će napravljen dalje.

Petlja

Ovaj dio će se neprestano ponavljati dok je arduino napajan.

Koristim ga samo za promjenu i ažuriranje boje LED dioda.

Prekida

Ovdje se izrađuju mali programi, koji će se izvršiti samo kada se na pinovima prekidača otkrije promjena. Identični su, osim na koji pin reagiraju.

Prvo provjerava je li gumb pritisnut ili otpušten i šalje ispravnu naredbu s tipkovnice.

LED (objašnjeno različitim redoslijedom)

Ako vas zanima kako se LED diodama kontrolira, trebali biste pogledati APA102 podatkovni list.

OneBit

Ovo je opet verzija izravnog manipuliranja portom digitalnog pisanja.

Prvo provjerava treba li poslati 0 ili 1 i povlači podatkovni pin nisko ili visoko. Zatim ispisuje pin sata vrlo kratko i opet ga piše nisko.

OneByte

Ovo se ponavlja oneBit 8 puta s petljom "za". On čita prvi bit u bajtu i prenosi njegovu vrijednost funkciji oneBit i čini isto za sljedećih 7 bitova.

LedData

Ovo se ponavlja jedan put 4 puta kako bi se dobili podaci potrebni za jedan LED. Prvi bajt počinje sa 111xxxxx i 5 -bitnom svjetlinom na mjestu xxxxx. Svjetlina se može postaviti od 0 do 31 (2^5 = 32 razine).

Sljedeća 3 bajta služe za plave, zelene i crvene vrijednosti. Za svaku boju po jedan bajt.

ColorWheelThisLed

Ova funkcija naziva ledData i daje rgb boje ovisno o kutu u kolu boja.

16 -bitna vrijednost je dividenda u 6 jednako raspoređenih dijelova od 60 stupnjeva. Gledanje slika moglo bi vam pomoći da bolje razumijete.

(8 -bitna verzija je također dostupna, ali je komentirana jer je previše treperava)

StartEndFrame

Početni okvir potrebno je koristiti svaki put kada želite poslati nove boje na LED diode i želite ažurirati stvarnu boju LED dioda

Koristim samo početni okvir jer završni okvir nije potreban. Početni okvir ima 4 bajta od 0. Završni okvir je 4 bajta od 255 (11111111).

Korak 6: Kod V2 (softver Debounce With Timers)

Code V2 (softver Debounce With Timers)
Code V2 (softver Debounce With Timers)

Nakon nekog vremena igranja primijetio sam neke probleme s dvostrukim dodirom u vezi s hardverskim pojavljivanjem. To bi se moglo popraviti nekim drugim vrijednim otpornicima ili kondenzatorima, ali kako se gumbi i poklopac ne mogu ukloniti, mislio sam da bi odricanje softvera bilo lijepo rješenje. Softverski otkaz trebao bi djelovati bez obzira je li hardverski debounce implementiran ili ne. U mojoj trenutnoj postavci ne mogu ukloniti poklopac pa sam samo ostavio otpornike i kondenzatore na mjestu.

Neću objašnjavati kôd opširnije kao prethodna verzija jer ga je malo teže objasniti.

U osnovi većina koda radi isto, a LED kôd ostaje netaknut. promijenilo se to što vanjski prekidi više ne koriste arduino funkcije. Sada radi u čistom C kodu. A sada je dodano softversko prekidanje. Za to sam koristio AVR timere da čekam određeno vrijeme dok poskakivanje ne prestane. Budući da se mjerači vremena prekidaju, na vrijeme decouncea ne utječe ništa što se događa u petlji.

Jedini nedostatak koji mogu smisliti je da se funkcije odgode arduina više ne mogu koristiti. Budući da funkcije odgode koriste Timer 0, a ovaj program koristi Timer 0 za debounce.

Na slici možete vidjeti kako kod otprilike radi. Mem bit označava radi li mjerač vremena. Ono što nije prikazano je slučaj da je na kraju pritiska tipke ulaz nizak. U tom će se slučaju poslati samo pritisak na tipku dok je gumb već otpušten. Što znači da će se ključ držati što se računala tiče. Za ovo rijetko izuzeće provjera će se izvršiti kad istekne mjerač vremena. Ako se na kraju mjerača vremena ne pritisne gumb, bit će poslana naredba za otpuštanje tipke.

Korak 7: Kod V3 (softversko uklanjanje s okomitim brojačem) (preporučeno) (bez LED -a)

Kod V3 (softversko uklanjanje s okomitim brojačem) (preporučeno) (bez LED -a)
Kod V3 (softversko uklanjanje s okomitim brojačem) (preporučeno) (bez LED -a)

Ovaj kôd TAKOĐER ima i verziju u kojoj vam ne trebaju ručni otpornici. Svakako spojite svaki gumb na ulaz i ZEMLJU! Koristi se ugrađeni pull-up

Doživio sam i neke neregistrirane preše u kodu V2. Mislim da je kôd postao previše složen s vremenskim i vanjskim prekidom i možda sam propustio neke iznimke. Iz tog sam razloga krenuo ispočetka tražeći na internetu metode za otkrivanje softvera.

(iskreno, barem je polovica ovog projekta u ovom trenutku postala gumb za otkazivanje)

Nakon nekog traženja naišao sam na ovaj post:

www.compuphase.com/electronics/debouncing….

Da budem iskren, trebalo mi je dosta vremena da u potpunosti shvatim kako to točno radi. To uključuje neke prilično složene manipulacije bitima, ali pokušat ću to učiniti što je moguće lakšim. Međutim, moja objašnjenja bit će samo dodatak postu pa biste trebali barem pročitati "vertikalne brojače", "označenu implementaciju" i "smanjenje kašnjenja".

Moje objašnjenje

Vremenski dijagram (napravljen u WaveDromu) koji sam dodao trebao bi otežati razumijevanje bitne matematike barem malo razumljivijim. Imajte na umu da slika ima 2 brojača, ali moj kôd ima 3. To znači duže vrijeme debounce.

Jedan bit po vrijednosti

S implementacijom vertikalnog brojača moguće je istodobno otkazati više gumba. Sve su vrijednosti tipa Byte (uint8_t) i sastoje se od 8 bitova. ne brine nas vrijednost bilo kojeg od ovih bajtova, već nas zanimaju bitovi sami po sebi. Svaki buton koji se odbacuje koristi samo jedan bit svakog bajta. Prvi gumb koristi samo prvi bit svakog bajta, drugi gumb koristi drugi bit itd.

Sve u isto vrijeme

Korištenjem bitne matematike moguće je paralelno izvođenje ovih otklanjanja pinova. Iako je bitna matematika prilično komplicirana, vrlo je učinkovita za procesor.

S 8 bitnim tipom podataka to je moguće učiniti za 8 gumba. Korištenje većih tipova podataka omogućuje više debuncija odjednom.

Otkaz

Rutina debounce izvodi se svakih 1 milisekundu s vremenskim prekidom.

kada se pritisne gumb, stanje, koje je debununcirano stanje, će se sniziti, što znači da je pritisnut gumb. Da bi otkrio otpuštanje, gumb mora biti dovoljno dugo visok, što znači da nije poskakivao određeno vrijeme. Toggle se koristi za označavanje promjene gumba. Brojači se koriste za…. računajući koliko dugo nije bilo odskoka.

Delta označava razliku između ulaznog i debunciranog stanja. Brojač će se računati samo kada postoji razlika. brojač će se poništiti kada se otkrije odskok (delta je 0).

Korak 8: Rezultat

Image
Image

Ako je sve prošlo dobro, sada biste trebali imati radnu tipkovnicu za sviranje Osua! na. Osobno nisam primijetio nikakvu latenciju. Ako to učinite, molim vas javite mi. Također, ako imate pitanja, slobodno pitajte bilo što.

Prethodna spominjanja V2 nisu zamišljena kao obećanje, stoga nemojte odgađati ovaj projekt jer želite pričekati V2.

Nadam se da ćete uživati u tipkovnici!

Osu! ime: Thomazzz3

Rješavanje problema

Ako mislite da imate problema s tipkovnicom, prvo otvorite uređivač teksta i pritisnite jednu tipku jednom na kratko.

Ne radi jedan ili više ključeva?

Moguće je da ste interno uništili prekidač tijekom lemljenja. Ako imate multimetar, uključite ga na kontinuitet/zvučni signal, postavite ga paralelno sa prekidačem dok Arduino nije spojen i pritisnite tipku. Trebao bi zvučni signal.

Podudaraju li se znakovi koje ste upravo unijeli s tipkama koje ste konfigurirali u Osuu! ?

Promijenite znakove u arduino kodu u prva 3 #Defines ('' je nepotrebno!).

Ili promijenite svoj Osu! postavke za korištenje konfiguriranih tipki.

Ponavlja li se jedna ili više tipki nekoliko puta?

Krug debounce vjerojatno ne radi za vaše prekidače ili nije pravilno lemljen. Provjerite spojeve lemljenja. Ako se to ipak dogodi, pokušajte s kondenzatorom od 1uF. Korisnicima PCB -a to će biti jako teško.

Ako imate problema sa LED diodama

Trepere li LED diode?

Spoj za lemljenje može biti labav. Ako koristite PCB, potvrdite da je lim za lemljenje doista tekao po podlozi na ispisu.

Ne radi li niti jedna LED dioda ili zbog određenog broja LED dioda prestaje raditi?

Provjerite ima li kratkih spojeva između spojeva prve LED diode (slijedite tragove) i provjerite ima li dobro povezanih limova na izlazima Arduina i opet prve LED. Ako se potvrdi da je točan i da je još uvijek u kvaru, možda ćete morati zamijeniti prvu LED diodu.

Ako se ovo popravi, po potrebi ponovite za sljedeće LED diode.

Preporučeni: