Mündəricat:

Xbox 360 Nəzarətçi Accelerometer/girro Sükan Modu: 7 addım
Xbox 360 Nəzarətçi Accelerometer/girro Sükan Modu: 7 addım

Video: Xbox 360 Nəzarətçi Accelerometer/girro Sükan Modu: 7 addım

Video: Xbox 360 Nəzarətçi Accelerometer/girro Sükan Modu: 7 addım
Video: Геймпад Xbox 360 с гироскопом Arduino MPU6050/руль/FPS/как на контроллере Steam 2024, Noyabr
Anonim
Xbox 360 Nəzarətçi Accelerometer/girro Sükan Modu
Xbox 360 Nəzarətçi Accelerometer/girro Sükan Modu

Xbox 360 nəzarətçimlə Assetto Corsa oynayıram. Təəssüf ki, analoq çubuqla sükan idarə etmək çox çətin deyil və təkər qurmaq üçün yerim yoxdur. Bütün idarəedicini sükan çarxı kimi istifadə edə biləcəyimi düşündüyüm zaman idarəediciyə daha yaxşı bir sükan mexanizmi bağlaya biləcəyimi düşünməyə çalışdım.

Analoq çubuqda iki potensiometr var. Biri şaquli hərəkəti, biri üfüqi hərəkəti ölçür. Hər birinə 1.6V keçirir və çubuğun nə qədər hərəkət etdiyini təyin etmək üçün silecekdə istehsal olunan gərginliyi ölçür. Bu o deməkdir ki, silecek piminə müəyyən bir gərginlik verərək çubuq hərəkətini idarə etmək mümkündür. (daha çox məlumat burada:

Bu mod, accelerometer oxunuşlarından bucağı hesablamaq və DAC vasitəsilə analoq çubuq hərəkətinə çevirmək üçün bir Arduino istifadə edir. Buna görə, analoq çubuğu giriş olaraq istifadə edən hər hansı bir oyunla işləməlidir.

Addım 1: Lazım olacaq:

Alətlər:

  • Lehimleme dəmir
  • Lehim
  • Lehim emici/örgü
  • Tel çıxarıcı
  • Bir tornavida, bəlkə də idarəedicinizdəki vintlərdən asılı olaraq bir Torx (mənimki başlıqdır)
  • Yapışqan (tercihen super güclü yapışqan deyil, buna görə də sonradan parçalana bilər)
  • Arduino proqramlaşdırmaq üçün USB -dən seriya adapteri

Materiallar:

  • Xbox 360 Nəzarətçisi (duh!)
  • Arduino Pro Mini (və ya bir klon) (tercihen 3.3V. 5V versiyasını istifadə edirsinizsə, ehtimal ki, bir qədər artan gərginlik çeviricisinə ehtiyacınız olacaq)
  • MPU-6050 giroskop/akselerometr
  • MCP4725 DAC (hər iki oxu idarə etmək istəyirsinizsə iki)
  • Bir az nazik tel
  • Lehimdən əvvəl hər şeyi sınaya biləcəyiniz bir çörək taxtası (isteğe bağlı, lakin tövsiyə olunur)

Addım 2: Nəzarətçini ayırın

Nəzarətçini ayırın
Nəzarətçini ayırın
Nəzarətçini ayırın
Nəzarətçini ayırın
Nəzarətçini ayırın
Nəzarətçini ayırın

Sökməli olduğunuz yeddi vida var. Onlardan altısı açıqdır, amma yeddisi etiketin arxasındadır. Güman edirəm ki, silmək zəmanətinizi ləğv edir, buna görə də öz riski ilə hərəkət edin. Bir çox bələdçi Torx tornavidasına ehtiyacınız olduğunu söyləyir, amma mənimki çarpazdır, buna görə nəzarətçinizi yoxlayın.

Bundan sonra arxa qapağı diqqətlə çıxarın. Ön tərəfi götürsəniz, düymələr dağılacaq və yəqin ki, bütün otağa keçəcək. Aşağıdan qaldırın. Sonra iki vibrasiya motorunu ayırın. (kiçik çəkisi olan biri solda, böyük çəkisi isə sağda olmalıdır) PCB -ni çıxarın və analoq çubuqların üzərindəki rezin qapaqları çıxarın. Sadəcə çıxarırlar.

Növbəti şey, sol analog çubuğu çıxarmağımızdır ki, girişimizə müdaxilə etməsin, amma sol tətik mexanizmi yolda. Sökmək üçün lövhənin ön tərəfindəki potensiometrdən üç sancağı açmalısınız, sonra mexanizmi PCB -dən ayırın.

Sonra, sol analog çubuğu tutan 14 sancağı soyun. Sonra çubuğu çıxarın.

Addım 3: Komponentləri yerinə yapışdırın

Komponentləri öz yerinə yapışdırın
Komponentləri öz yerinə yapışdırın
Komponentləri öz yerinə yapışdırın
Komponentləri öz yerinə yapışdırın

PCB -nin arxası ilə korpus arasında kifayət qədər boşluq olduğunu görəcəksiniz. Bu, heç bir şeyi çıxarmadan bütün avadanlıqları çantaya qoymağa imkan verir.

Yalnız sonra başa düşdüm, amma Arduino -da sıfırlama düyməsini açmaq üçün yaxşı bir vaxt olardı. Əks təqdirdə, işin arxasına basacaq və vintləri yenidən yığarkən çox sıxarsanız, layihənin işləməyinə səbəb olacaq.

İzolə etmək üçün hər bir PCB -nin arxasına nazik bir kart yapışdırdım, sonra nəzarətçinin PCB -nə yapışdırdım. Yapışqan istifadə etməkdən çəkindim, amma daha yaxşı bir yol düşünə bilmədim.

Şəkildəki mövqelər tapa biləcəyim ən yaxşı birləşmədir. Arduino sol tərəfdədir, sıfırlama düyməsi olan kənar sağ tətik mexanizmindən plastik parçaya qarşı, digər tərəfi də telin altında və küncü ağ konnektora mümkün qədər yaxındır. Davada bir az qabarıqlıq var, amma onu qoymaq üçün daha yaxşı bir yer tapa bilmədim.

Akselerometr telin sağ tərəfindədir. Mümkün qədər düz və düz olmalıdır, əks halda ofseti kompensasiya etmək üçün daha sonra bir kod yazmalı ola bilərsiniz. Korpusun arxasında çıxmamaq üçün diqqətli olmalı olduğunuz bəzi çıxıntılı plastik parçalar olduğunu unutmayın. Çıxan plastik parçalara dodaq boyası kimi yapışqan və rəngarəng bir şey qoya biləcəyinizi, sonra iz buraxdığını görmək üçün arxa qapağı taxa biləcəyinizi gördüm.

DAC (lər) sol alt küncdədir. Hər iki oxu idarə etmək istəyirsinizsə, bir -birinin üstünə iki DAC yığmaq üçün burada kifayət qədər boşluq var. Onları yapışdırmaq lazım deyil. Yalnız lehimli bağlantılarla olduqları yerdə qalacaqlar. Aralarında kart yapışdırırsınızsa, SCL, SDA, VCC və GND -ni əlçatan etmək üçün kartı kəsdiyinizə əmin olun, çünki hər iki tərəfdən də onlara daxil olacaqsınız.

İki DAC istifadə edirsinizsə, ünvan tullananını dəyişdirməyi və burada təsvir edildiyi kimi onlardan birində çəkmə rezistorlarını deaktiv etməyi unutmayın: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -çevirici-bağlama bələdçisi

Addım 4: Telləri Lehimləyin

Telləri Lehimləyin
Telləri Lehimləyin
Telləri Lehimləyin
Telləri Lehimləyin
Telləri Lehimləyin
Telləri Lehimləyin

İndi hər şeyi birləşdirməlisiniz. Bütün 2/3 cihazlarından VCC, GND, SDA və SCL, müvafiq olaraq Arduino üzərindəki VCC, GND, A4 və A5 -ə qoşulmalıdır. DAC -lar ən çətin hissədir. İkiniz varsa, onları bir -birinə bağlamalısınız, bir yerdən çıxarkən güc və xətləri akselerometrə bağlaya bilərsiniz, Çıxış tellərini ayrı saxlayaraq.

DAC -dakı Çıxış pimi, analoq çubuq üçün orta üfüqi potansiyometr pimi üçün istifadə olunan nəzarətçinin PCB -dəki pinə bağlanmalıdır. Yəni, analoq çubuğun olduğu yerdə, yuxarıda üç sancaq sırası var. Ortaya bağlayın. Başqa bir DAC varsa, eyni şəkildə şaquli potansiyometr pininə (soldakı sıra) bağlayın. Tətik dəyişdirildikdə arxadan sancaqlara girə bilməyəcəksiniz, buna görə lövhənin önünə bir tel çəkməlisiniz. Analoq çubuq sahəsinin ətrafında dairəvi bir plastik "divar" var, amma xoşbəxtlikdən içərisində telləri keçirə biləcəyiniz rahat bir boşluq var. Tellərin korpusun ön hissəsindəki vida dirəyinə mane olmadığından əmin olun.

Orijinal planım, Arduino -nu RAW pininə qoşulmuş USB kabelindən 5V ilə gücləndirmək idi, amma sınadığımda alınmadı. Arduino heç bir iş görmədi və həm Arduino, həm də nəzarətçi bir neçə saniyə sonra söndü. Bununla birlikdə, ehtimal ki, periferik cihazları gücləndirmək üçün qara periferik yuvanın yaxınlığında, lövhənin ön hissəsindəki iki sancaqdan sabit 3.3V çıxış olduğunu kəşf etdim. Həm VCC, həm də RAW ilə işləyir, amma VCC -ni seçdim, çünki bu artıq düzgün gərginlikdir və onu lövhənin altına yaxın olan DAC -da VCC telinə lehimləməyimə və tellərə qənaət etməyimə imkan verdiyindən.

Ətrafında işləməli olduğunuz bir çox plastik hissənin çıxdığını unutmayın, ancaq telləri yerinə yapışdırsanız, yalnız bir dəfə narahat olmağınız lazımdır.

Bütün bunları sözlərlə təsvir etmək çətindir, buna görə şəkillər və kobud bir diaqram daxil etdim.

Addım 5: Arduino proqramlaşdırın

İndi Arduino proqramlaşdırmalısınız. Bunun üçün USB kabelini nəzarətçiyə köçürmək lazımdır ki, Arduino üzərindəki seriyalı pinlərə daxil olasınız. İstifadə etdiyim kodu daxil etdim. Burada tapa biləcəyiniz Adafruit MCP4725 kitabxanası lazımdır:

Olduğu kimi, kod, idarəedicini 90 dərəcə sola 90 dərəcə sağa doğru hərəkət etdirərək, analoq çubuğunun bütün hərəkət aralığını bərabər şəkildə keçməyə və düz tutaraq ortada saxlamağa imkan verir.

X oxu g qüvvəsinin Z oxu g qüvvəsinə bölünmüş tərs tangensini hesablayaraq nəzarətçinin bucağını alır. Bu, nəzarətçinin şaquli, düz və ya aralarında hər hansı bir açı olduğu təqdirdə işlədiyi deməkdir. (daha çox məlumat burada:

Nəzarətçimdə işləyir, amma digər idarəedicilər onu hizalamadan çıxarıb fərqli gərginlik tələb edə bilər. Düşünürəm ki, gərginlik aralığını tapmağın ən yaxşı yolu sınaq və səhvdir. Bir çox oyun sizə analoq çubuq hərəkəti üçün bir kaydırıcıyı göstərəcək, ancaq hərəkəti təyin etmənin ən doğru yolu Linux -da jstest -dir. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) Qrafikdən çox -32, 767 ilə 32, 767 arasında bir rəqəm verir, buna görə də çubuğun harada olduğunu dəqiq bilirsiniz. Həm nəzarətçini, həm də Arduino USB -ni seriya adapterinə qoşun, jstest yükləyin və aralığın yuxarı və aşağı hissəsinə çatana qədər fərqli DAC dəyərlərini sınayın və hər birini qeyd edin. Mənim üçün 1 593 - 382 idi.

Xüsusi maraq 36 -cı sətirdir:

dacvalue = (nəzarətçi açısı + 2.5617859169446084418) / 0.0025942135867793503208 + 0.5;

Nə etdikləri dərhal aydın deyil. Sadəcə olaraq, nəzarətçinin bucağını alır (radianlarla ölçülür və ~ 1.57 ilə ~ 1.57 arasında) və DAC üçün 1, 593 ilə 382 arasında olan bir dəyərə çevirir. Fərqli bir DAC aralığınız varsa, bu xətti dəyişdirməlisiniz.

Xətti belə yazmaq olar:

dacvalue = (nəzarətçi açısı +) / + 0.5;

Nömrələrlə birlikdə olmaq və dəyişdirmək lazımdır. DAC dəyərlərinin ümumi aralığına bölünən nəzarətçi açısının (pi) aralığına bərabərdir. (aralığın üstü ilə aralığın alt hissəsi) Nəticələr istədiyiniz diapazondan kənarda olsa da, gərginliyi dəyişdiyinizə qədər əldə edir. Buna görə ehtiyacınız var. aralığın dibi ilə üstəgəl nəzarətçinin hərəkət aralığının yarısı ilə bərabərdir. (pi / 2) Hərəkət aralığının yarısını əlavə etmək, bunun mənfi bir rəqəm olmadığını və aralığın alt hissəsi ilə vurulmasının istədiyiniz aralıqla sinxronizasiya olunmasını təmin edir.

Ondalıkları tamsayıya çevirərkən C ++ yuvarlaqlaşmır. Bunun əvəzinə ondalı kəsir, beləliklə 9.9 9 olur. Sonda 0,5 əlavə etmək, yarısından yuxarı olan hər hansı bir şeyin növbəti tamsayıya keçməsini təmin edir, beləliklə yuvarlaqlaşdırılır.

Proqramınızı yüklədikdən sonra onun jstest ilə işlədiyinə əmin olun.

Addım 6: İdarəçini yenidən yığın

Nəzarətçini, sol analoq çubuğu çıxarmaqla ayırdığınız kimi bir yerə yığın. İndi işləməlidir. Görürəm ki, heç bir gecikmə yoxdur və analoq çubuq istifadə etməkdən daha yaxşıdır. Bir akselerometrdən istifadə etdiyi üçün ani hərəkətlərdən təsirlənir, ancaq fərqinə varmaq üçün kənara çıxmalısan.

Addım 7: Mümkün təkmilləşdirmələr

Bəzi təkmilləşdirmələr edilə bilər. Bunlara daxildir:

  • Daha az çətin maqnit teli istifadə etməklə
  • Hər şeyi nəzarətçi qutusuna yerləşdirmək üçün hazırlanmış bir PCB -yə yapışdırın
  • Sol analog çubuğu yenidən bağlamaq və ayaqları Arduinonun analoq girişlərinə bağlamaq üçün Arduino -nu tənzimləmək üçün istifadə edilə bilər.
  • Simsiz nəzarətçi üçün arxa korpus parçasını almaq və layihəni batareya bölməsinə qoymaq (bunun üçün USB kabeli üçün bir çuxur kəsmək lazım olacaq)

Tövsiyə: