DIY USB-Trackpad aus altem Laptop – Arduino Micro als HID-Schnittstelle
Komponenten & Zubehör
| Bauteil | Menge |
|---|---|
| Arduino Micro (oder Pro Micro / Leonardo) | 1 |
| Trackpad aus defektem Laptop (PS/2-Schnittstelle) | 1 |
| Litze / Klingeldraht (4 Adern) | ca. 20 cm |
| Heißkleber (zur Entlastung der Lötpads) | 1 |
Software & Bibliotheken
- Arduino IDE
- Mouse Library (integriert ab Arduino IDE 1.0+)
- PS2 Library (z. B.
PS2Mousevon GitHub oder Arduino Library Manager)
Projektidee
Wer einen Raspberry Pi zum Laptop ausbauen will, scheitert oft an einem bezahlbaren, eigenständigen USB-Trackpad. Die Lösung: Ein ausgedientes Laptop-Trackpad (PS/2-Interface) per Arduino Micro (ATmega32u4) in ein USB-HID-Mausgerät verwandeln. Der Micro/Leonardo/Pro Micro können nativ als USB-HID (Maus/Tastatur) auftreten – der Uno kann das nicht.
Warum das funktioniert
Ältere Laptop-Trackpads kommunizieren per PS/2-Protokoll (Clock + Data) mit dem Mainboard. Der Arduino liest diese Signale ein (Pins 9 = Clock, 10 = Data), dekodiert sie per PS2-Bibliothek und sendet die Bewegungsdaten über die Mouse-Bibliothek als USB-HID-Events an den Host-PC. Neuere Trackpads nutzen manchmal direkt USB – diese können ohne Arduino direkt angeschlossen werden (Pinout recherchieren).
Verkabelung
Auf der Trackpad-Platine vier Lötpads identifizieren (meist beschriftet):
- T10 → Data → Arduino Pin 10
- T11 → Clock → Arduino Pin 9
- T20 → VCC (+5 V) → Arduino 5V
- Massefläche (große Kupferfläche) → Arduino GND
Wichtig: Die Pads sind extrem empfindlich. Nach dem Löten keine mechanische Belastung – Verbindungen mit Heißkleber entlasten und fixieren.
Code
#include
#include
#define PS2_DATA 10
#define PS2_CLK 9
PS2 moose(PS2_CLK, PS2_DATA);
byte mstat1, mstat2, mxy, mx, my, mz;
int msval[3];
int repeatCnt = 0;
void setup() {
Mouse.begin();
// Trackpad initialisieren (Standard PS/2 Maus-Init-Sequenz)
moose.write(0xff); moose.read(); moose.read(); moose.read(); // Reset
moose.write(0xf0); moose.read(); delayMicroseconds(100); // Remote mode
// Set resolution / scaling / sampling rate (typisch für Synaptics/ALPS)
moose.write(0xe8); moose.read(); moose.write(0x03); moose.read();
moose.write(0xe8); moose.read(); moose.write(0x00); moose.read();
moose.write(0xe8); moose.read(); moose.write(0x01); moose.read();
moose.write(0xe8); moose.read(); moose.write(0x00); moose.read();
moose.write(0xf3); moose.read(); moose.write(0x14); moose.read(); // Sample rate 20
Serial.begin(9600);
}
void ms_read() {
moose.write(0xeb); // Read data
moose.read(); // ACK
mstat1 = moose.read(); // Status byte 1
mxy = moose.read(); // X/Y overflow & sign bits
mz = moose.read(); // Z (Scroll)
mstat2 = moose.read(); // Status byte 2
mx = moose.read(); // X movement
my = moose.read(); // Y movement
// 12-bit signed Werte rekonstruieren
msval[0] = (((mstat2 & 0x10) << 8) | ((mxy & 0x0F) << 8) | mx);
msval[1] = (((mstat2 & 0x20) << 7) | ((mxy & 0xF0) << 4) | my);
msval[2] = mz; // Scroll
}
void loop() {
ms_read();
// Einfaches Debouncing: nur bei wiederholter Bewegung Maus bewegen
if (msval[0] > 0 && msval[2] > 10) repeatCnt++;
else repeatCnt = 0;
if (repeatCnt > 2) {
// Rohwerte auf Maus-Koordinaten mappen (an Trackpad anpassen!)
msval[0] = map(msval[0], 580, 5164, -1023, 1023);
msval[1] = map(msval[1], 1120, 5967, 1023, -1023);
Mouse.move(msval[0] / 200, msval[1] / 200);
}
}
Hinweis: Board in Arduino IDE auf „Arduino Micro“ (oder „Leonardo“) stellen, sonst Kompilierfehler (kein HID-Support beim Uno).
Fertigstellung & Fehlersuche
Nach dem Hochladen startet der Arduino als USB-Maus – funktioniert auf jedem OS ohne Treiber. Geschwindigkeit & Verhalten (Doppelklick, Scrollen) lassen sich im Code anpassen (Mouse.move()-Parameter, Mapping-Bereiche).
Trackpad sendet keine Daten?
- Rückseite Teilenummer notieren, „Partnumber pinout“ googeln.
- Prüfen, ob wirklich PS/2 (nicht USB/I²C).
- Lötverbindungen & Pin-Belegung (Clock/Data nicht vertauschen) prüfen.
Alternative ohne Programmieren: PS/2-zu-USB-Adapter kaufen – aber oft schlechtere Signalqualität, keine Anpassbarkeit.
Herstellungsprozess
- Bluetooth-gesteuerter Raspberry Pi Roboter mit Audio-Feedback bauen
- Gesteuerter RGB-Tischlampe – Interaktive, berührungslose Beleuchtung
- Android-gesteuertes Roboterfahrzeug mit Raspberry Pi Motor Shield
- LEDs mit Alexa über Raspberry Pi steuern – Einfache Schritt-für-Schritt-Anleitung
- Altes RC-Auto per Xbox-Controller & Arduino zum Joystick-Fahrzeug umbauen
- Arduino-basierter 6-DoF Roboterarm mit Nunchuk-Steuerung
- Sprachgesteuerter Roboter mit Arduino Nano bauen
- MobBob: Eigenen Arduino-Roboter bauen, per Android-Smartphone steuern
- Sprachgesteuerte Haushaltsgeräte: Bluetooth-Steuerung mit Google Assistant
- PiBot: Arduino-gesteuerter Klavierroboter für präzise Musikwiedergabe