Sisukord:
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-13 06:57
Olen mänginud Assetto Corsat oma Xbox 360 kontrolleriga. Kahjuks on roolimine analoogpulgaga väga raske ja mul pole ruumi rataste seadistamiseks. Püüdsin mõelda, kuidas saaksin juhtimisseadmesse parema roolimehhanismi sisestada, kui mulle tuli pähe, et võin kasutada kogu kontrollerit roolina.
Analoogpulgal on kaks potentsiomeetrit. Üks mõõdab vertikaalset liikumist ja teine horisontaalset liikumist. See paneb igast läbi 1,6 V ja mõõdab klaasipuhasti tekitatud pinget, et määrata, kui palju kepp on liikunud. See tähendab, et pulga liikumist on võimalik juhtida, andes klaasipuhasti tihvtile kindla pinge. (lisateavet leiate siit:
See moodul kasutab kiirendusmõõturi näitude nurga arvutamiseks Arduino ja teisendab selle DAC -i kaudu analoogpulga liikumiseks. Seetõttu peaks see töötama iga mänguga, mis kasutab sisendina analoogpulka.
Samm: vajate:
Tööriistad:
- Jootekolb
- Jootma
- Jootma imemiseks/punumiseks
- Traadi eemaldaja
- Kruvikeeraja, võib -olla Torx, sõltuvalt teie kontrolleri kruvidest (minu omad on ristpea)
- Liim (eelistatavalt mitte eriti tugev liim, nii et seda saab hiljem lahti võtta)
- USB -jadaadapter Arduino programmeerimiseks
Materjalid:
- Xbox 360 kontroller (ah!)
- Arduino Pro Mini (või kloon) (eelistatavalt 3.3V. Kui kasutate 5V versiooni, vajate tõenäoliselt pingemuundurit
- MPU-6050 güroskoop/kiirendusmõõtur
- MCP4725 DAC (kaks, kui soovite juhtida mõlemat telge)
- Mingi õhuke traat
- Leivalaud, nii et saate enne jootmist kõike testida (valikuline, kuid soovitatav)
Samm: võtke kontroller lahti
Peate eemaldama seitse kruvi. Kuus neist on ilmsed, kuid seitsmes on kleebise taga. Eeldan, et selle eemaldamine tühistab teie garantii, seega jätkake omal vastutusel. Paljud juhendid ütlevad, et vajate Torxi kruvikeerajat, kuid minu omad on ristpead, seega kontrollige oma kontrollerit.
Pärast seda eemaldage tagakaas ettevaatlikult. Kui eemaldate esiosa, vallanduvad nupud välja ja lähevad tõenäoliselt üle kogu ruumi. Tõstke see alt üles. Seejärel ühendage kaks vibratsioonimootorit vooluvõrgust lahti. (väikese kaaluga peaks olema vasakul ja suure kaaluga paremal) Võtke PCB välja ja eemaldage analoogpulkade kummikorgid. Nad lihtsalt tõmbuvad maha.
Järgmine asi on eemaldada vasak analoogpulk, et see ei segaks meie sisendit, kuid vasakpoolne päästiku mehhanism on teel. Selle eemaldamiseks peate plaadi esiküljelt potentsiomeetrilt kolm tihvti jootma, seejärel eemaldage mehhanism trükkplaadilt.
Seejärel joodetage 14 tihvti, mis hoiavad vasakut analoogpulka. Seejärel tõmmake kepp ära.
Samm: kleepige komponendid oma kohale
Märkate, et trükkplaadi tagakülje ja korpuse vahel on üsna palju vaba ruumi. See võimaldab kogu riistvara korpusesse panna ilma midagi eemaldamata.
Mõistsin seda alles hiljem, kuid see oleks hea aeg Arduino nullimisnupu desoldeerimiseks. Kui te seda ei tee, vajutab see korpuse tagaküljele ja lakkab projekti töötamast, kui pingutate ühte kruvi liiga palju kokku pannes.
Liimisin õhukese kaarditüki iga trükkplaadi tagaküljele selle isoleerimiseks, seejärel liimisin selle kontrolleri trükkplaadile. Ma ei soovinud liimi kasutada, kuid ei suutnud välja mõelda, kuidas seda paremini teha.
Pildil olevad positsioonid on parim kombinatsioon, mida leida sain. Arduino asub vasakul, nullimisnupu serv on paremast käivitusmehhanismist vastu plastitükki, teine pool traadi all ja nurk võimalikult valge pistiku lähedal. Korpuses on kerge punn, kuid ma ei leidnud paremat kohta selle paigutamiseks.
Kiirendusmõõtur asub juhtmest paremal. See peaks olema võimalikult tasane ja võimalikult sirge, vastasel juhul peate nihke kompenseerimiseks hiljem mõne koodi kirjutama. Pange tähele, et korpuse tagaküljel on mõned väljaulatuvad plastitükid, mille vältimiseks peate olema ettevaatlik. Olen avastanud, et saate väljaulatuvatele plastitükkidele panna midagi kleepuvat ja värvilist, näiteks huulepulka, seejärel panna tagakaane, et näha, kuhu see jätab jälgi.
DAC (id) asuvad vasakus alanurgas. Siin on piisavalt ruumi kahe DAC -i virnastamiseks üksteise peale, kui soovite mõlemat telge juhtida. Te ei pea neid liimima. Lihtsalt joodetud ühendustega jäävad nad oma kohale. Kui kleepite kaarti nende vahele, lõigake see kindlasti nii, et SCL, SDA, VCC ja GND oleksid juurdepääsetavad, sest pääsete neile juurde mõlemalt poolt.
Kui kasutate kahte DAC-d, ärge unustage lülitada aadressi hüppaja ja keelata ühel neist tõmbetakistused, nagu siin kirjeldatud: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -muunduri ühendamise juhend
Samm: jootke juhtmed sisse
Nüüd peate kõik ühendama. Kõigi 2/3 seadmete VCC, GND, SDA ja SCL tuleks ühendada vastavalt Arduino VCC, GND, A4 ja A5 -ga. DAC -id on kõige keerulisem osa. Kui teil on neid kaks, peate need omavahel ühendama, kusagilt lahkudes saate ühendada toite ja liinid kiirendusmõõturiga, hoides samal ajal OUT juhtmed eraldi.
DAC -i OUT -tihvt tuleks ühendada kontrolleri trükkplaadil oleva tihvtiga, mis oli varem analoogpulga keskmise horisontaalse potentsiomeetri tihvti jaoks. See tähendab, et seal, kus oli analoogpulk, on ülaosas kolme tihvti rida. Ühendage see keskmisega. Kui teil on teine DAC, ühendage see samamoodi vertikaalse potentsiomeetri tihvtiga (rida vasakul). Päästiku vahetamisel ei pääse te tagant tihvtide juurde, nii et peate juhtme juhtima plaadi esiosa. Analoogpulga piirkonna ümber on ringikujuline plastikust "sein", kuid õnneks on selles mugav vahe, millest saate juhtmed läbi panna. Veenduge, et juhtmed ei takistaks korpuse esiosa kruviposti.
Minu esialgne plaan oli toita Arduino 5V toitega RAW -pessa ühendatud USB -kaabli abil, kuid kui ma seda proovisin, siis see ei töötanud. Arduino ei käivitanud midagi ja nii Arduino kui ka kontroller lülitusid mõne sekundi pärast välja. Siiski avastasin, et tahvli esiküljel asuvast kahest tihvtist musta perifeerse pesa lähedal on stabiilne 3,3 V väljund, eeldatavasti välisseadmete toiteks. See töötab nii VCC kui ka RAW -ga, kuid valisin VCC, kuna see on juba õige pinge ja kuna see võimaldab mul selle joota DAC -i VCC -juhtme külge, mis on juba plaadi põhja lähedal, ja säästa juhtmete pealt.
Pidage meeles, et korpusest ulatub välja palju plastosi, mille ümber peate töötama, kuid kui liimite juhtmed paika, peate nende pärast muretsema ainult üks kord.
Kõike seda on sõnadega raske kirjeldada, seega olen lisanud pildid ja töötlemata skeemi.
Samm: programmeerige Arduino
Nüüd peate Arduino programmeerima. See nõuab kontrolleri USB -kaabli teisaldamist, et pääseda juurde Arduino jadapistikutele. Lisasin kasutatud koodi. See nõuab Adafruit MCP4725 raamatukogu, mille leiate siit:
Kood võimaldab teil analoogpulga kogu liikumisulatust ühtlaselt läbida, liigutades kontrollerit 90 kraadi vasakule kuni 90 kraadi paremale, ja hoidke seda keskel, hoides seda tasasena.
See saab kontrolleri nurga, arvutades X-telje g-jõu pöörd tangentsi jagatuna Z-telje g-jõuga. See tähendab, et see töötab, kui kontroller on vertikaalne, tasane või mis tahes nurk nende vahel. (lisateavet leiate siit:
See töötab minu kontrolleriga, kuid teised kontrollerid võivad vajada erinevat pinget, mis viib selle joondusest välja. Ma arvan, et parim viis pingevahemiku leidmiseks on katse -eksituse meetod. Paljud mängud näitavad teile analoogpulga liikumise liugurit, kuid kõige täpsem viis liikumise määramiseks on jstest Linuxis. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) See annab teile graafika asemel numbri vahemikus -32, 767 kuni 32, 767, nii et teate täpselt, kus kepp asub. Ühendage nii kontroller kui ka Arduino USB jadaadapteriga, laadige jstest ja proovige erinevaid DAC -väärtusi, kuni jõuate vahemiku üla- ja alaossa, ja märkige need kõik üles. Minu jaoks oli see 1, 593 - 382.
Eriti huvitav on rida 36:
dacvalue = (kontrollnurk + 2,5617859169446084418) / 0,0025942135867793503208 + 0,5;
Pole kohe selge, mida see teeb. Lihtsalt võtab see kontrolleri nurga (mõõdetuna radiaanides ja vahemikus ~ 1,57 kuni ~ -1,57) ja teisendab selle DAC väärtuseks vahemikus 1, 593 kuni 382. Kui teil on erinev DAC -vahemik, peate selle rea muutma.
Rida saab kirjutada järgmiselt:
dacvalue = (kontrollnurk +) / + 0,5;
Olles numbrid, mida peate muutma. on võrdne kontrolleri nurga (pi) vahemikuga, mis on jagatud DAC väärtuste kogu vahemikuga. (vahemiku ülaosa miinus vahemiku alumine osa) See viib pinge muutmiseni, kuigi tulemused jäävad soovitud vahemikust välja. Sellepärast vajate. on võrdne korrutatuna vahemiku põhjaga pluss poolega kontrolleri liikumisulatusest. (pi / 2) Poole liikumisvahemiku lisamine tagab, et see pole negatiivne arv, ja lisades korrutatuna vahemiku alaosaga, tagatakse, et see sünkroonitakse soovitud vahemikuga.
Kümnendkohtade täisarvuks teisendamisel C ++ ei ümarda. Selle asemel lõikab see kümnendkoha ära, nii et 9.9 saab 9. Kui lisate lõppu 0,5, veenduge, et kõik üle poole läheb järgmisele täisarvule, nii et see ümardatakse.
Kui olete oma programmi üles laadinud, veenduge, et see töötaks jstestiga.
Samm: pange kontroller uuesti kokku
Pange kontroller uuesti kokku samal viisil, nagu te selle lahti võtsite, miinus vasakpoolne analoogpulk. See peaks nüüd toimima. Ma leian, et märgatavat viivitust pole ja see on palju parem kui analoogpulga kasutamine. Kuna see kasutab kiirendusmõõturit, mõjutavad seda äkilised liigutused, kuid selle märkamiseks peate endast välja minema.
7. samm: võimalikud parandused
On mõned parandused, mida saaks teha. Need sisaldavad:
- Vähem tülika magnetjuhtme kasutamine
- Kõigi söövitamine ühele trükkplaadile, mis on kavandatud nii, et see mahuks kontrolleri korpusesse
- Vasaku analoogpulga uuesti kinnitamine ja jalgade ühendamine Arduino analoogsisenditega, et neid saaks kasutada Arduino reguleerimiseks
- Juhtmeta kontrolleri tagaosa hankimine ja projekti paigutamine patareipessa (see nõuab USB -kaabli jaoks ava lõikamist)