PC per Geste steuern – Arduino & Python für berührungslose Bedienung
Komponenten und Zubehör
| Komponente | Anzahl |
|---|---|
| Arduino UNO | 1 |
| Ultraschallsensor HC-SR04 | 2 |
| Jumper-Wires | 1 Set |
Software
- Arduino IDE
- Python IDLE
- PySerial Library
- PyAutoGUI Library
Projektbeschreibung
Steuern Sie Ihren Laptop/PC per Handgesten – ohne Maus, Tastatur oder Joystick. Zwei HC-SR04-Sensoren oben am Bildschirmrand messen die Handabstände. Arduino sendet die Distanzen per Serial an Python, das via PyAutoGUI Tastenkombinationen auslöst (z. B. in VLC Media Player).
Gesten-Definition (5 Befehle)
- Play/Pause: Beide Hände vor beiden Sensoren im Abstand 40–60 cm halten.
- Zurückspulen (Rewind): Linke Hand vor linkem Sensor (13–17 cm), dann näher (<10 cm).
- Vorspulen (Forward): Rechte Hand vor rechtem Sensor (13–17 cm), dann näher (<10 cm).
- Lauter: Linke Hand vor linkem Sensor (13–17 cm), dann wegbewegen (>20 cm).
- Leiser: Linke Hand vor linkem Sensor (13–17 cm), dann näher (<10 cm).
Schaltung
Jeder HC-SR04: VCC → 5 V, GND → GND, Trig/Echo an Arduino-Pins (Sensor 1: Trig 2, Echo 3; Sensor 2: Trig 4, Echo 5).
Python-Installation & Bibliotheken
- Python 3.x (32-bit empfohlen) von python.org installieren.
pip install pyserial→ Test:import serialpip install pyautogui→ Test:import pyautogui
Arduino-Code (arduino_pythogui.ino)
const int trigger1 = 2, echo1 = 3;
const int trigger2 = 4, echo2 = 5;
long time_taken; int dist, distL, distR;
void setup() {
Serial.begin(9600);
pinMode(trigger1, OUTPUT); pinMode(echo1, INPUT);
pinMode(trigger2, OUTPUT); pinMode(echo2, INPUT);
}
void calcDist(int trig, int echo) {
digitalWrite(trig, LOW); delayMicroseconds(2);
digitalWrite(trig, HIGH); delayMicroseconds(10);
digitalWrite(trig, LOW);
time_taken = pulseIn(echo, HIGH);
dist = time_taken * 0.034 / 2;
if (dist > 60) dist = 60;
}
void loop() {
calcDist(trigger1, echo1); distL = dist;
calcDist(trigger2, echo2); distR = dist;
// Play/Pause
if (distL > 40 && distR > 40 && distL < 60 && distR < 60) {
Serial.println("Play/Pause"); delay(500);
}
calcDist(trigger1, echo1); distL = dist;
calcDist(trigger2, echo2); distR = dist;
// Left Lock (Volume)
if (distL >= 13 && distL <= 17) {
delay(100); calcDist(trigger1, echo1); distL = dist;
if (distL >= 13 && distL <= 17) {
Serial.println("Left Locked");
while (distL <= 40) {
calcDist(trigger1, echo1); distL = dist;
if (distL < 10) { Serial.println("Volume Increased"); delay(300); }
if (distL > 20) { Serial.println("Volume Decreased"); delay(300); }
}
}
}
// Right Lock (Seek)
if (distR >= 13 && distR <= 17) {
delay(100); calcDist(trigger2, echo2); distR = dist;
if (distR >= 13 && distR <= 17) {
Serial.println("Right Locked");
while (distR <= 40) {
calcDist(trigger2, echo2); distR = dist;
if (distR < 10) { Serial.println("Rewind"); delay(300); }
if (distR > 20) { Serial.println("Forward"); delay(300); }
}
}
}
delay(200);
}
Python-Code
import serial, time, pyautogui
ArduinoSerial = serial.Serial('COM15', 9600) # COM-Port anpassen!
time.sleep(2)
while True:
incoming = str(ArduinoSerial.readline())
print(incoming)
if 'Play/Pause' in incoming: pyautogui.typewrite(['space'], 0.2)
if 'Rewind' in incoming: pyautogui.hotkey('ctrl', 'left')
if 'Forward' in incoming: pyautogui.hotkey('ctrl', 'right')
if 'Volume Increased' in incoming: pyautogui.hotkey('ctrl', 'down')
if 'Volume Decreased' in incoming: pyautogui.hotkey('ctrl', 'up')
incoming = ""
Hinweis: COM-Port im Python-Skript anpassen (im Arduino-IDE unter Tools → Port einsehen). Die Tastenkombinationen sind für VLC optimiert; für andere Apps anpassen.
Herstellungsprozess
- Monitor-Ambilight selbst bauen mit Arduino Nano & WS2812B LEDs
- Universelle Android-Fernbedienung mit Arduino, 1Sheeld & IR-Steuerung
- Intelligentes Voltmeter mit Arduino & Smartphone bauen – Einfaches DIY-Projekt
- Fernsteuerung eines Roboterarms per IoT: Eigenbau mit Arduino MKR1000
- Frequenz & Tastverhältnis präzise messen mit Arduino UNO
- Arduino Rover per Firmata & Xbox One Gamepad steuern
- Intelligente, bewegungsaktivierte Wasserpistole mit Arduino Nano
- Stufenlose LED-Helligkeitssteuerung mit Bolt IoT und Arduino UNO
- Intelligenter Arduino-Roboterarm bauen: Einfaches DIY-Tutorial
- TV per Alexa steuern mit Arduino IoT Cloud – Schritt-für-Schritt