Arduino Joystick-gesteuerte Maus: Präzise Cursor-Navigation
Komponenten und Zubehör
| Komponente | Menge |
|---|---|
| Arduino UNO | 1 |
| Dual-Achsen-Joystick | 1 |
Apps und Online-Dienste
- Arduino IDE
- IDLE (Python GUI)
Projektbeschreibung
Als Alternative zur Steuerung des Mauszeigers per Maus oder Trackpad wurde hier eine Joystick-basierte Lösung realisiert. Der Joystick bewegt den Cursor in X- und Y-Richtung und führt per integriertem Taster einen Klick aus.
Grundlagen
Ein Joystick besteht im Wesentlichen aus zwei Potentiometern für die X- und Y-Achse. Der Arduino liest analoge Werte im Bereich 0–1023 ein. In Mittelstellung liegt der Wert nahe 512. Der Sketch mappt Abweichungen von der Mitte auf einen Empfindlichkeitsbereich (Standard ±10). Bewegt man den Joystick vollständig in eine Richtung, wird +10 bzw. -10 gesendet.
Die X- und Y-Werte werden durch einen Doppelpunkt getrennt über die serielle Schnittstelle ausgegeben, gefolgt vom Tasterstatus (1/0). Beispiel: 5:-3:0.
Python-Programmierung
(Aktualisiert am 11.12.2020: Bibliothek von pyautogui auf mouse geändert.)
- Python 3 installieren (falls nicht vorhanden).
- Im Terminal/Kommandozeile folgende Befehle ausführen:
cd <Pfad zum Python-Skript> py -m pip install --upgrade pip py -m pip install mouse py -m pip install pyserial
Das Python-Skript liest die seriellen Daten des Arduino, extrahiert X-, Y- und Tasterwerte und bewegt den Mauszeiger entsprechend. Die aktuelle Cursorposition wird via mouse.get_position() ermittelt. Die Bewegung erfolgt durch mouse.move(X+x, Y-y). Ein Klick wird durch mouse.click(button="left") ausgelöst, wenn der Taster gedrückt ist (z=1).
Endgültige Ausführung
- Arduino-Sketch hochladen und Joystick gemäß Schaltplan verdrahten.
- Python-Skript in eine
.py-Datei kopieren, den korrekten COM-Port des Arduino eintragen (im Geräte-Manager prüfbar). - Datei in IDLE öffnen und Modul ausführen (F5).
- Bei Fehlern: IDLE neu starten, COM-Port prüfen.
- Joystick bewegen – der Cursor folgt.
Code
Arduino-Code
////////////////////////////////////
// Joystick-gesteuerte Maus
// von Shubham Santosh
////////////////////////////////////
void setup() {
Serial.begin(9600);
pinMode(9, INPUT); // SW-Pin
digitalWrite(9, HIGH); // Pull-up
}
int prev_state = 0;
void loop() {
int xpos = 0, ypos = 0, z = 0;
int x = analogRead(A0);
int y = analogRead(A1);
int sensitivity = 10; // Empfindlichkeit anpassbar
if (x >= 550) xpos = map(x, 550, 1023, 0, sensitivity);
if (x <= 450) xpos = map(x, 450, 0, 0, -sensitivity);
if (y >= 550) ypos = map(y, 550, 1023, 0, sensitivity);
if (y <= 450) ypos = map(y, 450, 0, 0, -sensitivity);
int curr_state = digitalRead(9);
if (curr_state == 1 && prev_state == 0) z = 1; // Taster gedrückt
else z = 0;
if (xpos != 0 || ypos != 0 || z == 1) {
Serial.print(xpos);
Serial.print(":");
Serial.print(ypos);
Serial.print(":");
Serial.println(z);
}
prev_state = curr_state;
delay(10);
}
Python-Code
# Joystick-gesteuerte Maus
# Von Shubham Santosh
# Letzte Änderung: 11.12.2020
import mouse, sys, time, serial
mouse.FAILSAFE = False
ArduinoSerial = serial.Serial('COM3', 9600) # Korrekten COM-Port angeben!
time.sleep(1)
while True:
data = str(ArduinoSerial.readline().decode('ascii')).strip()
if not data:
continue
x, y, z = data.split(":")
X, Y = mouse.get_position()
x, y = int(x), int(y)
mouse.move(X + x, Y - y) # Y-Achse invertiert
if '1' in z:
mouse.click(button="left")
Schaltplan
Der Schaltplan zeigt die Verbindung des Joysticks mit dem Arduino (A0, A1, Pin 9 für den Taster, 5V, GND).
Herstellungsprozess
- Die Evolution der Computermaus: Design, Fertigung und Zukunftstrends
- Temperaturgesteuerter Lüfter: DIY Relais-System für Medienmöbel-Kühlung
- Raspberry Pi-gesteuertes Aquaponik-System: Bauanleitung & Code
- Bewegungsgesteuerter AWS IoT Button mit Raspberry Pi, PIR-Sensor und MQTT
- Bluetooth-gesteuerter Raspberry Pi Roboter mit Audio-Feedback bauen
- WLAN-gesteuerter Raspberry Pi Roboter mit Python bauen – Schritt-für-Schritt
- Alexa-gesteuerter ARDrone 2.0: Sprachaktivierte Drohne mit Raspberry Pi & Hologram Nova
- Altes RC-Auto per Xbox-Controller & Arduino zum Joystick-Fahrzeug umbauen
- Interaktives Joystick-Spiel mit Arduino & LED-Feedback
- FeNi42 Legierung: Niedrige Thermische Ausdehnung für Präzisions-Dichtungen