Daftar Isi:

Xbox 360 Controller Accelerometer/gyro Steering Mod: 7 Langkah
Xbox 360 Controller Accelerometer/gyro Steering Mod: 7 Langkah

Video: Xbox 360 Controller Accelerometer/gyro Steering Mod: 7 Langkah

Video: Xbox 360 Controller Accelerometer/gyro Steering Mod: 7 Langkah
Video: when you put these on.. 2024, November
Anonim
Xbox 360 Controller Accelerometer/gyro Steering Mod
Xbox 360 Controller Accelerometer/gyro Steering Mod

Saya telah memainkan Assetto Corsa dengan pengontrol Xbox 360 saya. Sayangnya, kemudi dengan tongkat analog sangat berat, dan saya tidak memiliki ruang untuk pengaturan roda. Saya mencoba memikirkan cara untuk memasang mekanisme kemudi yang lebih baik ke dalam pengontrol, ketika terpikir oleh saya bahwa saya dapat menggunakan seluruh pengontrol sebagai roda kemudi.

Tongkat analog memiliki dua potensiometer. Satu mengukur gerakan vertikal, dan satu mengukur gerakan horizontal. Ini menempatkan 1.6V melalui masing-masing dan mengukur tegangan yang dihasilkan pada penghapus untuk menentukan seberapa banyak tongkat telah bergerak. Ini berarti dimungkinkan untuk mengontrol gerakan tongkat dengan memberi tegangan tertentu ke pin penghapus. (informasi lebih lanjut di sini:

Mod ini menggunakan Arduino untuk menghitung sudut dari pembacaan akselerometer dan mengubahnya menjadi gerakan tongkat analog melalui DAC. Oleh karena itu, ini harus bekerja dengan game apa pun yang menggunakan stik analog sebagai input.

Langkah 1: Anda Akan Membutuhkan:

Peralatan:

  • Besi solder
  • Pateri
  • Pengisap solder / kepang
  • penari telanjang kawat
  • Obeng, mungkin Torx tergantung pada sekrup di pengontrol Anda (milik saya adalah crosshead)
  • Lem (sebaiknya bukan lem super kuat agar nanti bisa dicopot)
  • Adaptor USB ke serial untuk memprogram Arduino

Bahan:

  • Pengontrol Xbox 360 (ya!)
  • Arduino Pro Mini (atau tiruannya) (sebaiknya 3.3V. Jika Anda menggunakan versi 5V, Anda mungkin memerlukan konverter tegangan step-up)
  • Giroskop/akselerometer MPU-6050
  • Sebuah MCP4725 DAC (dua jika Anda ingin mengontrol kedua sumbu)
  • Beberapa kawat tipis
  • Papan tempat memotong roti sehingga Anda dapat menguji semuanya sebelum menyolder (opsional, tetapi disarankan)

Langkah 2: Pisahkan Pengontrol

Bongkar Pengendali
Bongkar Pengendali
Bongkar Pengendali
Bongkar Pengendali
Bongkar Pengendali
Bongkar Pengendali

Ada tujuh sekrup yang harus Anda lepaskan. Enam di antaranya jelas, tetapi yang ketujuh ada di belakang stiker. Saya berasumsi menghapusnya membatalkan garansi Anda, jadi lanjutkan dengan risiko Anda sendiri. Banyak panduan mengatakan bahwa Anda memerlukan obeng Torx, tetapi obeng saya adalah obeng, jadi periksa pengontrol Anda.

Setelah itu, lepaskan penutup belakang dengan hati-hati. Jika Anda membongkar bagian depan, kancingnya akan tumpah dan mungkin menyebar ke seluruh ruangan. Angkat dari bawah. Kemudian cabut kedua motor getaran. (yang berbobot kecil harus di sebelah kiri, dan yang berbobot besar di sebelah kanan) Keluarkan PCB dan lepaskan tutup karet pada stik analog. Mereka hanya menarik.

Hal selanjutnya adalah melepas stik analog kiri agar tidak mengganggu input kita, tetapi mekanisme pemicu kiri menghalangi. Untuk melepasnya, Anda harus melepas tiga pin dari potensiometer dari depan papan, lalu melepas mekanisme dari PCB.

Selanjutnya, lepaskan 14 pin yang menahan stik analog kiri. Kemudian tarik tongkat itu.

Langkah 3: Tempelkan Komponen di Tempatnya

Tempelkan Komponen di Tempatnya
Tempelkan Komponen di Tempatnya
Tempelkan Komponen di Tempatnya
Tempelkan Komponen di Tempatnya

Anda akan melihat ada cukup banyak jarak antara bagian belakang PCB dan kasing. Hal ini memungkinkan untuk meletakkan semua perangkat keras ke dalam casing tanpa melepas apa pun.

Saya baru menyadarinya kemudian, tetapi ini akan menjadi saat yang tepat untuk melepaskan tombol reset pada Arduino. Jika tidak, itu akan menekan bagian belakang casing dan menyebabkan proyek berhenti bekerja jika Anda mengencangkan salah satu sekrup terlalu banyak saat memasangnya kembali.

Saya menempelkan selembar kartu tipis ke bagian belakang setiap PCB untuk mengisolasinya, lalu menempelkannya ke PCB pengontrol. Saya enggan menggunakan lem, tetapi tidak bisa memikirkan cara yang lebih baik untuk melakukannya.

Posisi dalam gambar adalah kombinasi terbaik yang bisa saya temukan. Arduino ada di sebelah kiri, dengan tepi dengan tombol reset rata dengan potongan plastik dari mekanisme pemicu kanan, dengan sisi lain di bawah kabel dan dengan sudut sedekat mungkin dengan konektor putih. Ada sedikit tonjolan di kasingnya, tapi saya tidak bisa menemukan tempat yang lebih baik untuk meletakkannya.

Akselerometer ada di sebelah kanan kawat. Itu harus sedatar dan selurus mungkin, jika tidak, Anda mungkin harus menulis beberapa kode nanti untuk mengimbangi offset. Perhatikan bahwa ada beberapa potongan plastik yang menonjol di bagian belakang kasing yang harus Anda hindari. Saya telah menemukan bahwa Anda dapat meletakkan sesuatu yang lengket dan berwarna-warni, seperti lipstik, pada potongan-potongan plastik yang menonjol kemudian memasang penutup belakang untuk melihat di mana ia meninggalkan bekas.

DAC (s) pergi di sudut kiri bawah. Ada cukup izin di sini untuk menumpuk dua DAC, satu di atas yang lain, jika Anda ingin mengontrol kedua sumbu. Anda tidak perlu merekatkannya. Mereka akan tetap di tempatnya hanya dengan koneksi yang disolder. Jika Anda menempelkan kartu di antara keduanya, pastikan Anda memotong kartu agar SCL, SDA, VCC, dan GND dapat diakses, karena Anda akan mengaksesnya dari kedua sisi.

Jika Anda menggunakan dua DAC, jangan lupa untuk mengganti jumper alamat dan menonaktifkan resistor pull up pada salah satunya, seperti yang dijelaskan di sini: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -konverter-penghubung-panduan

Langkah 4: Solder Kabelnya

Solder Kabelnya
Solder Kabelnya
Solder Kabelnya
Solder Kabelnya
Solder Kabelnya
Solder Kabelnya

Sekarang Anda harus menghubungkan semuanya. VCC, GND, SDA dan SCL dari semua 2/3 perangkat masing-masing harus terhubung ke VCC, GND, A4 dan A5 di Arduino. DAC adalah bagian tersulit. Jika Anda memiliki dua, Anda harus menghubungkannya bersama-sama, sambil meninggalkan suatu tempat Anda dapat menghubungkan daya dan saluran ke akselerometer, sambil menjaga kabel OUT terpisah.

Pin OUT pada DAC harus dihubungkan dengan pin pada PCB controller yang digunakan untuk pin potensiometer horizontal tengah untuk stik analog. Artinya, di mana stik analog berada, ada deretan tiga pin di bagian atas. Hubungkan ke bagian tengah. Jika Anda memiliki DAC lain, sambungkan ke pin potensiometer vertikal (baris ke kiri) dengan cara yang sama. Anda tidak akan bisa mendapatkan pin dari belakang saat pelatuk diganti, jadi Anda harus memasang kabel ke bagian depan papan. Ada "dinding" plastik melingkar di sekitar area stik analog, tapi untungnya ada celah yang nyaman di mana Anda bisa memasukkan kabel. Pastikan kabel tidak menghalangi tiang sekrup di bagian depan kasing.

Rencana awal saya adalah menyalakan Arduino dengan 5V dari kabel USB yang terhubung ke pin RAW, tetapi ketika saya mencobanya, itu tidak berhasil. Arduino tidak menjalankan apa pun, dan Arduino dan pengontrol mati setelah beberapa detik. Namun, saya menemukan bahwa ada output 3.3V yang stabil dari dua pin di bagian depan papan dekat soket periferal hitam, mungkin untuk menyalakan periferal. Ini bekerja dengan VCC dan RAW, tetapi saya memilih VCC karena tegangannya sudah tepat dan karena memungkinkan saya untuk menyoldernya ke kabel VCC pada DAC yang sudah dekat bagian bawah papan dan menghemat kabel.

Ketahuilah bahwa ada banyak bagian plastik yang menonjol dari kasing yang harus Anda tangani, tetapi jika Anda merekatkan kabel pada tempatnya, Anda hanya perlu mengkhawatirkannya sekali.

Semua ini sulit dijelaskan dengan kata-kata, jadi saya menyertakan gambar dan diagram kasar.

Langkah 5: Program Arduino

Sekarang Anda harus memprogram Arduino. Ini membutuhkan pemindahan kabel USB pada pengontrol sehingga Anda dapat mengakses pin serial pada Arduino. Saya telah menyertakan kode yang saya gunakan. Itu membutuhkan perpustakaan Adafruit MCP4725, yang dapat ditemukan di sini:

Seperti apa adanya, kode ini memungkinkan Anda untuk melewati seluruh rentang gerak stik analog secara merata dengan menggerakkan pengontrol 90 derajat ke kiri hingga 90 derajat ke kanan, dan menjaganya tetap di tengah dengan menahannya rata.

Ini mendapatkan sudut pengontrol dengan menghitung tangen terbalik dari sumbu X g-force dibagi dengan sumbu Z g-force. Ini berarti berfungsi jika pengontrol vertikal, datar, atau sudut apa pun di antaranya. (informasi lebih lanjut di sini:

Ini berfungsi pada pengontrol saya, tetapi pengontrol lain mungkin memerlukan voltase yang berbeda, membuatnya tidak selaras. Saya pikir cara terbaik untuk menemukan rentang tegangan adalah dengan coba-coba. Banyak permainan akan menunjukkan kepada Anda penggeser untuk gerakan tongkat analog, tetapi cara paling akurat yang saya temukan untuk menentukan gerakan adalah dengan 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 persis di mana tongkat itu berada. Colokkan pengontrol dan USB Arduino ke adaptor serial, muat jstest dan coba nilai DAC yang berbeda hingga Anda mencapai bagian atas dan bawah rentang, dan catat masing-masing. Bagi saya itu adalah 1,593 - 382.

Yang menarik adalah baris 36:

dacvalue = (controllerrangle + 2.5617859169446084418) / 0,0025942135867793503208 + 0,5;

Tidak segera jelas apa yang dilakukannya. Sederhananya, dibutuhkan sudut pengontrol (diukur dalam radian dan antara ~1,57 dan ~-1,57) dan mengubahnya menjadi nilai antara 1,593 dan 382 untuk DAC. Jika Anda memiliki rentang DAC yang berbeda, Anda perlu mengubah baris itu.

Garis tersebut dapat ditulis sebagai:

dacvalue = (controllerrangle +) / + 0.5;

Dengan dan menjadi angka yang perlu Anda ubah. sama dengan rentang sudut pengontrol (pi) dibagi dengan rentang total nilai DAC. (bagian atas rentang dikurangi bagian bawah rentang) Ini membuat Anda sejauh mengubah voltase, meskipun hasilnya akan berada di luar rentang yang Anda inginkan. Itu sebabnya Anda perlu. sama dengan dikalikan dengan bagian bawah rentang ditambah setengah rentang gerak pengontrol. (pi / 2) Menambahkan setengah rentang gerak memastikan itu bukan angka negatif, dan menambahkan dikalikan dengan bagian bawah rentang memastikan itu disinkronkan dengan rentang yang Anda inginkan.

Saat mengonversi desimal ke bilangan bulat, C++ tidak membulatkan. Itu malah memotong desimal, jadi 9,9 menjadi 9. Menambahkan 0,5 di akhir memastikan apa pun di atas setengah masuk ke bilangan bulat berikutnya, jadi bulat.

Setelah Anda mengunggah program Anda, pastikan itu berfungsi dengan jstest.

Langkah 6: Pasang kembali Pengontrol

Pasang kembali pengontrol dengan cara yang sama seperti saat Anda melepasnya, tanpa stik analog kiri. Ini harus bekerja sekarang. Saya menemukan tidak ada penundaan yang nyata dan itu jauh lebih baik daripada menggunakan stik analog. Karena menggunakan akselerometer, itu dipengaruhi oleh gerakan tiba-tiba, tetapi Anda harus berusaha keras untuk menyadarinya.

Langkah 7: Kemungkinan Peningkatan

Ada beberapa perbaikan yang bisa dilakukan. Ini termasuk:

  • Menggunakan kawat magnet yang tidak terlalu rumit
  • Etsa semuanya ke satu PCB yang dirancang agar sesuai dengan casing pengontrol
  • Memasang kembali stik analog kiri dan menghubungkan kaki-kaki ke input analog pada Arduino sehingga dapat digunakan untuk mengatur Arduino
  • Mendapatkan bagian casing belakang untuk pengontrol nirkabel dan meletakkan proyek di kompartemen baterai (ini akan membutuhkan pemotongan lubang untuk kabel USB)

Direkomendasikan: