INHOUDSOPGAWE:

Osu! Sleutelbord: 8 stappe (met foto's)
Osu! Sleutelbord: 8 stappe (met foto's)

Video: Osu! Sleutelbord: 8 stappe (met foto's)

Video: Osu! Sleutelbord: 8 stappe (met foto's)
Video: 8 Excel-tools die iedereen zou moeten kunnen gebruiken 2024, Julie
Anonim
Osu! Sleutelbord
Osu! Sleutelbord

Ek het onlangs begin met 'n ritmespel genaamd osu! en nadat ek 'n video van 'n kommersiële mini -sleutelbord gesien het, het ek gedink dat dit 'n prettige projek sou wees om dit self te ontwerp. Nie lank daarna het ek besluit dat dit 'n goeie idee sou wees om dit op my instruksies as my eerste projek te plaas.

As u hierdie projek presies tot die laaste instruksie wil herhaal, wees dan my gas, maar sommige van die besluite wat ek gemaak het, is nie gebaseer op die laagste prys of die beste kwaliteit nie. Sommige komponente word byna bloot gekies omdat ek dit laat lê het. As u dit kan hanteer, sal ek u aanmoedig om u projek aan te pas.

Opmerking 1: SMD -komponente (klein elektronika) word gebruik, dus as u hierdie projek herhaal, is soldeervaardighede nodig. Miskien sal 'n maklik om te soldeer weergawe bygevoeg word, maar hierdie leds kom nie in 'n gatpakket nie

Nota 2: Ek het die kode verskeie kere opgedateer en is nou na weergawe 3ish. Ek laat alle kode aanlyn, maar ek raai u aan om die laaste weergawe te gebruik. Dit het tans nie LED -funksies nie, maar dit behoort die beste te presteer.

Stap 1: Materiaal en verduidelikings

Materiaal en verduidelikings
Materiaal en verduidelikings

Afhangende van hoe u u projek maak, benodig u moontlik verskillende komponente, maar hierdie komponente is die een wat ek gebruik het. As u tyd het en geld wil bespaar, bestel dan aliexpress en bestel nie die printplaat nie.

1 Arduino pro micro + USB -kabel

3 Kailh BOX rooi skakelaars

3 10k weerstand (0805 SMD)

3 100nF kapasitor (0805 SMD)

4 APA102 rgb LED (5050 SMD)

3 Sleutels

1 Printplaat (PCB) wat in hierdie projek voorsien word

1 3D -gedrukte omhulsel word in hierdie projek voorsien

Waarom gebruik ek 'n Arduino pro micro?

Die meeste arduino -borde soos die Uno (Atmega328) het nie inheemse ondersteuning vir USB -kommunikasie nie. Ja, u kan dit baie maklik via USB programmeer en ek dink daar is oplossings, maar ek hou daarvan om dit eenvoudig te hou wat USB -kommunikasie betref, en ek weet nie of die oplossings so reageer nie. Die borde gebruik 'n eksterne chip om USB -kommunikasie moontlik te maak, terwyl die Arduino pro micro (Atmega32U4) dit ingebou het.

Die skakelaars

Daar is baie meganiese skakelaars wat u kan gebruik. Lineêr, tasbaar of klikbaar van Kailh of Cherry MX. Kies wat jy wil. Ek het die Kailh -skakelaars gebruik, want dit was goedkoop op Ailexpress. As u kies om die PCB te gebruik, benodig u Kailh BOX -skakelaars. Die kleur bepaal die gevoel.

Die elektroniese komponente

In hierdie hoofstuk is daar nie veel om oor hulle te verduidelik nie, maar as u nie die PCB gebruik nie, sal ek net normale deurkomponente aanbeveel vir soldeergemak. Ongelukkig is die gebruikte leds nie beskikbaar in troggatpakkette nie. Ek sou ook nie aanbeveel om drade op SMD -pakkette te gebruik nie, tensy u baie vertroue het in u soldeervaardighede. Selfs vir SMD op 'n PCB word "gevorderde" soldeervaardighede vereis.

Die behuising

Ek bied wel 'n behuising in hierdie projek, maar dit is op die oomblik gebrekkig. Aanpassings is nodig om boute aan te pas, die openinge vir die LED's is nie optimaal nie, die arduino word blootgestel en 'n deel moet uitgesny word sodat die USB pas. In die toekoms kan 'n nuwe behuising bygevoeg word. As u 'n 3D -drukker het, druk dit dan af, maar moenie uit die pad kom om hierdie gebrekkige omhulsel te druk as u dit nie doen nie, en gebruik net 'n projekboks.

Stap 2: Die skematiese

Die skematiese
Die skematiese

Die skema vir hierdie projek is redelik eenvoudig, maar ek wil die komponente verduidelik vir die mense wat belangstel en nie die implementering ken nie.

Skakel verbindings na die Arduino

Die skakelaars is gekoppel aan Arduino -penne 0, 2 en 3 omdat die penne as eksterne onderbrekings gebruik kan word. Dit word verder verduidelik in die kode -afdeling.

Die terugslagbaan

Aan die linkerkant van die skema is 'n stroombaan wat 3 keer gekopieer is. Hierdie stroombaan word gebruik om die skakelaar af te weer. Om te weet wat die weerkaatsing is, moet u die weerkaatsing van die skakelaar verstaan en dit is nie moeilik om te verstaan nie.

Kyk eers na hierdie simulasie om 'n eerste prentjie te skets (klik vinnig op die skakelaar en kyk na die sein hieronder)

As u op 'n skakelaar druk of los, spring dit en u sein wissel 'n paar keer tussen hoog en laag vir 'n paar millisekondes. 'N Arduino is regtig vinnig en lees elke hoog en laag in hierdie kort tyd. Die program sal 'n sleutelpers stuur of losmaak elke keer as 'n hoogtepunt of 'n laagtepunt gelees word, so met elke druk op u rekenaar sal u meer as een keer druk. Nie ideaal vir 'n ritmespel nie.

Hierdie afbreekkring vertraag die dalende rand van die sein. Die sein na die Arduino kan nie so vinnig verander as die weerkaatsing plaasvind nie, so dit sal met een druk gelees word. Moenie bekommerd wees dat dit te stadig gaan vir die volgende regte pers nie, want dit sal gebeur.

Gevorderd:

Die Atmaga32U4 lees 'n digitale laagtepunt van 0.2Vcc - 0.1V = 0.9 volt. Die spanning van die kapasitor op enige tydstip in die ontlading daarvan is Vcc * e^(-t/RC). As u 'n ander terugsteltyd op u skakelaar meet, kan u die weerstand- en kapasitorwaardes bereken.

formulevorm

Die LED's

Die rgb LED's is APA102 LED's wat individueel aangespreek kan word met behulp van 'n horlosie en data lyn. Geen eksterne komponente is nodig om dit te laat werk nie. Vir baie LED's moet u 'n kondensator parallel met 5 volt en grond gebruik, maar met slegs 4 LED's het u dit nie nodig nie.

Stap 3: Die bordontwerp

Die bord ontwerp
Die bord ontwerp

Die PCB is ontwerp in JLCPCB. Ek word nie deur hulle geborg nie, maar vir goedkoop prototipes maak hulle uitstekende PCB's. Vir 2 dollar kry u 10 van dieselfde bord, maar die aflewering was ongeveer 11 dollar vir my. As u nie noodwendig rgb -beligting wil hê nie en slegs een wil maak, moet u oorweeg om u sleutelbord sonder 'n PCB te maak.

Die ontwerp van die bord was redelik eenvoudig. Ek hoef net 'n komponent vir die skakelaars by te voeg, maar nadat ek na 'n paar video's gekyk het, het ek dit reggekry. Die enigste fout wat ek besef het, is dat die gate effens te naby aan die skakelaars is.

Om die PCB te bestel, gaan na https://jlcpcb.com/ en kies die opsie met twee lae. Dit sal u vra vir 'n Gerber -lêer. laai die '.zip' -lêer af en sleep dit na die venster. U hoef dit nie uit te pak nie. Die instellings moet goed wees, en u kan die bestelling voltooi.

Stap 4: Wenkontwerp en monteerwenke

Kasontwerp en monteerwenke
Kasontwerp en monteerwenke
Kasontwerp en monteerwenke
Kasontwerp en monteerwenke
Kasontwerp en monteerwenke
Kasontwerp en monteerwenke
Kasontwerp en monteerwenke
Kasontwerp en monteerwenke

Ontwerp

Soos voorheen genoem, is my ontwerp gebrekkig, maar u kan dit steeds afdruk as u wil. die ontwerp is gemaak in Fusion 360. Dit is 'n gratis 3D -modelleringsagteware, en met my ervaring van uitvinder en solidworks was dit redelik maklik om mee te werk. Die sirkels op die hoeke van die omhulsel is om te voorkom dat dit van die drukbed afskil.

As u u eie saak maak, is slegs een ding baie belangrik. U skakelaars moet stewig geplaas word en nie kan beweeg nie. Ek het foto's van die vierkantige uitsparings met afmetings verskaf, sodat u dit vir u eie ontwerp kan gebruik, as u van Kailh BOX -skakelaars gebruik maak.

Vergadering

Nou het u al die komponente wat u benodig om te monteer. Daar is 'n bevel om hierdie eerste weergawe saam te stel omdat die skakelaars gesoldeer is.

1. Soldeer die SMD -komponente. dit is die weerstande, kapasitors en LED's.

2. Soldeer die Arduino pro micro.

3. Plaas die 3 skakelaars in die 3D -gedrukte voorblad voordat dit soldeer. Die dekplaat kan nie verwyder word nadat die skakelaars gesoldeer is nie. Dit word nie aanbeveel om die skakelaars te soldeer nie en kan dit vernietig.

4. Soldeer nou die skakelaars. Doen dit so vinnig as moontlik, want die plastiekskakelaars kan dit smelt en verwoes of hul aantal klik drasties verminder.

5. Plaas die gemonteerde dekplaat in die 3D -gedrukte omhulsel en maak dit vas met kleefband of gebruik boute as dit nie die sleuteldeks belemmer nie.

6. Plaas die keyCaps op die skakelaars en u is klaar.

Aanbevelings

Ontsoldeer of masker die LED's op die arduino nadat u u kode opgelaai het. Die LED's is goed om te hê as u kode nie opgelaai word nie, maar dit is nie lekker om as 'n voltooide produk te beskou nie. Vaardigheid en skerp pincet word vereis.

'N Paar greepvoete aan die onderkant is ook lekker om te gly en laat die rgb -lig deurskyn.

Stap 5: The Code V1 (hardware debounce)

Die kode V1 (hardeware -afbreek)
Die kode V1 (hardeware -afbreek)
Die kode V1 (hardeware -afbreek)
Die kode V1 (hardeware -afbreek)

Die kode vir hierdie projek is nie beginnersvriendelik nie, so as u eers in arduino begin programmeer, sal hierdie kode u moontlik 'n bietjie skrik. Ek sal egter probeer om so goed as moontlik te verduidelik wat aangaan. Sommige dinge word later in hierdie teks verduidelik, dus lees eers die hele saak as u vrae het.

Laai die kode op

Laai eers alle 3 ".ino" lêers af en plaas dit in een gids. Laai dit gratis af op die amptelike arduino -webwerf as u nie die Arduino IDE het nie.

Koppel u Arduino aan u rekenaar en maak 'OSU_Keyboard_code_V1.ino' oop. Kies "Arduino/Genuino Micro" in Tools Board. Kies ook in Tools die regte COM -poort. Dit kan soms verander. Om die kode na u Arduino op te laai, klik net op die pyltjie links bo op die skerm en wag totdat dit u laat weet dat dit links onder voltooi is.

OSU_Keyboard_code_V1

Insluitend en definieer

Eerstens moet u die sleutelbordbiblioteek insluit. Dit maak dit moontlik om die Arduino as 'n sleutelbord te gebruik.

Vervolgens definieer ek 'n paar waardes. Definieer is net soos 'n veranderlike, maar hulle kan nie verander terwyl die program loop nie. Die eerste 9 is vir die sleutelbordkarakter, die arduino -speldnommer en die poortstukke.

Dan die poortstukke van die LED -data en die klok.

Die aantal LED's word ook gedefinieer en 'n veranderlike vir die hoek van die kleurwiel.

Stel op

Hierdie deel van die kode word slegs een keer uitgevoer wanneer die arduino ingeprop is.

Eerstens word die horlosie en datapennetjies van die LED's as uitsette gestel en die skakelpenne as insette. Dit is die gevorderde weergawe van pinMode (). As u belangstel, soek 'direkte poortmanipulasie'.

Keyboard.begin () begin eenvoudig die usb -verbinding as sleutelbord.

Die volgende 3 onderbrekings word aan die skakelaarpenne gekoppel. Elke keer as 'n verandering op die skakelaarpen opgespoor word, word 'n klein program uitgevoer. Hierdie klein program word verder gemaak.

Lus

Hierdie deel sal voortdurend herhaal word terwyl die arduino aangeskakel word.

Ek gebruik dit slegs om die kleur van die LED's te verander en op te dateer.

Onderbreek

Hier word die klein programme, wat slegs uitgevoer sal word as 'n verandering op die skakelpen gevind word, gemaak. Hulle is identies, behalwe vir watter pen hulle reageer.

Eerstens kyk dit of die knoppie ingedruk of losgemaak word en stuur die regte sleutelbordopdrag.

LED (verduidelik in 'n ander volgorde)

As u nuuskierig is oor hoe die LED's beheer word, moet u na die APA102 -datablad kyk.

OneBit

Dit is weer die weergawe van die direkte poortmanipulasie van digitale skryf.

Eerstens kyk dit of dit 'n 0 of 1 moet stuur en trek die data -pen onderskeidelik laag of hoog. Dan skryf dit die klokpen baie hoog en skryf dit weer laag.

OneByte

Dit herhaal oneBit 8 keer met 'n "vir" lus. Dit lees die eerste bis in 'n byte en gee die waarde daarvan deur na die oneBit -funksie en doen dieselfde vir die volgende 7 bisse.

LedData

Dit word oneByte 4 keer herhaal om die nodige data vir een led te verskaf. Die eerste greep begin met 111xxxxx en 'n helderheidswaarde van 5 bis op die plek van die xxxxx. Die helderheid kan ingestel word van 0 tot 31 (2^5 = 32 vlakke).

Die volgende 3 grepe is vir die blou, groen en rooi waardes. Een greep vir elke kleur.

ColorWheelThisLed

Hierdie funksie noem ledData gee dit die rgb -kleure, afhangende van 'n hoek in die kleurwiel.

Die waarde van 16 bis is 'n dividend in 6 eweredige afdelings van 60 grade. As u na die beelde kyk, kan u beter verstaan.

('n 8 -bis weergawe word ook verskaf, maar kommentaar gelewer omdat dit te flikkerig is)

StartEndFrame

Die beginraam moet gebruik word elke keer as u nuwe kleure na die leds wil stuur en die werklike kleur van die leds wil opdateer

Ek gebruik slegs die beginraam omdat die eindraamwerk nie nodig is nie. Die beginraam is 4 grepe van 0. Die eindraam is 4 grepe van 255 (11111111).

Stap 6: The Code V2 (sagteware Debounce With Timers)

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

Na 'n rukkie speel, het ek 'n paar tikprobleme opgemerk met die hardeware -afbreek. Dit kan opgelos word met 'n paar ander waardeweerstands of kondensators, maar omdat die knoppies en deksel nie verwyderbaar is nie, het ek gedink dat sagteware -afbreek 'n goeie oplossing sou wees. Die sagteware -afbreek moet werk of die hardeware -afbreek geïmplementeer word of nie. In my huidige opset kon ek nie die deksel verwyder nie, en ek het net die weerstande en kapasitors gelaat.

Ek sal die kode nie so breedvoerig verduidelik as die vorige weergawe nie, want dit is 'n bietjie moeiliker om te verduidelik.

Eintlik werk die meeste van die kode dieselfde en word die led -kode onaangeraak gelaat. wat verander het, is dat die eksterne onderbrekings nie meer die arduino -funksies gebruik nie. Nou werk dit in suiwer C -kode. En nou is die sagteware -onderbreking bygevoeg. Hiervoor het ek die AVR -timers gebruik om 'n sekere tyd te wag totdat die weerkaatsing opgehou het. Omdat die tydmeters onderbreek word, word die ontbindingstyd nie beïnvloed deur iets wat in die lus gebeur nie.

Die enigste nadeel waarmee ek kan dink, is dat die arduino -vertragingsfunksies nie meer gebruik kan word nie. Omdat vertragingsfunksies Timer 0 gebruik en hierdie program Timer 0 gebruik om af te weer.

In die prentjie kan u sien hoe die kode ongeveer werk. Die mem -bit dui aan of 'n timer loop. Wat nie uitgebeeld word nie, is dat die inset aan die einde van die knoppie laag is. In hierdie geval sal slegs 'n toetsdruk gestuur word terwyl die knoppie reeds losgemaak word. Dit beteken dat die sleutel ingedruk word wat die rekenaar betref. Vir hierdie seldsame uitsondering word 'n tjek voorgeskryf wanneer 'n timer verstryk. As die knoppie aan die einde van 'n timer nie ingedruk word nie, word 'n sleutelhersieningsopdrag gestuur.

Stap 7: The Code V3 (sagteware Debounce With Vertical Counter) (aanbeveel) (geen LED)

Die Code V3 (sagteware Debounce With Vertical Counter) (aanbeveel) (geen LED)
Die Code V3 (sagteware Debounce With Vertical Counter) (aanbeveel) (geen LED)

Hierdie kode het ook 'n weergawe waarin u nie weerstande nodig het nie. Maak seker dat u elke knoppie met die invoer en die grond verbind! Die ingeboude optrek word gebruik

Ek het ook 'n paar ongeregistreerde perse in die kode V2 ondervind. Ek dink die kode het net te kompleks geword met die tyd- en eksterne onderbreking, en ek het moontlik enkele uitsonderings gemis. Om hierdie rede het ek van nuuts af probeer om op die internet te soek na sagteware -afbreekmetodes.

(eerlikwaar, ten minste die helfte van hierdie projek het op hierdie stadium 'n knoppie geword)

Na 'n bietjie soek het ek hierdie berig teëgekom:

www.compuphase.com/electronics/debouncing….

Om eerlik te wees, het dit my 'n geruime tyd geneem om volledig te verstaan hoe dit presies werk. Dit behels 'n paar ingewikkelde manipulasies, maar ek sal probeer om dit so maklik as moontlik te maak. My verduidelikings sal egter slegs 'n toevoeging tot die pos wees, sodat u ten minste die "vertikale tellers", "'n geannoteerde implementering" en "vermindering van vertraging" moet lees.

My verduideliking

Die tydsdiagram (gemaak in WaveDrom) wat ek bygevoeg het, moet dit moeilik maak om bietjie wiskunde te verstaan, ten minste 'n bietjie meer verstaanbaar. Let daarop dat die prentjie 2 teenstukkies het, maar my kode het 3. Dit beteken 'n langer terugsteltyd.

Een bietjie per waarde

Met die implementering van die vertikale toonbank is dit moontlik om verskeie knoppies gelyktydig te ontwrig, parallel. Alle waardes is van die tipe Byte (uint8_t) en bestaan uit 8 bisse. ons is nie bekommerd oor watter waarde enige van hierdie byte bevat nie, maar ons is eerder geïnteresseerd in die stukke op hul eie. Elke knoppie wat gedebondeer moet word, gebruik slegs 'n bietjie van elke greep. Die eerste knoppie gebruik slegs die eerste bietjie van elke greep, die tweede knoppie gebruik die tweede bis, ens.

Alles op dieselfde tyd

Deur bietjie wiskunde te gebruik, is dit moontlik om hierdie pen -afwykings parallel uit te voer. En hoewel bietjie wiskunde redelik ingewikkeld is, is dit baie doeltreffend vir die verwerker.

Met 'n 8 -bis datatipe is dit dus moontlik om dit vir 8 knoppies te doen. Deur groter datatipes te gebruik, kan u meer terugslae tegelyk doen.

Die terugslag

Die debounce -roetine word elke 1 millisekonde uitgevoer met 'n timeronderbreking.

as die knoppie ingedruk word, word die buttonState, wat die toestand van die afwyking is, geleidelik laag, wat aandui dat 'n knoppie gedruk word. Om 'n vrylating op te spoor, moet die knoppie lank genoeg wees om aan te dui dat dit 'n geruime tyd nie weerkaats nie. Wissel word gebruik om 'n knoppieverandering aan te dui. Die toonbankies word gebruik vir … tel hoe lank daar nie 'n weiering was nie.

Delta dui 'n verskil aan tussen die inset en die afgeskaande toestand. Slegs as daar 'n verskil is, sal die teller tel. die toonbank sal herstel word wanneer 'n weiering opgespoor word (delta is 0).

Stap 8: Die resultaat

Image
Image

As alles goed verloop, moet u nou 'n werkende sleutelbord hê om Osu te speel! op. Ek persoonlik het glad geen vertraging opgemerk nie. Laat weet my asb. Vra ook gerus iets as daar enige vrae is.

Die vorige vermeldings oor 'n V2 is nie bedoel as 'n belofte nie, moenie hierdie projek uitstel nie, want u wil op V2 wag.

Ek hoop jy geniet jou sleutelbord!

Osu! naam: Thomazzz3

Probleemoplossing

As u dink dat u probleme ondervind met u sleutelbord, maak eers 'n teksredakteur oop en druk 'n kort tydjie op elke toets.

Werk een of meer sleutels nie?

Dit is moontlik dat u 'n skakelaar intern vernietig het terwyl u soldeer. As u 'n multimeter op kontinuïteit/piep het, plaas dit parallel met die skakelaar terwyl die Arduino nie gekoppel is nie en druk op die sleutel. Dit moet piep.

Pas die karakters wat jy so pas getik het by die sleutels wat jy in Osu opgestel het! ?

Verander die karakters in die arduino -kode in die eerste 3 #Defines ('' is noodsaaklik!).

Of verander u Osu! instellings om die gekonfigureerde sleutels te gebruik.

Word een of meer sleutels 'n paar keer herhaal?

Die afbreekbaan werk waarskynlik nie vir u skakelaars nie of is nie korrek gesoldeer nie. Gaan u soldeeraansluitings na. Probeer 'n kapasitorwaarde van 1uF as dit steeds voorkom. Dit sal baie moeilik wees vir die PCB -gebruikers.

As u probleme ondervind met u LED's

Flikker die LED's?

'N Soldeeraansluiting kan los wees. As u die PCB gebruik, bevestig dat die soldeerbuis regtig op die afdrukblok gevloei het.

Werk nie een van die LED's nie of stop 'n sekere aantal LED's nie?

Kyk of daar 'n kort rukkie is tussen die verbindings van die eerste LED (volg spore) en kyk of daar goed gekoppelde blik op die uitsette van die Arduino en weer die eerste LED is. As dit korrek bevestig en steeds gebrekkig is, moet u moontlik die eerste LED vervang.

As dit herstel, herhaal dit indien nodig vir die volgende LED's.

Aanbeveel: