Sommario:

Controller di gioco USB per macchina per esercizi: 8 passaggi (con immagini)
Controller di gioco USB per macchina per esercizi: 8 passaggi (con immagini)

Video: Controller di gioco USB per macchina per esercizi: 8 passaggi (con immagini)

Video: Controller di gioco USB per macchina per esercizi: 8 passaggi (con immagini)
Video: 4 SITI PAZZESCHI CHE NON DOVRESTI MAI VISITARE 2024, Luglio
Anonim
Controller di gioco USB per macchina per esercizi
Controller di gioco USB per macchina per esercizi
Controller di gioco USB per macchina per esercizi
Controller di gioco USB per macchina per esercizi
Controller di gioco USB per macchina per esercizi
Controller di gioco USB per macchina per esercizi
Controller di gioco USB per macchina per esercizi
Controller di gioco USB per macchina per esercizi

Per incoraggiare l'esercizio in sé e in famiglia, ho realizzato un adattatore che emula un adattatore per controller di gioco USB standard ma controlla la velocità di movimento del gioco pedalando su una macchina ellittica o una cyclette. È particolarmente carino per i giochi di corse. Sicuramente motiva a pedalare velocemente quando si gioca ai giochi di corse.

L'hardware principale è una scheda di sviluppo STM32F103C8 "pillola nera" da $2 con il core Arduino stm32duino e una libreria USB HID che ho sviluppato sulla base del fork del core di libarra111. L'STM32F1 è veloce ed economico e ha il supporto USB a piena velocità, quindi è perfetto per il progetto.

Per utilizzarlo è necessario attingere al sensore di rotazione dell'ellittica o della cyclette (se il sensore di rotazione funziona diversamente da quelli delle nostre macchine - circa 3v, attivo basso - potrebbe essere necessario modificare il circuito e/o il codice).

La velocità di rotazione ellittica/bicicletta controlla il cursore del controller. Inoltre, puoi collegare un controller Wii Nunchuck o Gamecube standard all'adattatore per il movimento del joystick, i pulsanti, ecc. Ci sono molte diverse modalità di controllo. Ad esempio, i bambini più piccoli potrebbero dover aumentare leggermente la velocità e alcuni giochi potrebbero utilizzare uno schema di controllo diverso. Esistono numerosi schemi di controllo incorporati nel software e altri possono essere facilmente aggiunti nel codice. Il dispositivo può emulare un controller di gioco USB, una tastiera, un mouse, un controller XBox 360 o una combinazione dei primi tre.

La direzione del movimento non è attualmente rilevata: per passare dal movimento in avanti a quello indietro, l'adattatore dispone di un interruttore a levetta. (In alternativa, si potrebbe utilizzare un sensore magnetico ad effetto hall come questo dispositivo e modificare il circuito e il software.)

L'adattatore funziona come un controller USB standard, quindi puoi usarlo con Windows, Linux, OS X, Android, ecc.

Come bonus, l'adattatore ha tutte le funzioni di questo progetto, funzionando come un adattatore Gamecube con tutte le funzioni, permettendoti di utilizzare i controller Gamecube su un computer, incluso il controllo di giochi con tappetini da ballo Dance Dance Revolution compatibili con Gamecube/Wii.

Il costo è inferiore a circa $ 10, più custodia (ho un design stampabile in 3D), fili e saldatura. Parti:

  • Scheda di sviluppo "Black Pill" stm32f103c8 ($ 2 su Aliexpress)
  • Presa Gamecube ($ 1,60 su Aliexpress, per una prolunga Gamecube che può essere tagliata)
  • Scheda di breakout del socket Nunchuck ($ 0,51 su Aliexpress; cerca Wiichuck)
  • Piccolo interruttore a levetta a due posizioni (meno di $ 1 su Aliexpress)
  • La tua scelta di connettori maschio e femmina a due conduttori (circa $ 1 su Aliexpress se usi connettori a barilotto di alimentazione da 5,5 mm); hai bisogno di un connettore femmina per macchina ginnica
  • 2 interruttori tattili (meno di $ 0,50 su Aliexpress)
  • 4 LED rossi (meno di $ 0,50 su Aliexpress; potresti anche usare un piccolo schermo LCD Nokia)
  • condensatori: 10uF elettrolitico e 100nF. opzionale
  • resistori: 1 x 100K, 2 x 10K, 1 x 1K, 4 x 220ohm
  • piccola scheda proto (meno di $ 1 su Aliexpress).

Un Nunchuck va bene per l'uso con una sola mano con una macchina ellittica. Su una cyclette, puoi usare un adattatore a due mani come quello del Gamecube. Se desideri utilizzare solo una di queste due opzioni di controllo, puoi utilizzare meno connessioni.

Hai anche bisogno di un computer, un saldatore e un multimetro. Avrai anche bisogno di un bridge UART-to-USB (ho usato un Arduino Mega che avevo per un altro progetto, oppure puoi acquistare un modulo CP2102 su Aliexpress per un dollaro) per installare un bootloader sulla tua pillola nera per usarlo con il ambiente Arduino, oppure puoi spendere un paio di dollari in più e ottenere la scheda di sviluppo di RobotDyn con un bootloader Arduino precaricato.

Permettetemi di aggiungere che sto partecipando al concorso Wheels, perché è un modo per collegare le ruote virtuali nei giochi di corse automobilistiche su un computer con le ruote fisiche di cyclette ed ellittiche.

Passaggio 1: tocca il sensore di rotazione

Tocca nel sensore di rotazione
Tocca nel sensore di rotazione
Tocca nel sensore di rotazione
Tocca nel sensore di rotazione
Tocca nel sensore di rotazione
Tocca nel sensore di rotazione
Tocca nel sensore di rotazione
Tocca nel sensore di rotazione

Entrambe le macchine per esercizi che ho hackerato hanno una console che mostra la velocità. Ci sono fili che corrono tra la console e il corpo della macchina. Devi attingere a questi fili per accedere ai dati. Se le tue macchine sono come le mie, la console può essere rimossa e lì trovi un cavo a nastro (ellittico) o due fili (bicicletta). Ho sfruttato questi scollegando i fili e collegandoli con singoli ponticelli maschio-femmina a cui potevo attingere.

Usa tentativi ed errori e un multimetro per identificare una coppia di fili tra i quali ha un impulso di tensione durante una rotazione completa.

In sostanza il trapano è questo: agganciare il multimetro ad una coppia di fili (facendo attenzione a non cortocircuitare nulla) con la macchina in funzione, e ruotare molto lentamente i pedali. In entrambe le nostre macchine c'è una coppia di fili tra i quali normalmente la tensione è intorno a +3V, ma durante un breve tratto della rotazione cade a massa: questo è uno schema attivo-basso. Potresti scoprire che la tua macchina ha uno schema attivo-alto in cui la maggior parte della rotazione è macinata e l'impulso è positivo, quindi dovrai modificare lo schizzo Arduino.

Se pensi che ci sia qualche possibilità che uno qualsiasi dei cavi nella console con cui hai a che fare sia di rete AC, ti consiglio di fermarti a meno che tu non sappia davvero cosa stai facendo. Fortunatamente, la nostra cyclette è alimentata a batteria e la nostra ellittica si collega a una verruca a muro, quindi ci sono solo circa 12 V CC intorno alla console.

Nel caso della cyclette, è stato davvero facile. C'erano solo quattro fili. Due erano per il cardiofrequenzimetro e due per il sensore di rotazione.

L'ellittica aveva molti più cavi, quindi c'era più lavoro. Il metodo della forza bruta è questo. Collega un multimetro a una coppia di cavi. Fai lentamente una rotazione completa (o un po' di più per ogni evenienza) sui pedali e vedi se c'è un calo o un salto di tensione. Se sì, ce l'hai. In caso contrario, ripetere per un'altra coppia. Sono molti tentativi ed errori: per 13 fili, sono 78 rotazioni.

Ecco un trucco che potrebbe aiutarti ad accelerare la ricerca della coppia di cavi giusta. Potresti sperare che la tua macchina, come la mia, abbia la tensione del rilevatore normalmente alta con un impulso basso. Se è così, se lasci i pedali in una posizione casuale, hai buone probabilità che i due fili del rilevatore abbiano circa +3V o +5V tra di loro. Quindi fai il test di rotazione del pedale solo per quelle coppie di fili che hanno +3V o +5V tra di loro.

Un altro trucco. Potresti essere in grado di identificare dove nella rotazione del pedale si attiva il sensore di rotazione. Ad esempio, la tua macchina potrebbe far lampeggiare qualcosa sullo schermo, o aggiornare la visualizzazione della velocità, o attivarsi dalla modalità di sospensione, o emettere un segnale acustico. In tal caso, allontanare i pedali di circa 1/3 di rotazione, quindi cercare coppie di cavi con 3-5 V tra di loro e testarli spostando i pedali nella posizione in cui si attiva il sensore.

Se riesci a identificare il filo di terra, puoi accelerare considerevolmente il processo, dal momento che devi solo andare tra la terra e ogni filo sconosciuto. Stranamente, però, sulla nostra ellittica la massa dell'alimentatore non sembrava essere la stessa del rilevatore di rotazione.

Una volta identificati i fili, prendine nota. Assicurati di notare:

  • il livello di alta tensione: se è più di circa 3,3 V ma non più di 5 V, ti consigliamo di cambiare il circuito per utilizzare il pin A9 invece di A7 per il rilevamento della rotazione poiché il pin A9 ha una tolleranza di 5 V e A7 no, e modifica una riga nel mio schizzo; se è più di 5V, dovrai aggiungere un partitore di tensione
  • se l'impulso di rilevamento della rotazione è basso o alto: se l'impulso è alto, dovrai modificare una linea nel mio schizzo Arduino.

Se si dispone di un oscilloscopio e la macchina per esercizi è alimentata a batteria, è possibile utilizzare anche l'oscilloscopio anziché il multimetro. (Se la macchina per esercizi è collegata all'AC e lo stesso vale per il tuo oscilloscopio, devi conoscere i loop di massa e come evitarli. Fai attenzione!)

Passaggio 2: preparare la scheda di sviluppo

Preparare la scheda di sviluppo
Preparare la scheda di sviluppo
Preparare la scheda di sviluppo
Preparare la scheda di sviluppo
Preparare la scheda di sviluppo
Preparare la scheda di sviluppo

Salda i sei pin del ponticello centrali sulla tua pillola nera.

Se hai una scheda RobotDyn con il bootloader Arduino, collega B0- e B1- ai pin centrali e hai finito con il passaggio.

Altrimenti, ora devi installare il bootloader. Avrai bisogno di un bridge da UART a USB autonomo oppure puoi utilizzare un Arduino Uno o Mega per questo scopo. Sebbene la pillola nera funzioni a 3,3 V, i pin UART tollerano 5 V, quindi non preoccuparti se il tuo connettore funziona a 3,3 V o 5 V.

Se possiedi uno o un Mega, metti un cavo jumper tra RESET e GROUND. Questo trasforma l'Arduino in un bridge dedicato da UART a USB, tranne per il fatto che i pin TX/RX sono l'opposto di come sono solitamente su un connettore.

Scarica il binario del bootloader. Vuoi generic_boot20_pb12.bin. Su Windows, installare Flash Loader Demonstrator di ST. Su Linux (e forse OS X e anche Windows se preferisci gli strumenti da riga di comando), usa invece questo script Python, ma le mie istruzioni saranno per Windows.

Effettuare i seguenti collegamenti:

  • Da PA9 a UART bridge RX ("TX" se stai usando il trucco Arduino)
  • Da PA10 a UART bridge TX ("RX" se stai usando il trucco Arduino)
  • G alla terra del ponte UART

Mi piace usare le punte della sonda logica per effettuare le connessioni sul lato STM32, ma potresti anche saldare alcuni fili che puoi successivamente tagliare (o dissaldare se vuoi essere pulito).

Collega il tuo bridge UART al tuo computer. Accendi Black Pill tramite la sua porta USB (meglio se lo colleghi a un caricabatterie anziché al computer, poiché il computer probabilmente si lamenterà di un dispositivo USB non riconosciuto). Avvia il dimostratore di Flash Loader. Scegli la porta COM per il tuo bridge UART. Scegli "Rimuovi protezione" se disponibile. Scegli una versione flash da 64 kb anziché da 128 kb. E carica il binario del bootloader.

Togli tutto e poi sposta il jumper da B0+/center a B0-/center. Ora hai un bootloader che puoi usare con l'IDE di Arduino.

Passaggio 3: preparare Stm32duino nell'IDE di Arduino

Prepara Stm32duino in Arduino IDE
Prepara Stm32duino in Arduino IDE
Prepara Stm32duino in Arduino IDE
Prepara Stm32duino in Arduino IDE

Presumo che tu abbia installato l'ultimo IDE Arduino.

In Strumenti | Tavole | Boards Manager, installa il supporto per Arduino Zero (basta inserire Zero nella ricerca, fare clic sulla voce trovata, quindi Installa). Sì, non stai lavorando con uno Zero, ma questo installerà il compilatore gcc giusto.

Quindi, scarica il core stm32duino. Su Windows, consiglio di scaricare il file zip, poiché quando ho estratto i file (è vero, con svn), ho avuto alcuni problemi di permessi con i file nella directory degli strumenti di Windows che necessitavano di una correzione. Metti il ramo in Arduino/Hardware/Arduino_STM32 (così avrai cartelle come Arduino/Hardware/Arduino_STM32/STM32F1, ecc.) Su Windows, installa i driver eseguendo drivers\win\install_drivers.bat.

Installa la mia libreria USBHID: vai a Sketch | Includi libreria | Gestisci librerie e cerca USBHID. Fare clic su di esso e fare clic su Installa.

Installa la mia libreria GameControllersSTM32: vai a Sketch | Includi libreria | Gestisci librerie e cerca GameControllers. Fare clic su di esso e fare clic su Installa.

Passaggio 4: circuito

Circuito
Circuito
Circuito
Circuito
Circuito
Circuito
Circuito
Circuito

La mia configurazione utilizza quattro LED per indicare la modalità di emulazione corrente in binario (sì, si potrebbe usare un display LCD, ma avevo dei LED in giro quando l'ho costruito), due pulsanti per cambiare modalità su e giù (e fare qualche altro trucchi) e un interruttore a levetta per cambiare la direzione del movimento.

Inoltre, c'è un ingresso I2C dal Nunchuck e un connettore per il controller Gamecube. Se vuoi supportare solo uno di questi due, puoi semplicemente modificare gamecube.h nello schizzo e risparmiarti un po' di saldatura.

Ho usato un po' di scheda prototipi per montare i quattro LED di modalità e i due pulsanti di commutazione della modalità (su e giù), nonché un resistore di pull-up per i dati del Gamecube. Ho portato 3,3 V sulla scheda prototipi, ma non ho avuto bisogno di portare fuori terra, anche se puoi farlo se vuoi. Ho usato un altro piccolo pezzo di scheda prototipi per montare il connettore Nunchuck.

Taglia il cavo del Gamecube. Vuoi lavorare con il lato presa, quello a cui si collegherà il controller. Spellare i cavi per il collegamento.

Ora fai questi collegamenti secondo lo schema elettrico:

  • Condensatore da 10uF tra 3.3v e terra (con il lato negativo di qualsiasi elettrolitico a terra). Questo dovrebbe essere il più vicino possibile al chip, quindi l'ho saldato direttamente sulla scheda di sviluppo anziché sulla scheda prototipi. Per buona misura, puoi aggiungere un 100nF come ho fatto io, ma non sono sicuro che sia necessario.
  • Presa Gamecube #2 -- A6 su scheda stm32
  • Resistenza da 1Kohm tra la presa Gamecube n. 2 e 3,3 V sulla scheda stm32 (o sulla scheda prototipi)
  • Presa Gamecube #3 e #4 -- massa sulla scheda stm32
  • Presa Gamecube #6 -- 3.3V su scheda stm32 (o su scheda prototipi)
  • LED in serie con resistenza da 220ohm (o maggiore) tra A0 su scheda stm32 e 3,3V (estremità negativa (piatta) su PA0; estremità positiva su 3,3V)
  • Ripeti con LED + resistenza tra A1 e 3,3 V, A2 e 3,3 V e A3 e 3,3 V
  • Passaggio momentaneo tra A5 su scheda stm32 (modalità incremento) e 3,3V e un altro tra A4 e 3,3V (modalità decremento); questo interruttore incrementa il numero della modalità
  • Commuta tra A8 e 3.3V
  • terra della macchina per esercizi -- terra stm32
  • Segnale positivo della macchina per esercizi -- scheda stm32 A7 (nota che A7 va bene solo per 3,3 V; se la tua macchina per esercizi è 5 V, usa A9 e modifica gamecube.h)
  • Nunchuck ground (etichettato - sulla mia scheda adattatore) -- stm32 ground
  • Nunchuck +3.3V (etichettato +) -- stm32 3.3V
  • Nunchuck SDA (etichettato D) -- stm32 B7
  • Nunchuck SCL (etichettato C) -- stm32 B6
  • Resistenza da 10Kohm tra Nunchuck SDA e 3.3V su scheda stm32
  • Resistenza da 10Kohm tra Nunchuck SCL e 3.3V su scheda stm32.

Passaggio 5: installa Sketch

Installa schizzo
Installa schizzo
Installa schizzo
Installa schizzo

Scarica il mio schizzo dell'adattatore USB per Gamecube e caricalo nell'IDE di Arduino. Ci sono alcune opzioni da controllare in gamecubecontroller.h:

  • remove // davanti a #define ENABLE_EXERCISE_MACHINE (tutti devono farlo)
  • se era necessario spostare la connessione della macchina ginnica su A9, modificare da PA7 a PA9 nella riga const uint32_t rotationDetector = PA7
  • se l'impulso di rilevamento della rotazione della macchina per esercizi è alto, cambia #define ROTATION_DETECTOR_CHANGE_TO_MONITOR FALLING in #define ROTATION_DETECTOR_CHANGE_TO_MONITOR RISING
  • se non vuoi usare un Nunchuck, metti // davanti a #define ENABLE_NUNCHUCK
  • se non vuoi usare un controller Gamecube, metti // davanti a #define ENABLE_GAMECUBE.

Nell'IDE di Arduino, scegli Strumenti | Consiglio | Serie STM32F103C generica.

Premi il pulsante di caricamento della freccia a destra. Si noti che potrebbe essere necessario premere il pulsante di ripristino (o scollegare/collegare) la scheda al momento giusto se viene visualizzato un messaggio che indica che la scheda non è stata riconosciuta.

Passaggio 6: collegamento della macchina per esercizi

Collegamento della macchina per esercizi
Collegamento della macchina per esercizi
Collegamento della macchina per esercizi
Collegamento della macchina per esercizi
Collegamento della macchina per esercizi
Collegamento della macchina per esercizi
Collegamento della macchina per esercizi
Collegamento della macchina per esercizi

Unisci un jack per il collegamento della tua macchina per esercizi. Sulla nostra macchina ellittica, l'ho saldato, mentre sulla cyclette ho potuto utilizzare connettori dupont maschio e femmina. Sull'ellittica, ho praticato un foro sul lato della console per adattare la connessione. Sulla macchina per esercizi, ho solo dei fili che sporgono e una piccola scatola stampata in 3D (file OpenSCAD) all'esterno.

Passaggio 7: caso di progetto

Caso di progetto
Caso di progetto
Caso di progetto
Caso di progetto
Caso di progetto
Caso di progetto
Caso di progetto
Caso di progetto

Si può racchiudere il progetto in una piccola scatola di cartone, un contenitore tupperware o un involucro stampato in 3D personalizzato. Dato che ho una stampante 3D, ho optato per la custodia personalizzata. I file OpenSCAD e STL sono qui.

I piedini sono progettati per incollare (la supercolla funziona) sul fondo e per avere piedini di gomma appiccicosi attaccati al loro interno.

Ho anche incollato a caldo alcune chiusure a strappo sia sulla custodia del progetto che sulle macchine per esercizi.

Passaggio 8: utilizzare

Utilizzo
Utilizzo
Utilizzo
Utilizzo
Utilizzo
Utilizzo
Utilizzo
Utilizzo

I due pulsanti possono commutare tra un massimo di 16 diverse modalità di emulazione (puoi averne di più, in realtà, ma ci sono solo quattro LED nel progetto per visualizzare il numero della modalità). Le modalità di emulazione sono definite in gamecubecontroller.h nello sketch. Per la maggior parte dei giochi, puoi utilizzare la modalità 1, joystick a scorrimento unificato alla velocità del 100%. Il joystick emulato ha un cursore (in realtà due cursori, ma entrambi fanno la stessa cosa) che è controllato dalla rotazione della macchina ginnica. I pulsanti e il joystick stesso sono controllati dal controller Gamecube o dal Nunchuck. Su Windows, alcuni giochi supportano un controller XBox 360 ma non un joystick USB. Per quelli, usa la modalità 13 (premi il pulsante giù dalla modalità 1).

Le modalità 9 e 10 ti consentono di pedalare più lentamente e di ottenere comunque una depressione completa del cursore, il che è utile per i bambini o per le macchine per esercizi impostate su una resistenza maggiore. È inoltre possibile regolare le velocità in Exercisemachine.ino.

Ci sono molte altre modalità di emulazione. Un riferimento stampabile è incluso in modelist.pdf con lo schizzo.

Quando si pedala sulla macchina per esercizi, i LED sul progetto passano dalla visualizzazione del numero della modalità corrente alla velocità. Quando tutte e quattro le luci sono accese, la tua velocità è al massimo (il cursore emulato ha la massima estensione) - a quel punto, non ottieni alcun vantaggio nel gioco dall'andare più veloce. Inoltre, il LED blu sulla scheda STM32F1 è acceso quando tutto funziona, ma lampeggia quando si attiva il sensore di rotazione.

Per invertire il movimento, capovolgere l'interruttore di direzione sulla scatola dell'adattatore.

Su Windows, esegui joy.cpl per calibrare e vedere come funzionano le cose. Poiché è una seccatura dover pedalare molto velocemente per calibrare il joystick emulato, c'è un modo per barare per la calibrazione. Sul controller Gamecube, se rimani fermo per circa 10 secondi, puoi iniziare a utilizzare i pulsanti laterali per controllare gli slider del joystick emulato. Con il Nunchuck, mentre tieni premuto il pulsante della modalità meno, puoi invece utilizzare il joystick su/giù per controllare gli slider emulati.

Se vuoi una GUI per cambiare modalità di emulazione, su Windows lo sketch include mode.py, uno script Python con una GUI per cambiare modalità. Puoi anche invocare mode.py in un file batch che avvia un gioco.

Due giochi che ho scoperto che funzionano davvero alla grande con la macchina per esercizi sono Toybox Turbos e SuperTuxCart (gratuito).

L'adattatore include anche molte altre funzionalità di emulazione. Ad esempio, puoi usarlo come un semplice adattatore Nunchuck o Gamecube Controller, emulando joystick, tastiera (ad esempio frecce/WASD) e/o mouse. Ci sono molte modalità elencate in gamecubecontroller.h. Puoi anche collegare un pad compatibile con Dance Dance Revolution Gamecube/Wii e usarlo per giocare a giochi non progettati per esso, come Tetris, per ulteriore divertimento ed esercizio.

Consigliato: