Sisukord:

Osu! Klaviatuur: 8 sammu (piltidega)
Osu! Klaviatuur: 8 sammu (piltidega)

Video: Osu! Klaviatuur: 8 sammu (piltidega)

Video: Osu! Klaviatuur: 8 sammu (piltidega)
Video: 8 инструментов в Excel, которыми каждый должен уметь пользоваться 2024, Juuli
Anonim
Osu! Klaviatuur
Osu! Klaviatuur

Hakkasin hiljuti mängima rütmimängu nimega osu! ja pärast kaubandusliku miniklaviatuuri video nägemist arvasin, et selle kujundamine oleks lõbus projekt. Varsti pärast seda otsustasin, et oleks hea mõte see oma esimese projektina juhendmaterjalidele panna.

Kui soovite seda projekti täpselt viimase juhiseni korrata, siis olge minu külaline, kuid mõned minu tehtud otsused ei põhine madalaimal hinnal ega parimal kvaliteedil. Mõned komponendid on valitud peaaegu puhtalt seetõttu, et mul olid need ümberringi. Kui saate sellega hakkama, julgustan teid oma projekti kohandama.

Märkus 1: kasutatakse SMD komponente (väike elektroonika), nii et selle projekti kordamisel on vaja jootmisoskust. võib -olla lisatakse lihtne joodetav versioon, kuid need valgusdioodid ei ole aukude pakendis

Märkus 2: Olen koodi mitu korda värskendanud ja nüüd olen versioonini 3ish. Jätan kogu koodi võrku, kuid soovitan teil kasutada viimast versiooni. Sellel pole praegu LED -funktsioone, kuid see peaks olema kõige paremini toimiv.

Samm: materjalid ja selgitused

Materjalid ja selgitused
Materjalid ja selgitused

Sõltuvalt sellest, kuidas oma projekti teete, võib teil olla vaja erinevaid komponente, kuid need komponendid on minu kasutatavad. Kui teil on aega ja soovite raha säästa, tellige aliexpressi vorm ja ärge tellige trükkplaati.

1 Arduino pro micro + USB -kaabel

3 Kailh BOX punast lülitit

3 10k takisti (0805 SMD)

3 100 nF kondensaatorit (0805 SMD)

4 APA102 rgb LED (5050 SMD)

3 Klaviatuuri

1 Selles projektis sisalduv trükkplaat (PCB)

Selles projektis on 1 3D trükitud ümbris

Miks ma kasutan Arduino pro micro?

Enamikul arduino -tahvlitel, nagu Uno (Atmega328), puudub USB -ühenduse loomulik tugi. Jah, saate neid USB kaudu väga hõlpsalt programmeerida ja ma arvan, et on olemas lahendusi, kuid mulle meeldib USB -ühenduse osas see lihtsana hoida ja ma ei tea, kas need lahendused on sama tundlikud. Need tahvlid kasutavad USB -ühenduse võimaldamiseks välist kiipi, samas kui Arduino pro micro (Atmega32U4) on selle sisseehitatud.

Lülitid

Kasutada saab palju mehaanilisi lüliteid. Lineaarne, kombatav või klikkiv Kailhilt või Cherry MX -lt. Valige, mis teile meeldib. Kasutasin Kailhi lüliteid, kuna need olid Ailexpressis odavad. Kui otsustate kasutada trükkplaati, vajate Kailh BOX -lülitit. Värv määrab tunde.

Elektroonilised komponendid

Selles peatükis pole nende kohta palju selgitada, kuid kui te ei kasuta trükkplaati, soovitan jootmise hõlbustamiseks lihtsalt tavalisi küna aukude komponente. Kahjuks ei ole kasutatud LED -id küna aukude pakendites saadaval. Samuti ei soovitaks ma SMD pakettidel juhtmeid kasutada, kui te pole oma jootmisoskustes väga kindel. Isegi trükkplaadil oleva SMD jaoks on olemas "arenenud" jootmisoskus.

Korpus

Pakun selles projektis eluaset, kuid praegu on see vigane. Poltide paigaldamiseks on vaja teha muudatusi, valgusdioodide avad ei ole optimaalsed, arduino on paljastatud ja osa tuleb USB sobitamiseks välja lõigata. Tulevikus võidakse lisada uus eluase. Kui teil on 3D -printer, minge ja printige see välja, kuid ärge seda vigase korpuse printimist proovige, kui te seda ei tee, ja kasutage lihtsalt mingit projektikarpi.

2. samm: skeem

Skeem
Skeem

Selle projekti skeem on üsna lihtne, kuid ma tahan selgitada komponente inimestele, kes on huvitatud ja ei tea seda teostust.

Vahetage ühendused Arduinoga

Lülitid on ühendatud Arduino tihvtidega 0, 2 ja 3, kuna neid kontakte saab kasutada väliste katkestustena. Seda selgitatakse täpsemalt koodide osas.

Tagasilöögiring

Skeemi vasakul küljel on ahel, mida kopeeritakse 3 korda. Seda vooluahelat kasutatakse lüliti väljalülitamiseks. Et teada saada, mis tagasilöök on, peate mõistma lüliti põrgatamist ja seda pole raske mõista.

Esimese pildi maalimiseks vaadake esmalt seda simulatsiooni (klõpsake kiiresti lülitit ja vaadake allolevat signaali)

Kui vajutate või vabastate lülitit, põrkab see tagasi ja teie signaal vaheldub mõne millisekundi jooksul paar korda kõrge ja madala vahel. Arduino on tõesti kiire ja loeb selle lühikese aja jooksul iga kõrgeima ja madalaima taseme. Programm saadab klahvivajutuse või vabastamise iga kord, kui loetakse kõrget või madalat taset, nii et iga kord vajutatakse teie arvutile mitu klahvi. Pole ideaalne rütmimänguks.

See tagasilülitusahel aeglustab signaali langevat serva. Signaal Arduinole ei saa muutuda nii kiiresti kui põrkumine toimub, nii et seda loetakse ühe vajutusega. Ärge muretsege selle pärast, et järgmise tõelise ajakirjanduse jaoks aeglustub, sest see juhtub.

Täpsem:

Atmaga32U4 loeb digitaalset madalat väärtust 0,2 Vcc - 0,1 V = 0,9 volti. Kondensaatori pinge selle tühjenemisel on igal ajal Vcc * e^(-t/RC). Kui mõõdate lülitilt erinevat väljalülitusaega, saate arvutada oma takisti ja kondensaatori väärtused.

valemivorm

LEDid

Rgb -valgusdioodid on APA102 -valgusdioodid, mis on kella ja andmeliini abil individuaalselt adresseeritavad. Nende toimimiseks pole vaja väliseid komponente. Paljude valgusdioodide puhul peaksite kasutama kondensaatorit, mis on paralleelne 5 -voldise ja maandusega, kuid ainult nelja LED -i korral pole seda vaja.

3. samm: plaadi kujundus

Tahvli disain
Tahvli disain

PCB kujundati JLCPCB -s. Ma ei sponsoreeri neid, kuid odavate prototüüpide jaoks teevad nad suurepäraseid trükkplaate. 2 dollari eest saate 10 sama tahvlit, kuid saatmine oli minu jaoks umbes 11 dollarit. Kui te ei soovi tingimata rgb -valgustust ja plaanite teha ainult ühe, peaksite kaaluma klaviatuuri valmistamist ilma trükkplaadita.

Tahvli disain oli üsna sirgjooneline. Mul oli vaja ainult lülitite jaoks komponent lisada, kuid pärast mõne video vaatamist sain sellest aru. Ainuke viga, millest ma aru sain, on aukude paigutus lülititele natuke liiga lähedal.

PCB tellimiseks minge aadressile https://jlcpcb.com/ ja valige kahekihiline valik. See küsib teilt Gerberi faili. laadige alla ".zip" fail ja lohistage see aknasse. Te ei pea seda lahti pakkima. Seaded peaksid olema korras ja saate tellimuse lõpule viia.

4. samm: korpuse kujundamise ja kokkupanemise näpunäited

Korpuse kujundamise ja kokkupanemise näpunäited
Korpuse kujundamise ja kokkupanemise näpunäited
Korpuse kujundamise ja kokkupanemise näpunäited
Korpuse kujundamise ja kokkupanemise näpunäited
Korpuse kujundamise ja kokkupanemise näpunäited
Korpuse kujundamise ja kokkupanemise näpunäited
Korpuse kujundamise ja kokkupanemise näpunäited
Korpuse kujundamise ja kokkupanemise näpunäited

Disain

Nagu varem mainitud, on minu disain vigane, kuid saate selle siiski printida, kui soovite. disain tehti Fusion 360 -s. See on tasuta 3D -modelleerimistarkvara ning minu leiutaja- ja solidworks -kogemuste põhjal oli sellega päris lihtne töötada. Korpuse nurkades olevad ringid takistavad trükivoodilt koorumist.

Kui teete oma juhtumi, on ainult üks asi tõesti oluline. Teie lülitid peavad olema kindlalt paigutatud ja neid ei saa liigutada. Olen esitanud ruudukujuliste väljalõigete pildid mõõtmetega, et saaksite seda kasutada oma disaini jaoks, eeldades, et kasutate Kailh BOX -lülitit.

Kokkupanek

Nüüd on teil kõik kokkupanekuks vajalikud komponendid. Selle esimese versiooni kokkupanekul on käsk, kuna lülitid on joodetud.

1. Jootke SMD komponendid. need on takistid, kondensaatorid ja LED -id.

2. Jootke Arduino pro micro.

3. Enne jootmist asetage 3 lülitit 3D -prinditud katteplaadile. Pärast lülitite jootmist ei saa katteplaati eemaldada. Lülitite jootmist ei soovitata ja need võivad hävida.

4. Nüüd jootke lülitid oma kohale. Tehke seda võimalikult kiiresti, sest plastlülitid võivad need sulada ja rikkuda või nende klikkide arvu drastiliselt vähendada.

5. Asetage kokkupandud katteplaat 3D -prindikasti ja kinnitage teibiga või kasutage polte, kui need ei sega klahvikate.

6. Asetage keyCaps lülititele ja oletegi valmis.

Soovitused

Pärast koodi üleslaadimist lahutage või maskeerige arduino valgusdioodid. LED -id on toredad, kui teie koodi ei laadita üles, kuid neid pole tore vaadata valmistootena. Vajalik oskus ja teravad pintsetid.

Samuti on mõned haardejalad põhjas libisemisvastased ja lasevad rgb -valgusel läbi paista.

Samm: kood V1 (riistvaraline tagasilöök)

Kood V1 (riistvaraline tagasilöök)
Kood V1 (riistvaraline tagasilöök)
Kood V1 (riistvara tagasilöök)
Kood V1 (riistvara tagasilöök)

Selle projekti kood ei ole algajatele sõbralik, nii et kui te alles alustate arduino programmeerimist, siis võib see kood teid natuke hirmutada. Siiski püüan võimalikult hästi selgitada, mis toimub. Mõnda asja selgitatakse selles tekstis hiljem, nii et kui teil on küsimusi, lugege kõigepealt kogu see teema läbi.

Koodi üleslaadimine

Esmalt laadige alla kõik 3 ".ino" faili ja pange need ühte kausta. Kui teil pole Arduino IDE -d, laadige see tasuta alla ametlikult arduino saidilt.

Ühendage Arduino arvutiga ja avage "OSU_Keyboard_code_V1.ino". Valige tööriistade pardal "Arduino/Genuino Micro". Valige ka tööriistades õige COM -port. See võib mõnikord muutuda. Koodi Arduinole üleslaadimiseks klõpsake lihtsalt ekraani vasakus ülanurgas asuvat noolt ja oodake, kuni see ütleb, et see on vasakus alanurgas lõpule viidud.

OSU_Klaviatuuri_kood_V1

Kaasa arvatud ja määratledes

Kõigepealt peate lisama klaviatuuri kogu. See võimaldab kasutada Arduinot klaviatuurina.

Järgmisena määratlen mõned väärtused. Define on nagu muutuja, kuid neid ei saa programmi töötamise ajal muuta. Esimesed 9 on klaviatuurimärgi, arduino pin -numbri ja pordibittide jaoks.

Seejärel LED -andmete ja kella pordibittid.

Samuti on määratletud LED -ide arv ja värviratta nurga muutuja.

Seadistamine

See koodi osa täidetakse ainult üks kord, kui arduino on ühendatud.

Esmalt seadistatakse väljunditeks LED -ide kell ja andmestikud ning sisenditena lülitustihvtid. See on pinMode () täiustatud versioon. Kui olete huvitatud, otsige sõna "otsene sadama manipuleerimine".

Keyboard.begin () käivitab lihtsalt USB -ühenduse klaviatuurina.

Järgmised 3 katkestust on ühendatud lüliti tihvtidega. Iga kord, kui lüliti tihvtis tuvastatakse muutus, käivitatakse väike programm. See väike programm tehakse edasi.

Loop

See osa kordub pidevalt, kuni arduino on sisse lülitatud.

Kasutan seda ainult valgusdioodide värvi muutmiseks ja värskendamiseks.

Katkestab

Siin tehakse väikesed programmid, mis käivitatakse ainult siis, kui lüliti tihvtidel tuvastatakse muutus. Need on identsed, välja arvatud see, millisele tihvtile nad reageerivad.

Esiteks kontrollib see, kas nuppu vajutatakse või vabastatakse, ja saadab õige klaviatuuri käsu.

LED (selgitatud erinevas järjekorras)

Kui olete huvitatud sellest, kuidas LED -e juhitakse, peaksite vaatama APA102 andmelehte.

OneBit

See on jällegi digitaalse kirjutamise otsene pordi manipuleerimise versioon.

Esiteks kontrollib see, kas see peaks saatma 0 või 1, ja tõmbab andmestiku vastavalt madalale või kõrgele. Seejärel kirjutab see kella nööpnõela kõrgele väga lühikeseks ja kirjutab selle uuesti madalale.

OneByte

See kordab üksbit kaheksa korda silmusega "jaoks". See loeb baiti esimese biti ja edastab selle väärtuse funktsioonile oneBit ning teeb sama järgmise 7 bitti jaoks.

LedData

See kordab oneByte'i 4 korda, et anda ühe LED -i jaoks vajalikud andmed. Esimene bait algab 111xxxxx -ga ja 5 -bitise heleduse väärtusega xxxxx kohas. Heledust saab seadistada vahemikus 0 kuni 31 (2^5 = 32 taset).

Järgmised 3 baiti on sinise, rohelise ja punase väärtuse jaoks. Üks bait iga värvi jaoks.

ColorWheelThisLed

See funktsioon nimetab ledData, mis annab sellele rgb -värvid sõltuvalt värviratta nurgast.

16 -bitine väärtus on dividend kuues võrdse vahega 60 -kraadises osas. Piltide vaatamine võib aidata teil paremini mõista.

(pakutakse ka 8 -bitist versiooni, kuid kommenteeriti, kuna see on liiga virvendav)

StartEndFrame

Stardiraami tuleb kasutada iga kord, kui soovite LED -idele uusi värve saata ja soovite LED -ide tegelikku värvi värskendada

Kasutan ainult stardiraami, kuna lõppraami pole vaja. Stardiraam on 4 baiti 0. Lõppraam on 4 baiti 255 (11111111).

6. samm: kood V2 (tarkvara lülitub välja taimeritega)

Kood V2 (tarkvara taastub koos taimeritega)
Kood V2 (tarkvara taastub koos taimeritega)

Pärast mõnda aega mängimist märkasin mõningaid topeltkoputamise probleeme riistvara tühjenemisega. Seda saab parandada mõne muu väärtustakisti või kondensaatoriga, kuid kuna nupud ja kaas ei ole eemaldatavad, arvasin, et tarkvara väljalülitamine oleks tore lahendus. Tarkvara väljalülitamine peaks toimima, kas riistvara tagasilöök on rakendatud või mitte. Praeguses seadistuses ei suutnud ma kaant eemaldada, nii et jätsin takistid ja kondensaatorid oma kohale.

Ma ei selgita koodi nii põhjalikult kui eelmine versioon, sest seda on natuke raskem seletada.

Põhimõtteliselt töötab enamik koodi samamoodi ja led -kood jääb puutumata. muutunud on see, et välised katkestused ei kasuta enam arduino funktsioone. Nüüd töötab see puhtas C -koodis. Ja nüüd on lisandunud tarkvara katkestamine. Selleks kasutasin AVR -taimerit, et oodata teatud aega, kuni põrkamine on peatunud. Kuna taimerid on katkestatud, ei mõjuta tagasilükkamisaega silmuses toimuv.

Ainus negatiivne külg, millele võin tulla, on see, et arduino viivitusfunktsioone ei saa enam kasutada. Kuna viivitusfunktsioonid kasutavad taimerit 0 ja see programm kasutab tagasilöögiks taimerit 0.

Pildil näete, kuidas kood ligikaudselt töötab. Mem -bit näitab, kas taimer töötab. Mida pole kujutatud, on see, et nupuvajutuse lõpus on sisend madal. Sel juhul saadetakse ainult klahvivajutus, kui nupp on juba vabastatud. Mis tähendab, et võtit hoitakse arvuti osas all. Selle harvaesineva erandi korral vormistatakse kontroll, kui taimer on aegunud. Kui taimeri lõpus nuppu ei vajutata, saadetakse klahvi vabastamise käsk.

Samm 7: kood V3 (tarkvara tagasilöök vertikaalse loenduriga) (soovitatav) (LED puudub)

Kood V3 (tarkvara tagasilöök vertikaalse loenduriga) (soovitatav) (LED puudub)
Kood V3 (tarkvara tagasilöök vertikaalse loenduriga) (soovitatav) (LED puudub)

Sellel koodil on ka versioon, kus te ei vaja tõmbetakistusi. Veenduge, et ühendate iga nupu sisendiga ja GROUNDiga! Kasutatakse sisseehitatud tõmbejõudu

Samuti kogesin registreerimata pressi koodis V2. Ma arvan, et kood muutus taimeriga ja välise katkestusega lihtsalt liiga keeruliseks ja ma võin mõned erandid vahele jätta. Sel põhjusel hakkasin nullist otsima Internetist tarkvara tagasilöögimeetodeid.

(ausalt, vähemalt pool sellest projektist on praeguseks muutunud nuppude eemaldamiseks)

Pärast mõningast otsimist leidsin selle postituse:

www.compuphase.com/electronics/debouncing….

Ausalt öeldes võttis mul päris kaua aega, et täielikult aru saada, kuidas see täpselt töötab. See hõlmab mõningaid üsna keerukaid bittide manipuleerimisi, kuid proovin seda võimalikult lihtsaks muuta. Kuid minu selgitused on ainult postituse täiendus, nii et peaksite vähemalt lugema "vertikaalseid loendureid", "kommenteeritud rakendusi" ja "latentsuse vähendamist".

Minu selgitus

Lisatud ajadiagramm (tehtud WaveDromis) peaks muutma selle bittmatemaatikast vähemalt natuke arusaadavamaks. Pange tähele, et pildil on 2 loendurit, kuid minu koodil on 3. See tähendab pikemat tagasilöögiaega.

Üks bit väärtuse kohta

Vertikaalse loenduri abil on võimalik korraga mitu nuppu paralleelselt vabastada. Kõik väärtused on baiti tüüpi (uint8_t) ja koosnevad 8 bitist. meid ei huvita, millist väärtust ükski neist baitidest sisaldab, pigem oleme huvitatud bittidest iseenesest. Iga tühistatav nupp kasutab igast baidist ainult ühte bitti. Esimene nupp kasutab ainult iga baidi esimest bitti, teine nupp teist bitti jne.

Kõik korraga

Kasutades bittmatemaatikat, on võimalik neid nööpnõelaid paralleelselt teostada. Ja kuigi bittide matemaatika on üsna keeruline, on see protsessori jaoks väga tõhus.

8 -bitise andmetüübi korral on seega võimalik seda teha 8 nupu jaoks. Suuremate andmetüüpide kasutamine võimaldab korraga rohkem tagasilööke.

Tagasilöök

Tagasilöögirutiin täidetakse iga 1 millisekundi järel taimeriga.

kui nuppu vajutatakse, läheb nupp State (olek), mis on väljalülitatud olek, madalale, näidates nupuvajutust. Vabastamise tuvastamiseks peab nupp olema piisavalt kaua kõrgel, mis näitab, et see pole teatud aja jooksul põrganud. Lülitit kasutatakse nupuvahetuse näitamiseks. Loenduribitte kasutatakse…. lugedes, kui kaua pole põrgatust olnud.

Delta näitab erinevust sisendi ja tühistatud oleku vahel. Ainult siis, kui on erinevusi, loendur loeb. tagasilöögi tuvastamisel lähtestatakse loendur (delta on 0).

8. samm: tulemus

Image
Image

Kui kõik läks hästi, peaks teil nüüd Osu mängimiseks töötav klaviatuur olema! peal. Mina isiklikult pole latentsust märganud. Kui teete, palun andke mulle sellest teada. Samuti, kui on küsimusi, küsige julgelt midagi.

Eelmised mainimised V2 kohta ei ole mõeldud lubadusena, nii et ärge lükake seda projekti edasi, sest soovite V2 oodata.

Loodan, et naudite oma klaviatuuri!

Osu! nimi: Thomazzz3

Tõrkeotsing

Kui arvate, et teil on klaviatuuriga probleeme, avage esmalt tekstiredaktor ja vajutage lühidalt iga klahvi üks kord.

Kas üks või mitu võtit ei tööta?

Võimalik, et purustasite jootmise ajal lüliti sisemiselt. Kui teil on multimeeter, pange see järjepidevusele/piiksuma, asetage see lülitiga paralleelselt, kui Arduino pole ühendatud, ja vajutage klahvi. See peaks piiksuma.

Kas äsja sisestatud märgid vastavad Osus seadistatud klahvidele! ?

Muutke arduino koodi märke esimeses 3 #Defines ('' on hädavajalik!).

Või vaheta oma Osu! konfigureeritud klahvide kasutamiseks.

Kas ühte või mitut klahvi korratakse paar korda?

Tagasilülitusahel ei tööta tõenäoliselt teie lülitite puhul või pole õigesti joodetud. Kontrollige jooteühendusi. Kui see ikka juhtub, proovige kondensaatori väärtust 1uF. See on PCB kasutajatele väga raske.

Kui teil on LED -idega probleeme

Kas LED -id vilguvad?

Jooteühendus võib olla lahti. Kui kasutate trükkplaati, veenduge, et jootekarp voolas tõepoolest prindipadjal.

Kas ükski valgusdioodist ei tööta või teatud arv LED -e ei tööta?

Kontrollige, kas esimese LED -i ühenduste vahel pole lühiseid (jälgige jälgi) ja kontrollige, kas Arduino väljunditel ja uuesti esimesel LED -il on hästi ühendatud tina. Kui kinnitus on õige ja ikka veel defektne, peate võib -olla esimese LED -i asendama.

Kui see parandab, korrake seda vajadusel järgmiste LED -ide puhul.

Soovitan: