Gestenerkennung mit ESP32 und Arduino 101 Beschleunigungssensor – Einfaches DIY-Tutorial
Komponenten und Zubehör
| Bauteil | Menge | Details |
|---|---|---|
| Arduino 101 | 1 | Integrierter Beschleunigungssensor – keine zusätzlichen Bauteile nötig |
| Arduino UNO | 1 | Alternative: benötigt externen Beschleunigungssensor (z. B. ADXL335) |
| Adafruit Analog Accelerometer ADXL335 | 1 | Für Arduino ohne integrierten Sensor |
| SparkFun Triple Axis Accelerometer Breakout ADXL335 | 1 | Alternative zum Adafruit-Modul |
Über dieses Projekt
Überblick
Dieses Tutorial zeigt, wie Sie basierende Gestenerkennung in Arduino-Projekte mit dem ESP-System einbinden. Beispiele: Tennisschläge (Vorhand, Rückhand, Aufschlag), Tanzelemente, Gewichtheber-Bewegungen etc. Der Beschleunigungssensor erfasst die Gesten und sendet die Daten an die ESP-Anwendung auf dem PC. ESP nutzt einen einfachen Machine-Learning-Algorithmus (Dynamic Time Warping), um Live-Daten mit aufgezeichneten Gestenbeispielen abzugleichen und bei Erkennung eine Nachricht an den Arduino zurückzusenden. Das System erkennt einzelne diskrete Gesten, keine kontinuierlichen Bewegungsqualitäten – reicht aber für viele interaktive Anwendungen.
ESP Gestenerkennungs-Anwendung herunterladen
- Mac:
ESP-Gestures-Mac-20161028.zip - Windows:
ESP-Gestures-Win-20161028.zip(evtl. Visual C++ Redistributable Update 3 nötig) - Ubuntu:
ESP-Gestures-Ubuntu-20161028.tar.gz - Beispiel-Gesten:
ForehandBackhandServe.grt
Schritt 1: Beschleunigungssensor anschließen
Bei Arduino 101 (integrierter Sensor) kann dieser Schritt übersprungen werden. Andernfalls:
- Male Header-Pins auf Breakout-Board löten (falls nicht geschehen).
- Beschleunigungssensor an Arduino verdrahten.
Kurzschlussmethode: Breakout direkt in die analogen Eingänge des Arduino Uno stecken (X→A5, Y→A4, Z→A3). Im Code die Pins entsprechend als Stromversorgung (VCC/GND) für den Sensor konfigurieren.

Alternativ: Breakout auf Steckbrett, VCC→5V, GND→GND, X/Y/Z an drei analoge Eingänge.
Schritt 2: Arduino-Code hochladen
Einen der untenstehenden Sketches verwenden. Prüfen Sie, ob die Pin-Definitionen zur Verkabelung passen (bei Arduino 101 entfällt dies). Board und Port in der IDE wählen, hochladen.
Schritt 3: Daten im Serial Monitor prüfen
Serial Monitor öffnen, 9600 Baud einstellen. Drei Spalten mit sich ändernden Werten sollten erscheinen. Serial Plotter zeigt grafischen Verlauf. Wichtig: Serial Monitor und Plotter vor Schritt 4 schließen, da sie den Port blockieren.
Schritt 4: ESP-Anwendung starten & Serial Port wählen
ESP-Anwendung herunterladen (Mac/Windows Links oben). Im Konfigurationsmenü „Select a serial port“ den Arduino-Port auswählen.

Live-Daten erscheinen im „Raw Data“-Plot: Rot = X-Achse, Grün = Y-Achse, Blau = Z-Achse.

Schritt 5: Kalibrierungs-Samples aufnehmen
Beschleunigungssensor flach hinlegen, Z-Achse nach oben. Taste „1“ gedrückt halten für „Upright“-Sample. Dann Sensor umdrehen (flach, Z nach unten), Taste „2“ für „Upside down“-Sample. ESP ermittelt so 0 g (X/Y) und 1 g (Z).

Schritt 6: Beispiel-Gesten aufnehmen
Reiter „Training“ öffnen (Klick oder Großbuchstabe „T“). Bis zu 9 verschiedene Gesten möglich.

Geste ausführen, dabei entsprechende Zifferntaste gedrückt halten (z. B. „1“ für Geste 1). Alternativ Beispiel-Datei ForehandBackhandServe.grt laden.
Wichtig: Sensororientierung beim Aufnehmen muss der späteren Nutzung entsprechen (z. B. in Hand gehalten, am Objekt befestigt). Gutes Sample: ganze Geste, wenig Baseline am Anfang/Ende. Nicht die Rückbewegung aufnehmen (z. B. bei Wischgeste nur Hin-, nicht Herbewegung).

5–10 Samples pro Geste sind oft gut; Qualität vor Quantität. Schlechte Samples löschen („delete“), trimmen („trim“), verschieben („re-label“), umbenennen („rename“).


Schritt 7: System trainieren
Taste „t“ drücken → „training successful“ erscheint. Bei ähnlicher Geste wird deren Name im Live-Plot angezeigt.

Erstes Training klappt oft nicht perfekt. Öfter trainieren/testen während der Aufnahme. Bei Fehlern: mehr Examples aufnehmen (zu strikte Erkennung) oder schlechte löschen/trimmen (zu viele Fehlalarme). Nach Änderungen „t“ drücken.
Schritt 8: Konfiguration feinjustieren
„Click to open configuration“ anklicken. Zwei Parameter:
- Variability: Wie stark eine Geste von den Examples abweichen darf. Höher = toleranter. Zu streng? Erhöhen. Zu viele Fehlalarme? Verringern (oder schlechte Examples löschen).
- Timeout (ms): Wartezeit nach Erkennung vor nächster Erkennung. Zu hoch = verpasst schnelle Gestenfolgen. Zu niedrig = mehrfache Erkennung einer Geste. Fehlalarme (z. B. Vorhand + Rückhand statt nur Vorhand)? Timeout erhöhen.
Nach Änderung: „t“ drücken zum Neutrainieren.
Schritt 9: Gestenerkennung in eigenes Arduino-Projekt einbinden
Bei Erkennung sendet ESP die Gestennummer als ASCII-Text + Newline (z. B. „1\n“) an den Arduino (seriell). Per Serial.read() auswerten und reagieren. Zusätzlich TCP an localhost:5204 (z. B. für Processing-Spiele). TCP-Server muss vor ESP-Start laufen.
Funktionsweise: Dynamic Time Warping (DTW)
DTW verformt das Live-Signal (Werte weglassen/duplizieren), erzeugt Variationen und prüft Ähnlichkeit zu Trainingssamples. Nächstes Sample wird gesucht; Differenz unter Schwellwert („variability“) → Match → Vorhersage der zugehörigen Klasse.
ESP basiert auf dem Gesture Recognition Toolkit (GRT), das viele ML-Algorithmen für Echtzeit-Sensing bereitstellt. ESP übersetzt anwendungsspezifischen Code in angepasste UI für ML-Pipelines. Weitere ESP-Beispiele: Farbsensorik, Posenerkennung, Audioerkennung. Siehe ESP GitHub.
Code
Arduino ADXL335 Code
Liest ADXL335 an Arduino: X→A5, Y→A4, Z→A3. Serielle Ausgabe 9600 Baud, Tab-getrennt, Newline-terminiert, ASCII.
Arduino 101 Beschleunigungssensor Code
Liest integrierten Beschleunigungssensor des Arduino 101. Serielle Ausgabe 9600 Baud, Newline-terminiert, Tab-getrennt, ASCII.
Herstellungsprozess
- RFID-Anwesenheitssystem mit Arduino & Python – Daten direkt in phpMyAdmin (XAMPP) speichern
- Universelle Android-Fernbedienung mit Arduino, 1Sheeld & IR-Steuerung
- Intelligentes Voltmeter mit Arduino & Smartphone bauen – Einfaches DIY-Projekt
- Smart IoT-Glas bauen: Füllstand überwachen mit ESP8266, Arduino & Ultraschall
- Frequenz & Tastverhältnis präzise messen mit Arduino UNO
- Arduino Rover per Firmata & Xbox One Gamepad steuern
- Echtzeit-Entfernungsmessung mit Arduino Sonar & Processing-Visualisierung
- Stufenlose LED-Helligkeitssteuerung mit Bolt IoT und Arduino UNO
- Intelligenter Arduino-Roboterarm bauen: Einfaches DIY-Tutorial
- Digitaler Kompass in Echtzeit mit Arduino & Processing bauen