Talaan ng mga Nilalaman:

Xbox 360 Controller Accelerometer / gyro Steering Mod: 7 Mga Hakbang
Xbox 360 Controller Accelerometer / gyro Steering Mod: 7 Mga Hakbang

Video: Xbox 360 Controller Accelerometer / gyro Steering Mod: 7 Mga Hakbang

Video: Xbox 360 Controller Accelerometer / gyro Steering Mod: 7 Mga Hakbang
Video: when you put these on.. 2024, Nobyembre
Anonim
Xbox 360 Controller Accelerometer / gyro Steering Mod
Xbox 360 Controller Accelerometer / gyro Steering Mod

Naglalaro ako ng Assetto Corsa kasama ang aking Xbox 360 controller. Sa kasamaang palad, ang pagpipiloto gamit ang analogue stick ay napaka-mahirap, at wala akong puwang para sa isang pag-set up ng gulong. Sinubukan kong mag-isip ng mga paraan kung paano ko maitutulak ang isang mas mahusay na mekanismo ng pagpipiloto sa controller, nang sumagi sa akin na maaari kong gamitin ang buong controller bilang isang manibela.

Ang analogue stick ay may dalawang potentiometers. Sinusukat ng isang ang patayong paggalaw, at ang isang sumusukat sa pahalang na paggalaw. Inilalagay nito ang 1.6V sa bawat isa at sinusukat ang boltahe na ginawa sa wiper upang matukoy kung gaano ang inilipat ng stick. Nangangahulugan ito na posible na kontrolin ang paggalaw ng stick sa pamamagitan ng pagpapakain ng isang partikular na boltahe sa wiper pin. (karagdagang impormasyon dito:

Ang mod na ito ay gumagamit ng isang Arduino upang makalkula ang anggulo mula sa mga pagbabasa ng accelerometer at i-convert ito sa paggalaw ng analogue stick sa pamamagitan ng isang DAC. Samakatuwid, dapat itong gumana sa anumang laro na gumagamit ng analogue stick bilang input.

Hakbang 1: Kakailanganin mo:

Mga tool:

  • Panghinang
  • Panghinang
  • Panghinang / pangsuyot
  • Wire stripper
  • Isang distornilyador, marahil isang Torx depende sa mga turnilyo sa iyong controller (ang akin ay crosshead)
  • Pandikit (mas mabuti na hindi napakalakas na pandikit upang maaari itong ihiwalay sa ibang pagkakataon)
  • Isang USB sa serial adapter upang mai-program ang Arduino

Mga Materyales:

  • Controller ng Xbox 360 (duh!)
  • Arduino Pro Mini (o isang clone) (mas mabuti ang 3.3V. Kung gagamitin mo ang bersyon ng 5V malamang na kailangan mo ng isang step up voltage converter)
  • Isang MPU-6050 gyroscope / accelerometer
  • Isang MCP4725 DAC (dalawa kung nais mong kontrolin ang parehong mga palakol)
  • Ilang manipis na kawad
  • Isang breadboard upang masubukan mo ang lahat bago ka maghinang (opsyonal, ngunit inirerekomenda)

Hakbang 2: Ihiwalay ang Controller

Ihiwalay ang Controller
Ihiwalay ang Controller
Ihiwalay ang Controller
Ihiwalay ang Controller
Ihiwalay ang Controller
Ihiwalay ang Controller

Mayroong pitong mga turnilyo na kailangan mong alisin. Anim sa kanila ay halata, ngunit ang ikapito ay nasa likod ng isang sticker. Ipinapalagay kong ang pag-aalis nito ay walang bisa ang iyong warranty, kaya magpatuloy sa iyong sariling peligro. Maraming mga gabay ang nagsasabi na kailangan mo ng isang Torx distornilyador, ngunit ang sa akin ay crosshead, kaya suriin ang iyong controller.

Pagkatapos nito, maingat na i-pry ang back cover. Kung pry mo sa harap ang mga pindutan ay bubuhos at marahil ay pumunta sa buong silid. Itaas ito mula sa ilalim. Pagkatapos i-unplug ang dalawang mga motor na panginginig. (ang may maliit na timbang ay dapat na nasa kaliwa, at ang isa na may malaking timbang sa kanan) Ilabas ang PCB at alisin ang mga takip na goma sa mga analogue stick. Pasimple silang humihila.

Ang susunod na bagay ay alisin ang kaliwang analogue stick upang hindi ito makagambala sa aming pag-input, ngunit ang mekanismo ng kaliwang trigger ay nasa daan. Upang matanggal ito, kailangan mong sirain ang tatlong mga pin mula sa potensyomiter mula sa harap ng board, pagkatapos ay i-unclip ang mekanismo mula sa PCB.

Susunod, wasain ang 14 na mga pin na may hawak na kaliwang stick ng analogue. Pagkatapos ay hilahin ang stick.

Hakbang 3: Idikit ang Mga Bahagi sa Lugar

Idikit ang Mga Sangkap sa Lugar
Idikit ang Mga Sangkap sa Lugar
Idikit ang Mga Sangkap sa Lugar
Idikit ang Mga Sangkap sa Lugar

Mapapansin mo na mayroong maraming clearance sa pagitan ng likod ng PCB at ng kaso. Ginagawa nitong posible na ilagay ang lahat ng hardware sa kaso nang hindi inaalis ang anumang.

Napagtanto ko lamang sa paglaon, ngunit ito ay magiging isang magandang panahon upang wasakin ang pindutan ng pag-reset sa Arduino. Kung hindi mo gagawin, pipindutin nito ang likod ng kaso at maging sanhi ng paghinto ng proyekto ng proyekto kung mas hinigpitan mo ang isa sa mga tornilyo kapag muling pinagsama ito.

Idinikit ko ang isang manipis na piraso ng kard sa likuran ng bawat PCB upang insulate ito, pagkatapos ay nakadikit iyon sa PCB ng tagapamahala. Nag-aatubili akong gumamit ng pandikit, ngunit hindi maisip ang isang mas mahusay na paraan upang magawa ito.

Ang mga posisyon sa imahe ay ang pinakamahusay na kombinasyon na maaari kong makita. Ang Arduino ay nasa kaliwa, na may gilid na may pindutang reset na flush laban sa piraso ng plastik mula sa kanang mekanismo ng pag-trigger, kasama ang kabilang panig sa ilalim ng kawad at may sulok na malapit sa puting konektor hangga't maaari. Mayroong isang maliit na umbok sa kaso, ngunit hindi ako makahanap ng isang mas mahusay na lugar upang ilagay ito.

Ang accelerometer ay nasa kanan ng kawad. Dapat itong maging patag at tuwid hangga't maaari, kung hindi man ay maaaring magsulat ka ng ilang code sa paglaon upang mabayaran ang offset. Tandaan na mayroong ilang nakausli na mga piraso ng plastik sa likod ng kaso na dapat mong maging maingat upang maiwasan. Nalaman ko na maaari kang maglagay ng isang bagay na malagkit at makulay, tulad ng kolorete, sa nakausli na mga piraso ng plastik pagkatapos ay ilagay ang takip sa likuran upang makita kung saan ito nag-iiwan ng mga marka.

Ang (mga) DAC ay pupunta sa ibabang kaliwang sulok. Mayroong sapat na clearance dito upang mag-stack ng dalawang DAC, isa sa tuktok ng iba pa, kung nais mong kontrolin ang parehong mga palakol. Hindi mo kailangang idikit ang mga ito. Manatili sila kung nasaan sila kasama lamang ang mga solder na koneksyon. Kung ikaw ay nananatili card sa pagitan ng mga ito siguraduhin na gupitin mo ang card upang iwanan ang SCL, SDA, VCC at GND na ma-access, dahil maa-access mo ang mga ito mula sa magkabilang panig.

Kung gumagamit ka ng dalawang DAC, huwag kalimutang ilipat ang address jumper at huwag paganahin ang mga pull up resistors sa isa sa mga ito, tulad ng inilarawan dito: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -converter-hookup-gabay

Hakbang 4: Maghinang sa Mga Wires On

Solder ang Wires On
Solder ang Wires On
Solder ang Wires On
Solder ang Wires On
Solder ang Wires On
Solder ang Wires On

Ngayon kailangan mong ikonekta ang lahat. Ang VCC, GND, SDA at SCL mula sa lahat ng mga aparato ng 2/3 ay dapat na konektado sa VCC, GND, A4 at A5 sa Arduino, ayon sa pagkakabanggit. Ang DAC ay ang trickiest bahagi. Kung mayroon kang dalawa, kailangan mong ikonekta ang mga ito nang magkasama, habang umaalis sa isang lugar maaari mong ikonekta ang lakas at mga linya sa accelerometer, habang pinapanatili ang magkahiwalay na mga wire sa OUT.

Ang OUT pin sa DAC ay dapat na konektado sa pin sa PCB ng taga-kontrol na dati ay para sa gitnang pahalang na potentiometer pin para sa analogue stick. Iyon ay, kung saan ang analogue stick ay, mayroong isang hilera ng tatlong mga pin sa itaas. Ikonekta ito sa gitna. Kung mayroon kang ibang DAC ikonekta ito sa patayong potentiometer pin (ang hilera sa kaliwa) sa parehong paraan. Hindi ka makakarating sa mga pin mula sa likuran kapag pinalitan ang gatilyo, kaya't kailangan mong magpatakbo ng isang kawad sa harap ng board. Mayroong isang pabilog na plastik na "pader" sa paligid ng lugar ng analogue stick, ngunit sa kabutihang palad mayroong isang maginhawang puwang dito na maaari mong mailagay ang mga wire. Siguraduhin na ang mga wire ay hindi makagambala sa tornilyo post sa harap na bahagi ng kaso.

Ang aking orihinal na plano ay ang paganahin ang Arduino gamit ang 5V mula sa USB cable na konektado sa RAW pin, ngunit nang subukan ko ito, hindi ito gumana. Ang Arduino ay hindi nagpatakbo ng anumang bagay, at kapwa ang Arduino at ang controller ay naka-off pagkatapos ng ilang segundo. Gayunpaman, natuklasan ko na mayroong isang matatag na output ng 3.3V mula sa dalawang mga pin sa harap ng board malapit sa itim na peripheral socket, marahil para sa pag-power ng mga peripheral. Gumagana ito sa parehong VCC at RAW, ngunit pinili ko ang VCC sapagkat ito ay ang tamang boltahe at dahil pinapayagan akong maghinang ito sa VCC wire sa DAC na malapit na sa ilalim ng board at makatipid sa mga wire.

Magkaroon ng kamalayan na maraming mga plastik na bahagi na nakausli mula sa kaso na kailangan mong magtrabaho sa paligid, ngunit kung idikit mo ang mga wire sa lugar, kakailanganin mo lamang mag-alala tungkol sa kanila nang isang beses.

Ang lahat ng ito ay mahirap ilarawan sa mga salita, kaya nagsama ako ng mga larawan at isang diagram ng krudo.

Hakbang 5: I-program ang Arduino

Ngayon kailangan mong i-program ang Arduino. Kinakailangan nito ang paglipat ng USB cable sa controller upang ma-access mo ang mga serial pin sa Arduino. Isinama ko ang ginamit kong code. Kinakailangan nito ang Adafruit MCP4725 library, na matatagpuan dito:

Tulad ng, binibigyang-daan ka ng code na dumaan sa buong saklaw ng paggalaw ng analogue stick nang pantay-pantay sa pamamagitan ng paglipat ng controller ng 90 degree sa kaliwa hanggang 90 degree sa kanan, at panatilihin ito sa gitna sa pamamagitan ng pagpindot nito.

Nakukuha nito ang anggulo ng controller sa pamamagitan ng pagkalkula ng kabaligtaran tangent ng X axis g-force na hinati ng Z axis g-force. Nangangahulugan ito na gumagana ito kung ang tagakontrol ay patayo, patag, o anumang anggulo sa pagitan. (karagdagang impormasyon dito:

Gumagana ito sa aking controller, ngunit ang ibang mga tagakontrol ay maaaring mangailangan ng iba't ibang mga voltages, na inilalagay ito sa pagkakahanay. Sa palagay ko ang pinakamahusay na paraan upang makahanap ng saklaw ng boltahe ay ang pagsubok at error. Maraming mga laro ang magpapakita sa iyo ng isang slider para sa paggalaw ng analogue stick, ngunit ang pinaka-tumpak na paraan na nakita ko upang matukoy ang paggalaw ay kasama ang jstest sa Linux. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) Binibigyan ka nito ng isang numero sa pagitan ng -32, 767 at 32, 767 sa halip na isang graphic, upang malaman mo nang eksakto kung nasaan ang stick. I-plug ang parehong controller at ang Arduino USB sa serial adapter, i-load ang jstest at subukan ang iba't ibang mga halaga ng DAC hanggang sa maabot mo ang tuktok at ibaba ng saklaw, at gumawa ng tala ng bawat isa. Para sa akin ito ay 1, 593 - 382.

Ang partikular na interes ay ang linya 36:

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

Hindi kaagad halata ang ginagawa nito. Sa simple, tumatagal ito ng anggulo ng controller (sinusukat sa mga radian at sa pagitan ng ~ 1.57 at ~ -1.57) at binago ito sa isang halaga sa pagitan ng 1, 593 at 382 para sa DAC. Kung mayroon kang ibang hanay ng DAC, kakailanganin mong baguhin ang linya na iyon.

Maaaring isulat ang linya bilang:

dacvalue = (controllerangle +) / + 0.5;

Gamit at pagiging mga bilang na kailangan mong baguhin. ay katumbas ng saklaw ng anggulo ng controller (pi) na hinati ng kabuuang saklaw ng mga halaga ng DAC. (sa tuktok ng saklaw na minus sa ilalim ng saklaw) Dadalhin ka nito hanggang sa baguhin ang boltahe, kahit na ang mga resulta ay nasa labas ng saklaw na nais mo. Iyon ang dahilan kung bakit kailangan mo. ay katumbas ng multiply ng ilalim ng saklaw kasama ang kalahati ng saklaw ng paggalaw ng controller. (pi / 2) Ang pagdaragdag ng kalahati ng saklaw ng paggalaw ay tinitiyak na hindi ito isang negatibong numero, at ang pagdaragdag na pinarami ng ilalim ng saklaw ay tinitiyak na naka-synchronize ito sa saklaw na nais mo.

Kapag nagko-convert ng mga decimal sa isang integer, ang C ++ ay hindi bilugan. Sa halip ay pinuputol nito ang decimal, kaya't ang 9.9 ay nagiging 9. Ang pagdaragdag ng 0.5 sa dulo ay nakasisiguro na ang anumang nasa itaas ng kalahati ay pupunta sa susunod na integer, kaya't bilog ito.

Kapag na-upload mo na ang iyong programa, tiyaking gumagana ito sa jstest.

Hakbang 6: Muling pagsamahin ang Controller

Isama muli ang controller sa parehong paraan na pinaghiwalay mo ito, na ibinawas sa kaliwang stick na analogue. Dapat itong gumana ngayon. Nalaman kong walang kapansin-pansin na pagkaantala at mas mahusay ito kaysa sa paggamit ng analogue stick. Dahil gumagamit ito ng isang accelerometer, apektado ito ng biglaang paggalaw, ngunit kailangan mong iwasan ang iyong paraan upang mapansin ito.

Hakbang 7: Mga Posibleng Pagpapabuti

Mayroong ilang mga pagpapabuti na maaaring magawa. Kabilang dito ang:

  • Gumagamit ng mas kaunting masalimuot na wire ng magnet
  • Kinukulit ang lahat sa isang PCB na idinisenyo upang magkasya sa case ng controller
  • Ang muling pag-install sa kaliwang stick ng analogue at pagkonekta sa mga binti sa mga input ng analogue sa Arduino upang magamit nila upang ayusin ang Arduino
  • Pagkuha ng piraso ng back case para sa isang wireless controller at paglalagay ng proyekto sa kompartimento ng baterya (mangangailangan ito ng paggupit ng isang butas para sa USB cable)

Inirerekumendang: