İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
Xbox 360 denetleyicimle Assetto Corsa oynuyorum. Ne yazık ki, analog çubukla yönlendirme çok hantal ve tekerlek kurulumu için yerim yok. Denetleyicinin tamamını bir direksiyon simidi olarak kullanabileceğimi düşündüğümde, kontrol cihazına daha iyi bir direksiyon mekanizması takmanın yollarını düşünmeye çalıştım.
Analog çubuğun iki potansiyometresi vardır. Biri dikey hareketi, diğeri yatay hareketi ölçer. Her birine 1,6V koyar ve çubuğun ne kadar hareket ettiğini belirlemek için silecekte üretilen voltajı ölçer. Bu, silecek pimine belirli bir voltaj besleyerek çubuk hareketini kontrol etmenin mümkün olduğu anlamına gelir. (burada daha fazla bilgi:
Bu mod, ivmeölçer okumalarından açıyı hesaplamak ve bir DAC aracılığıyla analog çubuk hareketine dönüştürmek için bir Arduino kullanır. Bu nedenle, giriş olarak analog çubuğu kullanan herhangi bir oyunla çalışmalıdır.
Adım 1: İhtiyacınız olacak:
Aletler:
- Havya
- Lehim
- Lehim emici/örgü
- tel striptizci
- Bir tornavida, denetleyicinizdeki vidalara bağlı olarak belki bir Torx (benimki çapraz başlı)
- Tutkal (tercihen süper güçlü bir yapıştırıcı değildir, bu nedenle daha sonra ayrılabilir)
- Arduino'yu programlamak için bir USB'den seri adaptöre
Malzemeler:
- Xbox 360 Denetleyicisi (hah!)
- Arduino Pro Mini (veya bir klonu) (tercihen 3.3V. 5V versiyonunu kullanıyorsanız, muhtemelen bir yükseltici voltaj dönüştürücüye ihtiyacınız olacaktır)
- Bir MPU-6050 jiroskop/ivmeölçer
- Bir MCP4725 DAC (her iki ekseni de kontrol etmek istiyorsanız iki tane)
- Biraz ince tel
- Lehimlemeden önce her şeyi test edebilmeniz için bir devre tahtası (isteğe bağlı, ancak önerilir)
2. Adım: Denetleyiciyi Parçalayın
Çıkarmanız gereken yedi vida var. Altı tanesi bariz ama yedincisi bir çıkartmanın arkasında. Kaldırmanın garantinizi geçersiz kıldığını varsayıyorum, bu nedenle riski size ait olmak üzere devam edin. Bir çok kılavuz bir Torx tornavidaya ihtiyacınız olduğunu söylüyor, ancak benimki çapraz kafalı, bu yüzden kontrol cihazınızı kontrol edin.
Bundan sonra, arka kapağı dikkatlice kaldırın. Ön tarafı kaldırırsanız, düğmeler dökülecek ve muhtemelen odanın her tarafına yayılacaktır. Alttan kaldırın. Ardından iki titreşim motorunu fişten çekin. (ağırlığı küçük olan solda, büyük olan sağda olmalıdır) PCB'yi çıkarın ve analog çubukların üzerindeki kauçuk kapakları çıkarın. Basitçe çekilirler.
Bir sonraki şey, sol analog çubuğu çıkarmak, böylece girişimize müdahale etmesin, ancak sol tetik mekanizması yolda. Çıkarmak için, potansiyometredeki üç pimi kartın önünden sökmeniz ve ardından mekanizmayı PCB'den ayırmanız gerekir.
Ardından, sol analog çubuğu tutan 14 pimi sökün. Ardından çubuğu çekip çıkarın.
Adım 3: Bileşenleri Yerlerine Yapın
PCB'nin arkası ile kasa arasında oldukça fazla boşluk olduğunu fark edeceksiniz. Bu, hiçbir şeyi çıkarmadan tüm donanımı kasaya koymayı mümkün kılar.
Daha sonra fark ettim ama bu Arduino'daki sıfırlama düğmesini sökmek için iyi bir zaman olurdu. Bunu yapmazsanız, kasanın arkasına bastırır ve tekrar monte ederken vidalardan birini çok sıkarsanız projenin durmasına neden olur.
Yalıtmak için her bir PCB'nin arkasına ince bir kart parçası yapıştırdım, ardından bunu kontrolörün PCB'sine yapıştırdım. Yapıştırıcı kullanmak konusunda isteksizdim ama bunu yapmanın daha iyi bir yolunu düşünemedim.
Resimdeki pozisyonlar bulabildiğim en iyi kombinasyon. Arduino solda, sıfırlama düğmeli kenarı sağ tetik mekanizmasından gelen plastik parçaya yaslanacak şekilde, diğer tarafı telin altında ve köşesi beyaz konektöre mümkün olduğunca yakın olacak şekilde. Kasada hafif bir şişkinlik var ama koyacak daha iyi bir yer bulamadım.
İvmeölçer telin sağındadır. Mümkün olduğunca düz ve düz olmalıdır, aksi takdirde ofseti telafi etmek için daha sonra bazı kodlar yazmanız gerekebilir. Kasanın arkasında, kaçınmanız gereken bazı çıkıntılı plastik parçaları olduğunu unutmayın. Çıkıntılı plastik parçalarının üzerine ruj gibi yapışkan ve renkli bir şey koyabileceğinizi ve ardından nerede iz bıraktığını görmek için arka kapağı kapatabileceğinizi buldum.
DAC(lar) sol alt köşeye gider. Her iki ekseni de kontrol etmek istiyorsanız, burada iki DAC'yi biri diğerinin üstüne yığmak için yeterli boşluk var. Onları yapıştırmanıza gerek yok. Sadece lehimli bağlantılarla oldukları yerde kalacaklar. Aralarında kart yapıştırıyorsanız, kartı SCL, SDA, VCC ve GND'yi erişilebilir bırakacak şekilde kestiğinizden emin olun, çünkü onlara her iki taraftan da erişeceksiniz.
İki DAC kullanıyorsanız, burada açıklandığı gibi adres atlama telini değiştirmeyi ve bunlardan birinin üzerindeki çekme dirençlerini devre dışı bırakmayı unutmayın: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -dönüştürücü-bağlantı-kılavuzu
Adım 4: Telleri Lehimleyin
Şimdi her şeyi bağlamanız gerekiyor. Tüm 2/3 cihazlardan VCC, GND, SDA ve SCL, Arduino üzerinde sırasıyla VCC, GND, A4 ve A5'e bağlanmalıdır. DAC'ler en zor kısımdır. İki tane varsa, bunları birbirine bağlamanız gerekir, bir yerden ayrılırken güç ve hatları ivmeölçere bağlayabilir ve ÇIKIŞ kablolarını ayrı tutabilirsiniz.
DAC üzerindeki OUT pini, analog çubuğun orta yatay potansiyometre pini için kullanılan kontrol kartının PCB'sindeki pine bağlanmalıdır. Yani, analog çubuğun olduğu yerde, üstte üç pimli bir sıra var. Ortadakine bağlayın. Başka bir DAC'niz varsa, dikey potansiyometre pimine (soldaki sıra) aynı şekilde bağlayın. Tetik değiştirildiğinde pinlere arkadan ulaşamayacaksınız, bu yüzden kartın önüne bir kablo çekmeniz gerekiyor. Analog çubuk alanının etrafında dairesel bir plastik "duvar" var, ama neyse ki içinde kabloları geçirebileceğiniz uygun bir boşluk var. Kabloların kasanın ön kısmındaki vida direğine engel olmadığından emin olun.
Asıl planım, Arduino'yu RAW pinine bağlı USB kablosundan 5V ile çalıştırmaktı, ancak denediğimde işe yaramadı. Arduino hiçbir şey çalıştırmadı ve hem Arduino hem de kontrolör birkaç saniye sonra kapandı. Bununla birlikte, muhtemelen çevre birimlerine güç sağlamak için, kartın önündeki siyah çevresel soketin yanındaki iki pimden sabit bir 3.3V çıkış olduğunu keşfettim. Hem VCC hem de RAW ile çalışır, ancak zaten doğru voltaj olduğu ve zaten kartın altına yakın olan DAC üzerindeki VCC kablosuna lehimlememe ve kablolardan tasarruf etmeme izin verdiği için VCC'yi seçtim.
Kasadan dışarı çıkmanız gereken çok sayıda plastik parça olduğunu unutmayın, ancak kabloları yerine yapıştırırsanız, onlar için yalnızca bir kez endişelenmeniz gerekir.
Bütün bunları kelimelerle anlatmak zor, bu yüzden resimleri ve kaba bir diyagramı ekledim.
Adım 5: Arduino'yu Programlayın
Şimdi Arduino'yu programlamanız gerekiyor. Bu, Arduino'daki seri pinlere erişebilmeniz için USB kablosunu denetleyicide hareket ettirmeyi gerektirir. Kullandığım kodu ekledim. Burada bulabileceğiniz Adafruit MCP4725 kitaplığını gerektirir:
Olduğu gibi, kod, denetleyiciyi 90 derece sola ve 90 derece sağa hareket ettirerek analog çubuğun tüm hareket aralığından eşit bir şekilde geçmenize ve düz tutarak ortada tutmanıza olanak tanır.
X ekseni g kuvvetinin ters tanjantını Z ekseni g kuvvetine bölerek denetleyicinin açısını elde eder. Bu, kontrol cihazının dikey, düz veya aradaki herhangi bir açıda olması durumunda çalıştığı anlamına gelir. (burada daha fazla bilgi:
Denetleyicimde çalışıyor, ancak diğer denetleyiciler farklı voltajlar gerektirebilir ve bu da onu hizalamadan çıkarır. Voltaj aralığını bulmanın en iyi yolunun deneme yanılma olduğunu düşünüyorum. Birçok oyun size analog çubuk hareketi için bir kaydırıcı gösterecek, ancak hareketi belirlemenin en doğru yolu Linux'ta jstest ile. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) Size grafik yerine -32, 767 ile 32, 767 arasında bir sayı verir, böylece çubuğun tam olarak nerede olduğunu bilirsiniz. Hem denetleyiciyi hem de Arduino USB'yi seri adaptöre takın, jstest'i yükleyin ve aralığın en üstüne ve en altına ulaşana kadar farklı DAC değerleri deneyin ve her birini not edin. Benim için 1, 593 - 382 idi.
Özellikle ilgi çekici olan satır 36:
dacdeğeri = (kontrol açısı + 2.5617859169446084418) / 0.0025942135867793503208 + 0.5;
Ne yaptığı hemen belli değil. Basitçe, denetleyicinin açısını alır (radyan cinsinden ve ~1.57 ile ~-1.57 arasında ölçülür) ve bunu DAC için 1, 593 ile 382 arasında bir değere dönüştürür. Farklı bir DAC aralığınız varsa, o satırı değiştirmeniz gerekecektir.
Satır şu şekilde yazılabilir:
dacdeğeri = (kontrol açısı +) / + 0,5;
Değiştirmeniz gereken sayılarla ve olmak. DAC değerlerinin toplam aralığına bölünen denetleyici açısının (pi) aralığına eşittir. (aralığın üstü eksi aralığın altı) Sonuçlar istediğiniz aralığın dışında olsa da, bu sizi voltajı değiştirmeye kadar götürür. Bu yüzden ihtiyacın var. aralığın alt kısmı ile kontrolörün hareket aralığının yarısı ile çarpımına eşittir. (pi / 2) Hareket aralığının yarısını eklemek, bunun negatif bir sayı olmamasını sağlar ve aralığın alt kısmıyla çarpmak, istediğiniz aralıkla senkronize olmasını sağlar.
Ondalık sayıları bir tamsayıya dönüştürürken C++ yuvarlamaz. Bunun yerine ondalık sayıyı keser, böylece 9.9 9 olur. Sonuna 0,5 eklemek, yarımın üzerindeki herhangi bir şeyin bir sonraki tam sayıya gitmesini sağlar, bu yüzden yuvarlanır.
Programınızı yükledikten sonra jstest ile çalıştığından emin olun.
Adım 6: Denetleyiciyi Yeniden Birleştirin
Denetleyiciyi, ayırdığınız şekilde, eksi sol analog çubukla tekrar bir araya getirin. Şimdi çalışmalı. Fark edilebilir bir gecikme olmadığını görüyorum ve analog çubuğu kullanmaktan çok daha iyi. İvmeölçer kullandığı için ani hareketlerden etkilenir ancak bunu fark etmek için kendi yolunuzdan çıkmanız gerekir.
7. Adım: Olası İyileştirmeler
Yapılabilecek bazı iyileştirmeler var. Bunlar şunları içerir:
- Daha az hantal mıknatıs teli kullanma
- Her şeyi kontrolör kasasına sığacak şekilde tasarlanmış tek bir PCB üzerine aşındırma
- Sol analog çubuğu yeniden takmak ve bacakları Arduino'daki analog girişlere bağlamak, böylece Arduino'yu ayarlamak için kullanılabilirler
- Kablosuz kumanda için arka kasa parçasını alıp pil bölmesine projeyi yerleştirmek (bu, USB kablosu için bir delik açılmasını gerektirir)