Inhaltsverzeichnis:

Programmierbare Tastatur - Gunook
Programmierbare Tastatur - Gunook

Video: Programmierbare Tastatur - Gunook

Video: Programmierbare Tastatur - Gunook
Video: PI Engineering X-Keys XKE-128 Programmable USB Keyboard Overview | Full Compass 2024, Juli
Anonim
Programmierbare Tastatur
Programmierbare Tastatur
Programmierbare Tastatur
Programmierbare Tastatur

In diesem Projekt zeige ich, wie Sie eine relativ einfache und kostengünstige programmierbare Tastatur erstellen, um Ihre am häufigsten verwendeten Tastenkombinationen, Anwendungen und mehr zuzuordnen.

Diese Tastatur wird in allen gängigen Betriebssystemen als Tastatur erkannt, es sind keine zusätzlichen Treiber erforderlich.

Lieferungen

  • Drehcodierer.
  • Viele (je nach Bedarf) Druckknöpfe.
  • Arduino Pro Micro, Arduino Leonardo oder jedes andere Entwicklungsboard mit Atmega32U4 MCU.
  • Draht, Lötzinn, Lötkolben usw.
  • (Optional) Eine schwere Basis, um das Verrutschen der Tastatur zu verhindern, ich verwende eine alte 3,5-Zoll-Festplatte

Schritt 1: Elektrischer Stromkreis

Stromkreis
Stromkreis

Ich entschied mich für die Verwendung des Arduino Pro Micro-Entwicklungsboards mit der Atmega32U4-MCU, die über 18 verwendbare digitale Pins verfügt.

Die Pins zum Verbinden von Drucktasten und Drehgeber wurden ohne besondere Reihenfolge ausgewählt, aber einige Dinge sollten beachtet werden:

  1. Alle digital lesbaren Pins haben interne Pull-Ups, die es ermöglichen, externe Pull-Down-Widerstände abzuschwächen. Natürlich sollte der Code entsprechend aktualisiert werden, da er erwartet, dass der Zustand des Pins von Low nach High wechselt, wenn Drucktasten gedrückt werden.
  2. Im Beispiel der Encoder.h-Bibliothek wurde festgestellt, dass die beste Leistung des Encoders erreicht wird, wenn beide Pins mit Interrupt-fähigen Pins der MCU verbunden sind. Die meisten analogen Pins von Atmega32U4 haben keine Interrupt-Fähigkeit.
  3. Genaue Pull-Down-Widerstandswerte spielen keine Rolle, alles von 1 kΩ bis 100 kΩ funktioniert gut. Größere Widerstandswerte ermöglichen eine geringere Verlustleistung, führen jedoch zu einer langsameren Pin-Reaktion auf Spannungsänderungen. Wählen Sie einfach die Widerstände mit den meisten Werten aus.
  4. Mechanische Encoder sind aufgrund von Kontaktverschleiß und Prellen nicht besonders zuverlässig. Deshalb braucht es eine gute Entprelllösung. Meine gewählten Kondensatorwerte und Verzögerungszeiten im Code werden Ihnen wahrscheinlich nicht die besten Ergebnisse liefern. Ein wenig Experimentieren ist also erforderlich. Oder wechseln Sie zu so etwas wie einem optischen Encoder, aber der Preis ist deutlich höher.

Schritt 2: Montage

Montage
Montage
Montage
Montage
Montage
Montage
Montage
Montage

Ich wollte die Tastatur so sauber wie möglich machen, also lötete ich alle Komponenten auf der Rückseite der Prototypenplatine. Ich dachte, dass die Tastatur ergonomischer wäre, wenn sie in einem kleinen Winkel erhöht verwendet würde. Deshalb habe ich Arduino Pro Micro auf separater Platine gelötet und alle digitalen Pins mit Draht an Drucktasten angeschlossen. Es ist bequemer, das USB-Kabel auf diese Weise anzuschließen.

Ich habe eine alte 3,5-Zoll-Festplatte als Basis für die Tastatur gefunden, sie ist ziemlich schwer und verhindert, dass die Platine beim Betrieb über den Schreibtisch rutscht (Anti-Rutsch-Pads helfen auch). Außerdem hat sie praktische 3 mm Schraubenlöcher, in die ich Messingabstandshalter geschraubt habe und fixierte das Brett in einem leichten Winkel.

Schritt 3: Programmierung

Code wird mit Arduino IDE geschrieben. Sie müssen 2 Bibliotheken installieren:

  • Encoder von Paul Stoffregen
  • Tastatur von Arduino

Um für Atmega32U4 zu kompilieren, müssen Sie auch die Arduino Pro Micro-Board-Datei installieren. Sparkfun hat ein großartiges Tutorial, wie das geht.

Eine Sache, die Sie im Voraus beachten sollten, ist, darauf zu achten, dass Sie in Ihrem Code keine "Tasten gedrückt" lassen. Das ist mir passiert und MCU spammte ständig eine Tastenkombination. Die einzige Möglichkeit, die mir bekannt ist, besteht darin, den Bootloader erneut auf die MCU zu brennen. Wenn Sie wie ich enden, können Sie dieser Anleitung folgen, um den Bootloader zu brennen. Sie benötigen ein anderes Arduino-Board, um es als Programmierer zu verwenden.

In der Hauptschleife liest die MCU zuerst jeden Druckknopfzustand, wenn eine Zustandsänderung von LOW nach HIGH erkannt wird, wird die Funktion keyboard_shortcut(i) ausgeführt. Variable i ist eine ID der gedrückten Taste, die Gesamtanzahl der Tasten wird durch ALL_BUTTONS (in meinem Fall 15) definiert. Bei der Ausführung sendet keyboard_shortcut(i) STRG+SHIFT und dann einen Buchstaben, der der Schaltflächen-ID zugeordnet ist: 1->A, 2->B, 3->C usw. Einige Kombinationen wie STRG+SHIFT+N werden weggelassen, weil sie bereits standardmäßig in Windows10 verwendet (in diesem Fall zum Erstellen eines neuen Ordners). Hier ist die Liste aller Standard-Windows-Verknüpfungen. Nach einer kurzen Verzögerung sendet die MCU ein Signal, um alle Tasten freizugeben, und die Funktion geht zurück zur Hauptschleife.

Nachdem alle Schaltflächen überprüft wurden, überprüft die MCU, ob sich die Position des Drehgebers geändert hat, und wenn dies der Fall ist, wird keyboard_shortcut(i) mit eindeutiger ID ausgeführt.

Das Drücken der Encoder-Taste invertiert die boolesche Variable EncoderButtonFlag. Wenn der Encoder gedreht wird, werden je nach Drehrichtung und EncoderButtonFlag-Wert unterschiedliche Verknüpfungen an den PC gesendet.

Wenn debugFlag auf 1 gesetzt ist, werden Debug-Meldungen über UART an den seriellen Monitor gesendet.

Schritt 4: Verknüpfungen konfigurieren

Verknüpfungen konfigurieren
Verknüpfungen konfigurieren
Verknüpfungen konfigurieren
Verknüpfungen konfigurieren

Was jede Verknüpfung macht, liegt bei Ihnen, wir alle haben unterschiedliche Vorlieben. Ich werde als Beispiel angeben, welche Verknüpfungen ich für mich konfiguriert habe. Ich verwende Linux Mint 19.3 mit dem xfce4-Desktop-Manager, daher umfassen meine Beispiele hauptsächlich Bash-Skripte, aber ich werde auch einige grundlegende Beispiele für Windows10 zeigen.

Im ersten Bild sehen Sie, welche Skripte ich welchen Verknüpfungen zugeordnet habe. Dies erfolgt über das xfce-Einstellungsmenü, der Prozess dafür ist einfach. Sie finden diese Skripte in meinem GitHub-Repository

Kleinere 6 Druckknöpfe unten dienen zum Starten von Anwendungen wie Webbrowser oder Dateimanager. Einige dieser Anwendungen werden vom Skript start_only_one_app.sh aufgerufen, das alle gestarteten Anwendungsnamen erhält und nach Anwendungen sucht, die Sie starten möchten. Wenn das Anwendungsfenster bereits existiert, wird es fokussiert, andernfalls wird eine neue Instanz einer Anwendung gestartet.

Andere Skripte:

  • 2nd_display_control.sh - schaltet den zweiten Monitor EIN/AUS.
  • moon_lamp.sh - schaltet meine Mondlampe EIN/AUS.
  • pc_load.sh - erstellt eine Benachrichtigungsblase mit aktueller CPU- und GPU-Auslastung und Temperaturen.
  • shutdown.sh - initialisiert das Herunterfahren des PCs mit 1 Minute Verzögerung und erstellt eine Benachrichtigungsblase, in der die verbleibende Zeit angezeigt wird.
  • spec_vpn.sh - stellt eine Verbindung zu einem bestimmten OpenVPN-Server her oder trennt sich vom Server, wenn die Verbindung bereits besteht.
  • Shortcut_controll.sh - nimmt den Befehl (plus, minus, tab, schließen) als Argument, erkennt, welches Fenster jetzt fokussiert ist und wenn eine bestimmte Anwendung als aktiv gefunden wird, führt sie die Steueraktion aus. Um zum Beispiel eine neue Registerkarte im Sublime-Texteditor zu öffnen, ist die Standardkürzel "STRG+N" und im xfce-Terminal - "STRG+T".

Die erste Funktion des Drehgebers ist die Lautstärkeregelung, die zweite Funktion ist die Steuerung des aktiven Fensterzooms über die Shortcut_controll.sh.

Für Windows-Betriebssysteme können Sie über das Programmeigenschaftenfenster Verknüpfungen zu Anwendungen zuordnen, wie im zweiten Bild gezeigt. Für alles andere möchten Sie AutoHotkey verwenden. Es ist eine Automatisierungs-Skriptsprache für Windows.

Einige einfache Beispiele für die AHK-Syntax:

;Lautstärkeregelung

^+t::Sende {Volume_Up}

Rückkehr

^+v:: {Volume_Down} senden

Rückkehr

;Aktives Fenster schließen

^+h::WinGetTitle, Titel, A

PostMessage, 0x112, 0xF060,,, %Title%

Rückkehr

;Den PC ausschalten

^+b::Shutdown ausführen /s

Schritt 5: Verbesserungen

Verbesserungen
Verbesserungen

Einige mögliche Verbesserungen:

  • Druckknöpfe in besserer Qualität.
  • Die Prototyp-Leiterplatte biegt sich ziemlich stark, wenn Tasten gedrückt werden.
  • RGB-Beleuchtung zum Ändern der Farbe, je nachdem, auf welche Funktion der Drehregler eingestellt ist.
  • Weitere Tasten (verwenden Sie den IO-Expander-IC).
  • Besserer Drehgeber (oder bessere Entprelllösung).

Empfohlen: