Xbox 360 Controller Accelerometer/gyro stuurmodus: 7 stappe
Xbox 360 Controller Accelerometer/gyro stuurmodus: 7 stappe
Anonim
Xbox 360 Controller Accelerometer/gyro stuurmodus
Xbox 360 Controller Accelerometer/gyro stuurmodus

Ek speel Assetto Corsa met my Xbox 360 -beheerder. Ongelukkig is die stuur met die analoogstok baie moeilik, en ek het nie ruimte vir 'n wielopstelling nie. Ek het probeer dink hoe ek 'n beter stuurmeganisme in die kontroleerder kon skuur, toe ek by my opgekom het dat ek die hele bestuurder as 'n stuurwiel kon gebruik.

Die analoog stok het twee potensiometers. Een meet vertikale beweging, en een meet horisontale beweging. Dit sit 1,6V deur elkeen en meet die spanning wat by die veër geproduseer word om te bepaal hoeveel die stok beweeg het. Dit beteken dat dit moontlik is om die beweging van die stok te beheer deur 'n spesifieke spanning aan die wisserpen te voer. (meer inligting hier:

Hierdie mod gebruik 'n Arduino om die hoek van die versnellingsmeterlesings te bereken en om te skakel na analoog stokbeweging via 'n DAC. Daarom moet dit werk met enige speletjie wat die analoog stok as invoer gebruik.

Stap 1: U benodig:

Gereedskap:

  • Soldeerbout
  • Soldeer
  • Soldeersuig/vlegsel
  • Draadstropper
  • 'N Skroewedraaier, miskien 'n Torx -een, afhangende van die skroewe in u kontroleerder (myne is kruis)
  • Gom (verkieslik nie baie sterk gom nie, sodat dit later uitmekaar gehaal kan word)
  • 'N USB -na -seriële adapter om die Arduino te programmeer

Materiaal:

  • Xbox 360 -beheerder (duh!)
  • Arduino Pro Mini (of 'n kloon) (verkieslik 3,3V. As u die 5V -weergawe gebruik, benodig u waarskynlik 'n opwaartse spanningskonverter)
  • 'N MPU-6050 gyroscoop/versnellingsmeter
  • 'N MCP4725 DAC (twee as jy albei asse wil beheer)
  • 'N Paar dun draadjies
  • 'N Broodbord sodat u alles kan toets voordat u soldeer (opsioneel, maar word aanbeveel)

Stap 2: Verwyder die beheerder

Verwyder die beheerder
Verwyder die beheerder
Verwyder die beheerder
Verwyder die beheerder
Verwyder die beheerder
Verwyder die beheerder

Daar is sewe skroewe wat u moet verwyder. Ses van hulle is duidelik, maar die sewende is agter 'n plakker. Ek neem aan dat die verwydering daarvan u waarborg ongeldig maak, dus gaan op eie risiko. Baie gidse sê dat u 'n Torx -skroewedraaier nodig het, maar myne is kruis, dus kyk na u kontroleerder.

Trek daarna die agterblad versigtig af. As u van die voorkant af losdraai, val die knoppies uit en gaan waarskynlik deur die kamer. Lig dit van onder af. Ontkoppel dan die twee vibrasiemotors. (die een met die klein gewig moet aan die linkerkant wees, en die een met die groot gewig aan die regterkant) Haal die PCB uit en verwyder die rubberdoppies op die analoog stokke. Hulle trek eenvoudig weg.

Die volgende ding is om die linker analoog stok te verwyder sodat dit nie ons insette belemmer nie, maar die linker sneller meganisme is in die pad. Om dit te verwyder, moet u die drie penne van die potensiometer aan die voorkant van die bord losmaak en die meganisme van die printplaat losmaak.

Verwyder vervolgens die 14 penne wat die linker analoog stok hou. Trek dan die stok af.

Stap 3: Plak die komponente op hul plek

Plak die komponente op hul plek
Plak die komponente op hul plek
Plak die komponente op hul plek
Plak die komponente op hul plek

U sal agterkom dat daar baie ruimte is tussen die agterkant van die PCB en die omhulsel. Dit maak dit moontlik om al die hardeware in die kas te plaas sonder om iets te verwyder.

Ek het eers later besef, maar dit sou 'n goeie tyd wees om die reset -knoppie op die Arduino te desolder. As u dit nie doen nie, druk dit op die agterkant van die omhulsel en veroorsaak dat die projek nie meer werk as u een van die skroewe te veel vasdraai as u dit weer aanmekaar sit nie.

Ek plak 'n dun stukkie kaart aan die agterkant van elke PCB vas om dit te isoleer, en plak dit dan op die PCB van die kontroleerder. Ek was huiwerig om gom te gebruik, maar kon nie 'n beter manier bedink om dit te doen nie.

Die posisies in die prentjie is die beste kombinasie wat ek kon vind. Die Arduino is aan die linkerkant, met die rand met die reset -knoppie teen die stuk plastiek van die regter snellermeganisme, met die ander kant onder die draad en met die hoek so na as moontlik aan die wit aansluiting. Daar is 'n effense bult in die tas, maar ek kon nie 'n beter plek kry om dit te plaas nie.

Die versnellingsmeter is regs van die draad. Dit moet so plat en so reguit as moontlik wees, anders moet u later 'n kode skryf om die verrekening te vergoed. Let daarop dat daar 'n paar stukke plastiek aan die agterkant van die omhulsel uitsteek wat u versigtig moet vermy. Ek het agtergekom dat u iets klewerig en kleurvol, soos lipstiffie, op die uitstaande stukke plastiek kan sit en dan die agterblad kan opsit om te sien waar dit merke agterlaat.

Die DAC (s) verskyn in die onderste linkerhoek. Hier is genoeg speling om twee DAC's, een bo -op die ander, te stapel as u albei asse wil beheer. U hoef dit nie vas te plak nie. Hulle bly net waar hulle is met net die gesoldeerde verbindings. As u 'n kaart tussen hulle steek, maak seker dat u die kaart sny sodat SCL, SDA, VCC en GND toeganklik is, want u het toegang van beide kante af.

As u twee DAC's gebruik, moet u nie vergeet om die adresbreker te skakel en die optelweerstands op een daarvan uit te skakel nie, soos hier beskryf: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -omskakelaar-aansluitingsgids

Stap 4: Soldeer die drade aan

Soldeer die drade aan
Soldeer die drade aan
Soldeer die drade aan
Soldeer die drade aan
Soldeer die drade aan
Soldeer die drade aan

Nou moet u alles verbind. VCC, GND, SDA en SCL van alle 2/3 toestelle moet onderskeidelik op VCC, GND, A4 en A5 op die Arduino gekoppel wees. Die DAC's is die moeilikste deel. As u twee het, moet u dit met mekaar verbind, terwyl u êrens vertrek, kan u die krag en die lyne aan die versnellingsmeter koppel, terwyl die OUT -drade geskei bly.

Die OUT -pen op die DAC moet gekoppel word aan die pen op die PCB van die kontroleerder wat vroeër vir die middelste horisontale potensiometerpen vir die analoog stok was. Dit wil sê, waar die analoog stok was, is daar 'n ry van drie penne aan die bokant. Koppel dit aan die middelste. As u nog 'n DAC het, koppel dit op dieselfde manier aan die vertikale potensiometerpen (die ry na links). U sal nie by die penne van agter kan kom as die sneller vervang word nie, dus moet u 'n draad na die voorkant van die bord trek. Daar is 'n sirkelvormige "muur" rondom die analoog stokarea, maar gelukkig is daar 'n maklike gaping waarmee u drade kan trek. Maak seker dat die drade nie die skroefpaal aan die voorkant van die omhulsel in die pad steek nie.

My oorspronklike plan was om die Arduino met die 5V van die USB -kabel wat aan die RAW -pen gekoppel is, van krag te maak, maar toe ek dit probeer, werk dit nie. Die Arduino het niks uitgevoer nie, en beide die Arduino en die beheerder het na 'n paar sekondes afgeskakel. Ek het egter ontdek dat daar 'n bestendige 3,3V -uitset van twee penne aan die voorkant van die bord naby die swart randapparaat is, vermoedelik vir die voeding van randapparatuur. Dit werk met beide VCC en RAW, maar ek het VCC gekies omdat dit reeds die regte spanning is en omdat ek dit aan die VCC -draad kan laat soldeer op die DAC wat reeds naby die onderkant van die bord is en bespaar op drade.

Hou in gedagte dat daar baie plastiekdele uit die omhulsel kom, maar u moet dit net een keer bekommer as u die drade vasplak.

Dit is moeilik om dit alles met woorde te beskryf, so ek het prente en 'n ruwe diagram ingesluit.

Stap 5: Programmeer die Arduino

Nou moet u die Arduino programmeer. Dit vereis dat die USB -kabel op die beheerder verplaas word, sodat u toegang tot die seriële penne op die Arduino kan kry. Ek het die kode wat ek gebruik het ingesluit. Dit benodig die Adafruit MCP4725 -biblioteek, wat u hier kan vind:

Met die kode kan u deur die hele bewegingsbereik van die analoog stok eweredig gaan deur die beheerder 90 grade na links na 90 grade na regs te skuif en dit in die middel te hou deur dit plat te hou.

Dit kry die hoek van die kontroleerder deur die inverse raaklyn van die X-as g-krag gedeel deur die Z-as g-krag te bereken. Dit beteken dat dit werk as die kontroleerder vertikaal, plat of 'n hoek tussenin is. (meer inligting hier:

Dit werk op my kontroleerder, maar ander beheerders kan verskillende spannings benodig, wat dit nie in lyn kan bring nie. Ek dink die beste manier om die spanningsbereik te vind, is met toets en fout. Baie speletjies wys u 'n skuifbalk vir die analoog stokbeweging, maar die mees akkurate manier om beweging te bepaal, is met jstest op Linux. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) Dit gee u 'n getal tussen -32, 767 en 32, 767 eerder as 'n grafiese, sodat u presies weet waar die stok is. Sluit beide die kontroleerder en die Arduino USB -na -seriële adapter aan, laai die eerste en probeer verskillende DAC -waardes totdat u die bokant en onderkant van die reeks bereik, en teken elkeen daarvan aan. Vir my was dit 1, 593 - 382.

Van besondere belang is reël 36:

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

Dit is nie onmiddellik duidelik wat dit doen nie. Dit neem eenvoudig die hoek van die beheerder (gemeet in radiale en tussen ~ 1.57 en ~ -1.57) en sit dit om in 'n waarde tussen 1, 593 en 382 vir die DAC. As u 'n ander DAC -reeks het, moet u die reël verander.

Die reël kan as volg geskryf word:

dacvalue = (controllerangle +) / + 0.5;

Met en deur die getalle wat u moet verander. is gelyk aan die omvang van die beheerhoek (pi) gedeel deur die totale reeks DAC -waardes. (die bokant van die reeks minus die onderkant van die reeks) Dit bring u sover as om die spanning te verander, hoewel die resultate buite die bereik is wat u wil hê. Dit is hoekom jy nodig het. is gelyk aan vermenigvuldig met die onderkant van die reeks plus die helfte van die bewegingsbereik van die beheerder. (pi / 2) As u die helfte van die bewegingsreeks byvoeg, maak u seker dat dit nie 'n negatiewe getal is nie, en as u dit vermenigvuldig met die onderkant van die reeks, word dit gesinkroniseer met die bereik wat u wil hê.

By die omskakeling van die desimale na 'n heelgetal, word C ++ nie afgerond nie. Dit sny eerder die desimale af, sodat 9.9 9 word. Deur 0.5 aan die einde by te voeg, kan alles bo die helfte na die volgende heelgetal gaan, sodat dit afgerond word.

As u u program opgelaai het, moet u seker maak dat dit met jstest werk.

Stap 6: Monteer die beheerder weer

Plaas die beheerder weer op dieselfde manier as wat u dit uitmekaar gehaal het, minus die linker analoog stok. Dit behoort nou te werk. Ek vind dat daar geen merkbare vertraging is nie en dit is baie beter as om die analoog stok te gebruik. Omdat dit 'n versnellingsmeter gebruik, word dit deur skielike bewegings beïnvloed, maar u moet uit die pad kom om dit raak te sien.

Stap 7: Moontlike verbeterings

Daar kan verbeterings aangebring word. Dit sluit in:

  • Gebruik minder omslagtige magneetdraad
  • Ets alles op een PCB wat ontwerp is om in die beheerkas te pas
  • Bevestig die linker analoog stok weer en verbind die bene met die analoog ingange op die Arduino sodat hulle gebruik kan word om die Arduino aan te pas
  • Kry die agterkant van die draadlose kontroleerder en plaas die projek in die batterykompartiment (dit verg 'n gat vir die USB -kabel)