Obsah:

Modul řízení akcelerometru/gyroskopu pro Xbox 360: 7 kroků
Modul řízení akcelerometru/gyroskopu pro Xbox 360: 7 kroků

Video: Modul řízení akcelerometru/gyroskopu pro Xbox 360: 7 kroků

Video: Modul řízení akcelerometru/gyroskopu pro Xbox 360: 7 kroků
Video: How to use MPU-9250 Gyroscope, Accelerometer, Magnetometer for Arduino 2024, Červenec
Anonim
Akcelerometr/gyroskopický režim ovladače pro Xbox 360
Akcelerometr/gyroskopický režim ovladače pro Xbox 360

Hrál jsem Assetto Corsa s ovladačem pro Xbox 360. Řízení analogovou páčkou je bohužel velmi nepraktické a nemám prostor pro nastavení kola. Pokusil jsem se vymyslet způsoby, jak bych mohl do ovladače vlepit lepší mechanismus řízení, když mě napadlo, že bych mohl použít celý ovladač jako volant.

Analogová páčka má dva potenciometry. Jeden měří vertikální pohyb a druhý horizontální pohyb. Prochází každým 1,6V a měří napětí vytvářené na stěrači, aby určil, jak moc se páčka pohnula. To znamená, že je možné ovládat pohyb páčky přivedením určitého napětí na kolík stěrače. (více informací zde:

Tento režim používá Arduino k výpočtu úhlu z naměřených hodnot akcelerometru a převádí jej na analogový pohyb páčky prostřednictvím DAC. Proto by měl fungovat s jakoukoli hrou, která používá jako vstup analogovou páčku.

Krok 1: Budete potřebovat:

Nástroje:

  • Páječka
  • Pájka
  • Pájecí přísavka/cop
  • Odstraňovač drátů
  • Šroubovák, možná Torx, v závislosti na šroubech ve vašem ovladači (moje jsou křížové)
  • Lepidlo (pokud možno ne super silné lepidlo, aby se dalo později rozebrat)
  • Adaptér USB na sériový port pro programování Arduina

Materiály:

  • Ovladač Xbox 360 (duh!)
  • Arduino Pro Mini (nebo klon) (nejlépe 3,3 V. Pokud používáte verzi 5 V, budete pravděpodobně potřebovat zesilovač napětí)
  • Gyroskop/akcelerometr MPU-6050
  • MCP4725 DAC (dva, pokud chcete ovládat obě osy)
  • Nějaký tenký drát
  • Prkénko, abyste mohli před pájením vše vyzkoušet (volitelné, ale doporučené)

Krok 2: Rozeberte ovladač

Demontujte ovladač
Demontujte ovladač
Demontujte ovladač
Demontujte ovladač
Demontujte ovladač
Demontujte ovladač

Musíte odstranit sedm šroubů. Šest z nich je očividných, ale sedmý je za nálepkou. Předpokládám, že jeho odstraněním ztrácíte záruku, takže pokračujte na vlastní riziko. Mnoho průvodců říká, že potřebujete šroubovák Torx, ale moje jsou křížové, takže zkontrolujte ovladač.

Poté opatrně sejměte zadní kryt. Pokud odepnete přední část, tlačítka se vysypou a pravděpodobně projdou po celé místnosti. Zvedněte ho ze spodu. Poté odpojte dva vibrační motory. (ten s malou hmotností by měl být vlevo a ten s velkou hmotností vpravo) Vyjměte desku plošných spojů a odstraňte gumové krytky na analogových tyčích. Jednoduše odtáhnou.

Další věcí je vyjmout levou analogovou páčku, aby nerušila náš vstup, ale levý spouštěcí mechanismus je v cestě. Abyste ji mohli odstranit, musíte odspájkovat tři piny z potenciometru z přední strany desky a poté odepnout mechanismus z DPS.

Dále odpojte 14 kolíků držících levou analogovou páčku. Poté páku stáhněte.

Krok 3: Přilepte součásti na místo

Přilepte součásti na místo
Přilepte součásti na místo
Přilepte součásti na místo
Přilepte součásti na místo

Všimnete si, že mezi zadní stranou desky plošných spojů a skříní je poměrně velký volný prostor. To umožňuje vložit veškerý hardware do pouzdra, aniž byste cokoli odstraňovali.

Uvědomil jsem si to až později, ale toto by bylo vhodné období pro odpojení resetovacího tlačítka na Arduinu. Pokud to neuděláte, přitlačí to na zadní stranu pouzdra a způsobí, že projekt přestane fungovat, pokud při zpětné montáži příliš utáhnete jeden ze šroubů.

Na zadní stranu každé desky plošných spojů jsem nalepil tenký kousek karty, abych ji izoloval, a poté jsem ji nalepil na desku plošných spojů ovladače. Zdráhal jsem se použít lepidlo, ale nemohl jsem vymyslet lepší způsob, jak to udělat.

Pozice na obrázku jsou nejlepší kombinací, kterou jsem mohl najít. Arduino je vlevo, přičemž hrana s resetovacím tlačítkem je zarovnána s kusem plastu z pravého spouštěcího mechanismu, druhou stranou pod vodičem a rohem co nejblíže k bílému konektoru. V pouzdře je mírné vyboulení, ale nemohl jsem najít lepší místo, kam bych to dal.

Akcelerometr je napravo od drátu. Mělo by být co nejrovnější a nejrovnější, jinak budete muset později napsat nějaký kód, abyste kompenzovali offset. Všimněte si, že na zadní straně pouzdra jsou vyčnívající kousky plastu, kterým se musíte vyvarovat. Zjistil jsem, že na vyčnívající kousky plastu můžete nanést něco lepkavého a barevného, například rtěnku, a poté nasadit zadní kryt, abyste viděli, kde zanechává stopy.

DAC (s) jsou v levém dolním rohu. Pokud chcete ovládat obě osy, je zde dostatečný prostor pro stohování dvou DAC, jeden na druhý. Není nutné je lepit. Zůstanou tam, kde jsou, jen s pájenými spoji. Pokud mezi ně zasunete kartu, ujistěte se, že jste ji odřízli tak, aby byl přístupný SCL, SDA, VCC a GND, protože k nim budete přistupovat z obou stran.

Pokud používáte dva DAC, nezapomeňte přepnout propojku adres a deaktivovat na jednom z nich odpínače, jak je popsáno zde: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -průvodce připojením převaděče

Krok 4: Zapájejte dráty

Zapájejte dráty
Zapájejte dráty
Zapájejte dráty
Zapájejte dráty
Zapájejte dráty
Zapájejte dráty

Nyní musíte vše propojit. VCC, GND, SDA a SCL ze všech 2/3 zařízení by měly být připojeny k VCC, GND, A4 a A5 na Arduinu. DAC jsou nejsložitější částí. Pokud máte dva, musíte je spojit dohromady, zatímco někde odcházíte, můžete připojit napájení a vedení k akcelerometru, přičemž oddělte vodiče OUT.

Kolík OUT na DAC by měl být připojen ke kolíku na desce plošných spojů ovladače, který býval pro středový horizontální pin potenciometru pro analogovou páčku. To znamená, že tam, kde byla analogová páčka, je nahoře řada tří kolíků. Připojte jej k prostřednímu. Pokud máte další DAC, připojte jej ke svislému kolíku potenciometru (řada vlevo) stejným způsobem. Při výměně spouště se k pinům zezadu nedostanete, takže musíte k přední straně desky protáhnout drát. Kolem oblasti analogových tyčí je kruhová plastová „stěna“, ale naštěstí je v ní vhodná mezera, kterou můžete protáhnout vodiče. Zajistěte, aby dráty nepřekážely šroubovému sloupku v přední části pouzdra.

Můj původní plán byl napájet Arduino 5V z USB kabelu připojeného na pin RAW, ale když jsem to zkusil, nefungovalo to. Arduino nic nespustilo a Arduino i ovladač se po pár sekundách vypnuly. Zjistil jsem však, že ze dvou kolíků na přední straně desky poblíž černé periferní zásuvky je stabilní 3,3 V výstup, pravděpodobně pro napájení periferií. Funguje to jak s VCC, tak s RAW, ale vybral jsem si VCC, protože už je to správné napětí a protože mi to umožňuje připájet k VCC drátu na DAC, který je již blízko spodní části desky a ušetřit na vodičích.

Uvědomte si, že z pouzdra vyčnívá spousta plastových dílů, které musíte obejít, ale pokud nalepíte dráty na místo, musíte si s nimi dělat starosti jen jednou.

To vše je těžké popsat slovy, proto jsem přidal obrázky a hrubý diagram.

Krok 5: Naprogramujte Arduino

Nyní musíte Arduino naprogramovat. To vyžaduje přesun USB kabelu na ovladači, abyste měli přístup k sériovým pinům na Arduinu. Zahrnul jsem kód, který jsem použil. Vyžaduje knihovnu Adafruit MCP4725, kterou najdete zde:

Kód vám umožňuje rovnoměrně procházet celým rozsahem pohybu analogové páčky pohybem ovladače o 90 stupňů doleva až o 90 stupňů doprava a držením uprostřed jej držte uprostřed.

Úhel ovladače získá vypočítáním inverzního tangensu síly g osy X děleného silou g osy Z. To znamená, že to funguje, pokud je ovladač svislý, plochý nebo jakýkoli úhel mezi nimi. (více informací zde:

Funguje to na mém ovladači, ale jiné ovladače mohou vyžadovat různá napětí, což jej vyvede z vyrovnání. Myslím, že nejlepší způsob, jak zjistit rozsah napětí, je pokus - omyl. Mnoho her vám ukáže posuvník pro pohyb analogové páčky, ale nejpřesnější způsob, jakým jsem určil pohyb, je pomocí jstest v Linuxu. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) Dává vám číslo mezi -32, 767 a 32, 767 a ne grafiku, takže přesně víte, kde je hůl. Zapojte jak ovladač, tak Arduino USB do sériového adaptéru, načtěte jstest a vyzkoušejte různé hodnoty DAC, dokud nedosáhnete horní a dolní části rozsahu, a každý si poznamenejte. Pro mě to bylo 1, 593 - 382.

Obzvláště zajímavá je linka 36:

dacvalue = (řadicí úhel + 2,5617859169446084418) / 0,0025942135867793503208 + 0,5;

Není okamžitě zřejmé, co to dělá. Jednoduše vezme úhel ovladače (měřeno v radiánech a mezi ~ 1,57 a ~ -1,57) a převede jej na hodnotu mezi 1, 593 a 382 pro DAC. Pokud máte jiný rozsah DAC, budete muset tento řádek změnit.

Řádek lze zapsat jako:

dacvalue = (řadicí úhel +) / + 0,5;

S a být čísly musíte změnit. se rovná rozsahu úhlu ovladače (pi) děleno celkovým rozsahem hodnot DAC. (horní část rozsahu minus spodní část rozsahu) Tím se dostanete ke změně napětí, i když výsledky budou mimo požadovaný rozsah. Proto potřebujete. se rovná vynásobené spodní částí rozsahu plus polovinou rozsahu pohybu ovladače. (pi / 2) Sečtením poloviny rozsahu pohybu zajistíte, že se nejedná o záporné číslo, a sčítáním vynásobeným spodní částí rozsahu zajistíte, že bude synchronizováno s požadovaným rozsahem.

Při převodu desetinných čísel na celé číslo se C ++ nezaokrouhluje. Místo toho odřízne desetinnou čárku, takže 9,9 se stane 9. Přidáním 0,5 na konec zajistíte, že cokoli nad polovinou přejde na další celé číslo, takže se zaokrouhlí.

Jakmile svůj program nahrajete, ujistěte se, že funguje s jstest.

Krok 6: Znovu sestavte ovladač

Sestavte ovladač zpět dohromady stejným způsobem, jakým jste jej rozebrali, minus levou analogovou páčku. Teď by to mělo fungovat. Zjistil jsem, že neexistuje žádné znatelné zpoždění a je to mnohem lepší než použití analogové páčky. Protože používá akcelerometr, je ovlivněn náhlými pohyby, ale musíte jít stranou, abyste si toho všimli.

Krok 7: Možná vylepšení

Lze provést některá vylepšení. Tyto zahrnují:

  • Použití méně těžkopádného magnetického drátu
  • Leptání všeho na jednu desku plošných spojů, která je navržena tak, aby se vešla do skříně řadiče
  • Opětovné připojení levé analogové páčky a připojení nohou k analogovým vstupům na Arduinu, aby mohly být použity k nastavení Arduina
  • Získání zadního dílu pouzdra pro bezdrátový ovladač a vložení projektu do prostoru pro baterii (to by vyžadovalo vyříznutí otvoru pro kabel USB)

Doporučuje: