Inhaltsverzeichnis:
Video: Arduino Keyboard Joystick Extender Box und Sound Controller Sache mit Deej - Gunook
2025 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2025-01-13 06:56
Tinkercad-Projekte »
Wieso den
Schon seit einiger Zeit wollte ich meiner Tastatur einen kleinen Joystick hinzufügen, um Oberflächenelemente oder andere kleinere Aufgaben in Spielen und Simulatoren (MS Flight Sim, Elite: Dangerous, Star Wars: Squadrons usw.) zu steuern.
Außerdem hatte ich bei Elite: Dangerous Probleme mit dem Mischen der Lautstärke von externem Audio (die integrierte Musik ist zwar gut, wiederholt sich nach vielen Stunden im Schwarzen), In-Game-Audio und externer Voicepack-Unterstützung.
Der in Windows integrierte Quellmixer ist 'ok', aber es ist mühsam, während eines Spiels Bildschirme und Maussteuerungs-Schieberegler zu wechseln. Eine erweiterte Tastatursteuerbox schien der richtige Weg zu sein. Deej ist die Lösung, die ich gefunden habe.
Wie
Ich habe vor kurzem etwas über Arduino gelernt und bin auf Reddit auf das Deej-Projekt gestoßen. Es sah so aus, als ob dies beide Probleme in einem praktischen Paket lösen würde. Und es würde mich ein schickes 3D-Gehäuse entwerfen und drucken lassen.
Was ist Deej?
(von der Site) deej ist ein **Open-Source-Hardware-Volume-Mixer** für Windows- und Linux-PCs. Sie können mit echten Schiebereglern (wie bei einem DJ!) **nahtlos die Lautstärke verschiedener Apps steuern** (z Sie gehen.
Meine Version
Um die Box klein zu halten, habe ich mich eher für Drehknöpfe (Drehpotentiometer (Potis = Widerstände)) als für Schieberegler entschieden. Funktionell funktionieren sie gleich. Aktuelle und beliebte Deej-Designs enthalten keinen Joystick, daher wird dies ein bisschen ein Design-Hybrid sein. Ansonsten ist es ein ziemlich geradliniger Aufbau.
Deej funktioniert mit einem Arduino Nano, Pro Micro oder Uno, aber der Nano und Pro Micro werden vom Entwickler "offiziell empfohlen". Ich habe mich für das Arduino Pro Micro entschieden, weil ich den Joystick wollte und die Arduino Joystick Library ihn unterstützt. Ich kann auch die Arduino-Tastaturbibliothek verwenden, wenn ich die Stummschaltungsfunktion der Medientastatur (anstelle der "weichen Stummschaltung") mit der Joystick-Taste verwenden möchte, aber das ist weiter unten.
Schritt 1: Zubehör
Die Kiste
Laden Sie die STL-Dateien herunter (entworfen in Tinkercad):
- Anlagendateien bei Prusa (https://www.prusaprinters.org/)
- Thingiverse (bald verfügbar)
Die Hardware (Produktionseinheit)
- 1x Arduino Pro Micro
- 4x 10k Rotary (Knopf) Potentiometer (keine Rotary Controller, verwenden Sie Potis)
- 1x Arduino KY-023 Joystick
- 5ft Schrott Cat5 Netzwerkkabel
- 1x USB A zu USB B Micro-Kabel (USB A ist der große quadratische Stecker, USB B Micro ist das, was sich auf dem Arduino Pro Micro befindet)
- 1x 5mm rote LED
- 1x 220 Ohm Widerstand
Ich hatte einige zusätzliche Teile dabei, also dachte ich, ich baue eine Entwicklungseinheit, um die Dinge zu testen. Nur das Verbinden von Dingen mit einem Steckbrett machte es einfacher, das letzte Ding zu visualisieren.
- 1x Arduino Pro Micro
- 4x 10k Rotary (Knopf) Potentiometer (keine Rotary Controller, verwenden Sie Potis)
- 1x Tastschalter (Hard-Reset-Schalter)
- 1x USB A zu USB B Micro-Kabel (USB A ist der große quadratische Stecker, USB B Micro ist das, was sich auf dem Arduino Pro Micro befindet)
- verschiedene Überbrückungsdrähte
- Steckbrett
- 1x 5mm rote LED
- 1x 220 Ohm Widerstand
Schritt 2: Das Gehäuse
Das Design
Ich mochte einige der anderen Designs, die in der deej-Community-Galerie profiliert wurden, also basierte meine auf den Funktionen, die mir gefallen haben:
- Einfach zu gestalten und zu drucken
- Stehen Sie meinen anderen Desktop-Peripheriegeräten nicht im Weg
- Verwenden Sie keine Schrauben oder Befestigungselemente, um das Gehäuse zu befestigen
- Ähnliches Design wie die Tastatur
Ich entwarf und druckte zwei Prototypen, bevor ich mich für dieses endgültige Design entschied. Ich mag es, eine physische Version zu haben, mit der ich in dem Raum spielen kann, in dem ich sie verwende, da sie mir ein besseres Gefühl dafür gibt, wie das endgültige Objekt funktionieren wird.
Ich habe kurz mit dem Entwerfen in Fusion360 begonnen, kenne es aber nicht so gut wie Tinkercad, also bin ich umgestiegen und habe dort gearbeitet.
Da ich ein schraubenloses Design wollte, habe ich einen Nistkasten erstellt. Der erste Prototyp hatte einen dünnen Deckel und eine tiefe Box für alles. Das zweite Design tauschte das mit einem tiefen Deckel und einer flachen Bodenbox aus. Es musste nur den Arduino Pro Mini halten, musste also wirklich nicht groß sein. Ebenfalls enthalten sind die geprägten Symbole.
Das dritte Design wurde an den Platz neben meiner Tastatur angepasst.
Der Druck
Ich habe die Box in PLA gedruckt und einen Filament / Layer-Wechsel von Schwarz zu Rot für den Deckel programmiert, wo die Symbole gerade sichtbar werden, und wieder zurück zu Schwarz für den Rest des Deckels.
Ein Problem
Währenddessen war die Joystick-Halterung ein Problem. Auch beim dritten Design stößt der Stick an einer Stelle gegen die Halterungen. Die nächste Iteration wird bessere Freigaben haben. Ich hätte mehr am Design arbeiten können, wollte aber zur nächsten Phase, der Installation, übergehen.
Schritt 3: Die Schaltung
Schlechtester Verkabelungsjob ever
Ok, dies ist mein erstes vollständiges Arduino-Projekt. Ja, ich habe schon früher Dinge auf Steckbrettern gemacht und verwende eine, um die Entwicklungsversion davon zu erstellen, aber was die eigentliche Herstellung und Montage angeht, ist dies meine erste. Also meine Verkabelung sieht scheiße aus. Da, das ist aus dem Weg:)
Update: Ich habe inzwischen noch einen gebaut und die Verkabelung ist dort viel schöner. Siehe die Bilder:)
Produktionseinheit -- Was geht wohin
Das Arduino Pro Micro ist ein winziges kleines Brett und passt in den geformten Abschnitt in der Basis. Knöpfe und Joystick passen in die entsprechenden Löcher im Deckel. Aber montieren Sie nichts, bis das Löten fertig ist.
Verdrahtung
Ich hatte kein richtiges Stromkreiskabel, aber eine übrig gebliebene Rolle eines Solid-Core-Cat5-Netzwerkkabels, also habe ich das verwendet. Es ist etwas steifer und vielleicht spröder als die Litze, aber es funktioniert.
Beim Auslegen der Komponenten in einer Annäherung an ihre endgültige Montageposition schätzte ich den Abstand für jeden Draht, fügte etwas mehr für Durchhang usw. hinzu und schnitt und beschnitt dann den Draht. Ich habe viel Ruhe gelassen.
Unter Bezugnahme auf den Schaltplan habe ich die gemeinsame Masse (Schwarz) und VCC (Rot) zu den Knöpfen und dem Joystick geführt, wo dies angegeben ist. Da Netzwerkkabel nicht in diesen Farben erhältlich sind, habe ich einfach eine Farbe ausgewählt und meine Verkabelung der Funktion angepasst.
Der einzelne Topf. analoge Leitungen (Gelb) liefen zu den Pins A0 - A3. Die Joystick-Leitungen (Orange), ebenfalls analog, liefen zu den I/O-Pins 8 und 9. Diese müssen im Arduino-Code als A8 und A9 als Analog bezeichnet werden.
Der Joystick-Schalterstift (blau) lief zu Pin 7. Dies ist ein digitaler Pin im Code.
Isolierung
Da dieser steife Draht in einen kleinen Raum gestopft wird, habe ich mich dafür entschieden, meine Lötverbindungen mit einem gesunden Klecks Schmelzkleber zu isolieren. Dann steckte alles an seinen Platz und führte einen einfachen Test auf der Platine und den Töpfen mit der Version des Arduino-Beispiel-AnalogInput-Codes durch - modifiziert, um alle Töpfe zu lesen.
Zweite Version
Die letzten beiden Bilder oben zeigen die nächste Box, die ich baue. Dieser hat 5 Knöpfe und einen Taster für die Stummschaltung. Kein Joystick. Schachtel gleicher Größe.
Schritt 4: Fertigstellen der Hardware
Als ich den Joystick installiert hatte, stellte ich fest, dass zwischen der Platine und den Stiftleisten des Pro Micro nicht viel Spiel war.
Nach ein wenig vorsichtigem Biegen der Stiftleisten und erneutem Auftragen von Schmelzkleber (zur Isolierung) schloss das Gehäuse richtig.
Der Einbau der Töpfe ging ohne Probleme.
Wieder mit den Drähten
Massive Kerndrähte sind etwas steif und können bei zu vielen Biegungen spröde werden, also falten Sie sie vorsichtig (ohne scharfe Ecken) in den verfügbaren Raum. Einige von mir waren zu lang und erforderten ein bisschen zusätzliches Falten.
Sobald alles an seinem Platz ist, montieren Sie einfach die Basis auf die Oberseite und Sie sollten mit der Hardware fertig sein….
Aber warte, es gibt noch mehr
Natürlich habe ich nach ein paar Wochen Gebrauch beschlossen, dass ich eine Anzeige brauche, um mich über den Status der weichcodierten MUTE-Funktion zu informieren.
Nachdem ich den Code bearbeitet hatte, um die LED-Funktionalität hinzuzufügen (siehe nächster Abschnitt), lötete ich schnell die LED / Drähte / den Widerstand an und verband sie mit der Platine.
Ich verbrachte mehr Zeit damit, das Loch durch die Oberseite des Gehäuses zu bohren, da ich das obere Finish nicht beschädigen wollte. Ich markierte einen Mittelpunkt, verbeulte ihn und drehte dann einen Bohrer von Hand, um das Loch zu machen.
Zusätzliches sorgfältiges Feilen säuberte das Loch und sorgte für eine schöne enge Presspassung, um sicherzustellen, dass die LED nicht zu weit über die obere Oberfläche hinausragte.
Schritt 5: Die Software
Überblick
Dies ist also ein zweiteiliger Prozess.
- Erfahren Sie, wie Deej funktioniert und bearbeiten Sie die Datei Config.yaml
- Bearbeiten Sie den Arduino-Code so, dass er der gewünschten Hardware und den gewünschten Funktionen entspricht
- Holen Sie sich die Arduino Joystick-Bibliothek
In meinem Fall wollte ich diese Funktionen:
- Regler zur Pegelsteuerung (Mic und Output)
- Stummschalter
- 2-Achsen-Joystick, der von Windows für Anwendungszwecke erkannt wird
Ebenen
Deej kümmert sich so ziemlich um den ersten Punkt, wenn er kommt. Ich habe diese Funktion nicht optimiert
Stummschalter
Ich hatte schon früh entschieden, dass ich den Druck/Schalter im Joystick als funktionale Stummschalttaste verwenden würde.
Wenn Sie den Code untersuchen, werden Sie feststellen, dass ich (zunächst) eine "weiche" Stummschaltung gewählt habe - wenn die Taste gedrückt wird, wird die MIC-Lautstärke auf Null reduziert (und die LED leuchtet). Bei erneutem Drücken wird die MIC-Lautstärke auf die vorherige Einstellung zurückgesetzt und die LED erlischt.
Schließlich werde ich mir die Implementierung der Arduino-Tastaturbibliothek ansehen, um den Mute-Status durch den erweiterten Media-Tastaturcodesatz umzuschalten.
Joystick-Implementierung
Dies erfordert die Verwendung der Arduino Joystick-Bibliothek, um sicherzustellen, dass der Joystick von Windows und folglich von jedem Spiel / jeder Anwendung als HID-Gerät erkannt wird.
Ich bin ein kleiner Neuling, wenn es um Codierung geht, und fand die Joystick-Bibliotheksdokumentation auf der tatsächlichen Implementierungsseite etwas spärlich - aber ein bisschen konzentriertes Googeln führte mich zu anderen Beispielen, die mir halfen zu verstehen, was vor sich geht. Weitere Informationen finden Sie im Abschnitt Ressourcen am Ende.
Alles, was ich tun musste, war, die X / Y-Pins zu identifizieren, ihren Zustand auszulesen und an die Joystick-Bibliothek zu senden. Der Arduino erschien als Leonardo für Windows und wurde ordnungsgemäß als Joystick-Gerät konfiguriert.
Ich konnte es in Elite Dangerous neben meinem bestehenden HOTAS-Setup einrichten und den Joystick richtig steuern und nicht mit dem HOTAS in Konflikt geraten. Es funktioniert auch gut in Star Wars: Squadrons – ich habe es als schnellen Umschalter eingerichtet, um die Schilde im Kampf einzurichten.
Die Dateien, die mit meinem Joystick-Setup funktionieren
Ich habe meine aktuellen (Okt. 2020) Dateien auf Codepile hochgeladen.
- Arduino-Code (.ino-Datei)
- Deej config.yaml
Schritt 6: Ende
Nun, dieser ist fertig. Es funktioniert und ich bin ziemlich zufrieden damit, wie es zusammengekommen ist. Und ich habe ein bisschen mehr über Hardware-Design, Integration und Arduino-Programmierung gelernt.
Schritt 7: Nachtrag..dum..dum
VLC – dieser großartige Audio- und Videoplayer hat eine kleine Seltsamkeit, bei der die Lautstärke bei externer Steuerung von 0% auf 27% springt. Dies passiert nicht, wenn Sie den Pegel über die Lautstärkeregelung der In-App-Schnittstelle einstellen, sondern nur bei externen Reglern wie Deej.
Der Deej-Entwickler hat schnell einen Workaround im VLC gefunden, der den Job erledigt, siehe Bild oben:
"…wenn Sie dieses "Tracking"-Verhalten deaktivieren möchten, können Sie dies tun, indem Sie das Audioausgabemodul von VLC ändern. Ich habe DirectX bei meinen Versuchen hier verwendet. Sie müssen VLC neu starten, damit die Änderung wirksam wird. (Sie werden trotzdem eine Windows-Audiositzung haben und sie über deej steuern können, dies verhindert nur, dass sich die VLC-Lautstärkeleiste mitbewegt)"
Schritt 8: Zusätzliche Ressourcen
Gefunden über den mächtigen Goog, in keiner bestimmten Reihenfolge aufgelistet…
- Arduino Joystick Library (v2) - wird benötigt, um den Joystick zu integrieren
- Sparkfun Pro Micro Anschlussanleitung - gute Ressource zu diesem Arduino
- deej - die Software, die die Knöpfe antreibt
- USB-Anschlusstypen – wer hätte gedacht, dass es so viele Varianten gibt?
- Arduino Pro Micro-Analog-Pinbelegungen
- Arduino Leonardo Gaming Joystick - Leonardo ist ähnlich wie Pro Micro, nur größer
- Arduino Pro Micro (Klon)-Port nicht erkannt (Lösung) - wenn Sie Ihr Pro Micro mauern (ich habe)
- Arduino Leonardo/Micro als Gamecontroller/Joystick
- Beispiel für die Verwendung einer Multimediataste zum Stummschalten – mit der HID-Projektbibliothek
- Beispielcode für die HID-Projektbibliothek zum Anhalten / Abspielen von Medien
- Ein weiteres Codebeispiel, das den Gamepad-Controller zeigt.
- ArduinoGamingController_updated - gute Codebeschreibung der Verwendung der Joystick-Bibliothek
- LED-Widerstandsrechner-Ding – um herauszufinden, wie groß ein Widerstand für Ihr Projekt ist
- Icon-Bibliothek - flaticon.com - Quelle der Bilder über den Knöpfen
- Ein weiterer Widerstands-Farbdecoder - klicken Sie auf eine Farbe und Bratsche!