Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

PS/2 Tastatur auslesen mit Arduino: Deine Schritt-für-Schritt-Lösung

Posted on 19. November 202419. November 2024 by Stefan Draeger

In Zeiten von USB und Bluetooth sind alte PS/2-Tastaturen längst aus unserem Alltag verschwunden, doch mit ein wenig Technik-Know-how kannst du sie für spannende Projekte wiederbeleben. In diesem Beitrag zeige ich dir, wie du eine PS/2-Tastatur an deinen Arduino anschließt und die Signale ganz einfach auslesen kannst. Wir starten damit, den Aufbau des PS/2-Steckers und der Buchse zu verstehen – das ist der erste Schritt, um die Verbindung richtig herzustellen.

Mit der Arduino IDE wird das Auslesen der Tastaturdaten kinderleicht. Später gehen wir noch einen Schritt weiter und nutzen die Tastatur, um automatische Aktionen auszulösen – perfekt für Makros oder Steuerungsaufgaben. Lass uns loslegen und deine Retro-Hardware wieder zum Leben erwecken!

PS/2 Tastatur auslesen mit Arduino: Deine Schritt-für-Schritt-Lösung
Dieses Video auf YouTube ansehen.

Die Idee zu diesem Beitrag habe ich einem meiner Follower zu verdanken, der meinen bereits veröffentlichten Beitrag zum MacroPad gesehen und die spannende Frage gestellt hat, ob man ein solches Projekt nicht um eine PS/2-Tastatur erweitern könnte. Vielen Dank für die tolle Anregung! Eure Fragen und Ideen inspirieren mich immer wieder zu neuen Projekten und zeigen, wie vielfältig und kreativ die Maker-Community ist.

Inhaltsverzeichnis

  • Aufbau einer PS/2 Buchse
  • Bezug einer PS/2 Buchse
  • Schaltung am Arduino UNO R3
  • Auslesen einer PS/2 Tastatur am Arduino mit der Arduino IDE
  • Steuern eines Servomotors via PS/2 Tastatur

Aufbau einer PS/2 Buchse

Damit deine PS/2-Tastatur mit dem Arduino spricht, musst du wissen, wie die Pins der PS/2-Buchse belegt sind. Auf dem Bild siehst du das Pinout, und es wird direkt klar: Du brauchst nur vier Pins! Zwei davon sind für die Stromversorgung (VCC und GND) zuständig, die anderen beiden für die Kommunikation (Clock und Data).

Ein kleiner, aber wichtiger Hinweis: Wenn du direkt die Pins vom Stecker abgreifen willst, ist das Pinout spiegelverkehrt! Also achte gut darauf, dass alles richtig verbunden ist. Sobald das passt, bist du nur noch ein paar Schritte davon entfernt, Daten mit deinem Arduino auszulesen. So einfach kann’s gehen!

Bezug einer PS/2 Buchse

Du bekommst PS/2 Buchsen & Stecker immer noch zu kaufen, auch wenn diese bereits seit mehreren Jahren durch den USB-Standard abgelöst wurden. Nachfolgend gebe ich dir ein paar Links zu dem hier verwendeten Modul.

ebay.dealiexpress.com
Buchse auf Platineab 1,67 €*1,39 €
Buchse einzelnab 2,82 €*2,05 €

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Schaltung am Arduino UNO R3

Es gibt die PS/2 Buchsen einzeln als Baustein für den Aufbau auf einer Lochrasterplatine und auch als Modul fertig auf einer Platine, ich habe mich für die letztere Version entschlossen, da dieses für den Beitrag erstmal völlig ausreicht und keinen nennenswerten Vorteil / Nachteil gibt.

PS/2 Keyboard Adapter am Arduino UNO R3
PS/2 Keyboard Adapter am Arduino UNO R3

Auslesen einer PS/2 Tastatur am Arduino mit der Arduino IDE

Nachdem das kleine Modul angeschlossen und mit der Tastatur verbunden ist, können wir mit der Programmierung starten.

Wir können uns hier wie üblich mit einer passenden Bibliothek die Arbeit sehr einfach machen. Ich verwende die Bibliothek PS2Keyboard von Christian Weichel, welche du ganz bequem über den Bibliotheksverwalter der Arduino IDE installieren kannst.

Nachfolgend ein kleines Beispiel, welches auf der seriellen Schnittstelle die gedrückte Taste ausgibt. Dieses funktioniert für die Tasten 0-9 und a-z sehr zuverlässig. Möchtest du die Sonderzeichen und Großbuchstaben behandeln, so muss auch die Aktion an der Shift-Taste behandelt werden.

//Bibliothek zum auslesen der KeyCodes einer PS/2 Tastatur
#include <PS2Keyboard.h>

//Pins
#define dataPin 4
#define clkPin 3

//Initialisieren des Objektes
PS2Keyboard keyboard;

void setup() {
  //beginn der seriellen Kommunikation mit 115200 baud
  Serial.begin(115200);
  //beginn der Kommunikation mit der PS/2 Tastatur
  keyboard.begin(dataPin, clkPin);
  
}

void loop() {
  //Wenn Daten empfangen werden können, dann...
  if (keyboard.available()) {
    //auslesen des KeyCodes
    uint16_t c = keyboard.read();
    //Wenn der Code größer 0 ist, dann...
    if (c > 0) {
      //umwandeln des Wertes in einen Charakter
      //damit wird die gedrückte Taste ausgegeben
      Serial.print(char(c));
      //Dieses Funktioniert für die Taster 0-9 und a-z zuverlässig.
      //Möchtest du die Sonderzeichen und Großbuchstaben behandeln
      //so muss zuvor auf die Shift-Taste reagiert werden.
    }
  }
}

Steuern eines Servomotors via PS/2 Tastatur

Wir können mit der Tastatur nun recht einfach einen Servomotor steuern, dazu verwende ich die beiden Pfeiltasten rechts & links.

Die kleine Schaltung erweitern wir hierzu um den Servomotor, welcher an einen digitalen PWM Pin angeschlossen wird. Einen solchen PWM Pin erkennen wir an der Tilde ~ an der Pinbeschriftung.

BauteilArduino UNO R3
PS/2 Modul
CLK (grün)D4
DATA (gelb)D3
VCC (rot)5 V
GND (schwarz)GND
Servomotor
VCC (rot)5 V
GND (braun)GND
DATA (orange)D9
//Bibliothek zum ansteuern eines Servomotors am Arduino
#include <Servo.h>

//Bibliothek zum auslesen der KeyCodes einer PS/2 Tastatur
#include <PS2Keyboard.h>

//Pins
#define dataPin 4
#define clkPin 3

//Initialisieren des Objektes
PS2Keyboard keyboard;

//Servomotor am digitalen Pin D9 angeschlossen
#define servoPin 9

//initialisieren des Servo-Objektes
Servo servo;

//Schritte für den Servomotor
const int SERVO_STEPS = 10;
//maximale & minimale Position des Servos
const int MAX_SERVO_POSITION = 180;
const int MIN_SERVO_POSITION = 0;
//Feld zum speichern der aktuellen Servoposition
unsigned int servoPosition = 0;

void setup() {
  //beginn der seriellen Kommunikation mit 115200 baud
  Serial.begin(115200);
  //beginn der Kommunikation mit der PS/2 Tastatur
  keyboard.begin(dataPin, clkPin);
  //verbinden des Servo-Objektes mit dem Pin
  servo.attach(servoPin);
  //beim starten des Mikrocontrollers soll die NULL-Position angefahren werden
  servo.write(servoPosition);
}

void loop() {
  //Wenn Daten empfangen werden können, dann...
  if (keyboard.available()) {
    uint16_t c = keyboard.read();
    //Wenn die Pfeiltaste Links & die aktuelle Servoposition kleiner als die maximale ist, dann...
    if (c == PS2_LEFTARROW && servoPosition < MAX_SERVO_POSITION) {
      //erhöhen der Servoposition um X Schritte
      servoPosition += SERVO_STEPS;
      //schreiben der aktuellen Position
      servo.write(servoPosition);
    } else if (c == PS2_RIGHTARROW && servoPosition > MIN_SERVO_POSITION) {
      servoPosition -= SERVO_STEPS;
      servo.write(servoPosition);
    }
  }
}

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}