Tartalomjegyzék:

Osu! Billentyűzet: 8 lépés (képekkel)
Osu! Billentyűzet: 8 lépés (képekkel)

Videó: Osu! Billentyűzet: 8 lépés (képekkel)

Videó: Osu! Billentyűzet: 8 lépés (képekkel)
Videó: KIKAPTUK A BIZIT📚 #shorts 2024, Július
Anonim
Osu! Billentyűzet
Osu! Billentyűzet

Nemrég elkezdtem egy osu nevű ritmusjátékot játszani! és miután megláttam egy videót egy kereskedelmi mini billentyűzetről, úgy gondoltam, hogy szórakoztató projekt lenne magam tervezni. Nem sokkal ezután úgy döntöttem, hogy jó ötlet, ha az első projektként oktatható tárgyakra helyezem.

Ha pontosan meg szeretné ismételni ezt a projektet az utolsó utasításig, akkor legyen a vendégem, de néhány általam megfogalmazott javaslat nem a legalacsonyabb áron vagy a legjobb minőségen alapul. Néhány összetevőt csak azért választanak, mert hevertek. Ha tudod kezelni, arra biztatlak, hogy testreszabd a projektedet.

1. megjegyzés: Az SMD alkatrészeket (kis elektronika) használják, ezért ha ezt a projektet megismétli, forrasztási ismeretekre van szükség. talán egy könnyen forrasztható változat kerül hozzáadásra, de ezek a ledek nem a lyukcsomagolásban vannak

2. megjegyzés: Többször frissítettem a kódot, és most a 3 -as verzióig tartok. Az összes kódot online hagyom, de azt javaslom, hogy az utolsó verziót használja. Jelenleg nem rendelkezik led funkcióval, de a legjobban teljesítőnek kell lennie.

1. lépés: Anyagok és magyarázatok

Anyagok és magyarázatok
Anyagok és magyarázatok

Attól függően, hogy hogyan készíted el a projektedet, szükség lehet különböző összetevőkre, de ezeket az összetevőket én használtam. Ha van ideje és spórolni szeretne, rendelje meg az aliexpress űrlapot, és ne rendelje meg a PCB -t.

1 Arduino pro micro + USB kábel

3 Kailh BOX piros kapcsoló

3 db 10k ellenállás (0805 SMD)

3 100nF kondenzátor (0805 SMD)

4 APA102 rgb LED (5050 SMD)

3 Kulcstartó

1 Nyomtatott áramkör (PCB) ebben a projektben

Ebben a projektben 1 db 3D nyomtatott tok biztosított

Miért használok Arduino pro micro -t?

A legtöbb arduino tábla, például az Uno (Atmega328) nem támogatja az USB kommunikációt natív módon. Igen, nagyon könnyen programozhatja őket USB -n keresztül, és szerintem vannak megoldások, de szeretem egyszerűnek tartani az USB -kommunikációt, és nem tudom, hogy a megoldások ilyen érzékenyek -e. Ezek a lapok külső chipet használnak az USB kommunikáció lehetővé tételéhez, míg az Arduino pro micro (Atmega32U4) beépített.

A kapcsolók

Sok mechanikus kapcsoló használható. Lineáris, tapintható vagy kattanó a Kailh vagy a Cherry MX -től. Válassza ki, melyik tetszik. A Kailh kapcsolókat használtam, mert olcsók voltak az Ailexpress -en. Ha a NYÁK használatát választja, szüksége lesz Kailh BOX kapcsolókra. A szín határozza meg az érzést.

Az elektronikus alkatrészek

Ebben a fejezetben nem kell sokat magyarázni róluk, de ha nem használja a NYÁK -t, akkor a forrasztás megkönnyítése érdekében csak a normál vályúlyukakat ajánlom. Sajnos a használt LED -ek nem állnak rendelkezésre vályúcsomagolásban. Azt sem javaslom, hogy vezetékeket használjon SMD csomagokon, hacsak nem nagyon bízik forrasztási képességeiben. Még az SMD -hez PCB -n is "fejlett" forrasztási készségek szükségesek.

A ház

Lakást biztosítok ebben a projektben, de jelenleg hibás. A csavarok illesztéséhez módosítani kell, a LED -ek nyílásai nem optimálisak, az arduino ki van téve, és egy részt ki kell vágni, hogy az USB illeszkedjen. A jövőben új lakásokkal bővülhet. Ha van 3D nyomtatója, nyomtassa ki, de kérjük, ne hajtsa végre a hibás tok nyomtatását, ha nem, és csak valamilyen projektdobozt használ.

2. lépés: A vázlat

A sematikus
A sematikus

Ennek a projektnek a vázlata meglehetősen egyszerű, de szeretném elmagyarázni az összetevőket azoknak az embereknek, akik érdeklődnek, és nem ismerik ezt a megvalósítást.

Kapcsolja össze a kapcsolatokat az Arduino -val

A kapcsolók a 0, 2 és 3 Arduino csapokhoz vannak csatlakoztatva, mert ezek a tűk külső megszakítóként használhatók. Ezt a kódrészlet magyarázza tovább.

A visszakapcsolási áramkör

A vázlat bal oldalán egy áramkör található, amelyet háromszor másolnak. Ez az áramkör a kapcsoló kikapcsolására szolgál. Ahhoz, hogy megtudja, mi a visszakapcsolás, meg kell értenie a kapcsoló ugrálását, és nem nehéz megérteni.

Először nézze meg ezt a szimulációt az első kép festéséhez (kattintson gyorsan a kapcsolóra, és nézze meg az alábbi jelet)

Amikor megnyom vagy felenged egy kapcsolót, az visszapattan, és a jel néhány ezredmásodpercig váltakozik a magas és az alacsony között. Az Arduino nagyon gyors, és minden csúcsot és mélypontot elolvas ezen rövid idő alatt. A program minden egyes alkalommal megnyomja vagy elengedi a gombot, amikor magas vagy alacsony értéket olvasnak, így a számítógép minden egyes megnyomásakor többször megnyomja a gombot. Nem ideális ritmusjátékhoz.

Ez a visszakapcsolási áramkör lelassítja a jel leeső szélét. Az Arduino felé érkező jel nem tud olyan gyorsan megváltozni, mint a visszapattanás, ezért egy lenyomásra olvasható. Ne aggódjon amiatt, hogy a következő igazi sajtó lelassul, mert így lesz.

Fejlett:

Az Atmaga32U4 digitális mélypontot olvas 0,2 Vcc - 0,1 V = 0,9 volton. A kondenzátor feszültsége a kisülés során bármikor Vcc * e^(-t/RC). Ha más kapcsolási időt mér a kapcsolón, kiszámíthatja az ellenállás és a kondenzátor értékeit.

képlet űrlap

A LED -ek

Az rgb LED -ek APA102 LED -ek, amelyek egyedileg címezhetők óra és adatvonal segítségével. Működésükhöz nincs szükség külső alkatrészekre. Sok LED esetében használjon kondenzátort, amely párhuzamos az 5 volt és a földdel, de mindössze 4 LED esetén nincs rá szüksége.

3. lépés: A tábla tervezése

A tábla tervezése
A tábla tervezése

A NYÁK -t JLCPCB -ben tervezték. Nem szponzorálom őket, de olcsó prototípusokért kiváló PCB -ket készítenek. 2 dollárért 10 ugyanolyan táblát kap, de a szállítás számomra körülbelül 11 dollár volt. Ha nem feltétlenül szeretne rgb világítást, és csak egyet tervez, akkor fontolja meg a billentyűzet PCB nélküli készítését.

A tábla kialakítása meglehetősen egyszerű volt. Csak egy alkatrészt kellett hozzáadnom a kapcsolókhoz, de néhány videó megnézése után rájöttem. Az egyetlen hibára rájöttem, hogy a lyukak elhelyezése kissé túl közel van a kapcsolókhoz.

A NYÁK megrendeléséhez menjen a https://jlcpcb.com/ oldalra, és válassza a 2 rétegű lehetőséget. Gerber -fájlt fog kérni. töltse le a ".zip" fájlt, és húzza az ablakba. Nem kell kicsomagolni. A beállításoknak rendben kell lenniük, és folytathatja a rendelést.

4. lépés: Táska tervezési és szerelési tippek

Tippek a tervezéshez és az összeszereléshez
Tippek a tervezéshez és az összeszereléshez
Tippek a tervezéshez és az összeszereléshez
Tippek a tervezéshez és az összeszereléshez
Tippek a tervezéshez és az összeszereléshez
Tippek a tervezéshez és az összeszereléshez
Tippek a tervezéshez és az összeszereléshez
Tippek a tervezéshez és az összeszereléshez

Tervezés

Ahogy korábban említettem, a tervezésem hibás, de még mindig kinyomtathatja, ha akarja. A design a Fusion 360 -ban készült. Ez egy ingyenes 3D -s modellező szoftver, és feltalálói és solidworks tapasztalataim alapján nagyon könnyű volt vele dolgozni. A tok sarkán lévő körök megakadályozzák a leválást a nyomtatóágyról.

Ha saját maga állítja össze, csak egy dolog fontos. A kapcsolókat szilárdan kell elhelyezni, és nem kell mozogniuk. A négyzet alakú kivágásokról olyan képeket adtam meg, amelyek méretei lehetővé teszik, hogy saját tervezéséhez használhassa, feltéve, hogy Kailh BOX kapcsolókat használ.

Összeszerelés

Most már minden alkatrész megtalálható az összeszereléshez. Az első változat összeszerelésére van utasítás, mert a kapcsolók forrasztva vannak.

1. Forrasztja az SMD alkatrészeket. ezek az ellenállások, kondenzátorok és LED -ek.

2. Forrasztja az Arduino pro micro -t.

3. Forrasztás előtt helyezze a 3 kapcsolót a 3D nyomtatott fedőlapra. A fedőlapot nem lehet eltávolítani a kapcsolók forrasztása után. A kapcsolók forrasztása nem ajánlott, és tönkreteheti azokat.

4. Most forrasztja a kapcsolókat a helyére. Tegye ezt a lehető leggyorsabban, mert a műanyag kapcsolók megolvadhatnak és tönkretehetik őket, vagy drasztikusan csökkenthetik a kattintások számát.

5. Helyezze az összeszerelt fedőlapot a 3D nyomtatott tokba, és rögzítse ragasztószalaggal vagy csavarokkal, ha nem zavarják a billentyűsapkákat.

6. Helyezze a keyCaps -et a kapcsolókra, és kész.

Ajánlások

Forgassa ki vagy maszkolja az arduino LED -jeit a kód feltöltése után. A LED -ek szépek, ha a kód nem töltődik fel, de nem jó késztermékként tekinteni. Ügyesség és hegyes csipesz szükséges.

Ezenkívül az alsó markolatlábak jóak a csúszásgátlás érdekében, és hagyják, hogy az rgb fény ragyogjon.

5. lépés: A V1 kód (hardveres visszalépés)

A Code V1 (hardveres visszalépés)
A Code V1 (hardveres visszalépés)
A Code V1 (hardveres visszalépés)
A Code V1 (hardveres visszalépés)

Ennek a projektnek a kódja nem kezdőbarát, így ha még csak most kezdi el programozni az arduino -t, akkor ez a kód valószínűleg megijeszt egy kicsit. Mindazonáltal megpróbálom a lehető legjobban elmagyarázni, mi történik. Ebben a szövegben néhány dolgot később kifejtünk, így ha kérdése van, először olvassa el az egészet.

A kód feltöltése

Először töltse le mind a 3 ".ino" fájlt, és tegye őket egy mappába. Ha nincs Arduino IDE, töltse le ingyen a hivatalos arduino webhelyről.

Csatlakoztassa Arduino -ját a számítógépéhez, és nyissa meg az "OSU_Keyboard_code_V1.ino" fájlt. Az Eszközök táblában válassza az "Arduino/Genuino Micro" lehetőséget. Az Eszközökben válassza ki a megfelelő COM -portot. Ez néha megváltozhat. A kód feltöltéséhez Arduino készülékére kattintson a képernyő bal felső sarkában található nyílra, és várja meg, amíg a bal alsó sarokban meg nem jelenik.

OSU_Keyboard_code_V1

Beleértve és meghatározva

Először be kell vennie a Billentyűzet könyvtárat. Ez lehetővé teszi az Arduino billentyűzetként való használatát.

Ezután néhány értéket definiálok. A Define olyan, mint egy változó, de a program futása közben nem tudnak változtatni. Az első 9 a billentyűzet karakterhez, az arduino pin számhoz és a port bitekhez tartozik.

Ezután a LED adatok és az óra portbitjei.

Ezenkívül meg van határozva a LED -ek száma, és változó a színkör szöge.

Beállít

A kódnak ez a része csak egyszer fog végrehajtódni, amikor az arduino csatlakoztatva van.

Először a LED -ek órajelét és adattűit állítják be kimenetként, a kapcsolócsapokat pedig bemenetként. Ez a pinMode () fejlett verziója. Ha érdekli, keresse a "közvetlen port manipuláció" kifejezést.

A Keyboard.begin () egyszerűen billentyűzetként indítja el az usb kapcsolatot.

A következő 3 megszakítás kapcsolódik a kapcsolócsapokhoz. Minden alkalommal, amikor változást észlel a kapcsolócsapon, egy apró program fut. Ez a kis program tovább készül.

Hurok

Ez a rész folyamatosan megismétlődik, amíg az arduino be van kapcsolva.

Csak a LED -ek színének megváltoztatására és frissítésére használom.

Megszakítja

Itt készülnek a kis programok, amelyek csak akkor hajtódnak végre, ha a kapcsolócsapokon változást észlelnek. Egyformák, kivéve azt, hogy melyik csapra reagálnak.

Először ellenőrzi, hogy a gombot megnyomják vagy elengedik -e, és elküldi a helyes billentyűparancsot.

LED (más sorrendben magyarázva)

Ha kíváncsi a LED -ek vezérlésére, nézze meg az APA102 adatlapját.

OneBit

Ez ismét a digitális írás közvetlen portmanipulációs változata.

Először azt ellenőrzi, hogy 0 -t vagy 1 -et kell -e küldenie, és megfelelően húzza az adatcsapot alacsonyra vagy magasra. Aztán nagyon rövidre írja az óramutatót, és ismét alacsonyra.

OneByte

Ez 8 -szor megismétli az oneBitet egy "for" hurokkal. Beolvassa az első bitet egy bájtban, és átadja az értékét a oneBit függvénynek, és ugyanezt teszi a következő 7 bit esetében.

LedData

Ez megismétli a oneByte -ot négyszer, hogy megadja az egy LED -hez szükséges adatokat. Az első bájt 111xxxxx -el kezdődik, és 5 bites fényerőérték az xxxxx helyén. A fényerő 0 és 31 között állítható (2^5 = 32 szint).

A következő 3 bájt a kék, zöld és piros értékeket tartalmazza. Minden színhez egy bájt.

ColorWheelThisLed

Ez a funkció a ledData nevet adja a rgb színeknek, a színkör szögétől függően.

A 16 bites érték osztalék 6 egyenlő távolságra lévő 60 fokos szakaszban. A képek megtekintése segíthet abban, hogy jobban megértse.

(8 bites verzió is rendelkezésre áll, de megjegyzést fűzött, mert túl villódzó)

StartEndFrame

A kezdőkeretet minden alkalommal használni kell, amikor új színeket szeretne küldeni a LED -ekhez, és frissíteni szeretné a LED -ek tényleges színét

Csak a kezdőkeretet használom, mert a végkeretre nincs szükség. A kezdőkeret 4 bájt 0. A végkeret 4 bájtos 255 (11111111).

6. lépés: A Code V2 (szoftver debounce with timers)

A Code V2 (szoftver Debounce With Timers)
A Code V2 (szoftver Debounce With Timers)

Egy kis játék után észrevettem néhány dupla koppintási problémát a hardver lekapcsolásával kapcsolatban. Ezt meg lehet oldani más értékellenállásokkal vagy kondenzátorokkal, de mivel a gombok és a fedél nem távolíthatók el, úgy gondoltam, hogy a szoftver visszavonása jó megoldás lenne. A szoftver -visszaváltásnak működnie kell, függetlenül attól, hogy a hardver -visszakapcsolás megvalósult -e vagy sem. A jelenlegi beállításomban nem tudtam levenni a fedelet, így csak az ellenállásokat és a kondenzátorokat hagytam a helyükön.

A kódot nem fogom olyan részletesen elmagyarázni, mint az előző verziót, mert kicsit nehezebb elmagyarázni.

Alapvetően a kód nagy része ugyanúgy működik, és a led kód érintetlen marad. ami megváltozott, a külső megszakítások már nem használják az arduino függvényeket. Most tiszta C kódban működik. És most hozzáadódik a szoftver megszakítása. Ehhez az AVR időzítők segítségével vártam egy ideig, amíg a pattogás abbamarad. Mivel az időzítők megszakadnak, a visszakapcsolási időt nem befolyásolja semmi, ami a ciklusban történik.

Az egyetlen hátrány, amit fel tudok hozni, hogy az arduino késleltetési funkciók már nem használhatók. Mivel a késleltetési funkciók a 0. időzítőt használják, és ez a program a 0. időzítőt használja a visszakapcsoláshoz.

A képen látható, hogy a kód nagyjából hogyan működik. A mem bit jelzi, hogy fut -e időzítő. Amit nem ábrázolunk, az az eset, hogy a gomb lenyomása után a bemenet alacsony. Ebben az esetben csak egy gombnyomás kerül elküldésre, miközben a gomb már ki van engedve. Ami azt jelenti, hogy a kulcsot lenyomva kell tartani, ami a számítógépet illeti. E ritka kivétel esetén az időzítő lejárta előtt ellenőrzést kell végrehajtani. Ha az időzítő végén a gombot nem nyomja meg, akkor egy billentyűkioldó parancs kerül elküldésre.

7. lépés: A V3 kód (szoftver visszakapcsolás függőleges számlálóval) (ajánlott) (nincs LED)

A Code V3 (szoftver visszakapcsolás függőleges számlálóval) (ajánlott) (nincs LED)
A Code V3 (szoftver visszakapcsolás függőleges számlálóval) (ajánlott) (nincs LED)

Ennek a kódnak is van egy változata, ahol nincs szükség lehúzható ellenállásokra. Győződjön meg arról, hogy minden gombot csatlakoztat a bemenethez és a GROUND -hoz! A beépített felhúzást használják

Néhány regisztrálatlan prést is tapasztaltam a V2 kódban. Azt hiszem, a kód túl bonyolult lett az időzítővel és a külső megszakítással, és lehet, hogy elmulasztottam néhány kivételt. Emiatt a semmiből indultam el, amikor az interneten kerestem szoftveres visszalépési módszereket.

(őszintén szólva, a projekt legalább fele ezen a ponton gombnyomássá vált)

Némi keresgélés után találtam ezt a bejegyzést:

www.compuphase.com/electronics/debouncing….

Hogy őszinte legyek, elég sok időbe telt, amíg teljesen megértettem, hogyan működik. Ez magában foglal néhány meglehetősen összetett bit -manipulációt, de megpróbálom a lehető legegyszerűbbé tenni. A magyarázataim azonban csak kiegészítésként szolgálnak a bejegyzéshez, így legalább el kell olvasnia a "függőleges számlálókat", "megjegyzésekkel ellátott megvalósítást" és "késleltetés csökkentését".

A magyarázatom

A hozzáadott időzítési diagramnak (WaveDromban készült) legalább egy kicsit érthetőbbé kell tennie ezt a bit matematikát. Vegye figyelembe, hogy a kép 2 számlálóbittel rendelkezik, a kódom azonban 3. Ez hosszabb visszakapcsolási időt jelent.

Egy bit értékenként

A függőleges számláló megvalósításával egyszerre több gomb is lekapcsolható, párhuzamosan. Minden érték Byte (uint8_t) típusú, és 8 bitből áll. minket nem érdekel, hogy ezeknek a bájtoknak milyen értéke van, hanem inkább a bitek önmagukban érdekelnek. Minden visszavonandó gomb csak egy bitet használ minden bájtból. Az első gomb minden bájtnak csak az első bitjét használja, a második gomb a második bitet stb.

Mindezt egyszerre

A bit matematika használatával párhuzamosan hajthatók végre ezek a pin -visszakapcsolások. És bár a bit matematika meglehetősen bonyolult, nagyon hatékony a processzor számára.

Egy 8 bites adattípussal ez 8 gomb esetén lehetséges. A nagyobb adattípusok használata egyszerre több visszakapcsolást tesz lehetővé.

A visszavágás

A visszakapcsolási rutin 1 ezredmásodpercenként, időzítő megszakítással hajtódik végre.

amikor megnyomja a gombot, a gomb állapot, amely a visszakapcsolt állapot, azonnal alacsony lesz, jelezve a gomb megnyomását. A kioldás észleléséhez a gombnak elég hosszú ideig magasan kell lennie, ami azt jelzi, hogy egy bizonyos ideig nem pattog. A Toggle a gombváltás jelzésére szolgál. A számláló biteket arra használják…. számolni, hogy mióta nem volt ugrálás.

A Delta különbséget jelez a bemenet és a visszakapcsolt állapot között. Csak ha különbség van, a számláló számít. a számláló nullázódik, amikor egy pattogást észlel (delta értéke 0).

8. lépés: Az eredmény

Image
Image

Ha minden jól ment, akkor rendelkezzen működő billentyűzettel az Osu lejátszásához! tovább. Én személy szerint nem vettem észre késést. Ha igen, kérem tudassa velem. Továbbá, ha bármilyen kérdése van, kérdezzen bármit.

Az előző említések a V2 -ről nem ígéretnek számítanak, ezért ne halassza el ezt a projektet, mert szeretne várni a V2 -re.

Remélem, élvezni fogja a billentyűzetet!

Osu! név: Thomazzz3

Hibaelhárítás

Ha úgy gondolja, hogy problémái vannak a billentyűzettel, először nyisson meg egy szövegszerkesztőt, és rövid ideig nyomja meg mindegyik gombot.

Egy vagy több kulcs nem működik?

Lehetséges, hogy forrasztás közben megsemmisítette a kapcsolót. Ha multimétere van, kapcsolja be a folytonosságot/sípolást, tegye párhuzamosan a kapcsolóval, amíg az Arduino nincs csatlakoztatva, és nyomja meg a gombot. Sípolnia kell.

Az imént begépelt karakterek egyeznek az Osu -ban beállított billentyűkkel! ?

Változtassa meg az arduino kód karaktereit az első 3 #Defines ('' nem szükséges!).

Vagy változtassa meg az Osu -t! beállításokat a konfigurált billentyűk használatához.

Egy vagy több kulcs ismétlődik néhányszor?

A visszakapcsolási áramkör valószínűleg nem működik a kapcsolóknál, vagy nincs megfelelően forrasztva. Ellenőrizze a forrasztási csatlakozásokat. Ha még mindig előfordul, próbálja meg az 1uF kondenzátor értéket. Ez nagyon nehéz lesz a NYÁK -felhasználók számára.

Ha problémái vannak a LED -ekkel

A LED -ek villognak?

A forrasztási csatlakozó laza lehet. Ha a NYÁK -ot használja, győződjön meg arról, hogy a forrasztópáka valóban a nyomólapon lefolyott.

Egyik LED sem működik, vagy bizonyos számú LED nem működik?

Ellenőrizze, nincs -e rövidzárlat az első LED csatlakozói között (kövesse a nyomvonalakat), és ellenőrizze, hogy nincs -e jól csatlakoztatott ón az Arduino kimenetén, és ismét az első LED. Ha a megerősítés helyes és továbbra is hibás, akkor szükség lehet az első LED cseréjére.

Ha ez megoldja, szükség esetén ismételje meg a következő LED -eket.

Ajánlott: