Sisällysluettelo:
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-13 06:57
Olen pelannut Assetto Corsaa Xbox 360 -ohjaimellani. Valitettavasti ohjaus analogisella sauvalla on erittäin hankalaa, eikä minulla ole tilaa pyörän asennukselle. Yritin miettiä tapoja, joilla voisin työntää ohjaimeen paremman ohjausmekanismin, kun tuli mieleen, että voisin käyttää koko ohjainta ohjauspyöränä.
Analogisessa sauvassa on kaksi potentiometriä. Yksi mittaa pystysuuntaista liikettä ja toinen vaakasuuntaista liikettä. Se syöttää 1,6 V: n läpi ja mittaa pyyhkimen tuottaman jännitteen määrittääkseen, kuinka paljon tikku on liikkunut. Tämä tarkoittaa, että sauvan liikettä on mahdollista ohjata syöttämällä tietty jännite pyyhkimen tappiin. (lisätietoja täältä:
Tämä modi käyttää Arduinoa laskemaan kulman kiihtyvyysmittarin lukemista ja muuntaa sen analogiseksi tikun liikkeeksi DAC: n kautta. Siksi sen pitäisi toimia minkä tahansa pelin kanssa, joka käyttää analogista tikkua tulona.
Vaihe 1: Tarvitset:
Työkalut:
- Juotin
- Juottaa
- Juotos tikkari/punos
- Langanpoistaja
- Ruuvimeisseli, ehkä Torx, ohjaimen ruuveista riippuen (omani ovat ristipää)
- Liima (mieluiten ei erittäin vahvaa liimaa, jotta se voidaan irrottaa myöhemmin)
- USB -sarjasovitin Arduinon ohjelmoimiseksi
Materiaalit:
- Xbox 360 -ohjain (huh!)
- Arduino Pro Mini (tai klooni) (mieluiten 3.3V. Jos käytät 5V -versiota, tarvitset todennäköisesti tehostetun jännitemuuntimen)
- MPU-6050 gyroskooppi/kiihtyvyysmittari
- MCP4725 DAC (kaksi, jos haluat ohjata molempia akseleita)
- Joku ohut lanka
- Leipälauta, joten voit testata kaiken ennen juottamista (valinnainen, mutta suositeltava)
Vaihe 2: Irrota ohjain
Irrota seitsemän ruuvia. Kuusi niistä on ilmeisiä, mutta seitsemäs on tarran takana. Oletan, että sen poistaminen mitätöi takuun, joten jatka omalla vastuullasi. Monet oppaat sanovat, että tarvitset Torx -ruuvimeisselin, mutta minun on ristipää, joten tarkista ohjaimesi.
Irrota sen jälkeen varovasti takakansi. Jos irrotat edestä, painikkeet valuvat ulos ja luultavasti kaikkialle huoneeseen. Nosta se alhaalta. Irrota sitten kaksi tärinämoottoria. (pienen painon tulisi olla vasemmalla ja suuren painon oikealla) Ota piirilevy ulos ja irrota analogisten tikkujen kumitulpat. Ne yksinkertaisesti vetäytyvät.
Seuraava asia on poistaa vasen analoginen sauva, jotta se ei häiritse syöttöämme, mutta vasen laukaisumekanismi on tiellä. Sen poistamiseksi sinun on irrotettava kolme tappia potentiometristä levyn etupuolelta ja irrotettava mekanismi PCB: stä.
Poista sitten 14 tappia, jotka pitävät vasenta analogista tikkua. Vedä sitten tikku irti.
Vaihe 3: Kiinnitä osat paikalleen
Huomaat, että piirilevyn takaosan ja kotelon välillä on melko paljon tilaa. Tämän ansiosta kaikki laitteistot voidaan laittaa koteloon poistamatta mitään.
Tajusin vasta myöhemmin, mutta tämä olisi hyvä aika purkaa Arduinon nollauspainike. Jos et tee niin, se painaa kotelon takaosaa ja aiheuttaa projektin lakkaamisen, jos kiristät jotakin ruuveista liikaa, kun asennat sen uudelleen.
Liimasin ohuen palan korttia jokaisen piirilevyn takaosaan sen eristämiseksi, ja sitten liimasin sen ohjaimen piirilevyyn. En halunnut käyttää liimaa, mutta en keksinyt parempaa tapaa tehdä se.
Kuvan asemat ovat paras yhdistelmä, jonka löysin. Arduino on vasemmalla, ja resetointipainikkeen reuna on oikeassa liipaisimekanismissa olevaa muovikappaletta vasten, toinen puoli langan alla ja kulma mahdollisimman lähellä valkoista liitintä. Kotelossa on pieni pullistuma, mutta en löytänyt parempaa paikkaa sen sijoittamiseen.
Kiihtyvyysmittari on langan oikealla puolella. Sen tulisi olla mahdollisimman tasainen ja mahdollisimman suora, muuten sinun on ehkä kirjoitettava jokin koodi myöhemmin kompensoidaksesi poikkeaman. Huomaa, että kotelon takaosassa on ulkonevia muovikappaleita, joita sinun on vältettävä. Olen huomannut, että voit laittaa jotain tahmeaa ja värikästä, kuten huulipunaa, ulkoneville muovikappaleille ja laittaa takakannen nähdäksesi, mihin se jättää jälkiä.
DAC (t) ovat vasemmassa alakulmassa. Täällä on tarpeeksi tilaa kahden DAC: n pinoamiseen, päällekkäin, jos haluat hallita molempia akseleita. Sinun ei tarvitse liimata niitä. He jäävät paikalleen vain juotetuilla yhteyksillä. Jos kiinnität kortin niiden väliin, varmista, että leikkaat kortin niin, että SCL-, SDA-, VCC- ja GND -levyt eivät ole käytettävissä, koska voit käyttää niitä molemmilta puolilta.
Jos käytät kahta DAC-laitetta, älä unohda vaihtaa osoitehyppääjää ja poistaa käytöstä vetovastus yhdessä niistä, kuten tässä on kuvattu: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -muunnin-kytkentä-opas
Vaihe 4: Juotta johdot päälle
Nyt sinun on yhdistettävä kaikki. Kaikkien 2/3 laitteiden VCC, GND, SDA ja SCL on liitettävä Arduinon VCC-, GND-, A4- ja A5 -järjestelmiin. DAC: t ovat hankalin osa. Jos sinulla on kaksi, sinun on yhdistettävä ne toisiinsa, kun lähdet jonnekin, voit kytkeä virran ja linjat kiihtyvyysmittariin pitäen OUT -johdot erillään.
DAC: n OUT -nasta on kytkettävä ohjaimen piirilevyn nastaan, joka oli aiemmin analogisen tikun keskimmäisen vaakasuoran potentiometrin tapin kohdalla. Eli missä analoginen tikku oli, yläosassa on kolmen tapin rivi. Liitä se keskimmäiseen. Jos sinulla on toinen DAC, liitä se pystysuoraan potentiometrin tappiin (rivi vasemmalle) samalla tavalla. Et voi päästä tappeihin takaa, kun liipaisin vaihdetaan, joten joudut johtamaan levyn etuosaan. Analogisen tikun alueen ympärillä on pyöreä muovinen "seinä", mutta onneksi siinä on kätevä aukko, jonka läpi voit laittaa johdot. Varmista, että johdot eivät pääse kotelon etuosassa olevan ruuvipylvään väliin.
Alkuperäinen suunnitelmani oli antaa Arduinolle virta 5 V: lla RAW -nastaan kytketystä USB -kaapelista, mutta kun yritin sitä, se ei toiminut. Arduino ei käynnistänyt mitään, ja sekä Arduino että ohjain sammui muutaman sekunnin kuluttua. Huomasin kuitenkin, että levyn etuosassa olevasta kahdesta nastaa lähellä mustan oheislaitteen pistorasiaa on vakaa 3,3 V: n lähtö, oletettavasti oheislaitteiden virran saamiseksi. Se toimii sekä VCC: n että RAW: n kanssa, mutta valitsin VCC: n, koska se on jo oikea jännite ja koska sen avulla voin juottaa sen DC: n VCC -johtoon, joka on jo lähellä levyn pohjaa ja säästää johtoja.
Huomaa, että kotelosta ulkonee paljon muoviosia, joita sinun on käsiteltävä, mutta jos liimat johdot paikoilleen, sinun on huolehdittava niistä vain kerran.
Kaikkea tätä on vaikea kuvailla sanoilla, joten olen lisännyt kuvia ja karkean kaavion.
Vaihe 5: Ohjelmoi Arduino
Nyt sinun on ohjelmoitava Arduino. Tämä edellyttää USB -kaapelin siirtämistä ohjaimessa, jotta voit käyttää Arduinon sarjaliittimiä. Olen lisännyt käyttämäni koodin. Se vaatii Adafruit MCP4725 -kirjaston, joka löytyy täältä:
Koodin avulla voit kulkea analogisen sauvan koko liikealueen tasaisesti siirtämällä ohjainta 90 astetta vasemmalle 90 astetta oikealle ja pitämällä sitä keskellä pitämällä sitä tasaisena.
Se saa ohjaimen kulman laskemalla X-akselin g-voiman käänteisen tangentin jaettuna Z-akselin g-voimalla. Tämä tarkoittaa, että se toimii, jos ohjain on pystysuora, tasainen tai mikä tahansa kulma niiden välissä. (lisätietoja täältä:
Se toimii ohjaimessani, mutta muut ohjaimet saattavat vaatia erilaisia jännitteitä, jolloin se ei ole linjassa. Mielestäni paras tapa löytää jännitealue on kokeilu ja erehdys. Monissa peleissä näytetään analogisen tikun liikkeen liukusäädin, mutta tarkin tapa, jolla olen löytänyt liikkeen, on jstest Linuxissa. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) Se antaa numeron välillä -32, 767 ja 32, 767 eikä grafiikkaa, joten tiedät tarkalleen missä tikku on. Kytke sekä ohjain että Arduino USB sarjasovittimeen, lataa jstest ja kokeile eri DAC -arvoja, kunnes saavutat alueen ylä- ja alaosan, ja kirjoita muistiin. Minulle se oli 1, 593 - 382.
Erityisen kiinnostava on rivi 36:
dacvalue = (ohjauskulma + 2.5617859169446084418) / 0.0025942135867793503208 + 0.5;
Ei ole heti selvää, mitä se tekee. Yksinkertaisesti se ottaa ohjaimen kulman (mitattuna radiaaneina ja välillä ~ 1,57 ja ~ -1,57) ja muuntaa sen arvoksi 1, 593 ja 382 DAC: lle. Jos sinulla on eri DAC -alue, sinun on vaihdettava kyseinen rivi.
Rivi voidaan kirjoittaa seuraavasti:
dacvalue = (kontrollikulma +) / + 0,5;
Kun olet numero, sinun on muutettava. on yhtä suuri kuin säätimen kulman alue (pi) jaettuna DAC -arvojen kokonaisalueella. (alueen yläosa miinus alueen alaosa) Tämä johtaa jännitteen muuttamiseen, vaikka tulokset ovat haluamasi alueen ulkopuolella. Siksi tarvitset. on yhtä kuin kerrottuna alueen alaosalla plus puolet ohjaimen liikealueesta. (pi / 2) Kun lisäät puolet liikealueesta, varmistat, että se ei ole negatiivinen luku, ja lisäämällä kerroin alueen alareunalla varmistat sen synkronoinnin haluamasi alueen kanssa.
Kun muunnat desimaalit kokonaislukuiksi, C ++ ei pyöristä. Sen sijaan se katkaisee desimaalin, joten 9,9: stä tulee 9. Kun lisäät 0,5 loppuun, varmista, että kaikki yli puolet menee seuraavaan kokonaislukuun, joten se pyöristää.
Kun olet ladannut ohjelman, varmista, että se toimii jstestin kanssa.
Vaihe 6: Kokoa ohjain uudelleen
Laita ohjain takaisin yhteen samalla tavalla kuin irrotit sen, miinus vasen analogitikku. Sen pitäisi toimia nyt. Minusta havaittavaa viivästystä ei ole ja se on paljon parempi kuin analogisen tikun käyttäminen. Koska se käyttää kiihtyvyysmittaria, siihen vaikuttavat äkilliset liikkeet, mutta sinun on mentävä tieltäsi huomaamaan se.
Vaihe 7: Mahdolliset parannukset
Joitakin parannuksia voidaan tehdä. Nämä sisältävät:
- Käyttämällä vähemmän hankalaa magneettilankaa
- Syödä kaikki yhdelle piirilevylle, joka on suunniteltu sopimaan ohjainkoteloon
- Kiinnitä vasen analoginen sauva ja liitä jalat Arduinon analogisiin tuloihin, jotta niitä voidaan käyttää Arduinon säätämiseen
- Langattoman ohjaimen takakotelon hankkiminen ja projektin asettaminen paristolokeroon (tämä vaatisi reiän leikkaamista USB -kaapelille)