Innehållsförteckning:
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
Jag har spelat Assetto Corsa med min Xbox 360 -handkontroll. Tyvärr är styrningen med den analoga pinnen väldigt otymplig, och jag har inte plats för en hjulinställning. Jag försökte tänka på hur jag skulle kunna snurra in en bättre styrmekanism i regulatorn, när jag kom på att jag kunde använda hela styrenheten som en ratt.
Den analoga pinnen har två potentiometrar. En mäter vertikal rörelse, och en mäter horisontell rörelse. Den sätter 1,6V genom varje och mäter spänningen som produceras vid torkaren för att bestämma hur mycket pinnen har rört sig. Detta innebär att det är möjligt att styra pinnens rörelse genom att mata en viss spänning till torkarstiftet. (mer information här:
Denna mod använder en Arduino för att beräkna vinkeln från accelerometermätningar och konvertera den till analog stickrörelse via en DAC. Därför bör det fungera med alla spel som använder den analoga pinnen som ingång.
Steg 1: Du behöver:
Verktyg:
- Lödkolv
- Löda
- Lödsugare/fläta
- Wire stripper
- En skruvmejsel, kanske en Torx -en beroende på skruvarna i din styrenhet (mina är tvärhuvud)
- Lim (helst inte superstark lim så att det kan tas isär senare)
- En USB till seriell adapter för att programmera Arduino
Material:
- Xbox 360 -kontroller (duh!)
- Arduino Pro Mini (eller en klon) (helst 3,3V. Om du använder 5V -versionen behöver du förmodligen en spänningsomvandlare)
- Ett MPU-6050 gyroskop/accelerometer
- En MCP4725 DAC (två om du vill styra båda axlarna)
- Lite tunn tråd
- En brödbräda så att du kan testa allt innan du lödder (valfritt, men rekommenderas)
Steg 2: Ta isär kontrollen
Det finns sju skruvar du måste ta bort. Sex av dem är uppenbara, men den sjunde ligger bakom ett klistermärke. Jag antar att borttagandet upphäver din garanti, så fortsätt på egen risk. Många guider säger att du behöver en Torx -skruvmejsel, men min är tvärhuvud, så kolla kontrollen.
Därefter bänd försiktigt av bakstycket. Om du bockar av framsidan kommer knapparna att rinna ut och troligen gå över hela rummet. Lyft den från botten. Koppla sedan ur de två vibrationsmotorerna. (den med den lilla vikten ska vara till vänster och den med den stora vikten till höger) Ta ut kretskortet och ta bort gummikåporna på de analoga pinnarna. De tar helt enkelt av.
Nästa sak är att ta bort den vänstra analoga pinnen så att den inte stör vår ingång, men den vänstra utlösarmekanismen är i vägen. För att ta bort det måste du avlödda de tre stiften från potentiometern från framsidan av brädet och sedan lossa mekanismen från kretskortet.
Avlöd sedan de 14 stiften som håller den vänstra analoga pinnen. Dra sedan av pinnen.
Steg 3: Fäst komponenterna på plats
Du kommer att märka att det finns ganska mycket utrymme mellan baksidan av kretskortet och fodralet. Detta gör det möjligt att lägga all hårdvara i fodralet utan att ta bort något.
Jag insåg först senare, men det här skulle vara en bra tid att avlöda återställningsknappen på Arduino. Om du inte gör det trycker det på baksidan av fodralet och får projektet att sluta fungera om du drar åt en av skruvarna för mycket när du sätter ihop det igen.
Jag limmade ett tunt kort på baksidan av varje kretskort för att isolera det och sedan limmade jag det på styrenhetens kretskort. Jag var ovillig att använda lim, men kunde inte tänka mig ett bättre sätt att göra det.
Positionerna i bilden är den bästa kombinationen jag kunde hitta. Arduino är till vänster, med kanten med återställningsknappen spolad mot plaststycket från den högra utlösarmekanismen, med den andra sidan under tråden och med hörnet så nära den vita kontakten som möjligt. Det finns en liten utbuktning i fodralet, men jag kunde inte hitta ett bättre ställe att lägga det på.
Acceleratorn är till höger om tråden. Den ska vara så platt och så rak som möjligt, annars kan du behöva skriva lite kod senare för att kompensera för förskjutningen. Observera att det finns några utstående plastbitar på baksidan av fodralet som du måste vara försiktig för att undvika. Jag har upptäckt att du kan lägga något klibbigt och färgstarkt, som läppstift, på de utskjutande plastbitarna och sedan sätta på bakstycket för att se var det lämnar märken.
DAC (erna) går i det nedre vänstra hörnet. Det finns tillräckligt med utrymme här för att stapla två DAC, den ena ovanpå den andra, om du vill styra båda axlarna. Du behöver inte limma ner dem. De kommer att stanna där de är med bara de lödda anslutningarna. Om du sticker kortet mellan dem, se till att du klipper kortet för att lämna SCL, SDA, VCC och GND tillgängliga, eftersom du kommer åt dem från båda sidor.
Om du använder två DAC, glöm inte att byta adressbygel och inaktivera uppdragningsmotstånden på ett av dem, som beskrivs här: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -omvandlare-anslutningsguide
Steg 4: Löd trådarna
Nu måste du ansluta allt. VCC, GND, SDA och SCL från alla 2/3 enheter ska anslutas till VCC, GND, A4 och A5 på Arduino. DAC är den svåraste delen. Om du har två måste du ansluta dem tillsammans, medan du lämnar någonstans kan du ansluta ström och ledningar till accelerometern, samtidigt som OUT -ledningarna hålls åtskilda.
OUT -stiftet på DAC bör anslutas till stiftet på styrenhetens kretskort som brukade vara för den mellersta horisontella potentiometerstiften för den analoga pinnen. Det vill säga där den analoga pinnen var, finns det en rad med tre stift överst. Anslut den till den mellersta. Om du har en annan DAC, anslut den till den vertikala potentiometerstiften (raden till vänster) på samma sätt. Du kommer inte att kunna nå stiften från baksidan när avtryckaren byts ut, så du måste köra en tråd till brädans framsida. Det finns en cirkulär "vägg" av plast runt det analoga pinnområdet, men lyckligtvis finns det ett bekvämt gap i det som du kan sätta ledningar genom. Se till att ledningarna inte kommer i vägen för skruvstolpen på fodralets främre del.
Min ursprungliga plan var att driva Arduino med 5V från USB -kabeln ansluten till RAW -stiftet, men när jag försökte det fungerade det inte. Arduino körde ingenting, och både Arduino och kontrollen stängdes av efter några sekunder. Jag upptäckte dock att det finns en stadig 3,3V -utgång från två stift på framsidan av kortet nära det svarta perifera uttaget, förmodligen för att driva kringutrustning. Det fungerar med både VCC och RAW, men jag valde VCC för att det redan är rätt spänning och för att det låter mig lödda det till VCC -kabeln på DAC som redan är nära botten av kortet och spara på ledningar.
Var medveten om att det är många plastdelar som sticker ut från fodralet som du måste arbeta runt, men om du limar trådarna på plats behöver du bara oroa dig för dem en gång.
Allt detta är svårt att beskriva med ord, så jag har inkluderat bilder och ett grovt diagram.
Steg 5: Programmera Arduino
Nu måste du programmera Arduino. Detta kräver att USB -kabeln flyttas på styrenheten så att du kan komma åt de seriella stiften på Arduino. Jag har inkluderat koden jag använde. Det kräver Adafruit MCP4725 -biblioteket, som finns här:
Som det är tillåter koden dig att gå igenom hela rörelseområdet för den analoga pinnen jämnt genom att flytta kontrollen 90 grader åt vänster till 90 grader till höger och hålla den i mitten genom att hålla den platt.
Det får styrenhetens vinkel genom att beräkna den inversa tangenten för X-axelns g-kraft dividerat med Z-axelns g-kraft. Det betyder att det fungerar om styrenheten är vertikal, platt eller någon vinkel däremellan. (mer information här:
Det fungerar på min styrenhet, men andra styrenheter kan kräva olika spänningar och sätta det ur linje. Jag tror att det bästa sättet att hitta spänningsområdet är med försök och fel. Många spel kommer att visa dig en reglage för den analoga stickrörelsen, men det mest exakta sättet jag har hittat för att bestämma rörelse är med jstest på Linux. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) Det ger dig ett tal mellan -32, 767 och 32, 767 snarare än en grafik, så du vet exakt var pinnen är. Anslut både styrenheten och Arduino USB till seriell adapter, ladda jstest och prova olika DAC -värden tills du når toppen och botten av intervallet och notera varje. För mig var det 1, 593 - 382.
Av särskilt intresse är rad 36:
dacvalue = (controllerangle + 2.5617859169446084418) / 0.0025942135867793503208 + 0.5;
Det är inte direkt uppenbart vad det gör. Enkelt, det tar vinkeln på styrenheten (mätt i radianer och mellan ~ 1,57 och ~ -1,57) och omvandlar den till ett värde mellan 1, 593 och 382 för DAC. Om du har ett annat DAC -intervall måste du ändra den raden.
Raden kan skrivas som:
dacvalue = (controllerangle +) / + 0,5;
Med och vara siffrorna du behöver ändra. är lika med området för styrvinkeln (pi) dividerat med det totala intervallet av DAC -värden. (toppen av intervallet minus botten av intervallet) Detta tar dig så långt som att ändra spänningen, även om resultaten kommer att ligga utanför det område du vill ha. Det är därför du behöver. är lika med multiplicerat med botten av intervallet plus halva rörelseområdet för styrenheten. (pi / 2) Om du lägger till halva rörelseområdet ser du till att det inte är ett negativt tal, och om du lägger till multiplicerat med botten av intervallet ser du till att det synkroniseras med det område du vill ha.
När decimaler omvandlas till ett heltal rundas inte C ++. Det skär istället av decimalen, så 9,9 blir 9. Att lägga till 0,5 i slutet ser till att allt över ett halvt går till nästa heltal, så det rundas.
När du har laddat upp ditt program, se till att det fungerar med jstest.
Steg 6: Sätt ihop kontrollen igen
Sätt tillbaka kontrollenheten på samma sätt som du tog isär den, minus den vänstra analoga pinnen. Det borde fungera nu. Jag tycker att det inte finns någon märkbar fördröjning och det är mycket bättre än att använda den analoga pinnen. Eftersom den använder en accelerometer påverkas den av plötsliga rörelser, men du måste gå ur vägen för att märka det.
Steg 7: Möjliga förbättringar
Det finns några förbättringar som kan göras. Dessa inkluderar:
- Använda mindre besvärlig magnettråd
- Etsar allt på ett kretskort som är utformat för att passa i styrhöljet
- Sätt tillbaka den vänstra analoga pinnen och anslut benen till de analoga ingångarna på Arduino så att de kan användas för att justera Arduino
- Skaffa bakstycket för en trådlös handkontroll och sätta projektet i batterifacket (detta skulle kräva att ett hål skärs för USB -kabeln)