Xbox 360 Controller Accelerometer/gyro styremodus: 7 trinn
Xbox 360 Controller Accelerometer/gyro styremodus: 7 trinn
Anonim
Xbox 360 Controller Accelerometer/gyro Steering Mod
Xbox 360 Controller Accelerometer/gyro Steering Mod

Jeg har spilt Assetto Corsa med min Xbox 360 -kontroller. Dessverre er styring med den analoge pinnen veldig uhåndterlig, og jeg har ikke plass til et hjuloppsett. Jeg prøvde å tenke på måter jeg kunne skoen en bedre styremekanisme inn i kontrolleren, da jeg tenkte på at jeg kunne bruke hele kontrolleren som et ratt.

Den analoge pinnen har to potensiometre. En måler vertikal bevegelse, og en måler horisontal bevegelse. Den setter 1,6V gjennom hver og måler spenningen som produseres ved viskeren for å bestemme hvor mye pinnen har beveget seg. Dette betyr at det er mulig å kontrollere pinnebevegelsen ved å mate en bestemt spenning til viskerpinnen. (mer informasjon her:

Denne moden bruker en Arduino til å beregne vinkelen fra akselerometeravlesninger og konvertere den til analog pinne bevegelse via en DAC. Derfor bør det fungere med alle spill som bruker den analoge pinnen som inngang.

Trinn 1: Du trenger:

Verktøy:

  • Loddejern
  • Lodding
  • Loddesug/flette
  • Wire stripper
  • En skrutrekker, kanskje en Torx -en, avhengig av skruene i kontrolleren (min er krysshode)
  • Lim (helst ikke supersterkt lim, så det kan tas fra hverandre senere)
  • En USB til seriell adapter for å programmere Arduino

Materialer:

  • Xbox 360 -kontroller (duh!)
  • Arduino Pro Mini (eller en klon) (helst 3,3V. Hvis du bruker 5V -versjonen, trenger du sannsynligvis en trinnvis spenningsomformer)
  • Et MPU-6050 gyroskop/akselerometer
  • En MCP4725 DAC (to hvis du vil kontrollere begge aksene)
  • Litt tynn tråd
  • Et brødbrett slik at du kan teste alt før du lodder (valgfritt, men anbefales)

Trinn 2: Ta fra hverandre kontrolleren

Ta fra hverandre kontrolleren
Ta fra hverandre kontrolleren
Ta fra hverandre kontrolleren
Ta fra hverandre kontrolleren
Ta fra hverandre kontrolleren
Ta fra hverandre kontrolleren

Det er syv skruer du må fjerne. Seks av dem er åpenbare, men den syvende står bak et klistremerke. Jeg antar at fjerning av den ugyldiggjør garantien, så fortsett på egen risiko. Mange guider sier at du trenger en Torx skrutrekker, men min er krysshode, så sjekk kontrolleren.

Etter det lirker du forsiktig av bakdekselet. Hvis du lirker av fronten, vil knappene søle ut og sannsynligvis gå over hele rommet. Løft den fra bunnen. Koble deretter fra de to vibrasjonsmotorene. (den med den lille vekten skal være til venstre, og den med den store vekten til høyre) Ta ut kretskortet og fjern gummihettene på de analoge pinnene. De bare trekker seg.

Den neste tingen er å fjerne den venstre analoge pinnen slik at den ikke forstyrrer inngangen vår, men den venstre utløsermekanismen er i veien. For å fjerne det må du avolde de tre pinnene fra potensiometeret fra forsiden av brettet, og deretter koble mekanismen fra kretskortet.

Deretter lodder du de 14 pinnene som holder den venstre analoge pinnen. Trekk deretter pinnen av.

Trinn 3: Fest komponentene på plass

Fest komponentene på plass
Fest komponentene på plass
Fest komponentene på plass
Fest komponentene på plass

Du vil legge merke til at det er ganske mye klaring mellom baksiden av kretskortet og saken. Dette gjør det mulig å sette all maskinvaren i saken uten å fjerne noe.

Jeg innså det først senere, men dette ville være et godt tidspunkt å desolde tilbakestillingsknappen på Arduino. Hvis du ikke gjør det, trykker det på baksiden av saken og får prosjektet til å slutte å fungere hvis du strammer en av skruene for mye når du setter det sammen igjen.

Jeg limte et tynt kort på baksiden av hver kretskort for å isolere det, og limte det deretter til kontrollerenes kretskort. Jeg var motvillig til å bruke lim, men kunne ikke tenke meg en bedre måte å gjøre det på.

Posisjonene i bildet er den beste kombinasjonen jeg kunne finne. Arduino er til venstre, med kanten med tilbakestillingsknappen i flukt mot plaststykket fra høyre utløsermekanisme, med den andre siden under ledningen og med hjørnet så nær den hvite kontakten som mulig. Det er en liten bule i saken, men jeg fant ikke et bedre sted å sette det.

Akselerometeret er til høyre for ledningen. Den skal være så flat og så rett som mulig, ellers må du kanskje skrive noen kode senere for å kompensere for forskyvningen. Vær oppmerksom på at det er noen utstående plastbiter på baksiden av saken som du må være forsiktig for å unngå. Jeg har funnet ut at du kan sette noe klebrig og fargerikt, som leppestift, på de utstikkende plastbitene og deretter sette bakdekselet på for å se hvor det etterlater merker.

DAC (ene) går nederst i venstre hjørne. Det er nok klaring her til å stable to DAC -er, den ene på den andre, hvis du vil kontrollere begge aksene. Du trenger ikke å lime dem ned. De blir der de er med bare de loddede forbindelsene. Hvis du stikker kortet mellom dem, må du kutte kortet for å la SCL, SDA, VCC og GND være tilgjengelig, fordi du får tilgang til dem fra begge sider.

Hvis du bruker to DAC-er, ikke glem å bytte adressehopper og deaktivere opptrekksmotstandene på en av dem, som beskrevet her: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -konverter-tilkoblingsguide

Trinn 4: Lodd ledningene på

Lodd ledningene på
Lodd ledningene på
Lodd ledningene på
Lodd ledningene på
Lodd ledningene på
Lodd ledningene på

Nå må du koble til alt. VCC, GND, SDA og SCL fra alle 2/3 enheter bør kobles til henholdsvis VCC, GND, A4 og A5 på Arduino. DAC -er er den vanskeligste delen. Hvis du har to, må du koble dem sammen, mens du forlater et sted kan du koble strøm og ledninger til akselerometeret, mens du holder OUT -ledningene atskilt.

OUT -pinnen på DAC bør kobles til pinnen på kontrollerenes kretskort som pleide å være for den midtre horisontale potensiometerpinnen for den analoge pinnen. Det vil si at der den analoge pinnen var, er det en rad med tre pinner øverst. Koble den til den midterste. Hvis du har en annen DAC, kobler du den til den vertikale potensiometerpinnen (raden til venstre) på samme måte. Du kommer ikke til å komme til pinnene fra baksiden når utløseren byttes ut, så du må kjøre en ledning til forsiden av brettet. Det er en sirkulær "vegg" av plast rundt det analoge pinneområdet, men heldigvis er det et praktisk hull i den som du kan sette ledninger gjennom. Pass på at ledningene ikke kommer i veien for skruestolpen på den fremre delen av saken.

Min opprinnelige plan var å drive Arduino med 5V fra USB -kabelen koblet til RAW -pinnen, men da jeg prøvde det, fungerte det ikke. Arduinoen kjørte ikke noe, og både Arduino og kontrolleren slo seg av etter noen sekunder. Imidlertid oppdaget jeg at det er en jevn 3.3V utgang fra to pinner på forsiden av brettet nær den svarte perifere kontakten, antagelig for å drive eksterne enheter. Det fungerer med både VCC og RAW, men jeg valgte VCC fordi det allerede er riktig spenning og fordi det lar meg lodde det til VCC -ledningen på DAC som allerede er nær bunnen av brettet og spare på ledninger.

Vær oppmerksom på at det er mange plastdeler som stikker ut av saken som du må omgå, men hvis du limer ledningene på plass, trenger du bare å bekymre deg for dem en gang.

Alt dette er vanskelig å beskrive med ord, så jeg har tatt med bilder og et grovt diagram.

Trinn 5: Programmer Arduino

Nå må du programmere Arduino. Dette krever at du flytter USB -kabelen på kontrolleren, slik at du får tilgang til de serielle pinnene på Arduino. Jeg har tatt med koden jeg brukte. Det krever Adafruit MCP4725 -biblioteket, som du finner her:

Som det er, lar koden deg gå gjennom hele bevegelsesområdet til den analoge pinnen jevnt ved å flytte kontrolleren 90 grader til venstre til 90 grader til høyre, og holde den i midten ved å holde den flat.

Den får vinkelen til kontrolleren ved å beregne den inverse tangenten til X-aksen g-kraft dividert med Z-aksens g-kraft. Dette betyr at den fungerer hvis kontrolleren er vertikal, flat eller en vinkel i mellom. (mer informasjon her:

Det fungerer på kontrolleren min, men andre kontrollere kan kreve forskjellige spenninger og sette den ut av justering. Jeg tror den beste måten å finne spenningsområdet er med prøving og feiling. Mange spill vil vise deg en glidebryter for den analoge pinnebevegelsen, men den mest nøyaktige måten jeg har funnet for å bestemme bevegelse er med jstest på Linux. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) Det gir deg et tall mellom -32, 767 og 32, 767 i stedet for en grafikk, så du vet nøyaktig hvor pinnen er. Koble til både kontrolleren og Arduino USB til seriell adapter, last inn jstest og prøv forskjellige DAC -verdier til du når toppen og bunnen av serien, og noter hver. For meg var det 1, 593 - 382.

Av spesiell interesse er linje 36:

dacvalue = (controllerangle + 2.5617859169446084418) / 0.0025942135867793503208 + 0.5;

Det er ikke umiddelbart åpenbart hva det gjør. Enkelt, det tar vinkelen til kontrolleren (målt i radianer og mellom ~ 1.57 og ~ -1.57) og konverterer den til en verdi mellom 1, 593 og 382 for DAC. Hvis du har et annet DAC -område, må du endre denne linjen.

Linjen kan skrives som:

dacvalue = (controllerangle +) / + 0,5;

Med og være tallene du må endre. er lik området for kontrollvinkelen (pi) dividert med det totale området av DAC -verdier. (toppen av området minus bunnen av området) Dette kommer deg så langt som til å endre spenningen, selv om resultatene vil være utenfor det området du ønsker. Det er derfor du trenger. er lik multiplisert med bunnen av området pluss halve bevegelsesområdet til kontrolleren. (pi / 2) Hvis du legger til halve bevegelsesområdet, sørger du for at det ikke er et negativt tall, og hvis du legger til multiplisert med bunnen av området, blir det synkronisert med området du vil ha.

Når du konverterer desimalene til et heltall, rundes ikke C ++. Det kutter i stedet desimalen, så 9,9 blir 9. Å legge til 0,5 på slutten sørger for at alt over et halvt går til neste heltall, så det rundes.

Når du har lastet opp programmet, må du kontrollere at det fungerer med jstest.

Trinn 6: Sett sammen kontrolleren igjen

Sett kontrolleren sammen igjen på samme måte som du tok den fra hverandre, minus den venstre analoge pinnen. Det burde fungere nå. Jeg synes det er ingen merkbar forsinkelse, og det er mye bedre enn å bruke den analoge pinnen. Fordi den bruker et akselerometer, påvirkes det av plutselige bevegelser, men du må gå ut av veien for å legge merke til det.

Trinn 7: Mulige forbedringer

Det er noen forbedringer som kan gjøres. Disse inkluderer:

  • Bruker mindre tungvint magnettråd
  • Etser alt på en kretskort som er designet for å passe i kontrollhylsteret
  • Fest den venstre analoge pinnen igjen og koble bena til de analoge inngangene på Arduino slik at de kan brukes til å justere Arduino
  • Få bakstykket til en trådløs kontroller og sett prosjektet i batterirommet (dette krever at du kutter et hull for USB -kabelen)