Isi kandungan:

Mod Pemandu Xbox 360 Controller Accelerometer / gyro: 7 Steps
Mod Pemandu Xbox 360 Controller Accelerometer / gyro: 7 Steps

Video: Mod Pemandu Xbox 360 Controller Accelerometer / gyro: 7 Steps

Video: Mod Pemandu Xbox 360 Controller Accelerometer / gyro: 7 Steps
Video: How to setup and use ESP32 Cam with Micro USB WiFi Camera 2024, Julai
Anonim
Xbox 360 Controller Accelerometer / gyro Steering Mod
Xbox 360 Controller Accelerometer / gyro Steering Mod

Saya bermain Assetto Corsa dengan alat kawalan Xbox 360 saya. Malangnya, mengemudi dengan tongkat analog sangat sukar, dan saya tidak mempunyai ruang untuk pemasangan roda. Saya cuba memikirkan cara untuk menggunakan mekanisme stereng yang lebih baik ke dalam pengawal, apabila saya terfikir bahawa saya boleh menggunakan keseluruhan alat kawalan sebagai roda kemudi.

Tongkat analog mempunyai dua potensiometer. Satu mengukur pergerakan menegak, dan satu mengukur pergerakan mendatar. Ia meletakkan 1.6V masing-masing dan mengukur voltan yang dihasilkan di pengelap untuk menentukan berapa banyak tongkat telah bergerak. Ini bermaksud mungkin untuk mengawal pergerakan tongkat dengan memberi voltan tertentu ke pin pengelap. (maklumat lebih lanjut di sini:

Mod ini menggunakan Arduino untuk mengira sudut dari pembacaan pecutan dan menukarnya ke pergerakan tongkat analog melalui DAC. Oleh itu, ia harus berfungsi dengan permainan yang menggunakan tongkat analog sebagai input.

Langkah 1: Anda Perlu:

Alat:

  • Besi pematerian
  • Pateri
  • Penyedut solder / tocang
  • Pelucut wayar
  • Pemutar skru, mungkin Torx bergantung pada skru pada alat kawalan anda (lombong saya adalah kepala lintang)
  • Lem (lebih baik lem yang tidak kuat sehingga boleh dipisahkan kemudian)
  • Penyesuai USB ke siri untuk memprogram Arduino

Bahan:

  • Pengawal Xbox 360 (duh!)
  • Arduino Pro Mini (atau klon) (lebih baik 3.3V. Sekiranya anda menggunakan versi 5V, anda mungkin memerlukan penukar voltan peningkatan)
  • Giroskop / pecutan MPU-6050
  • MCP4725 DAC (dua jika anda mahu mengawal kedua-dua paksi)
  • Sebilangan dawai nipis
  • Papan roti sehingga anda dapat menguji semuanya sebelum anda menyolder (pilihan, tetapi disyorkan)

Langkah 2: Ketepikan Pengawal

Jauhkan Pengawal
Jauhkan Pengawal
Jauhkan Pengawal
Jauhkan Pengawal
Jauhkan Pengawal
Jauhkan Pengawal

Terdapat tujuh skru yang harus anda tanggalkan. Enam daripadanya jelas, tetapi yang ketujuh ada di belakang pelekat. Saya menganggap bahawa membatalkannya akan membatalkan jaminan anda, jadi teruskan dengan risiko anda sendiri. Banyak panduan mengatakan bahawa anda memerlukan pemutar skru Torx, tetapi saya adalah crosshead, jadi periksa alat kawalan anda.

Selepas itu, teliti penutup belakang dengan teliti. Sekiranya anda mencungkil dari depan, butang akan tumpah keluar dan mungkin masuk ke seluruh ruangan. Angkat dari bawah. Kemudian cabut dua motor getaran. (yang dengan berat yang kecil harus di sebelah kiri, dan yang dengan berat yang besar di sebelah kanan) Keluarkan PCB dan lepaskan penutup getah pada batang analog. Mereka hanya berhenti.

Perkara seterusnya adalah mengeluarkan tongkat analog kiri sehingga tidak mengganggu input kami, tetapi mekanisme pemicu kiri menghalangi. Untuk melepaskannya, anda harus melepaskan tiga pin dari potensiometer dari bahagian depan papan, kemudian melepaskan mekanisme dari PCB.

Seterusnya, pegang 14 pin yang memegang tongkat analog kiri. Kemudian tarik tongkat.

Langkah 3: Letakkan Komponen di Tempat

Letakkan Komponen di Tempat
Letakkan Komponen di Tempat
Letakkan Komponen di Tempat
Letakkan Komponen di Tempat

Anda akan melihat terdapat banyak kelonggaran antara bahagian belakang PCB dan sarungnya. Ini memungkinkan untuk meletakkan semua perkakasan ke dalam casing tanpa mengeluarkan apa-apa.

Saya baru sedar kemudian, tetapi ini adalah masa yang tepat untuk melepaskan butang reset di Arduino. Sekiranya tidak, ia akan menekan bahagian belakang casing dan menyebabkan projek berhenti berfungsi sekiranya anda mengetatkan salah satu skru terlalu banyak semasa memasangnya semula.

Saya menempelkan sekeping kad nipis di bahagian belakang setiap PCB untuk melindungi, kemudian terpaku pada PCB pengawal. Saya enggan menggunakan lem, tetapi tidak dapat memikirkan cara yang lebih baik untuk melakukannya.

Kedudukan dalam gambar adalah kombinasi terbaik yang saya dapat. Arduino berada di sebelah kiri, dengan tepi dengan butang reset melenturkan kepingan plastik dari mekanisme pemicu kanan, dengan sisi lain di bawah wayar dan dengan sudut sedekat mungkin dengan penyambung putih. Terdapat sedikit lonjakan dalam kes ini, tetapi saya tidak dapat mencari tempat yang lebih baik untuk meletakkannya.

Accelerometer berada di sebelah kanan wayar. Seharusnya rata dan selurus mungkin, jika tidak, anda mungkin perlu menulis beberapa kod kemudian untuk mengimbangi offset. Perhatikan bahawa terdapat beberapa kepingan plastik yang menonjol di bahagian belakang casing yang harus anda elakkan. Saya dapati anda boleh meletakkan sesuatu yang melekit dan berwarna, seperti gincu, pada kepingan plastik yang menonjol kemudian meletakkan penutup belakang untuk melihat di mana ia meninggalkan tanda.

DAC masuk di sudut kiri bawah. Terdapat cukup ruang di sini untuk menyusun dua DAC, satu di atas yang lain, jika anda ingin mengawal kedua-dua paksi. Anda tidak perlu merekatkannya. Mereka akan tinggal di tempat mereka hanya dengan sambungan terpateri. Sekiranya anda melekatkan kad di antara mereka, pastikan anda memotong kad tersebut agar SCL, SDA, VCC dan GND dapat diakses, kerana anda akan mengaksesnya dari kedua belah pihak.

Sekiranya anda menggunakan dua DAC, jangan lupa untuk menukar pelompat alamat dan matikan perintang penarik pada salah satu daripadanya, seperti yang dijelaskan di sini: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -panduan penukar-sambungan

Langkah 4: Pateri Wayar Hidup

Pateri Wayar Hidup
Pateri Wayar Hidup
Pateri Wayar Hidup
Pateri Wayar Hidup
Pateri Wayar Hidup
Pateri Wayar Hidup

Sekarang anda mesti menghubungkan semuanya. VCC, GND, SDA dan SCL dari semua peranti 2/3 harus disambungkan ke VCC, GND, A4 dan A5 di Arduino, masing-masing. DAC adalah bahagian paling sukar. Sekiranya anda mempunyai dua, anda mesti menyambungkannya bersama-sama, sambil meninggalkan tempat anda boleh menyambungkan kuasa dan talian ke pecutan, sambil memastikan kabel OUT terpisah.

Pin OUT pada DAC harus disambungkan ke pin pada PCB pengawal yang sebelumnya digunakan untuk pin potensiometer mendatar tengah untuk batang analog. Iaitu, di mana tongkat analognya, terdapat sebaris tiga pin di bahagian atas. Sambungkannya ke bahagian tengah. Sekiranya anda mempunyai DAC lain, sambungkan ke pin potensiometer menegak (baris ke kiri) dengan cara yang sama. Anda tidak akan dapat mencapai pin dari belakang apabila pencetus diganti, jadi anda perlu memasang wayar ke bahagian depan papan. Terdapat "dinding" plastik bulat di sekitar kawasan tongkat analog, tetapi untungnya ada jurang yang mudah di dalamnya yang boleh anda pasangkan wayar. Pastikan wayar tidak menghalang tiang skru di bahagian depan casing.

Rancangan asal saya adalah menghidupkan Arduino dengan 5V dari kabel USB yang disambungkan ke pin RAW, tetapi ketika saya mencubanya, ia tidak berjaya. Arduino tidak menjalankan apa-apa, dan kedua Arduino dan pengawal dimatikan setelah beberapa saat. Walau bagaimanapun, saya mendapati bahawa terdapat output 3.3V yang stabil dari dua pin di bahagian depan papan berhampiran soket periferal hitam, mungkin untuk menghidupkan periferal. Ia berfungsi dengan VCC dan RAW, tetapi saya memilih VCC kerana sudah tegangan yang tepat dan kerana ia membolehkan saya menyoldernya ke wayar VCC pada DAC yang sudah dekat bahagian bawah papan dan menjimatkan wayar.

Ketahuilah bahawa terdapat banyak bahagian plastik yang menonjol dari casing yang harus anda jalani, tetapi jika anda memasang kabel di tempatnya, anda hanya perlu bimbang sekali.

Semua ini sukar digambarkan dengan kata-kata, jadi saya telah menyertakan gambar dan gambarajah kasar.

Langkah 5: Program Arduino

Sekarang anda harus memprogram Arduino. Ini memerlukan menggerakkan kabel USB pada pengawal sehingga anda dapat mengakses pin bersiri di Arduino. Saya telah memasukkan kod yang saya gunakan. Ia memerlukan perpustakaan Adafruit MCP4725, yang boleh didapati di sini:

Seperti itu, kod ini membolehkan anda melewati keseluruhan gerakan batang analog secara merata dengan menggerakkan pengawal 90 darjah ke kiri hingga 90 darjah ke kanan, dan menyimpannya di tengah dengan memegangnya rata.

Ia mendapat sudut pengawal dengan mengira tangen terbalik paksi-X daya-g dibahagi dengan paksi-Z daya-g. Ini bermakna ia berfungsi jika pengawal menegak, rata, atau sudut di antara keduanya. (maklumat lebih lanjut di sini:

Ia berfungsi pada pengawal saya, tetapi pengawal lain mungkin memerlukan voltan yang berbeza, sehingga tidak sesuai. Saya rasa cara terbaik untuk mencari julat voltan adalah dengan percubaan dan kesilapan. Banyak permainan akan menunjukkan slaid untuk pergerakan tongkat analog, tetapi cara paling tepat yang saya dapati untuk menentukan pergerakan adalah dengan menggunakan jstest di Linux. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) Ini memberi anda angka antara -32, 767 dan 32, 767 daripada grafik, jadi anda tahu dengan tepat di mana tongkat itu. Pasangkan pengawal dan penyesuai USB Arduino ke siri, muatkan jstest dan cuba nilai DAC yang berbeza sehingga anda mencapai bahagian atas dan bawah julat, dan buat nota masing-masing. Bagi saya ia adalah 1, 593 - 382.

Yang menarik adalah garis 36:

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

Tidak jelas apa yang dilakukannya. Secara sederhana, ia memerlukan sudut pengawal (diukur dalam radian dan antara ~ 1,57 hingga ~ -1,57) dan menukarnya menjadi nilai antara 1, 593 dan 382 untuk DAC. Sekiranya anda mempunyai julat DAC yang berbeza, anda perlu mengubah garis itu.

Garisan boleh ditulis sebagai:

dacvalue = (Controllerangle +) / + 0.5;

Dengan dan menjadi nombor yang perlu anda ubah. sama dengan julat sudut pengawal (pi) dibahagi dengan julat nilai DAC. (bahagian atas jarak tolak bahagian bawah julat) Ini membuat anda sejauh mengubah voltan, walaupun hasilnya akan berada di luar julat yang anda mahukan. Itulah sebabnya anda memerlukan. sama dengan didarabkan dengan bahagian bawah julat ditambah separuh julat gerakan pengawal. (pi / 2) Menambah separuh julat gerakan memastikan itu bukan nombor negatif, dan menambahkan dikalikan dengan bahagian bawah julat memastikannya diselaraskan dengan julat yang anda mahukan.

Semasa menukar perpuluhan menjadi bilangan bulat, C ++ tidak membulat. Ia sebaliknya memotong perpuluhan, jadi 9,9 menjadi 9. Menambah 0.5 pada akhir memastikan apa-apa di atas setengah menuju ke bilangan bulat seterusnya, sehingga ia bulat.

Setelah memuat naik program anda, pastikan ia berfungsi dengan jstest.

Langkah 6: Pasang semula Pengawal

Letakkan pengawal kembali bersama-sama dengan cara yang sama anda membelahnya, tolak tongkat analog kiri. Ia mesti berfungsi sekarang. Saya mendapati tidak ada kelewatan yang ketara dan jauh lebih baik daripada menggunakan tongkat analog. Kerana menggunakan accelerometer, ia dipengaruhi oleh pergerakan tiba-tiba, tetapi anda harus berusaha untuk menyedarinya.

Langkah 7: Kemungkinan Penambahbaikan

Terdapat beberapa penambahbaikan yang boleh dilakukan. Ini termasuk:

  • Menggunakan wayar magnet yang kurang membebankan
  • Melekatkan semuanya ke dalam satu PCB yang direka untuk muat dalam casing pengawal
  • Memasang kembali tongkat analog kiri dan menyambungkan kaki ke input analog di Arduino supaya mereka dapat digunakan untuk menyesuaikan Arduino
  • Mendapatkan casing belakang untuk alat kawalan tanpa wayar dan meletakkan projek di ruang bateri (ini memerlukan pemotongan lubang untuk kabel USB)

Disyorkan: