Turinys:

„Xbox 360“valdiklio akselerometras/giroskopo vairavimo režimas: 7 žingsniai
„Xbox 360“valdiklio akselerometras/giroskopo vairavimo režimas: 7 žingsniai

Video: „Xbox 360“valdiklio akselerometras/giroskopo vairavimo režimas: 7 žingsniai

Video: „Xbox 360“valdiklio akselerometras/giroskopo vairavimo režimas: 7 žingsniai
Video: Kaip prijungti Xbox One/Xbox 360 pultelį prie Xbox One/Xbox 360 2024, Liepa
Anonim
„Xbox 360“valdiklio akselerometras/giroskopo vairavimo mod
„Xbox 360“valdiklio akselerometras/giroskopo vairavimo mod

Aš žaidžiau „Assetto Corsa“su „Xbox 360“valdikliu. Deja, vairavimas su analogine lazda yra labai varginantis, ir aš neturiu vietos ratui nustatyti. Bandžiau galvoti, kaip į valdiklį įkišti geresnį vairavimo mechanizmą, kai man pasirodė, kad visą valdiklį galiu naudoti kaip vairą.

Analoginėje lazdoje yra du potenciometrai. Vienas matuoja vertikalų judėjimą, o kitas - horizontalų judėjimą. Jis įleidžia 1,6 V per kiekvieną ir matuoja valytuvo sukuriamą įtampą, kad nustatytų, kiek lazda judėjo. Tai reiškia, kad lazdelės judėjimą galima valdyti paduodant tam tikrą įtampą į valytuvo kaištį. (daugiau informacijos čia:

Šis modas naudoja „Arduino“, kad apskaičiuotų kampą pagal akselerometro rodmenis ir konvertuotų jį į analoginį lazdelės judesį per DAC. Todėl jis turėtų veikti su bet kokiu žaidimu, kuriame kaip įvestis naudojama analoginė lazda.

1 žingsnis: jums reikės:

Įrankiai:

  • Lituoklis
  • Lituoklis
  • Lituoklio siurblys/pynė
  • Vielos nuėmiklis
  • Atsuktuvas, galbūt „Torx“, priklausomai nuo valdiklio varžtų (mano yra skersinis)
  • Klijai (pageidautina ne itin stiprūs klijai, kad vėliau juos būtų galima išardyti)
  • USB į nuoseklųjį adapterį programuoti „Arduino“

Medžiagos:

  • „Xbox 360“valdiklis (du!)
  • „Arduino Pro Mini“(arba klonas) (pageidautina 3,3 V. Jei naudojate 5 V versiją, greičiausiai jums reikės padidinto įtampos keitiklio)
  • MPU-6050 giroskopas/akselerometras
  • MCP4725 DAC (du, jei norite valdyti abi ašis)
  • Kažkokia plona viela
  • Duonos lenta, kad galėtumėte viską išbandyti prieš litavimą (neprivaloma, bet rekomenduojama)

2 žingsnis: išardykite valdiklį

Išskirkite valdiklį
Išskirkite valdiklį
Išskirkite valdiklį
Išskirkite valdiklį
Išskirkite valdiklį
Išskirkite valdiklį

Turite atsukti septynis varžtus. Šeši iš jų yra akivaizdūs, tačiau septintas yra už lipduko. Manau, kad jo pašalinimas panaikina jūsų garantiją, todėl tęskite savo rizika. Daugelis vadovų sako, kad jums reikia „Torx“atsuktuvo, bet mano yra kryžminis, todėl patikrinkite valdiklį.

Po to atsargiai nuimkite galinį dangtelį. Jei atitrauksite priekį, mygtukai išsilieja ir tikriausiai eina per visą kambarį. Pakelkite jį iš apačios. Tada atjunkite du vibracinius variklius. (tas, kurio svoris mažas, turi būti kairėje, o tas, kurio svoris didelis - dešinėje). Išimkite PCB ir nuimkite guminius dangtelius nuo analoginių lazdelių. Jie tiesiog atsitraukia.

Kitas dalykas yra nuimti kairę analoginę lazdelę, kad ji netrukdytų mūsų įėjimui, tačiau kairysis gaiduko mechanizmas trukdo. Norėdami jį pašalinti, turite išjungti tris kaiščius iš potenciometro iš plokštės priekio, tada atkabinti mechanizmą nuo PCB.

Tada išlydykite 14 kaiščių, laikančių kairę analoginę lazdelę. Tada nuimkite lazdą.

3 veiksmas: klijuokite komponentus vietoje

Įdėkite komponentus į vietą
Įdėkite komponentus į vietą
Įdėkite komponentus į vietą
Įdėkite komponentus į vietą

Pastebėsite, kad tarp PCB užpakalinės dalies ir korpuso yra gana daug laisvos vietos. Tai leidžia įdėti visą aparatūrą į korpusą nieko neišimant.

Aš supratau tik vėliau, tačiau tai būtų tinkamas laikas išjungti „Arduino“atstatymo mygtuką. Jei to nepadarysite, jis paspaus korpuso nugarą ir projektas nustos veikti, jei per daug priveržiate vieną iš varžtų, kai jį surenkate.

Aš priklijavau ploną kortelės gabalą prie kiekvieno PCB galo, kad jį izoliuotų, tada priklijavau prie valdiklio PCB. Aš nenorėjau naudoti klijų, bet negalėjau sugalvoti geresnio būdo tai padaryti.

Pozicijos paveikslėlyje yra geriausias derinys, kokį tik galiu rasti. „Arduino“yra kairėje, o kraštas su atstatymo mygtuku yra prigludęs prie plastiko gabalo iš dešiniojo paleidimo mechanizmo, kita pusė po laidu ir kampas kuo arčiau baltos jungties. Korpusas yra šiek tiek išsipūtęs, bet neradau geresnės vietos jam įdėti.

Akselerometras yra laido dešinėje. Jis turėtų būti kuo plokščias ir kuo tiesesnis, kitaip vėliau, norint kompensuoti poslinkį, gali tekti parašyti kodą. Atminkite, kad korpuso gale yra keletas išsikišusių plastiko gabalėlių, kurių turite būti atsargūs. Pastebėjau, kad ant išsikišusių plastiko gabalėlių galite uždėti kažką lipnaus ir spalvingo, pavyzdžiui, lūpų dažus, tada uždėti galinį dangtelį, kad pamatytumėte, kur jis palieka žymes.

DAC (-ai) yra apatiniame kairiajame kampe. Čia yra pakankamai vietos, kad būtų galima sukrauti du DAC, vienas ant kito, jei norite valdyti abi ašis. Jums nereikia jų klijuoti. Jie liks ten, kur yra, tik su lituotomis jungtimis. Jei klijuojate kortelę tarp jų, būtinai iškirpkite ją, kad SCL, SDA, VCC ir GND nebūtų prieinami, nes prieisite prie jų iš abiejų pusių.

Jei naudojate du DAC, nepamirškite perjungti adreso trumpiklio ir viename iš jų išjungti ištraukiamųjų rezistorių, kaip aprašyta čia: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -keitiklio prijungimo vadovas

4 žingsnis: įjunkite laidus

Lituokite laidus
Lituokite laidus
Lituokite laidus
Lituokite laidus
Lituokite laidus
Lituokite laidus

Dabar jūs turite viską sujungti. VCC, GND, SDA ir SCL iš visų 2/3 įrenginių turėtų būti prijungti prie „Arduino“atitinkamai prie VCC, GND, A4 ir A5. DAC yra sudėtingiausia dalis. Jei turite du, turite juos sujungti, o kur nors išėję galite prijungti maitinimą ir linijas prie akselerometro, išlaikydami atskirus OUT laidus.

DAC OUT kaištis turi būti prijungtas prie kaiščio, esančio valdiklio PCB, kuris buvo vidurinio horizontalaus potenciometro kaiščio analoginei lazdelei. Tai yra, ten, kur buvo analoginė lazda, viršuje yra trijų kaiščių eilė. Prijunkite jį prie vidurinio. Jei turite kitą DAC, prijunkite jį prie vertikalaus potenciometro kaiščio (eilutė kairėje) tokiu pačiu būdu. Pakeitus gaiduką, negalėsite patekti į kaiščius iš nugaros, todėl turite nuvesti laidą į lentos priekį. Aplink analoginę lazdelių sritį yra apvali plastikinė „siena“, tačiau, laimei, joje yra patogus tarpas, per kurį galite perkišti laidus. Įsitikinkite, kad laidai netrukdo varžtui, esančiam korpuso priekinėje dalyje.

Mano pradinis planas buvo maitinti „Arduino“5V iš USB kabelio, prijungto prie RAW kaiščio, bet kai bandžiau, tai nepadėjo. „Arduino“nieko nepaleido, ir „Arduino“, ir valdiklis po kelių sekundžių išsijungė. Tačiau aš sužinojau, kad yra pastovi 3,3 V išvestis iš dviejų kaiščių, esančių plokštės priekyje, šalia juodo periferinio lizdo, greičiausiai periferiniams įrenginiams maitinti. Jis veikia tiek su VCC, tiek su RAW, bet aš pasirinkau VCC, nes tai jau tinkama įtampa ir todėl, kad tai leidžia man lituoti jį prie VCC laido ant DAC, kuris jau yra šalia plokštės apačios, ir sutaupyti laidų.

Atminkite, kad iš korpuso kyšo daug plastikinių dalių, kurias turite apeiti, tačiau jei klijuojate laidus į vietą, turite tik kartą susirūpinti.

Visa tai sunku apibūdinti žodžiais, todėl įtraukiau nuotraukas ir neapdorotą schemą.

5 veiksmas: užprogramuokite „Arduino“

Dabar turite užprogramuoti „Arduino“. Tam reikia perkelti valdiklio USB kabelį, kad galėtumėte pasiekti „Arduino“nuoseklius kaiščius. Įtraukiau naudojamą kodą. Tam reikalinga „Adafruit MCP4725“biblioteka, kurią rasite čia:

Kodas leidžia tolygiai pereiti visą analoginės lazdelės judesių diapazoną, valdiklį perkeliant 90 laipsnių į kairę iki 90 laipsnių į dešinę, ir laikant jį viduryje, laikant jį plokščią.

Jis gauna valdiklio kampą, apskaičiuodamas atvirkštinę X ašies g jėgos liestinę, padalytą iš Z ašies g jėgos. Tai reiškia, kad jis veikia, jei valdiklis yra vertikalus, plokščias arba bet koks kampas tarp jų. (daugiau informacijos čia:

Tai veikia mano valdiklyje, tačiau kitiems valdikliams gali prireikti skirtingos įtampos, todėl jis nesuderinamas. Manau, kad geriausias būdas rasti įtampos diapazoną yra bandymai ir klaidos. Daugelyje žaidimų bus rodomas analoginio lazdelės judesio slankiklis, tačiau tiksliausias būdas, kurį radau, yra judėjimas, naudojant „jstest“sistemoje „Linux“. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) Čia pateikiamas skaičius tarp -32, 767 ir 32, 767, o ne grafika, todėl tiksliai žinote, kur yra lazda. Prijunkite valdiklį ir „Arduino USB“prie nuoseklaus adapterio, įkelkite „jstest“ir išbandykite skirtingas DAC reikšmes, kol pasieksite diapazono viršų ir apačią, ir užsirašykite kiekvieną. Man tai buvo 1, 593 - 382.

Ypač įdomu yra 36 eilutė:

dacvalue = (valdymo stačiakampis + 2,5617859169446084418) / 0,0025942135867793503208 + 0,5;

Ne iš karto akivaizdu, ką jis daro. Tiesiog paimamas valdiklio kampas (matuojamas radianais ir nuo ~ 1,57 iki ~ -1,57) ir paverčiamas DAC reikšme nuo 1, 593 iki 382. Jei turite kitą DAC diapazoną, turėsite pakeisti šią eilutę.

Eilutę galima parašyti taip:

dacvalue = (kontrolinis kampas +) / + 0,5;

Turėdami ir būdami skaičiais, kuriuos turite pakeisti. yra lygus valdiklio kampo diapazonui (pi), padalytam iš viso DAC verčių diapazono. (diapazono viršuje atėmus diapazono apačią) Taip pakeisite įtampą, nors rezultatai bus už norimo diapazono ribų. Štai kodėl jums reikia. yra lygus padaugintam iš diapazono apačios ir pusės valdiklio judesio srities. (pi / 2) Pridėjus pusę judesio diapazono, įsitikinama, kad tai nėra neigiamas skaičius, o pridėjus padauginus iš diapazono apačios, jis bus sinchronizuotas su norimu diapazonu.

Konvertuojant dešimtainius skaičius į sveikąjį skaičių, C ++ nesuapvalina. Vietoj to jis nutraukia dešimtainį skaičių, todėl 9,9 tampa 9. Pridėję 0,5 pabaigoje įsitikinsite, kad viskas, kas yra daugiau nei pusė, patenka į kitą sveikąjį skaičių, taigi jis apvalinamas.

Įkėlę programą įsitikinkite, kad ji veikia su „jstest“.

6 žingsnis: Surinkite valdiklį

Sudėkite valdiklį atgal taip pat, kaip jį išardėte, atėmus kairę analoginę lazdelę. Tai turėtų veikti dabar. Manau, kad nėra pastebimo vėlavimo ir tai daug geriau nei naudojant analoginę lazdą. Kadangi jis naudoja akselerometrą, jį veikia staigūs judesiai, tačiau jūs turite stengtis tai pastebėti.

7 žingsnis: Galimi patobulinimai

Yra keletas patobulinimų, kuriuos būtų galima padaryti. Jie apima:

  • Naudojant mažiau sudėtingą magnetinį laidą
  • Viską išgraviruoti į vieną PCB, suprojektuotą taip, kad tilptų į valdiklio dėklą
  • Iš naujo pritvirtinkite kairę analoginę lazdelę ir prijunkite kojas prie „Arduino“analoginių įėjimų, kad jas būtų galima naudoti „Arduino“reguliavimui
  • Galinio belaidžio valdiklio korpuso gavimas ir projekto įdėjimas į akumuliatoriaus skyrių (tam reikės iškirpti skylę USB kabeliui)

Rekomenduojamas: