Die Grundidee von diesem Projekt lieferte das StreamDeck von Elgato. Allerdings sind mir 200€ für so ein Gerät zu teuer. Hieraus entwickelte sich die Idee, ein eigenes Gerät zu entwickeln. Als erstes habe ich mir überlegt welche Anforderungen ich an das Gerät habe.
- Genügend Tasten um alle geplanten und zukünftigen Funktionen umzusetzen. Schließlich ist eine Mehrfachbelegung mit statischen Tasten schwierig.
- RGB-Beleuchtung, einstellbar
- Switches wie bei einer Tastatur
Im ersten Schritt geht es darum nachzulesen, wie ein MicroController als USB-Eingabegerät funktionieren kann. Nach kurzer Recherche konnte ich herausfinden, dass verschiedene MicroContoller das USB-Protokoll unterstützen. Durch die geringe Baugröße habe ich mich hier für den Arduino Nano entschieden. Ein kleiner Prozessor mit 14 digitalen Ein- und Ausgängen. Ein erster kleiner Test zeigt, dass zusammen mit der Library Keyboard.h schnell ein Signal oder auch ganze Texte an den Computer gesendet werden.
In der weiteren Planung geht es nun um das Layout. Möchte ich für jede Taste eine eigene LED ansteuern, so habe ich mit 14 Pins nur sieben Tasten zur Verfügung. Eine erste Erleichterung kam durch die Idee von ansteuerbaren RGB-LEDs, nicht nur weil ich nur einen Pin für alle LEDs benötige, sondern vor allem durch die Möglichkeit alle Farben darstellen zu können. Zusammen mit einem gewünschten RESET Knopfes und einem Knopf für den Farbwechsel stehen nun noch 11 Pins zur Verfügung. Da dies zu wenige sind muss entweder ein neuer MicroController her oder eine andere Methode mehr Eingänge nutzen zu können. Nach kurzer Recherche wird eine Matrix vorgeschlagen. Diese ermöglicht es mit fünf Pins ein 2×3 Feld an Pins und somit sechs Eingänge zu erfassen. Mit meinen elf Pins sind das insgesamt dreißig Eingänge. Damit ich allerdings nicht ein Limit habe, wie viele Pins ich anschließe, und mir nicht sicher war, wie viele ich möchte, habe ich weiter geschaut. Mit Hilfe von Charlieplexing, kann ich 110 Eingänge nutzen. Hier wird nicht nur eine Matrix verwendet, sondern auch ein Pin nicht nur als Ausgang, sondern auch als Eingang benutzt. Die Anzahl der möglichen Eingänge lässt sich als (n²-n) berechnen, wenn n die Anzahl an Pins ist.
Nachdem nun die Überlegungen hierfür fest standen, geht es im nächsten Schritt an einen ersten Test. Ich habe hierzu auf einem Breadboard einfach 4 Pins verwendet. Der erste Test überzeugte, zeigte aber auch ein Problem auf, welches als Ghosting bekannt ist. Hier besteht die Möglichkeit, dass bei simultanem Tastendruck Tastenkombinationen aufleuchten, welche nicht gedrückt werden. Da dies durch den Stromfluß falsch herum durch den Taster geschieht, reicht eine einfache Diode aus um dieses Problem zu verhindern. Da die LEDs einfach aneinander gehängt werden können, ist somit alles geklärt und der Schaltplan kann erstellt werden.

Für jede Reihe an Tastern wurde noch ein optionaler Widerstand eingebaut, der einfach für eine mögliche Strombegrenzung dienen soll. Allerdings funktioniert das auch wunderbar ohne. Ebenso ist der Vorwiderstand für die LEDs nicht im ersten Batch Platinen dabei. Ich hatte mir eine Platine zerstört, indem das LED-Signal mit einer Spannungsspitze die LED zerstört hatte und ich vorab nicht im Datenblatt nachgeschaut habe. Mehr dazu später.
Nun geht es um die Switches. Ich habe mich hier für Cherry MX3A-L1NA Switches entschieden. Einerseits waren diese Preiswert zu erhalten, andererseits besitzen sie ein transparentes Gehäuse, welches eine Aussparung für LEDs, selbst jedoch keine LEDs hat.
Der nächste Schritt behandelt das Erstellen einer PCB. Wie schon im Schaltplan erkenntlich habe ich mich für vier Reihen mit je neun Tastern entschieden. Die oberste Reihe besitzt in der Mitte eine Lücke, dort sitzt der MicroController. Die PCB habe ich über JLC-PCB erstellen und bestücken lassen.

Nachdem nun KiCAD mir ein 3D-Modell erstellt hat, geht es an das Design eines Gehäuses. Da ein Punkt die Erstellung des Gehäuses mit dem 3D-Drucker war, habe ich es zweiteilig entworfen. Zudem hält das Gehäuse die Platine fest und unterstützt die Switches. Ich habe das Gehäuse auf meinem Ender3V2 mit PLA-Wood gedruckt.

Als nächstes geht es an den Zusammenbau. Dieser verlief reibungslos und war schnell abgeschlossen. Die anschließende Programmierung erforderte hingegen mehr Hirnschmalz. Da die Library für das Charlieplexing einen Charakter benötigt, meine 33 Tasten jedoch mehr Tasten sind wie das Alphabet Buchstaben besitzt, musste ich hier auch noch auf Zahlen ausweichen. Dies ermöglicht es, mir genau festzustellen, welche Taste gedrückt wurde.
Daraus erstelle ich dann mit einem Array Tastenkombinationen bestehend aus STRG und zwei Buchstaben. Bevor diese jedoch aktiviert wird, besteht die Möglichkeit, dass der Benutzer in den Sendevorgang eingreift und eigene Kombinationen oder sogar ganze Texte einfügt. Deshalb besitzt die Funktion CheckIfCustomCode drei Rückgabewerte.
- NO_REACTION: Der nachfolgende Code geht davon aus, dass nichts gemacht wurde und aktiviert den Standard-Shortcut der jeweiligen Taste.
- NO_RELEASE: Der nachfolgende Code geht davon aus, dass etwas gemacht wurde, was kein Aufheben der Tasten benötigt. So etwa das Schreiben eines Textes mit print.
- RELEASE: Der nachfolgende Code geht davon aus, dass ein KeyCode gesendet wurde und somit der Tastendruck aufgelöst werden muss.
Warum überhaupt das Ganze? Aktiviere und deaktiviere ich den KeyCode direkt hintereinander, so ist dies zu schnell und der Computer erkennt es nicht. Mit dieser Möglichkeit kann ein Benutzer den Code abändern und das ShortPad anpassen.
Der LED-Code ist hingegen etwas komplizierter. Damit nicht nur das gesamte Pad leuchtet, gibt es verschiedene Modis. Neben zehn festen Farben kann man zwischen verschiedenen Farbwechseln schalten. Damit die Berechnung des Farbwechsels möglichst einheitlich ist, gibt es verschiedene Muster die durchgearbeitet werden. je nach Muster und Position der LED wird dann eine Farbe berechnet. Diese wechselt zwischen Rot und Grün, Grün und Blau und Blau und Rot. Somit entsteht ein schöner, sanfter Farbwechsel.
Was könnte in Zukunft kommen
Ich kann mir vorstellen in Zukunft noch eine weitere Software hinzufügen. Diese würde mir noch mehr Kontrolle ermöglichen und ein einfacheres Interface für den Benutzer ermöglichen. Außerdem wäre dann eine besser gesteuerte Beleuchtung möglich. Ich kann mir aktuell vorstellen, dass es sogar möglich wäre, anzuzeigen, ob das Mikrofon, welches mit einer Taste gesteuert wird, nun an oder aus ist.
Dateien
QuellCode
Modelle
Aktuell sind noch ein paar Platinen übrig. Interesse? Schreib mir doch.
Bilder