Sommario:
- Passaggio 1: avrai bisogno di:
- Passaggio 2: smontare il controller
- Passaggio 3: incollare i componenti in posizione
- Passaggio 4: saldare i fili su
- Passaggio 5: programma Arduino
- Passaggio 6: rimontare il controller
- Passaggio 7: possibili miglioramenti
Video: Accelerometro/giroscopio per controller Xbox 360 Mod: 7 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
Ho giocato ad Assetto Corsa con il mio controller Xbox 360. Sfortunatamente, lo sterzo con lo stick analogico è molto ingombrante e non ho lo spazio per una configurazione delle ruote. Ho provato a pensare a come potrei inserire un meccanismo di sterzo migliore nel controller, quando mi è venuto in mente che avrei potuto usare l'intero controller come volante.
Lo stick analogico ha due potenziometri. Uno misura il movimento verticale e uno misura il movimento orizzontale. Mette 1,6 V attraverso ciascuno e misura la tensione prodotta dal tergicristallo per determinare quanto si è mosso lo stick. Ciò significa che è possibile controllare il movimento dello stick alimentando una particolare tensione al perno del tergicristallo. (maggiori informazioni qui:
Questa mod utilizza un Arduino per calcolare l'angolo dalle letture dell'accelerometro e convertirlo in movimento dello stick analogico tramite un DAC. Pertanto, dovrebbe funzionare con qualsiasi gioco che utilizza lo stick analogico come input.
Passaggio 1: avrai bisogno di:
Utensili:
- Saldatore
- Saldare
- Ventosa/treccia di saldatura
- Spelafili
- Un cacciavite, forse uno Torx a seconda delle viti nel controller (i miei sono a croce)
- Colla (preferibilmente non colla super forte in modo che possa essere smontata in seguito)
- Un adattatore da USB a seriale per programmare Arduino
Materiali:
- Controller Xbox 360 (eh!)
- Arduino Pro Mini (o un clone) (preferibilmente 3,3 V. Se usi la versione 5 V probabilmente avrai bisogno di un convertitore di tensione step-up)
- Un giroscopio/accelerometro MPU-6050
- Un DAC MCP4725 (due se si desidera controllare entrambi gli assi)
- Qualche filo sottile
- Una breadboard in modo da poter testare tutto prima di saldare (opzionale, ma consigliato)
Passaggio 2: smontare il controller
Ci sono sette viti che devi rimuovere. Sei di loro sono ovvi, ma il settimo è dietro un adesivo. Presumo che rimuoverlo annulli la garanzia, quindi procedi a tuo rischio. Molte guide dicono che hai bisogno di un cacciavite Torx, ma i miei sono a croce, quindi controlla il tuo controller.
Dopodiché, fai leva con attenzione sulla cover posteriore. Se togli la parte anteriore, i pulsanti fuoriescono e probabilmente andranno per tutta la stanza. Sollevalo dal basso. Quindi scollegare i due motori di vibrazione. (quello con il peso piccolo dovrebbe essere a sinistra e quello con il peso grande a destra) Estrarre il PCB e rimuovere i cappucci di gomma sugli stick analogici. Si staccano semplicemente.
La prossima cosa è rimuovere la levetta analogica sinistra in modo che non interferisca con il nostro input, ma il meccanismo del grilletto sinistro è d'intralcio. Per rimuoverlo, devi dissaldare i tre pin del potenziometro dalla parte anteriore della scheda, quindi sganciare il meccanismo dal PCB.
Quindi, dissaldare i 14 pin che tengono la levetta analogica sinistra. Quindi estrarre il bastone.
Passaggio 3: incollare i componenti in posizione
Noterai che c'è molto spazio tra il retro del PCB e il case. Ciò consente di inserire tutto l'hardware nella custodia senza rimuovere nulla.
L'ho capito solo dopo, ma questo sarebbe un buon momento per dissaldare il pulsante di reset sull'Arduino. Se non lo fai, premerà sul retro della custodia e farà smettere di funzionare il progetto se stringi troppo una delle viti durante il rimontaggio.
Ho incollato un sottile pezzo di carta sul retro di ciascun PCB per isolarlo, quindi l'ho incollato al PCB del controller. Ero riluttante a usare la colla, ma non riuscivo a pensare a un modo migliore per farlo.
Le posizioni nell'immagine è la migliore combinazione che ho trovato. L'Arduino è a sinistra, con il bordo con il pulsante di ripristino a filo contro il pezzo di plastica dal meccanismo di attivazione destro, con l'altro lato sotto il filo e con l'angolo il più vicino possibile al connettore bianco. C'è un leggero rigonfiamento nella custodia, ma non sono riuscito a trovare un posto migliore dove metterlo.
L'accelerometro è a destra del filo. Dovrebbe essere il più piatto e dritto possibile, altrimenti potresti dover scrivere del codice in seguito per compensare l'offset. Nota che ci sono alcuni pezzi di plastica sporgenti sul retro della custodia che devi stare attento a evitare. Ho scoperto che puoi mettere qualcosa di appiccicoso e colorato, come il rossetto, sui pezzi di plastica sporgenti e poi mettere la cover posteriore per vedere dove lascia i segni.
I DAC vanno nell'angolo in basso a sinistra. C'è abbastanza spazio qui per impilare due DAC, uno sopra l'altro, se vuoi controllare entrambi gli assi. Non è necessario incollarli. Rimarranno dove sono solo con le connessioni saldate. Se stai incollando una carta tra di loro, assicurati di tagliare la carta in modo da lasciare accessibili SCL, SDA, VCC e GND, perché ti accederai da entrambi i lati.
Se utilizzi due DAC, non dimenticare di cambiare il ponticello dell'indirizzo e disabilitare i resistori di pull up su uno di essi, come descritto qui: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -guida-collegamento-convertitore
Passaggio 4: saldare i fili su
Ora devi collegare tutto. VCC, GND, SDA e SCL di tutti i 2/3 dispositivi devono essere collegati rispettivamente a VCC, GND, A4 e A5 su Arduino. I DAC sono la parte più difficile. Se ne hai due, devi collegarli insieme, lasciando da qualche parte puoi collegare l'alimentazione e le linee all'accelerometro, mantenendo separati i fili di OUT.
Il pin OUT sul DAC deve essere collegato al pin sul PCB del controller che era per il pin del potenziometro orizzontale centrale per lo stick analogico. Cioè, dove c'era lo stick analogico, c'è una fila di tre pin in alto. Collegalo a quello centrale. Se hai un altro DAC collegalo al pin del potenziometro verticale (la riga a sinistra) allo stesso modo. Non sarai in grado di raggiungere i pin dal retro quando il grilletto viene sostituito, quindi devi far passare un filo nella parte anteriore della scheda. C'è un "muro" di plastica circolare attorno all'area della levetta analogica, ma fortunatamente c'è un comodo spazio in cui è possibile far passare i cavi. Assicurati che i cavi non intralcino il perno della vite sulla parte anteriore del case.
Il mio piano originale era di alimentare Arduino con i 5V dal cavo USB collegato al pin RAW, ma quando l'ho provato, non ha funzionato. L'Arduino non ha eseguito nulla e sia l'Arduino che il controller si sono spenti dopo pochi secondi. Tuttavia, ho scoperto che c'è un'uscita stabile a 3,3 V da due pin sulla parte anteriore della scheda vicino alla presa periferica nera, presumibilmente per alimentare le periferiche. Funziona sia con VCC che RAW, ma ho scelto VCC perché è già la tensione giusta e perché mi permette di saldarlo al filo VCC sul DAC che è già vicino alla parte inferiore della scheda e risparmiare sui fili.
Tieni presente che ci sono molte parti in plastica che sporgono dalla custodia su cui devi lavorare, ma se incolli i fili in posizione, devi preoccupartene solo una volta.
Tutto questo è difficile da descrivere con le parole, quindi ho incluso immagini e un diagramma grezzo.
Passaggio 5: programma Arduino
Ora devi programmare Arduino. Ciò richiede lo spostamento del cavo USB sul controller in modo da poter accedere ai pin seriali su Arduino. Ho incluso il codice che ho usato. Richiede la libreria Adafruit MCP4725, che può essere trovata qui:
Così com'è, il codice ti consente di percorrere l'intero raggio di movimento della levetta analogica in modo uniforme spostando il controller di 90 gradi a sinistra a 90 gradi a destra e tenerlo al centro tenendolo piatto.
Ottiene l'angolo del controller calcolando la tangente inversa della forza g dell'asse X divisa per la forza g dell'asse Z. Ciò significa che funziona se il controller è verticale, piatto o con qualsiasi angolo intermedio. (maggiori informazioni qui:
Funziona sul mio controller, ma altri controller potrebbero richiedere tensioni diverse, mettendolo fuori allineamento. Penso che il modo migliore per trovare l'intervallo di tensione sia per tentativi ed errori. Molti giochi ti mostreranno un cursore per il movimento della levetta analogica, ma il modo più accurato che ho trovato per determinare il movimento è con jstest su Linux. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) Ti dà un numero compreso tra -32, 767 e 32, 767 anziché un grafico, quindi sai esattamente dove si trova lo stick. Collega sia il controller che l'adattatore USB a seriale Arduino, carica jstest e prova diversi valori DAC fino a raggiungere la parte superiore e inferiore dell'intervallo e prendi nota di ciascuno. Per me era 1, 593 - 382.
Di particolare interesse è la riga 36:
dacvalue = (angolo di controllo + 2,5617859169446084418) / 0,0025942135867793503208 + 0,5;
Non è immediatamente ovvio cosa fa. Semplicemente, prende l'angolo del controller (misurato in radianti e compreso tra ~1,57 e ~-1,57) e lo converte in un valore compreso tra 1,593 e 382 per il DAC. Se hai una gamma DAC diversa, dovrai cambiare quella linea.
La riga può essere scritta come:
dacvalue = (angolo di controllo +) / + 0,5;
Con ed essendo i numeri che devi cambiare. è uguale all'intervallo dell'angolo del controller (pi) diviso per l'intervallo totale dei valori DAC. (la parte superiore della gamma meno la parte inferiore della gamma) Questo ti porta a cambiare la tensione, anche se i risultati saranno al di fuori della gamma che desideri. Ecco perché hai bisogno. è uguale a moltiplicato per la parte inferiore dell'intervallo più metà dell'intervallo di movimento del controller. (pi / 2) L'aggiunta di metà dell'intervallo di movimento assicura che non sia un numero negativo e l'aggiunta di moltiplicato per la parte inferiore dell'intervallo assicura che sia sincronizzato con l'intervallo desiderato.
Quando si convertono i decimali in un numero intero, il C++ non esegue l'arrotondamento. Taglia invece il decimale, quindi 9,9 diventa 9. L'aggiunta di 0,5 alla fine assicura che tutto ciò che supera la metà vada al numero intero successivo, quindi viene arrotondato.
Una volta caricato il programma, assicurati che funzioni con jstest.
Passaggio 6: rimontare il controller
Rimetti insieme il controller nello stesso modo in cui lo hai smontato, meno la levetta analogica sinistra. Dovrebbe funzionare ora. Trovo che non ci sia un ritardo evidente ed è molto meglio che usare lo stick analogico. Poiché utilizza un accelerometro, è influenzato da movimenti improvvisi, ma devi fare di tutto per notarlo.
Passaggio 7: possibili miglioramenti
Ci sono alcuni miglioramenti che potrebbero essere apportati. Questi includono:
- Utilizzo di un filo smaltato meno ingombrante
- Incidere tutto su un PCB progettato per adattarsi alla custodia del controller
- Ricollegare la levetta analogica sinistra e collegare le gambe agli ingressi analogici sull'Arduino in modo che possano essere utilizzate per regolare l'Arduino
- Ottenere la parte posteriore della custodia per un controller wireless e inserire il progetto nel vano batteria (questo richiederebbe di praticare un foro per il cavo USB)
Consigliato:
Simulatore di gioco per smartphone: gioca a giochi per Windows utilizzando il controllo gestuale IMU, accelerometro, giroscopio, magnetometro: 5 passaggi
Simulatore di gioco per smartphone: gioca a giochi per Windows utilizzando il controllo gestuale IMU, accelerometro, giroscopio, magnetometro: supporta questo progetto: https://www.paypal.me/vslcreations donando a codici open-source & supporto per un ulteriore sviluppo
Arduino Nano e Visuino: convertire l'accelerazione in angolo da accelerometro e giroscopio MPU6050 Sensore I2C: 8 passaggi (con immagini)
Arduino Nano e Visuino: convertire l'accelerazione in angolo da accelerometro e giroscopio MPU6050 Sensore I2C: Tempo fa ho pubblicato un tutorial su come collegare l'accelerometro, il giroscopio e il sensore bussola MPU9250 ad Arduino Nano e programmarlo con Visuino per inviare dati a pacchetto e visualizzare su un oscilloscopio e strumenti visivi. L'accelerometro invia X, Y
Arduino Nano: Accelerometro Giroscopio Bussola MPU9250 Sensore I2C con Visuino: 11 passaggi
Arduino Nano: Accelerometro Giroscopio Bussola Sensore MPU9250 I2C con Visuino: MPU9250 è uno dei più avanzati sensori combinati accelerometro, giroscopio e bussola di piccole dimensioni attualmente disponibili. Hanno molte funzionalità avanzate, tra cui il filtro passa basso, il rilevamento del movimento e persino un processore specializzato programmabile
Misurazione dell'angolo con giroscopio, accelerometro e Arduino: 5 passaggi
Misurazione dell'angolo con giroscopio, accelerometro e Arduino: il dispositivo è un prototipo approssimativo di quello che alla fine diventerà un robot di autobilanciamento, questa è la seconda parte del foro (leggere l'accelerometro e controllare un motore per l'autobilanciamento). La prima parte con solo il giroscopio può essere trovata qui. Su questo is
Tutorial Accelerometro e Giroscopio: 3 Passaggi
Tutorial Accelerometer & Gyro: Introduzione Questa guida è destinata a tutti coloro che sono interessati all'utilizzo di accelerometri e giroscopi, nonché di dispositivi IMU (Inertial Measurement Unit) combinati nei loro progetti di elettronica. Tratteremo: cosa misura un accelerometro?