Съдържание:

Акселерометър за контролер Xbox 360/Жироскоп Управляващ режим: 7 стъпки
Акселерометър за контролер Xbox 360/Жироскоп Управляващ режим: 7 стъпки

Видео: Акселерометър за контролер Xbox 360/Жироскоп Управляващ режим: 7 стъпки

Видео: Акселерометър за контролер Xbox 360/Жироскоп Управляващ режим: 7 стъпки
Видео: Настройки геймпада с гироскопом для DMZ Warzone 2 и MW2 на PlayStation 5 2024, Юли
Anonim
Акселерометър за контролер Xbox 360/Жироскоп Управление Mod
Акселерометър за контролер Xbox 360/Жироскоп Управление Mod

Играл съм Assetto Corsa с моя Xbox 360 контролер. За съжаление, управлението с аналоговия стик е много тромаво и нямам място за настройка на колело. Опитах се да измисля начини, по които да вкарам по -добър кормилен механизъм в контролера, когато ми хрумна, че мога да използвам целия контролер като волан.

Аналоговият стик има два потенциометра. Един измерва вертикално движение, а друг измерва хоризонтално движение. Той поставя 1.6V през всеки и измерва напрежението, произведено от чистачката, за да определи колко се е преместило пръчката. Това означава, че е възможно да се контролира движението на пръчката чрез подаване на определено напрежение към щифта на чистачката. (повече информация тук:

Този мод използва Arduino, за да изчисли ъгъла от показанията на акселерометъра и да го преобразува в аналогово движение на пръчка чрез DAC. Следователно, той трябва да работи с всяка игра, която използва аналоговия стик като вход.

Стъпка 1: Ще ви трябва:

Инструменти:

  • Поялник
  • Припой
  • Припой смукател/плитка
  • Машина за сваляне на тел
  • Отвертка, може би Torx в зависимост от винтовете във вашия контролер (моите са с напречна глава)
  • Лепило (за предпочитане не е супер силно лепило, за да може да се разглоби по -късно)
  • USB към сериен адаптер за програмиране на Arduino

Материали:

  • Контролер за Xbox 360 (да!)
  • Arduino Pro Mini (или клонинг) (за предпочитане 3.3V. Ако използвате версията 5V, вероятно ще ви е необходим усилващ преобразувател на напрежение)
  • Жироскоп/акселерометър MPU-6050
  • MCP4725 DAC (две, ако искате да контролирате и двете оси)
  • Някаква тънка жица
  • Макет, за да можете да тествате всичко преди запояване (по избор, но препоръчително)

Стъпка 2: Разглобете контролера

Отделете контролера
Отделете контролера
Отделете контролера
Отделете контролера
Отделете контролера
Отделете контролера

Трябва да премахнете седем винта. Шест от тях са очевидни, но седмата е зад стикер. Предполагам, че премахването му анулира вашата гаранция, така че продължете на свой собствен риск. Много водачи казват, че имате нужда от отвертка Torx, но моите са с кръстосана глава, така че проверете контролера си.

След това внимателно отстранете задния капак. Ако откъснете предната част, бутоните ще се разпръснат и вероятно ще преминат из цялата стая. Повдигнете го отдолу. След това изключете двата вибрационни двигателя. (този с малко тегло трябва да е отляво, а този с голямо тегло отдясно) Извадете печатната платка и отстранете гумените капачки на аналоговите пръчки. Те просто се отдръпват.

Следващото нещо е да премахнете левия аналогов стик, така че да не пречи на въвеждането ни, но левият спусъков механизъм е на пътя. За да го премахнете, трябва да изварите трите щифта от потенциометъра от предната страна на платката, след което да откачите механизма от печатната платка.

След това отлепете 14 -те щифта, държащи лявата аналогова пръчка. След това издърпайте пръчката.

Стъпка 3: Залепете компонентите на място

Залепете компонентите на място
Залепете компонентите на място
Залепете компонентите на място
Залепете компонентите на място

Ще забележите, че има доста свободно пространство между задната част на печатната платка и кутията. Това дава възможност да поставите целия хардуер в кутията, без да премахвате нищо.

Разбрах едва по -късно, но това би било подходящ момент да разлепя бутона за нулиране на Arduino. Ако не го направите, той ще натисне гърба на кутията и ще накара проекта да спре да работи, ако затегнете един от винтовете твърде много, когато го сглобявате отново.

Залепих тънко парче карта към задната страна на всяка печатна платка, за да я изолирам, след което залепих това към печатната платка на контролера. Не бях склонен да използвам лепило, но не можех да измисля по -добър начин да го направя.

Позициите в изображението са най -добрата комбинация, която мога да намеря. Arduino е вляво, като ръбът с бутона за нулиране е изравнен с парчето пластмаса от десния спусъков механизъм, с другата страна под проводника и с ъгъла възможно най -близо до белия конектор. В корпуса има леко издутина, но не можах да намеря по -добро място да го сложа.

Акселерометърът е вдясно от проводника. Тя трябва да бъде възможно най -равна и възможно най -права, в противен случай може да се наложи да напишете по -късно код, за да компенсирате изместването. Обърнете внимание, че има някои стърчащи парчета пластмаса на гърба на кутията, които трябва да внимавате, за да избегнете. Открих, че можете да поставите нещо лепкаво и цветно, като червило, върху изпъкналите парчета пластмаса, след което поставете задния капак, за да видите къде оставя следи.

DAC (и) се намират в долния ляв ъгъл. Тук има достатъчно свободно пространство за подреждане на два DAC, един върху друг, ако искате да контролирате и двете оси. Не е нужно да ги залепвате. Те ще останат там, където са само с запоени връзки. Ако поставяте карта между тях, не забравяйте да изрежете картата, така че да оставите SCL, SDA, VCC и GND достъпни, защото ще имате достъп до тях от двете страни.

Ако все пак използвате два DAC, не забравяйте да превключите джъмпера на адреса и да деактивирате издърпващите резистори на един от тях, както е описано тук: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -converter-hookup-guide

Стъпка 4: Запоявайте проводниците

Запоявайте проводниците включени
Запоявайте проводниците включени
Запоявайте проводниците включени
Запоявайте проводниците включени
Запоявайте проводниците включени
Запоявайте проводниците включени

Сега трябва да свържете всичко. VCC, GND, SDA и SCL от всички 2/3 устройства трябва да бъдат свързани съответно към VCC, GND, A4 и A5 на Arduino. DAC са най -сложната част. Ако имате две, трябва да ги свържете заедно, докато напускате някъде, можете да свържете захранването и линиите към акселерометъра, като същевременно държите отделно изходните проводници.

Изходният извод на DAC трябва да бъде свързан с щифта на платката на контролера, който преди е бил за средния хоризонтален щифт на потенциометъра за аналоговия стик. Тоест, там, където беше аналоговата пръчка, в горната част има ред от три щифта. Свържете го със средния. Ако имате друг DAC, свържете го към вертикалния щифт на потенциометъра (ред вляво) по същия начин. Няма да можете да стигнете до щифтовете отзад, когато спусъкът е сменен, така че трябва да прекарате проводник към предната част на дъската. Около зоната на аналоговия стик има кръгла пластмасова „стена“, но за щастие в нея има удобна пролука, през която можете да прокарате проводници. Уверете се, че проводниците не пречат на винтовия стълб в предната част на кутията.

Първоначалният ми план беше да захранвам Arduino с 5V от USB кабела, свързан към RAW щифта, но когато го опитах, не се получи. Arduino не работеше нищо и Arduino и контролерът се изключиха след няколко секунди. Открих обаче, че има стабилен 3.3V изход от два пина в предната част на платката близо до черния периферен гнездо, вероятно за захранване на периферни устройства. Работи както с VCC, така и с RAW, но аз избрах VCC, защото вече е правилното напрежение и защото ми позволява да го запоя към VCC проводника на DAC, който вече е близо до дъното на платката, и да спестя на проводници.

Имайте предвид, че от кутията стърчат много пластмасови части, които трябва да заобиколите, но ако залепите проводниците на място, трябва да се тревожите за тях само веднъж.

Всичко това е трудно да се опише с думи, затова включих снимки и груба диаграма.

Стъпка 5: Програмирайте Arduino

Сега трябва да програмирате Arduino. Това изисква преместване на USB кабела на контролера, за да имате достъп до серийните щифтове на Arduino. Включих кода, който използвах. Тя изисква библиотеката Adafruit MCP4725, която може да бъде намерена тук:

В такъв случай кодът ви позволява да преминете равномерно през целия диапазон на движение на аналоговия стик, като преместите контролера на 90 градуса наляво на 90 градуса надясно и го задържите в средата, като го държите равен.

Той получава ъгъла на контролера чрез изчисляване на обратната тангента на оста X по g-сила, разделена на g-силата по оста Z. Това означава, че работи, ако контролерът е вертикален, плосък или има някакъв ъгъл между тях. (повече информация тук:

Той работи на моя контролер, но други контролери може да изискват различни напрежения, което го изважда от съответствие. Мисля, че най -добрият начин да се намери диапазонът на напрежението е чрез опит и грешка. Много игри ще ви покажат плъзгач за аналоговото движение на стик, но най -точният начин, който открих, за да определя движението е с jstest в Linux. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) Той ви дава число между -32, 767 и 32, 767, а не графика, така че да знаете точно къде е пръчката. Включете както контролера, така и Arduino USB към сериен адаптер, заредете jstest и опитайте различни стойности на DAC, докато достигнете горната и долната част на диапазона и си отбележете всяка. За мен беше 1, 593 - 382.

Особен интерес представлява ред 36:

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

Не е ясно веднага какво прави. Просто той взема ъгъла на контролера (измерен в радиани и между ~ 1,57 и ~ -1,57) и го преобразува в стойност между 1, 593 и 382 за DAC. Ако имате различен диапазон на DAC, ще трябва да промените този ред.

Редът може да бъде написан като:

dacvalue = (controllerangle +) / + 0,5;

С и като числа, които трябва да промените. е равен на обхвата на ъгъла на контролера (pi), разделен на общия диапазон от стойности на DAC. (горната част на диапазона минус долната част на диапазона) Това ви позволява да промените напрежението, въпреки че резултатите ще бъдат извън диапазона, който искате. Ето защо имате нужда. е равно на умножено по дъното на диапазона плюс половината от обхвата на движение на контролера. (pi / 2) Добавянето на половината обхват на движение гарантира, че това не е отрицателно число, а добавянето, умножено по дъното на диапазона, гарантира, че е синхронизирано с обхвата, който искате.

Когато преобразувате десетичните числа в цяло число, C ++ не се закръглява. Вместо това той отрязва десетичния знак, така че 9.9 става 9. Добавянето на 0.5 в края гарантира, че всичко над половината отива към следващото цяло число, така че се закръгля.

След като качите програмата си, уверете се, че тя работи с jstest.

Стъпка 6: Сглобете отново контролера

Сглобете контролера отново по същия начин, по който сте го разделили, минус лявата аналогова пръчка. Би трябвало да работи сега. Намирам, че няма забележимо забавяне и е много по -добре от използването на аналогов стик. Тъй като използва акселерометър, той се влияе от резки движения, но трябва да се постараете, за да го забележите.

Стъпка 7: Възможни подобрения

Могат да се направят някои подобрения. Те включват:

  • Използване на по -малко тромава магнитна жица
  • Гравиране на всичко върху една печатна платка, която е проектирана да се побере в кутията на контролера
  • Повторно поставяне на левия аналогов стик и свързване на краката към аналоговите входове на Arduino, така че да могат да се използват за регулиране на Arduino
  • Получаване на задната част на кутията за безжичен контролер и поставяне на проекта в отделението за батерии (това ще изисква изрязване на отвор за USB кабела)

Препоръчано: