Cuprins:

Mod de direcție accelerometru / giroscop controler Xbox 360: 7 pași
Mod de direcție accelerometru / giroscop controler Xbox 360: 7 pași

Video: Mod de direcție accelerometru / giroscop controler Xbox 360: 7 pași

Video: Mod de direcție accelerometru / giroscop controler Xbox 360: 7 pași
Video: Nokia Lumia 1020 Review în Limba Română - Mobilissimo.ro 2024, Iulie
Anonim
Controler Xbox 360 Accelerometru / direcție giroscopică Mod
Controler Xbox 360 Accelerometru / direcție giroscopică Mod

Am jucat Assetto Corsa cu controlerul meu Xbox 360. Din păcate, direcția cu stick-ul analogic este foarte dificilă și nu am spațiu pentru configurarea roții. Am încercat să mă gândesc la modalități prin care puteam încălzi un mecanism de direcție mai bun în controler, când mi-a venit în minte că puteam folosi întregul controler ca volan.

Stick-ul analogic are două potențiometre. Una măsoară mișcarea verticală, iar una măsoară mișcarea orizontală. Acesta pune 1,6V prin fiecare și măsoară tensiunea produsă la ștergător pentru a determina cât de mult s-a mișcat bățul. Aceasta înseamnă că este posibil să controlați mișcarea bățului prin alimentarea unei anumite tensiuni la știftul ștergătorului. (mai multe informații aici:

Acest mod folosește un Arduino pentru a calcula unghiul din citirile accelerometrului și a-l converti în mișcare analogică a stick-ului printr-un DAC. Prin urmare, ar trebui să funcționeze cu orice joc care utilizează stick-ul analogic ca intrare.

Pasul 1: Veți avea nevoie de:

Instrumente:

  • Ciocan de lipit
  • Solder
  • Ventuză de lipit / împletitură
  • Dispozitiv de sârmă
  • O șurubelniță, poate una Torx în funcție de șuruburile din controlerul dvs. (ale mele sunt încrucișate)
  • Lipici (de preferință nu este lipici foarte puternic, așa că poate fi demontat mai târziu)
  • Un adaptor USB la serial pentru a programa Arduino

Materiale:

  • Controler Xbox 360 (duh!)
  • Arduino Pro Mini (sau o clonă) (de preferință 3.3V. Dacă utilizați versiunea de 5V, probabil veți avea nevoie de un convertor de tensiune intensificat)
  • Un giroscop / accelerometru MPU-6050
  • Un MCP4725 DAC (două dacă doriți să controlați ambele axe)
  • Niște fire subțiri
  • O panou de testare, astfel încât să puteți testa totul înainte de a lipi (opțional, dar recomandat)

Pasul 2: Desfaceți controlerul

Demontați controlerul
Demontați controlerul
Demontați controlerul
Demontați controlerul
Demontați controlerul
Demontați controlerul

Există șapte șuruburi pe care trebuie să le scoateți. Șase dintre ele sunt evidente, dar al șaptelea se află în spatele unui autocolant. Presupun că eliminarea acestuia îți anulează garanția, deci procedează pe propriul risc. O mulțime de ghiduri spun că aveți nevoie de o șurubelniță Torx, dar ale mele sunt încrucișate, așa că verificați controlerul.

După aceea, scoateți cu atenție capacul din spate. Dacă vă îndepărtați de partea din față, butoanele se vor revărsa și vor merge probabil în toată camera. Ridicați-l de jos. Apoi deconectați cele două motoare de vibrații. (cel cu greutatea mică ar trebui să fie în stânga, iar cel cu greutatea mare în dreapta) Scoateți PCB-ul și scoateți capacele de cauciuc de pe bețele analogice. Pur și simplu se opresc.

Următorul lucru este să scoatem stick-ul analog stâng, astfel încât să nu interfereze cu intrarea noastră, dar mecanismul de declanșare stâng este în cale. Pentru a-l scoate, trebuie să desudați cei trei pini din potențiometru din partea din față a plăcii, apoi decuplați mecanismul de pe PCB.

Apoi, desudați cei 14 pini care dețin stickul analogic stâng. Apoi trageți bățul.

Pasul 3: lipiți componentele la locul lor

Lipiți componentele la locul lor
Lipiți componentele la locul lor
Lipiți componentele la locul lor
Lipiți componentele la locul lor

Veți observa că există destul de mult spațiu liber între partea din spate a PCB-ului și carcasă. Acest lucru face posibilă punerea întregului hardware în carcasă fără a elimina nimic.

Mi-am dat seama abia mai târziu, dar acesta ar fi un moment bun pentru a desolda butonul de resetare de pe Arduino. Dacă nu, veți apăsa pe partea din spate a carcasei și veți face ca proiectul să nu mai funcționeze dacă strângeți prea mult unul dintre șuruburi atunci când îl remontați.

Am lipit o bucată subțire de card pe spatele fiecărui PCB pentru ao izola, apoi am lipit-o pe PCB-ul controlorului. Am fost reticent să folosesc lipici, dar nu m-am putut gândi la o modalitate mai bună de a o face.

Pozițiile din imagine sunt cea mai bună combinație pe care am putut să o găsesc. Arduino este în stânga, cu marginea cu butonul de resetare la nivelul piesei de plastic de la mecanismul de declanșare din dreapta, cu cealaltă parte sub fir și cu colțul cât mai aproape de conectorul alb. Există o ușoară umflătură în carcasă, dar nu am putut găsi un loc mai bun pentru a-l pune.

Accelerometrul este în dreapta firului. Ar trebui să fie cât mai plat și cât mai drept posibil, altfel ar putea fi necesar să scrieți un cod mai târziu pentru a compensa compensarea. Rețineți că există câteva bucăți de plastic proeminente pe spatele carcasei pe care trebuie să le aveți grijă să le evitați. Am constatat că puteți pune ceva lipicios și colorat, precum rujul, pe bucățile de plastic proeminente, apoi puneți capacul din spate pentru a vedea unde lasă urme.

DAC-urile se află în colțul din stânga jos. Există suficient spațiu aici pentru a stiva două DAC-uri, unul peste altul, dacă doriți să controlați ambele axe. Nu trebuie să le lipiți. Vor rămâne acolo unde sunt doar cu conexiunile lipite. Dacă lipiți cardul între ele, asigurați-vă că tăiați cardul astfel încât să lăsați SCL, SDA, VCC și GND accesibile, deoarece le veți accesa din ambele părți.

Dacă utilizați două DAC-uri, nu uitați să comutați jumperul de adresă și să dezactivați rezistențele de tragere de pe unul dintre ele, așa cum este descris aici: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -converter-hookup-guide

Pasul 4: lipiți firele

Lipiți firele
Lipiți firele
Lipiți firele
Lipiți firele
Lipiți firele
Lipiți firele

Acum trebuie să conectezi totul. VCC, GND, SDA și SCL de la toate dispozitivele 2/3 ar trebui să fie conectate la VCC, GND, A4 și A5 pe Arduino, respectiv. DAC-urile sunt partea cea mai dificilă. Dacă aveți două, trebuie să le conectați împreună, în timp ce lăsați undeva puteți conecta curentul și liniile la accelerometru, păstrând firele OUT separate.

Pinul OUT de pe DAC ar trebui să fie conectat la pinul de pe PCB-ul controlerului care era pentru pinul potențiometrului orizontal mijlociu pentru stick-ul analogic. Adică, acolo unde era stick-ul analogic, există un rând de trei pini în partea de sus. Conectați-l la cel din mijloc. Dacă aveți un alt DAC, conectați-l la pinul potențiometrului vertical (rândul din stânga) în același mod. Nu veți putea ajunge la știfturile din spate când declanșatorul este înlocuit, deci trebuie să rulați un fir în partea din față a plăcii. Există un „perete” din plastic circular în jurul zonei analogice a bățului, dar, din fericire, există un spațiu convenabil în care puteți introduce fire. Asigurați-vă că firele nu intră în calea șurubului de pe partea din față a carcasei.

Planul meu inițial era să alimentez Arduino cu 5V de la cablul USB conectat la pinul RAW, dar când l-am încercat, nu a funcționat. Arduino nu a rulat nimic și atât Arduino, cât și controlerul s-au oprit după câteva secunde. Cu toate acestea, am descoperit că există o ieșire constantă de 3,3V de la doi pini pe partea din față a plăcii, lângă priza periferică neagră, probabil pentru alimentarea perifericelor. Funcționează atât cu VCC, cât și cu RAW, dar am ales VCC pentru că este deja tensiunea corectă și pentru că îmi permite să-l lipesc pe firul VCC de pe DAC care este deja aproape de partea de jos a plăcii și să economisesc pe fire.

Rețineți că există o mulțime de piese din plastic care ies din carcasa pe care trebuie să o rezolvați, dar dacă lipiți firele la locul lor, trebuie să vă faceți griji despre ele o singură dată.

Toate acestea sunt greu de descris cu cuvinte, așa că am inclus imagini și o diagramă brută.

Pasul 5: Programați Arduino

Acum trebuie să programați Arduino. Acest lucru necesită mutarea cablului USB de pe controler, astfel încât să puteți accesa pinii seriali de pe Arduino. Am inclus codul pe care l-am folosit. Necesită biblioteca Adafruit MCP4725, care poate fi găsită aici:

Într-adevăr, codul vă permite să parcurgeți în mod uniform toată gama de mișcare a stick-ului analogic, deplasând controlerul cu 90 de grade la stânga la 90 de grade la dreapta și mențineți-l în mijloc, ținându-l plat.

Obține unghiul controlerului calculând tangenta inversă a forței g axa X împărțită la forța g axa Z. Aceasta înseamnă că funcționează dacă controlerul este vertical, plat sau orice unghi între ele. (mai multe informații aici:

Funcționează pe controlerul meu, dar alte controlere ar putea necesita tensiuni diferite, punându-l în afara aliniamentului. Cred că cel mai bun mod de a găsi gama de tensiune este încercarea și eroarea. Multe jocuri vă vor arăta un glisor pentru mișcarea analogică a stick-ului, dar cel mai precis mod pe care l-am găsit pentru a determina mișcarea este cu jstest pe Linux. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) Vă oferă un număr între -32, 767 și 32, 767 mai degrabă decât un grafic, astfel încât să știți exact unde este stick-ul. Conectați atât controlerul, cât și adaptorul USB Arduino la adaptorul serial, încărcați jstest și încercați diferite valori DAC până ajungeți în partea de sus și de jos a gamei și notați fiecare. Pentru mine a fost 1, 593 - 382.

Un interes deosebit este linia 36:

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

Nu este imediat evident ce face. Pur și simplu, ia unghiul controlerului (măsurat în radiani și între ~ 1,57 și ~ -1,57) și îl convertește într-o valoare între 1, 593 și 382 pentru DAC. Dacă aveți un interval DAC diferit, va trebui să schimbați acea linie.

Linia poate fi scrisă ca:

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

Cu și fiind numerele pe care trebuie să le schimbați. este egal cu intervalul unghiului controlerului (pi) împărțit la intervalul total al valorilor DAC. (partea de sus a gamei minus partea de jos a gamei) Acest lucru vă ajută să schimbați tensiunea, deși rezultatele vor fi în afara intervalului dorit. De aceea ai nevoie. este egal cu înmulțit cu partea de jos a gamei plus jumătate din gama de mișcare a controlerului. (pi / 2) Adăugarea a jumătate din intervalul de mișcare asigură că nu este un număr negativ și adăugarea înmulțită cu partea inferioară a intervalului asigură sincronizarea cu intervalul dorit.

Când convertiți zecimalele într-un număr întreg, C ++ nu rotunjește. În schimb, tăia zecimalul, deci 9.9 devine 9. Adăugarea 0,5 la sfârșit asigură că orice peste o jumătate merge la următorul număr întreg, deci se rotunjește.

După ce ați încărcat programul, asigurați-vă că funcționează cu jstest.

Pasul 6: Reasamblați controlerul

Puneți controlerul laolaltă în același mod în care l-ați despărțit, minus stick-ul analog stâng. Ar trebui să funcționeze acum. Mi se pare că nu există o întârziere vizibilă și este mult mai bine decât să folosiți stick-ul analogic. Deoarece folosește un accelerometru, este afectat de mișcări bruște, dar trebuie să ieși din calea ta pentru a-l observa.

Pasul 7: Posibile îmbunătățiri

Există câteva îmbunătățiri care ar putea fi aduse. Acestea includ:

  • Folosind un fir magnetic mai puțin greoi
  • Gravează totul pe un PCB conceput pentru a se potrivi în carcasa controlerului
  • Reatașați stick-ul analog stâng și conectați picioarele la intrările analogice de pe Arduino, astfel încât acestea să poată fi utilizate pentru a regla Arduino
  • Obținerea piesei din spate a carcasei pentru un controler wireless și introducerea proiectului în compartimentul bateriei (acest lucru ar necesita tăierea unei găuri pentru cablul USB)

Recomandat: