Gebarenbestuurde PC met Arduino en Python – handvrije bediening
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino UNO | 1 |
| Ultrasonische sensor HC-SR04 | 2 |
| Draadjes | 1 set |
Apps en online diensten
- Arduino IDE
- Python IDLE
- PySerial bibliotheek
- PyAutoGUI bibliotheek
Over dit project
Leer hoe je een gebarenbestuurde laptop/computer bouwt met Arduino en Python. In plaats van toetsenbord/muis gebruik je handgebaren voor functies als video pauzeren, foto's bladeren, webpagina's scrollen, etc. Voorbeeld: VLC Media Player besturen.
Principle
Twee HC-SR04 sensoren boven het laptops scherm meten de afstand tot de hand. Arduino stuurt afstanden via seriële poort naar Python. Python (met PySerial en PyAutoGUI) vertaalt dit naar toetsenbordsimulatie.
Software installatie
- Python IDLE: download van python.org (32-bit aanbevolen voor compatibiliteit).
- PySerial:
pip install pyserial. Test:import serialzonder fout. - PyAutoGUI:
pip install pyautogui. Test:import pyautoguizonder fout.
Schema
Elke sensor: VCC → 5V, GND → GND, Trig → Arduino pin (2 en 4), Echo → Arduino pin (3 en 5).
Arduino-code
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 calculate_distance(int trigger, int echo) {
digitalWrite(trigger, LOW); delayMicroseconds(2);
digitalWrite(trigger, HIGH); delayMicroseconds(10);
digitalWrite(trigger, LOW);
time_taken = pulseIn(echo, HIGH);
dist = time_taken * 0.034 / 2;
if (dist > 60) dist = 60;
}
void loop() {
calculate_distance(trigger1, echo1); distL = dist;
calculate_distance(trigger2, echo2); distR = dist;
// Play/Pause: beide handen op 40-60 cm
if (distL > 40 && distR > 40 && distL < 60 && distR < 60) {
Serial.println("Play/Pause"); delay(500);
}
calculate_distance(trigger1, echo1); distL = dist;
calculate_distance(trigger2, echo2); distR = dist;
// Linker sensor: volume & rewind
if (distL >= 13 && distL <= 17) {
delay(100); calculate_distance(trigger1, echo1); distL = dist;
if (distL >= 13 && distL <= 17) {
Serial.println("Left Locked");
while (distL <= 40) {
calculate_distance(trigger1, echo1); distL = dist;
if (distL < 10) { Serial.println("Volume Increased"); delay(300); }
if (distL > 20) { Serial.println("Volume Decreased"); delay(300); }
}
}
}
// Rechter sensor: forward & rewind
if (distR >= 13 && distR <= 17) {
delay(100); calculate_distance(trigger2, echo2); distR = dist;
if (distR >= 13 && distR <= 17) {
Serial.println("Right Locked");
while (distR <= 40) {
calculate_distance(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) # Pas COM-poort aan!
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 = ""
Let op: Vervang 'COM15' door de juiste COM-poort van je Arduino (zie Arduino IDE → Tools → Port). De Python-script moet draaien terwijl VLC actief is.
Handgebaren samengevat
- Play/Pause: beide handen 40-60 cm voor sensoren
- Rewind: hand links, vast houden 13-17 cm, dan dichterbij (<10 cm)
- Forward: hand rechts, vast houden 13-17 cm, dan dichterbij (<10 cm)
- Volume +: hand links, vast houden 13-17 cm, dan wegbewegen (>20 cm)
- Volume -: hand rechts, vast houden 13-17 cm, dan wegbewegen (>20 cm)
Productieproces
- Bouw een indrukwekkend monitor Ambilight-systeem met Arduino
- Universele Android-afstandsbediening bouwen met Arduino, 1Sheeld en IR-besturing
- Een slimme voltmeter bouwen met Arduino en smartphone – Eenvoudig DIY-project
- Externe IoT-besturing van een zelfgebouwde robotarm
- Nauwkeurige Frequentie- en Duty Cycle-meting met Arduino UNO
- Bestuur een Arduino-rover naadloos met Firmata en een Xbox One-controller
- Slimme beweegactiverde waterpistool gebouwd met Arduino Nano
- Naadloze LED-dimmer met Bolt IoT en Arduino UNO
- Bouw een Slimme Arduino-gestuurde Robotarm: Eenvoudige DIY Handleiding
- Je TV bedienen met Alexa via Arduino IoT Cloud – stapsgewijze handleiding
- Bouw een compacte FM-radio met Arduino Nano en RDA5807M