Xbox 360 Controller Beschleunigungsmesser / Gyro-Lenkungs-Mod - Gunook
Xbox 360 Controller Beschleunigungsmesser / Gyro-Lenkungs-Mod - Gunook
Anonim
Xbox 360 Controller Beschleunigungsmesser/Gyro-Lenkungs-Mod
Xbox 360 Controller Beschleunigungsmesser/Gyro-Lenkungs-Mod

Ich habe Assetto Corsa mit meinem Xbox 360 Controller gespielt. Leider ist die Lenkung mit dem Analogstick sehr unhandlich und ich habe nicht den Platz für ein Radsetup. Ich überlegte, wie ich einen besseren Lenkmechanismus in den Controller einbauen könnte, als mir einfiel, dass ich den gesamten Controller als Lenkrad verwenden könnte.

Der Analogstick verfügt über zwei Potentiometer. Einer misst die vertikale Bewegung und der andere misst die horizontale Bewegung. Es legt jeweils 1,6 V durch und misst die am Wischer erzeugte Spannung, um festzustellen, wie viel sich der Knüppel bewegt hat. Dadurch ist es möglich, die Knüppelbewegung durch Anlegen einer bestimmten Spannung an den Wischerstift zu steuern. (weitere Informationen hier:

Dieser Mod verwendet einen Arduino, um den Winkel aus Beschleunigungsmesserwerten zu berechnen und über einen DAC in eine analoge Stickbewegung umzuwandeln. Daher sollte es mit jedem Spiel funktionieren, das den Analogstick als Eingabe verwendet.

Schritt 1: Sie benötigen:

Werkzeuge:

  • Lötkolben
  • Lot
  • Lötsauger/Geflecht
  • Abisolierzange
  • Ein Schraubendreher, möglicherweise ein Torx-Schraubendreher, abhängig von den Schrauben in Ihrem Controller (meine sind Kreuzschlitzschrauben)
  • Kleber (vorzugsweise kein super starker Kleber, damit er später auseinandergenommen werden kann)
  • Ein USB-zu-Seriell-Adapter zum Programmieren des Arduino

Materialien:

  • Xbox 360-Controller (duh!)
  • Arduino Pro Mini (oder ein Klon) (vorzugsweise 3,3 V. Wenn Sie die 5-V-Version verwenden, benötigen Sie wahrscheinlich einen Aufwärtsspannungswandler)
  • Ein MPU-6050 Gyroskop/Beschleunigungsmesser
  • Ein MCP4725 DAC (zwei, wenn Sie beide Achsen steuern möchten)
  • Etwas dünner Draht
  • Ein Steckbrett, damit Sie alles testen können, bevor Sie löten (optional, aber empfohlen)

Schritt 2: Nehmen Sie den Controller auseinander

Nehmen Sie den Controller auseinander
Nehmen Sie den Controller auseinander
Nehmen Sie den Controller auseinander
Nehmen Sie den Controller auseinander
Nehmen Sie den Controller auseinander
Nehmen Sie den Controller auseinander

Es gibt sieben Schrauben, die Sie entfernen müssen. Sechs davon sind offensichtlich, aber der siebte steckt hinter einem Aufkleber. Ich gehe davon aus, dass durch das Entfernen Ihre Garantie erlischt, gehen Sie also auf eigenes Risiko vor. Viele Anleitungen sagen, dass Sie einen Torx-Schraubendreher benötigen, aber meine sind Kreuzschlitzschrauben, also überprüfen Sie Ihren Controller.

Danach vorsichtig die hintere Abdeckung abhebeln. Wenn Sie die Vorderseite abhebeln, werden die Knöpfe herausgeschleudert und wahrscheinlich im ganzen Raum verstreut. Heben Sie es von unten an. Ziehen Sie dann die beiden Vibrationsmotoren ab. (der mit dem kleinen Gewicht sollte links sein und der mit dem großen Gewicht rechts) Nehmen Sie die Platine heraus und entfernen Sie die Gummikappen der Analogsticks. Sie ziehen einfach ab.

Als nächstes entfernen Sie den linken Analogstick, damit er unsere Eingabe nicht stört, aber der linke Triggermechanismus ist im Weg. Um es zu entfernen, müssen Sie die drei Stifte des Potentiometers von der Vorderseite der Platine entlöten und dann den Mechanismus von der Platine lösen.

Als nächstes entlöten Sie die 14 Pins, die den linken Analogstick halten. Dann den Stick abziehen.

Schritt 3: Kleben Sie die Komponenten an Ort und Stelle

Kleben Sie die Komponenten an Ort und Stelle
Kleben Sie die Komponenten an Ort und Stelle
Kleben Sie die Komponenten an Ort und Stelle
Kleben Sie die Komponenten an Ort und Stelle

Sie werden feststellen, dass zwischen der Rückseite der Platine und dem Gehäuse ziemlich viel Spiel ist. Dies ermöglicht es, die gesamte Hardware in das Gehäuse zu legen, ohne etwas zu entfernen.

Mir wurde erst später klar, aber dies wäre ein guter Zeitpunkt, um den Reset-Knopf auf dem Arduino zu entlöten. Wenn Sie dies nicht tun, drückt es auf die Rückseite des Gehäuses und führt dazu, dass das Projekt nicht mehr funktioniert, wenn Sie eine der Schrauben beim Zusammenbau zu stark anziehen.

Ich klebte ein dünnes Stück Karte auf die Rückseite jeder Platine, um es zu isolieren, und klebte es dann auf die Platine des Controllers. Ich zögerte, Kleber zu verwenden, konnte mir aber keinen besseren Weg vorstellen.

Die Positionen im Bild ist die beste Kombination, die ich finden konnte. Der Arduino ist links, mit der Kante mit dem Reset-Knopf bündig am Plastikstück des rechten Auslösemechanismus, mit der anderen Seite unter dem Draht und mit der Ecke so nah wie möglich am weißen Stecker. Das Gehäuse hat eine leichte Wölbung, aber ich konnte keinen besseren Ort finden, um es zu platzieren.

Der Beschleunigungsmesser befindet sich rechts vom Draht. Es sollte so flach und gerade wie möglich sein, sonst müssen Sie möglicherweise später Code schreiben, um den Offset auszugleichen. Beachten Sie, dass sich auf der Rückseite des Gehäuses einige hervorstehende Kunststoffteile befinden, die Sie vermeiden müssen. Ich habe festgestellt, dass Sie etwas Klebriges und Buntes, wie Lippenstift, auf die hervorstehenden Plastikstücke auftragen und dann die hintere Abdeckung aufsetzen können, um zu sehen, wo sie Spuren hinterlässt.

Die DAC(s) befinden sich in der unteren linken Ecke. Hier ist genug Platz, um zwei DACs übereinander zu stapeln, wenn Sie beide Achsen steuern möchten. Sie müssen sie nicht festkleben. Sie bleiben, wo sie sind, nur mit den Lötverbindungen. Wenn Sie eine Karte dazwischen stecken, stellen Sie sicher, dass Sie die Karte so schneiden, dass SCL, SDA, VCC und GND zugänglich bleiben, da Sie von beiden Seiten darauf zugreifen.

Wenn Sie zwei DACs verwenden, vergessen Sie nicht, den Adress-Jumper umzuschalten und die Pull-Up-Widerstände an einem von ihnen zu deaktivieren, wie hier beschrieben: https://learn.sparkfun.com/tutorials/mcp4725-digital-to-analog -Konverter-Anschlussanleitung

Schritt 4: Löten Sie die Drähte an

Löten Sie die Drähte an
Löten Sie die Drähte an
Löten Sie die Drähte an
Löten Sie die Drähte an
Löten Sie die Drähte an
Löten Sie die Drähte an

Jetzt müssen Sie alles verbinden. VCC, GND, SDA und SCL von allen 2/3 Geräten sollten jeweils mit VCC, GND, A4 und A5 auf dem Arduino verbunden werden. Die DACs sind der schwierigste Teil. Wenn Sie zwei haben, müssen Sie sie miteinander verbinden, während Sie irgendwo die Stromversorgung und die Leitungen an den Beschleunigungsmesser anschließen können, während Sie die OUT-Drähte getrennt halten.

Der OUT-Pin des DAC sollte mit dem Pin auf der Platine des Controllers verbunden werden, der früher für den mittleren horizontalen Potentiometer-Pin für den Analogstick diente. Das heißt, wo der Analogstick war, gibt es oben eine Reihe von drei Pins. Verbinden Sie es mit dem mittleren. Wenn Sie einen anderen DAC haben, schließen Sie ihn auf die gleiche Weise an den vertikalen Potentiometerstift (die Reihe links) an. Sie können die Pins von hinten nicht erreichen, wenn der Auslöser ersetzt wird, daher müssen Sie einen Draht zur Vorderseite der Platine führen. Es gibt eine kreisförmige Plastikwand um den Analogstickbereich, aber glücklicherweise gibt es darin eine praktische Lücke, durch die Sie Kabel hindurchführen können. Achten Sie darauf, dass die Drähte den Schraubpfosten am vorderen Teil des Gehäuses nicht behindern.

Mein ursprünglicher Plan war es, den Arduino mit den 5 V über das USB-Kabel, das an den RAW-Pin angeschlossen ist, mit Strom zu versorgen, aber als ich es versuchte, funktionierte es nicht. Der Arduino lief nicht und sowohl der Arduino als auch der Controller schalteten sich nach ein paar Sekunden aus. Ich habe jedoch festgestellt, dass von zwei Pins auf der Vorderseite der Platine in der Nähe des schwarzen Peripherieanschlusses ein konstanter 3,3-V-Ausgang vorhanden ist, vermutlich für die Stromversorgung von Peripheriegeräten. Es funktioniert sowohl mit VCC als auch mit RAW, aber ich habe mich für VCC entschieden, weil es bereits die richtige Spannung hat und weil ich es mit dem VCC-Draht auf dem DAC verlöten kann, der sich bereits in der Nähe der Unterseite der Platine befindet, und Kabel sparen.

Beachten Sie, dass viele Plastikteile aus dem Gehäuse herausragen, die Sie umgehen müssen, aber wenn Sie die Drähte an Ort und Stelle kleben, müssen Sie sich nur einmal darum kümmern.

All dies ist schwer mit Worten zu beschreiben, daher habe ich Bilder und ein grobes Diagramm eingefügt.

Schritt 5: Programmieren Sie das Arduino

Jetzt müssen Sie den Arduino programmieren. Dazu muss das USB-Kabel am Controller verschoben werden, damit Sie auf die seriellen Pins des Arduino zugreifen können. Ich habe den verwendeten Code eingefügt. Es erfordert die Adafruit MCP4725-Bibliothek, die Sie hier finden:

Der Code ermöglicht es Ihnen, den gesamten Bewegungsbereich des Analogsticks gleichmäßig zu durchlaufen, indem Sie den Controller um 90 Grad nach links bis 90 Grad nach rechts bewegen und ihn in der Mitte halten, indem Sie ihn flach halten.

Es erhält den Winkel des Controllers, indem es den umgekehrten Tangens der g-Kraft der X-Achse dividiert durch die g-Kraft der Z-Achse berechnet. Dies bedeutet, dass es funktioniert, wenn der Controller vertikal, flach oder in einem beliebigen Winkel dazwischen ist. (weitere Informationen hier:

Es funktioniert auf meinem Controller, aber andere Controller benötigen möglicherweise andere Spannungen, wodurch sie nicht mehr ausgerichtet sind. Ich denke, der beste Weg, den Spannungsbereich zu finden, ist durch Versuch und Irrtum. Viele Spiele zeigen Ihnen einen Schieberegler für die Bewegung des Analogsticks, aber die genaueste Methode, die ich gefunden habe, um die Bewegung zu bestimmen, ist mit jstest unter Linux. (https://wiki.archlinux.org/index.php/Gamepad#Joystick_API) Es gibt Ihnen eine Zahl zwischen -32, 767 und 32, 767 anstelle einer Grafik, damit Sie genau wissen, wo sich der Stick befindet. Schließen Sie sowohl den Controller als auch den Arduino USB-zu-Seriell-Adapter an, laden Sie jstest und probieren Sie verschiedene DAC-Werte aus, bis Sie den oberen und unteren Bereich des Bereichs erreichen, und notieren Sie sich jeden. Bei mir waren es 1, 593 - 382.

Von besonderem Interesse ist Zeile 36:

dacvalue = (Controllerangle + 2,5617859169446084418) / 0,0025942135867793503208 + 0,5;

Es ist nicht sofort klar, was es tut. Es nimmt einfach den Winkel des Controllers (gemessen in Radiant und zwischen ~1,57 und ~-1,57) und wandelt ihn in einen Wert zwischen 1,593 und 382 für den DAC um. Wenn Sie einen anderen DAC-Bereich haben, müssen Sie diese Zeile ändern.

Die Zeile kann geschrieben werden als:

dacvalue = (Reglerwinkel +) / + 0,5;

Mit und sind die Zahlen, die Sie ändern müssen. gleich dem Bereich des Reglerwinkels (pi) dividiert durch den Gesamtbereich der DAC-Werte. (der obere Bereich minus der untere Bereich) Dies bringt Sie zur Änderung der Spannung, obwohl die Ergebnisse außerhalb des gewünschten Bereichs liegen. Deshalb brauchen Sie. ist gleich multipliziert mit dem unteren Bereich plus der Hälfte des Bewegungsbereichs des Controllers. (pi / 2) Das Hinzufügen des halben Bewegungsbereichs stellt sicher, dass es keine negative Zahl ist, und das Addieren multipliziert mit dem unteren Bereich des Bereichs stellt sicher, dass er mit dem gewünschten Bereich synchronisiert ist.

Beim Konvertieren der Dezimalzahlen in eine ganze Zahl rundet C++ nicht. Stattdessen wird die Dezimalstelle abgeschnitten, sodass 9,9 zu 9 wird. Das Hinzufügen von 0,5 am Ende stellt sicher, dass alles, was über der Hälfte liegt, zur nächsten Ganzzahl geht, also wird gerundet.

Nachdem Sie Ihr Programm hochgeladen haben, stellen Sie sicher, dass es mit jstest funktioniert.

Schritt 6: Controller wieder zusammenbauen

Bauen Sie den Controller so wieder zusammen, wie Sie ihn auseinandergenommen haben, abzüglich des linken Analogsticks. Es sollte jetzt funktionieren. Ich finde, es gibt keine merkliche Verzögerung und es ist viel besser als die Verwendung des Analogsticks. Da es einen Beschleunigungsmesser verwendet, wird es von plötzlichen Bewegungen beeinflusst, aber Sie müssen alles tun, um es zu bemerken.

Schritt 7: Mögliche Verbesserungen

Es gibt einige Verbesserungen, die vorgenommen werden könnten. Diese beinhalten:

  • Weniger umständlichen Magnetdraht verwenden
  • Alles auf eine Platine ätzen, die so konzipiert ist, dass sie in das Controllergehäuse passt
  • Den linken Analogstick wieder anbringen und die Beine mit den analogen Eingängen des Arduino verbinden, damit sie zum Einstellen des Arduino verwendet werden können
  • Holen Sie sich das Rückgehäuseteil für einen drahtlosen Controller und legen Sie das Projekt in das Batteriefach (dazu müsste ein Loch für das USB-Kabel geschnitten werden)