Indholdsfortegnelse:
- Trin 1: Du skal bruge:
- Trin 2: Adskil controlleren
- Trin 3: Sæt komponenterne på plads
- Trin 4: Lodde ledningerne på
- Trin 5: Programmer Arduino
- Trin 6: Saml controlleren igen
- Trin 7: Mulige forbedringer
Video: Xbox 360 Controller Accelerometer/gyro -styremodus: 7 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
Jeg har spillet Assetto Corsa med min Xbox 360 -controller. Desværre er styring med den analoge pind meget uhåndterlig, og jeg har ikke plads til et hjulopsætning. Jeg forsøgte at tænke på, hvordan jeg kunne sko en bedre styremekanisme ind i controlleren, da det gik op for mig, at jeg kunne bruge hele controlleren som et rat.
Den analoge pind har to potentiometre. Den ene måler lodret bevægelse, og den ene måler vandret bevægelse. Den sætter 1,6V igennem hver og måler spændingen, der produceres ved viskeren, for at bestemme, hvor meget pinden har bevæget sig. Det betyder, at det er muligt at styre pindens bevægelse ved at tilføre viskerstiften en bestemt spænding. (flere oplysninger her:
Denne mod bruger en Arduino til at beregne vinklen fra accelerometermålinger og konvertere den til analog stick -bevægelse via en DAC. Derfor bør det fungere med ethvert spil, der bruger den analoge stick som input.
Trin 1: Du skal bruge:
Værktøjer:
- Loddekolbe
- Lodde
- Loddesuger/fletning
- Wire stripper
- En skruetrækker, måske en Torx, afhængigt af skruerne i din controller (mine er krydshoved)
- Lim (helst ikke superstærk lim, så den kan skilles ad senere)
- En USB til seriel adapter til programmering af Arduino
Materialer:
- Xbox 360 -controller (duh!)
- Arduino Pro Mini (eller en klon) (helst 3,3V. Hvis du bruger 5V -versionen, har du sandsynligvis brug for en trin -up spændingsomformer)
- Et MPU-6050 gyroskop/accelerometer
- En MCP4725 DAC (to hvis du vil styre begge akser)
- Noget tyndt tråd
- Et brødbræt, så du kan teste alt, før du lodder (valgfrit, men anbefales)
Trin 2: Adskil controlleren
Der er syv skruer, du skal fjerne. Seks af dem er indlysende, men den syvende er bag et klistermærke. Jeg går ud fra, at hvis du fjerner den, bortfalder din garanti, så fortsæt på egen risiko. Mange guider siger, at du har brug for en Torx skruetrækker, men min er krydshoved, så tjek din controller.
Derefter lirkes forsigtigt bagdækslet af. Hvis du lirker fronten, spilder knapperne ud og går sandsynligvis overalt i rummet. Løft den fra bunden. Tag derefter de to vibrationsmotorer ud af stikkontakten. (den med den lille vægt skal være til venstre, og den med den store vægt til højre) Tag printkortet ud, og fjern gummihætterne på de analoge pinde. De trækker simpelthen af.
Den næste ting er at fjerne den venstre analoge stick, så den ikke forstyrrer vores input, men den venstre udløsermekanisme er i vejen. For at fjerne det skal du aflodde de tre ben fra potentiometeret fra forsiden af brættet og derefter fjerne mekanismen fra printkortet.
Desolder derefter de 14 ben, der holder den venstre analoge pind. Træk derefter pinden af.
Trin 3: Sæt komponenterne på plads
Du vil bemærke, at der er en del frigang mellem bagsiden af printkortet og sagen. Dette gør det muligt at lægge al hardware i sagen uden at fjerne noget.
Jeg indså først senere, men det ville være et godt tidspunkt at aflodde nulstillingsknappen på Arduino. Hvis du ikke gør det, trykker det på bagsiden af sagen og får projektet til at stoppe med at fungere, hvis du strammer en af skruerne for meget, når du samler det igen.
Jeg limede et tyndt stykke kort på bagsiden af hvert printkort for at isolere det og limede det derefter til controllerens printkort. Jeg var tilbageholdende med at bruge lim, men kunne ikke finde på en bedre måde at gøre det på.
Positionerne i billedet er den bedste kombination, jeg kunne finde. Arduino er til venstre, med kanten med nulstillingsknappen i flugt mod plaststykket fra den højre udløsermekanisme, med den anden side under ledningen og med hjørnet så tæt på det hvide stik som muligt. Der er en lille bule i sagen, men jeg kunne ikke finde et bedre sted at sætte det.
Accelerometeret er til højre for tråden. Det skal være så fladt og så lige som muligt, ellers skal du muligvis skrive en kode senere for at kompensere for forskydningen. Bemærk, at der er nogle udstående stykker plast på bagsiden af kassen, som du skal være forsigtig med at undgå. Jeg har fundet ud af, at du kan lægge noget klæbrigt og farverigt, som læbestift, på de fremspringende plaststykker og derefter sætte bagdækslet på for at se, hvor det efterlader mærker.
DAC (erne) går i nederste venstre hjørne. Der er nok plads her til at stable to DAC'er, den ene oven på den anden, hvis du vil styre begge akser. Du behøver ikke at lime dem fast. De bliver, hvor de er, med bare de loddede forbindelser. Hvis du stikker kortet mellem dem, skal du sørge for at skære kortet for at efterlade SCL, SDA, VCC og GND tilgængelig, fordi du får adgang til dem fra begge sider.
Hvis du bruger to DAC'er, skal du ikke glemme at skifte adressejumper og deaktivere pull up-modstandene på en af dem, som beskrevet her: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -konverter-tilslutning-guide
Trin 4: Lodde ledningerne på
Nu skal du forbinde alt. VCC, GND, SDA og SCL fra alle 2/3 enheder skal tilsluttes henholdsvis VCC, GND, A4 og A5 på Arduino. DAC'erne er den vanskeligste del. Hvis du har to, skal du forbinde dem sammen, mens du forlader et sted, kan du slutte strøm og ledninger til accelerometeret, samtidig med at OUT -ledningerne holdes adskilt.
OUT -stiften på DAC'en skal tilsluttes stiften på controllerens printkort, der plejede at være til den midterste vandrette potentiometerstift til den analoge stick. Det vil sige, hvor den analoge pind var, er der en række med tre ben øverst. Tilslut den til den midterste. Hvis du har en anden DAC, skal du tilslutte den til den lodrette potentiometerstift (rækken til venstre) på samme måde. Du kan ikke komme til stifterne bagfra, når aftrækkeren udskiftes, så du skal køre en ledning til forsiden af brættet. Der er en cirkulær "væg" af plast omkring det analoge stikområde, men der er heldigvis et praktisk mellemrum i det, som du kan sætte ledninger igennem. Sørg for, at ledningerne ikke kommer i vejen for skruestolpen på den forreste del af kabinettet.
Min oprindelige plan var at drive Arduino med 5V fra USB -kablet tilsluttet RAW -stiften, men da jeg prøvede det, fungerede det ikke. Arduinoen kørte ikke noget, og både Arduino og controlleren slukkede efter et par sekunder. Imidlertid opdagede jeg, at der er en stabil 3.3V output fra to ben på forsiden af kortet nær den sorte perifere stik, formodentlig til strømforsyning af periferiudstyr. Det fungerer med både VCC og RAW, men jeg valgte VCC, fordi det allerede er den rigtige spænding, og fordi det giver mig mulighed for at lodde det til VCC -ledningen på DAC'en, der allerede er nær bunden af brættet og spare på ledninger.
Vær opmærksom på, at der stikker en masse plastdele ud af kassen, som du skal omgå, men hvis du limer ledningerne på plads, skal du kun bekymre dig om dem én gang.
Alt dette er svært at beskrive med ord, så jeg har inkluderet billeder og et groft diagram.
Trin 5: Programmer Arduino
Nu skal du programmere Arduino. Dette kræver, at USB -kablet flyttes på controlleren, så du kan få adgang til de serielle ben på Arduino. Jeg har inkluderet den kode, jeg brugte. Det kræver Adafruit MCP4725 -biblioteket, som kan findes her:
Som det er tilfældet, giver koden dig mulighed for at gå gennem hele bevægelsesområdet for den analoge stick jævnt ved at flytte controlleren 90 grader til venstre til 90 grader til højre og holde den i midten ved at holde den flad.
Det får styreenhedens vinkel ved at beregne den inverse tangent for X-aksen g-kraft divideret med Z-aksens g-kraft. Det betyder, at den fungerer, hvis controlleren er lodret, flad eller en hvilken som helst vinkel imellem. (flere oplysninger her:
Det fungerer på min controller, men andre controllere kan kræve forskellige spændinger og sætte det ud af justering. Jeg tror, at den bedste måde at finde spændingsområdet er med forsøg og fejl. Mange spil viser dig en skyder til den analoge stick -bevægelse, men den mest præcise måde, jeg har fundet til at bestemme bevægelse, er med jstest på Linux. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) Det giver dig et tal mellem -32, 767 og 32, 767 frem for en grafik, så du ved præcis, hvor pinden er. Tilslut både controlleren og Arduino USB til seriel adapter, indlæs jstest og prøv forskellige DAC -værdier, indtil du når toppen og bunden af området, og noter hver. For mig var det 1, 593 - 382.
Af særlig interesse er linje 36:
dacvalue = (controllerangle + 2.5617859169446084418) / 0.0025942135867793503208 + 0.5;
Det er ikke umiddelbart indlysende, hvad det gør. Simpelthen tager den controllerens vinkel (målt i radianer og mellem ~ 1,57 og ~ -1,57) og konverterer den til en værdi mellem 1, 593 og 382 for DAC. Hvis du har et andet DAC -område, skal du ændre denne linje.
Linjen kan skrives som:
dacvalue = (controllerangle +) / + 0,5;
Med og være de tal, du skal ændre. er lig med controllerens vinkel (pi) divideret med det samlede område af DAC -værdier. (toppen af intervallet minus bunden af intervallet) Dette får dig til at ændre spændingen, selvom resultaterne ligger uden for det område, du ønsker. Derfor har du brug for det. er lig med ganget med bunden af området plus halvdelen af controllerens bevægelsesområde. (pi / 2) Tilføjelse af halvdelen af bevægelsesområdet sikrer, at det ikke er et negativt tal, og tilføjelse ganget med bunden af intervallet sikrer, at det er synkroniseret med det område, du ønsker.
Når decimalerne konverteres til et helt tal, rundes C ++ ikke. Det skærer i stedet decimalet af, så 9,9 bliver til 9. Tilføjelse af 0,5 i slutningen sikrer, at alt over et halvt går til det næste heltal, så det rundes.
Når du har uploadet dit program, skal du sørge for, at det fungerer med jstest.
Trin 6: Saml controlleren igen
Sæt controlleren sammen igen på samme måde, som du adskilte den, minus den venstre analoge pind. Det burde fungere nu. Jeg finder, at der ikke er nogen mærkbar forsinkelse, og det er meget bedre end at bruge den analoge stick. Fordi det bruger et accelerometer, påvirkes det af pludselige bevægelser, men du skal gå af vejen for at lægge mærke til det.
Trin 7: Mulige forbedringer
Der er nogle forbedringer, der kan foretages. Disse omfatter:
- Brug af mindre besværlig magnetledning
- Ætsning af alt på et printkort, der er designet til at passe i controller -kabinettet
- Genmontering af den venstre analoge pind og tilslutning af benene til de analoge indgange på Arduino, så de kan bruges til at justere Arduino
- Henter bagstykket til en trådløs controller og lægger projektet i batterirummet (dette kræver, at der skæres et hul til USB -kablet)
Anbefalede:
Udskiftning af skallen til en trådløs Xbox 360 -controller: 15 trin (med billeder)
Udskiftning af skallen til en trådløs Xbox 360 -controller: Trin for trin vejledning til udskiftning af skallen på en Xbox 360 -controller til en ny skal. Denne vejledning kan bruges til at hjælpe eleverne med at have en grundlæggende forståelse af hardware, elektrisk/computerteknik og datalogiske principper gennem videospil
Fjernstyret bil - styret ved hjælp af trådløs Xbox 360 -controller: 5 trin
Fjernstyret bil - styret ved hjælp af trådløs Xbox 360 -controller: Disse er instruktioner for at bygge din egen fjernstyrede bil, styret ved hjælp af en trådløs Xbox 360 -controller
Demontering, rengøring og genmontering af en Xbox 360 -controller: 11 trin (med billeder)
Demontering, rengøring og genmontering af en Xbox 360-controller: Denne trin-for-trin vejledning instruerer dig i adskillelse, rengøring og genmontering af din Xbox 360-controller. Læs hvert trin i sin helhed meget omhyggeligt før udførelsen for at undgå problemer under processen
Vinkelmåling ved hjælp af gyro, accelerometer og Arduino: 5 trin
Vinkelmåling ved hjælp af Gyro, Accelerometer og Arduino: Enheden er en grov prototype af, hvad der i sidste ende vil blive en selvbalanceret robot, dette er den anden del af hullet (læs accelerometer og styr en motor til selvbalance). Den første del med kun gyroen kan findes her. På dette inst
Accelerometer og Gyro -vejledning: 3 trin
Accelerometer & Gyro -selvstudium: Introduktion Denne vejledning er beregnet til alle, der er interesseret i at bruge accelerometre og gyroskoper samt kombinerede IMU -enheder (inertialmåleenhed) i deres elektroniske projekter Vi vil dække: Hvad måler et accelerometer?