Sommario:

Osu! Tastiera: 8 passaggi (con immagini)
Osu! Tastiera: 8 passaggi (con immagini)

Video: Osu! Tastiera: 8 passaggi (con immagini)

Video: Osu! Tastiera: 8 passaggi (con immagini)
Video: BATTAGLIA EPICA FINALE CONTRO L'UOMO GELATO!! | Ice Scream 8 2024, Dicembre
Anonim
Osu! Tastiera del computer
Osu! Tastiera del computer

Di recente ho iniziato a giocare a un gioco ritmico chiamato osu! e dopo aver visto un video di una mini tastiera commerciale ho pensato che sarebbe stato un progetto divertente progettarne una da solo. Non molto tempo dopo, ho deciso che sarebbe stata una buona idea metterlo su instructables come mio primo progetto.

Se vuoi replicare questo progetto esattamente all'ultima istruzione, allora sii mio ospite, ma alcune delle decisioni che ho fatto non si basano sul prezzo più basso o sulla migliore qualità. Alcuni componenti sono scelti quasi esclusivamente perché li avevo in giro. Se riesci a gestirlo, ti incoraggio a personalizzare il tuo progetto.

Nota 1: vengono utilizzati componenti SMD (piccola elettronica), quindi se si replica questo progetto sono richieste abilità di saldatura. forse verrà aggiunta una versione facile da saldare, ma questi led non vengono forniti in un pacchetto con foro passante

Nota 2: ho aggiornato il codice più volte e ora sono alla versione 3ish. Lascio tutto il codice online ma ti consiglio di usare l'ultima versione. Al momento non ha la funzionalità principale, ma dovrebbe essere quella più performante.

Passaggio 1: materiali e spiegazioni

Materiali e spiegazioni
Materiali e spiegazioni

A seconda di come realizzi il tuo progetto potresti aver bisogno di componenti diversi, ma questi componenti sono quelli che ho usato. Se hai tempo e vuoi risparmiare, ordina il modulo aliexpress e non ordinare il PCB.

1 Arduino pro micro + cavo USB

3 interruttori Kailh BOX rossi

3 resistore da 10k (0805 SMD)

3 condensatore da 100nF (0805 SMD)

4 LED RGB APA102 (5050 SMD)

3 tasti

1 Circuito stampato (PCB) fornito in questo progetto

1 custodia stampata in 3D fornita in questo progetto

Perché uso un Arduino pro micro?

La maggior parte delle schede Arduino come Uno (Atmega328) non ha il supporto nativo per la comunicazione USB. Sì, puoi programmarli su USB molto facilmente e penso che ci siano soluzioni alternative, ma mi piace mantenerlo semplice quando si tratta di comunicazione USB e non so se le soluzioni alternative sono altrettanto reattive. Queste schede utilizzano un chip esterno per rendere possibile la comunicazione USB, mentre Arduino pro micro (Atmega32U4) lo ha integrato.

Gli interruttori

Ci sono molti interruttori meccanici che puoi usare. Lineare, tattile o scattante di Kailh o Cherry MX. Scegli quello che preferisci. Ho usato gli interruttori Kailh perché erano economici su Ailexpress. Se scegli di utilizzare il PCB avrai bisogno degli switch Kailh BOX. Il colore determina la sensazione.

I componenti elettronici

Non c'è molto da spiegare su di loro in questo capitolo, ma se non si utilizza il PCB, consiglierei solo normali componenti con foro passante per facilitare la saldatura. Purtroppo i led utilizzati non sono disponibili in confezioni con foro passante. Inoltre, non consiglierei di utilizzare fili su pacchetti SMD a meno che tu non sia molto sicuro delle tue capacità di saldatura. Anche per SMD su un PCB sono richieste abilità di saldatura "avanzate".

L'alloggio

Fornisco un alloggio in questo progetto, ma in questo momento è imperfetto. Sono necessarie modifiche per montare i bulloni, le aperture per i led non sono ottimali, l'arduino è esposto e occorre ritagliare una parte per l'inserimento dell'USB. In futuro potrebbe essere aggiunto un nuovo alloggio. Se hai una stampante 3D, vai avanti e stampala, ma per favore non fare di tutto per stampare questa custodia difettosa se non lo fai e usa solo una sorta di scatola del progetto.

Passaggio 2: lo schema

Lo schema
Lo schema

Lo schema di questo progetto è piuttosto semplice, ma voglio spiegare i componenti per le persone interessate e che non conoscono questa implementazione.

Cambia le connessioni ad Arduino

Gli interruttori sono collegati ai pin 0, 2 e 3 di Arduino perché questi pin possono essere utilizzati come interrupt esterni. Questo è ulteriormente spiegato nella sezione del codice.

Il circuito antirimbalzo

Sul lato sinistro dello schema c'è un circuito che viene copiato 3 volte. Questo circuito viene utilizzato per l'antirimbalzo dell'interruttore. Per sapere cos'è il rimbalzo devi capire il rimbalzo dell'interruttore e non è difficile da capire.

Prima guarda questa simulazione per dipingere una prima immagine (fai clic sull'interruttore velocemente e guarda il segnale qui sotto)

Quando si preme o si rilascia un interruttore, questo rimbalza e il segnale si alterna tra alto e basso un paio di volte per alcuni millisecondi. Un Arduino è davvero veloce e legge tutti gli alti e bassi in questo breve tempo. Il programma invierà una pressione o un rilascio di un tasto ogni volta che viene letto un valore massimo o minimo, quindi ad ogni pressione il tuo computer riceverà più pressioni di tasti. Non è l'ideale per un gioco ritmico.

Questo circuito antirimbalzo rallenterà il fronte di discesa del segnale. Il segnale ad Arduino non sarà in grado di cambiare velocemente come si verifica il rimbalzo, quindi verrà letto come una pressione. Non preoccuparti che cada al rallentatore per la prossima stampa reale perché lo farà.

Avanzate:

L'Atmaga32U4 legge un minimo digitale a 0,2 Vcc - 0,1 V = 0,9 volt. La tensione del condensatore in ogni momento della sua scarica è Vcc * e^(-t/RC). Se misuri un tempo di antirimbalzo diverso sul tuo interruttore, puoi calcolare i valori del resistore e del condensatore.

modulo formula

I LED

I led rgb sono led APA102 indirizzabili singolarmente tramite orologio e linea dati. Non sono necessari componenti esterni per farli funzionare. Per molti LED dovresti usare un condensatore parallelo a 5 volt e massa ma con solo 4 LED non ti serve.

Passaggio 3: il design della scheda

Il design della tavola
Il design della tavola

Il PCB è stato progettato in JLCPCB. Non sono sponsorizzato da loro, ma per prototipi economici fanno ottimi PCB. Per 2 dollari ottieni 10 della stessa tavola, ma la spedizione era di circa 11 dollari per me. Se non desideri necessariamente l'illuminazione rgb e hai intenzione di realizzarne solo una, dovresti considerare di realizzare la tua tastiera senza PCB.

Il design della scheda era piuttosto semplice. Avevo solo bisogno di aggiungere un componente per gli interruttori, ma dopo aver visto alcuni video ci ho preso la mano. L'unico difetto che ho notato è che il posizionamento dei fori è un po' troppo vicino agli interruttori.

Per ordinare il PCB vai su https://jlcpcb.com/ e scegli l'opzione a 2 strati. Ti chiederà un file Gerber. scarica il file ".zip" e trascinalo nella finestra. Non è necessario decomprimerlo. Le impostazioni dovrebbero andare bene e puoi andare avanti e completare l'ordine.

Passaggio 4: Suggerimenti per la progettazione e l'assemblaggio del case

Suggerimenti per la progettazione e l'assemblaggio del case
Suggerimenti per la progettazione e l'assemblaggio del case
Suggerimenti per la progettazione e l'assemblaggio del case
Suggerimenti per la progettazione e l'assemblaggio del case
Suggerimenti per la progettazione e l'assemblaggio del case
Suggerimenti per la progettazione e l'assemblaggio del case
Suggerimenti per la progettazione e l'assemblaggio del case
Suggerimenti per la progettazione e l'assemblaggio del case

Design

Come accennato in precedenza, il mio design è imperfetto ma puoi comunque stamparlo se lo desideri. il design è stato realizzato in Fusion 360. È un software di modellazione 3D gratuito e con la mia esperienza di inventore e solidworks è stato abbastanza facile lavorare. I cerchi agli angoli della custodia servono a prevenire il distacco dal piano di stampa.

Se fai il tuo caso solo una cosa è veramente importante. I tuoi interruttori devono essere posizionati saldamente e non possono essere spostati. Ho fornito le immagini dei ritagli quadrati con le dimensioni in modo da poterlo utilizzare per il tuo design supponendo che tu usi gli interruttori Kailh BOX.

Assemblea

Ora hai tutti i componenti necessari per assemblare. C'è un ordine per assemblare questa prima versione perché gli interruttori sono saldati.

1. Saldare i componenti SMD. questi sono i resistori, i condensatori e i LED.

2. Saldare Arduino pro micro.

3. Posizionare i 3 interruttori nella piastra di copertura stampata in 3D prima della saldatura. La piastra di copertura non può essere rimossa dopo aver saldato gli interruttori. La dissaldatura degli interruttori non è consigliata e potrebbe distruggerli.

4. Ora saldare gli interruttori in posizione. Fallo il più rapidamente possibile perché gli interruttori di plastica possono fondersi e rovinarli o ridurre drasticamente il loro numero di clic.

5. Posizionare la piastra di copertura assemblata nella custodia stampata in 3D e fissarla con nastro adesivo o utilizzare bulloni se non interferiscono con i cappucci dei tasti.

6. Posiziona i keyCaps sugli interruttori e il gioco è fatto.

Raccomandazioni

Dissaldare o mascherare i LED sull'arduino dopo aver caricato il codice. I led sono belli da avere se il tuo codice non viene caricato, ma non sono belli da vedere come un prodotto finito. Sono richieste abilità e pinzette appuntite.

Anche alcuni piedini di presa sul fondo sono piacevoli per antiscivolo e lasciano trasparire la luce rgb.

Passaggio 5: il codice V1 (rimbalzo hardware)

Il codice V1 (rimbalzo hardware)
Il codice V1 (rimbalzo hardware)
Il codice V1 (rimbalzo hardware)
Il codice V1 (rimbalzo hardware)

Il codice per questo progetto non è adatto ai principianti, quindi se stai appena iniziando a programmare in arduino, questo codice potrebbe spaventarti un po'. Comunque cercherò di spiegare cosa sta succedendo nel miglior modo possibile. Alcune cose sono spiegate più avanti in questo tex quindi se hai domande per favore leggi prima tutto per intero.

Caricamento del codice

Prima scarica tutti e 3 i file ".ino" e mettili in una cartella. Se non hai l'IDE Arduino, scaricalo gratuitamente dal sito ufficiale di Arduino.

Collega il tuo Arduino al PC e apri "OSU_Keyboard_code_V1.ino". Nella scheda degli strumenti seleziona "Arduino/Genuino Micro". Anche in Strumenti selezionare la porta COM corretta. Questo a volte può cambiare. Per caricare il codice sul tuo Arduino, fai clic sulla freccia in alto a sinistra dello schermo e attendi finché non ti dice che è stato completato in basso a sinistra.

OSU_Keyboard_code_V1

Includere e definire

Per prima cosa devi includere la libreria della tastiera. Ciò rende possibile utilizzare Arduino come tastiera.

Successivamente definisco alcuni valori. Define è proprio come una variabile ma non possono cambiare mentre il programma è in esecuzione. I primi 9 sono per il carattere della tastiera, il numero del pin di Arduino e i bit della porta.

Quindi i bit della porta dei dati LED e dell'orologio.

Anche il numero di led è definito e una variabile per l'angolo della ruota dei colori.

Impostare

Questa parte del codice verrà eseguita solo una volta quando l'arduino è collegato.

Innanzitutto i pin di clock e dati dei LED sono impostati come uscite e i pin di commutazione come ingressi. Questa è la versione avanzata di pinMode(). Se sei interessato, cerca "manipolazione diretta delle porte".

Keyboard.begin() avvia semplicemente la connessione USB come tastiera.

I successivi 3 interrupt sono collegati ai pin dello switch. Ogni volta che viene rilevata una modifica sul pin dell'interruttore, verrà eseguito un piccolo programma. Questo programmino sarà realizzato più avanti.

Ciclo continuo

Questa parte si ripeterà continuamente mentre l'arduino è alimentato.

Lo uso solo per cambiare e aggiornare il colore dei LED.

Interruzioni

Qui vengono eseguiti i piccoli programmi, che verranno eseguiti solo quando viene rilevata una modifica sui pin dell'interruttore. Sono identici tranne per il pin a cui reagiscono.

Innanzitutto verifica se il pulsante è premuto o rilasciato e invia il comando da tastiera corretto.

LED (spiegato in un ordine diverso)

Se sei curioso di sapere come vengono controllati i LED dovresti guardare la scheda tecnica dell'APA102.

Un bit

Questa è di nuovo la versione per la manipolazione diretta delle porte della scrittura digitale.

Innanzitutto controlla se deve inviare uno 0 o 1 e rispettivamente tira il pin dei dati in basso o in alto. Quindi scrive il pin dell'orologio in alto molto corto e lo scrive di nuovo in basso.

OneByte

Questo ripete oneBit 8 volte con un ciclo "for". Legge il primo bit in un byte e passa il suo valore alla funzione oneBit e fa lo stesso per i successivi 7 bit.

LedData

Questo ripete oneByte 4 volte per fornire i dati necessari per un led. Il primo byte inizia con 111xxxxx e un valore di luminosità a 5 bit al posto di xxxxx. La luminosità può essere impostata da 0 a 31 (2^5 = 32 livelli).

I successivi 3 byte sono per i valori blu, verde e rosso. Un byte per ogni colore.

ColoreRuotaQuestoLed

Questa funzione chiama ledData gli dà i colori RGB a seconda di un angolo nella ruota dei colori.

Il valore a 16 bit è diviso in 6 sezioni equidistanti di 60 gradi. Guardare le immagini potrebbe aiutarti a capire meglio.

(viene fornita anche una versione a 8 bit ma commentata perché troppo tremolante)

InizioFineFrame

Il frame iniziale deve essere utilizzato ogni volta che si desidera inviare nuovi colori ai led e si desidera aggiornare il colore effettivo dei led

Uso solo il frame iniziale perché il frame finale non è necessario. Il frame iniziale è 4 byte di 0. Il frame finale è 4 byte di 255 (11111111).

Passaggio 6: il codice V2 (software antirimbalzo con timer)

Il codice V2 (software antirimbalzo con timer)
Il codice V2 (software antirimbalzo con timer)

Dopo un po' di gioco ho notato alcuni problemi di doppio tocco con l'hardware antirimbalzo. Questo potrebbe essere risolto con resistori o condensatori di altro valore, ma poiché i pulsanti e il coperchio non sono rimovibili, ho pensato che l'antirimbalzo del software sarebbe stata una buona soluzione. L'antirimbalzo software dovrebbe funzionare indipendentemente dal fatto che l'antirimbalzo hardware sia implementato o meno. Nella mia configurazione attuale non potevo rimuovere il coperchio, quindi ho lasciato i resistori e i condensatori al loro posto.

Non spiegherò il codice così ampiamente come la versione precedente perché è un po' più difficile da spiegare.

Fondamentalmente la maggior parte del codice funziona allo stesso modo e il codice del led non viene toccato. quello che è cambiato è che gli interrupt esterni non usano più le funzioni di arduino. Ora funziona in puro codice C. E ora ciò che viene aggiunto è l'interruzione del software. Per questo ho usato i timer AVR per aspettare un certo periodo di tempo fino a quando il rimbalzo si è fermato. Poiché i timer sono basati sull'interruzione, il tempo di decompressione non è influenzato da nulla che accade nel ciclo.

L'unico aspetto negativo che mi viene in mente è che le funzioni di ritardo di arduino non possono più essere utilizzate. Poiché le funzioni di ritardo utilizzano il timer 0 e questo programma utilizza il timer 0 per l'antirimbalzo.

Nell'immagine puoi vedere come funziona approssimativamente il codice. Il mem bit indica se un timer è in esecuzione. Ciò che non è raffigurato è il caso in cui alla fine della pressione del pulsante l'ingresso è basso. In questo caso verrebbe inviato solo un tasto premuto mentre il pulsante è già rilasciato. Ciò significa che il tasto verrà tenuto premuto per quanto riguarda il computer. Per questa rara eccezione verrà effettuato un controllo allo scadere di un timer. Se allo scadere di un timer il pulsante non viene premuto, verrà inviato un comando di rilascio chiave.

Passaggio 7: il codice V3 (software antirimbalzo con contatore verticale) (consigliato) (nessun LED)

Il codice V3 (software antirimbalzo con contatore verticale) (consigliato) (nessun LED)
Il codice V3 (software antirimbalzo con contatore verticale) (consigliato) (nessun LED)

Questo codice ha ANCHE una versione in cui non sono necessarie resistenze di pull down. Assicurati di collegare ciascun pulsante all'ingresso ea GROUND! Viene utilizzato il pull-up integrato

Ho anche riscontrato alcune presse non registrate nel codice V2. Penso che il codice sia diventato troppo complesso con il suo timer e l'interrupt esterno e potrei aver perso alcune eccezioni. Per questo motivo ho iniziato da zero con la ricerca su Internet di metodi di antirimbalzo del software.

(onestamente, almeno la metà di questo progetto è diventato un pulsante antirimbalzo a questo punto)

Dopo un po' di ricerche mi sono imbattuto in questo post:

www.compuphase.com/electronics/debouncing….

Ad essere onesti, mi ci è voluto un po' di tempo per capire appieno come funziona esattamente. Implica alcune manipolazioni di bit piuttosto complesse, ma cercherò di renderlo il più semplice possibile. Tuttavia le mie spiegazioni saranno solo un'aggiunta al post, quindi dovresti almeno leggere i "contatori verticali", "un'implementazione annotata" e "riduzione della latenza".

La mia spiegazione

Il diagramma temporale (realizzato in WaveDrom) che ho aggiunto dovrebbe rendere almeno un po' più comprensibile questo bit di matematica difficile da capire. Nota che l'immagine ha 2 bit di conteggio, ma il mio codice ne ha 3. Ciò significa un tempo di antirimbalzo più lungo.

Un bit per valore

Con l'implementazione del contatore verticale è possibile eseguire l'antirimbalzo di più pulsanti contemporaneamente, in parallelo. Tutti i valori sono di tipo Byte(uint8_t) e sono composti da 8 bit. non ci interessa quale valore contenga uno di questi byte, ma piuttosto siamo interessati ai bit da soli. Ogni pulsante di cui eseguire l'antirimbalzo utilizza solo un bit di ogni byte. Il primo pulsante utilizza solo il primo bit di ogni byte, il secondo pulsante utilizza il secondo bit ecc.

Tutto allo stesso tempo

Utilizzando la matematica dei bit è possibile eseguire questi antirimbalzi dei pin in parallelo. E, sebbene la matematica dei bit sia piuttosto complicata, è molto efficiente per il processore.

Con un tipo di dati a 8 bit è quindi possibile farlo per 8 pulsanti. L'utilizzo di tipi di dati più grandi consente più antirimbalzi contemporaneamente.

il rimbalzo

La routine antirimbalzo viene eseguita ogni 1 millisecondo con un'interruzione del timer.

quando il pulsante viene premuto, il buttonState, che è lo stato antirimbalzo, andrà immediatamente basso, indicando la pressione di un pulsante. Per rilevare un rilascio, il pulsante deve essere alto abbastanza a lungo, indicando che non ha rimbalzato per un certo tempo. Toggle viene utilizzato per indicare un cambiamento di pulsante. I bit di conteggio vengono utilizzati per …. contando da quanto tempo non c'è stato un rimbalzo.

Delta indica una differenza tra l'ingresso e lo stato antirimbalzo. Solo quando c'è una differenza il contatore conterà. il contatore verrà azzerato quando viene rilevato un rimbalzo (delta è 0).

Passaggio 8: il risultato

Image
Image

Se tutto è andato bene, ora dovresti avere una tastiera funzionante per suonare Osu! Su. Personalmente non ho notato alcuna latenza. Se lo fai per favore fammi sapere. Inoltre, se ci sono domande, sentiti libero di chiedere qualsiasi cosa.

Le precedenti menzioni su un V2 non sono intese come una promessa, quindi non rimandare questo progetto perché vuoi aspettare V2.

Spero che ti piaccia la tua tastiera!

Osu! nome: Thomazzz3

Risoluzione dei problemi

Se pensi di avere problemi con la tastiera, apri prima un editor di testo e premi ogni tasto una volta per un breve periodo.

Una o più chiavi non funzionano?

È possibile che tu abbia distrutto un interruttore internamente durante la saldatura. Se hai un multimetro mettilo in continuità/beep, mettilo in parallelo allo switch mentre Arduino non è connesso e premi il tasto. Dovrebbe suonare.

I caratteri che hai appena digitato corrispondono ai tasti che hai configurato in Osu! ?

Cambia i caratteri nel codice arduino nei primi 3 #Definizioni (' ' è necessario!).

Oppure cambia il tuo Osu! impostazioni per utilizzare i tasti configurati.

Uno o più tasti vengono ripetuti più volte?

Il circuito antirimbalzo probabilmente non funziona per i tuoi interruttori o non è saldato correttamente. Controlla le tue connessioni di saldatura. Se si verifica ancora, prova un valore del condensatore di 1uF. Questo sarà molto difficile per gli utenti PCB.

Se hai problemi con i tuoi LED

I LED lampeggiano?

Una connessione di saldatura potrebbe essere allentata. Se si utilizza il PCB, verificare che lo stagno di saldatura sia effettivamente fluito sul pad sulla stampa.

Nessuno dei led funziona o da un certo numero di led smette di funzionare?

Verificare la presenza di cortocircuiti tra le connessioni del primo LED (seguire le tracce) e verificare la presenza di stagno ben collegato sulle uscite dell'Arduino e di nuovo sul primo LED. Se confermato corretto e ancora difettoso, potrebbe essere necessario sostituire il primo LED.

Se questo risolve, ripetere per i LED successivi, se necessario.

Consigliato: