DIY Zauberstab: Gesten-gesteuerter Walking Staff mit Arduino 101 & NeoPixel
Komponenten & Zubehör
| Bauteil | Anzahl | Hinweise |
|---|---|---|
| Arduino 101 (Intel Curie) | 1 | IMU (Beschleunigung + Gyro) onboard |
| Adressierbare LED-Stripe (NeoPixel/WS2812) | 1 | 60 LEDs, 5 V |
| 3× AA-Batteriehalter mit Schalter | 1 | ca. 4,5 V |
| AA-Batterien (z. B. Eneloop) | 3 | Beliebig, 3 Stück |
| Pololu Step-Up Spannungsregler 5 V ($4) | 1 | Aus 4,5 V → stabile 5 V für Arduino & LEDs |
| Fassungen: M & F Buchsenleiste (Barrel Jack) | je 1 | Trennbare Stromversorgung |
| Sporttape (Gewebeband) | 1 Rolle | Befestigung & Griff |
| Gummibänder | 1 Pack | Temporäre Fixierung beim Bau |
| Stab (Besenstiel, Rohr, Naturholz) | 1 | ca. 1,5–1,8 m |
Software
- Arduino IDE (mit Intel Curie Board Support)
- Adafruit NeoPixel Library
- CurieIMU Library (bereits im Core enthalten)
Projektidee
Ein gesten-gesteuerter Zauberstab, der durch bestimmte Bewegungsmuster („Zaubersprüche“) drei verschiedene Lichteffekte auf dem NeoPixel-Streifen auslöst. Der IMU (Inertial Measurement Unit) des Arduino 101 erkennt Stöße/Erschütterungen entlang der drei Achsen.
Technik: Impulserkennung statt Pattern Matching Engine
Der Code nutzt nicht die Pattern Matching Engine (PME) des Curie-Chips, sondern eine einfache, robuste Logik:
- Die IMU löst einen Interrupt bei Erschütterung (> 1,5 g, 50 ms) aus.
- Im Interrupt wird gezählt, auf welcher Achse (X, Y, Z) und in welche Richtung der dominante Impuls wirkt.
- Ein State-Machine („Choose your own adventure“) wertet die Abfolge der Impulse innerhalb von 1 Sekunde aus.
- Visuelles Feedback über die LEDs zeigt den aktuellen Zustand an.
Zaubersprüche (Gesten)
- Start: Zwei schnelle vertikale Schläge (Doppeltap) → Weißer Blitz (Bestätigung).
- Auswahl (innerhalb 1 s):
- Scharf nach vorne/hinten → Spruch 1 (Grün)
- Neigung links/rechts → Spruch 2 (Blau)
- Dritter vertikaler Tap → Spruch 3 (Rot)
- Auslösen: Ein letzter vertikaler Tap → Der gewählte Effekt läuft ab (Theater-Chase in der Spruch-Farbe).
Wichtig: Zwischen jedem Schritt maximal 1 Sekunde Pause, sonst Reset. So werden versehentliche Auslösungen beim Gehen vermieden.
Elektronik-Aufbau
Schritt 1: LED-Stripe anschließen
Endstück abschneiden (~1 cm), Adern abisolieren. Grün = Data, Gelb = GND, Rot = +5 V.
Schritt 2: Spannungsregler vorbereiten
Gebogene Header-Pins des Pololu-Reglers entfernen. Zwei gerade Pins an GND & VOUT löten. Grünes & gelbes Kabel des LED-Stripes mit je einem Header-Pin versehen (für Arduino Pin 6 & GND). Rotes Kabel an VIN des Reglers löten.
Schritt 3: Batterie & Barrel-Jacks
Batteriehalter-Kabel an männlichen Barrel-Jack (Rot=+, Schwarz=-). LED-Stripe-Anfang an weiblichen Barrel-Jack (Gelb=-, Rot=+). So lässt sich der Stab komplett vom Strom trennen.
Schritt 4: Arduino 101 verdrahten
- Grün (Data) → Pin 6
- Gelb (GND) → GND bei Pin 13
- Regler: GND → GND, VOUT → VIN (Arduino 101)
Achtung: VIN & GND nicht vertauschen → Rauch & Geruch!
Code hochladen & Kalibrierung
- Batterie aus, Arduino 101 per FTDI/USB an PC.
- Code in Arduino IDE kompilieren & hochladen.
- Batterie an, Test: USB-Buchse nach unten, Pins zum Körper → 4× vertikal tippen → Roter Spruch.
- Kalibrierung: Konstante
LED_OFFSET(0–23) anpassen, damit die LED in Richtung der Neigung leuchtet.
Code-Struktur (Kernlogik)
// IMU Interrupt zählt Impulse pro Achse
void eventCallback() {
if (CurieIMU.shockDetected(X_AXIS, POSITIVE) || CurieIMU.shockDetected(X_AXIS, NEGATIVE)) { tap++; globaltimer = millis(); }
if (CurieIMU.shockDetected(Y_AXIS, POSITIVE) || CurieIMU.shockDetected(Y_AXIS, NEGATIVE)) { lr++; globaltimer = millis(); }
if (CurieIMU.shockDetected(Z_AXIS, POSITIVE) || CurieIMU.shockDetected(Z_AXIS, NEGATIVE)) { fb++; globaltimer = millis(); }
}
// Loop: alle 170 ms dominanten Impuls bestimmen → gesture = 1 (tap), 2 (lr), 3 (fb)
// State Machine (switch-case) verfolgt Sequenz:
// 0 → 1 (1. tap) → 2 (2. tap + Flash) → 3/4/5 (Auswahl) → 0 (Auslösen + Spell)
// Timeout 1 s → Reset auf State 0
// Spell-Funktionen (TheaterChase in Farbe)
void tapspell() { theaterChase(strip.Color(127,20,0),20); theaterChase(strip.Color(127,20,50),55); }
void leftspell() { theaterChase(strip.Color(0,0,100),20); theaterChase(strip.Color(0,30,120),75); }
void forwardspell() { theaterChase(strip.Color(0,127,0),30); theaterChase(strip.Color(0,127,90),55); }
Stab-Montage
- Stab besorgen, optional Abschnitt mit Sporttape umwickeln (saubere Fläche).
- Gummibänder als Haltepunkte aufkleben.
- Arduino 101 mit USB-Buchse nach unten per Gummiband fixieren.
- LED-Stripe spiralförmig um Stab wickeln, mit Gummibändern sichern.
- Batteriehalter & Regler mit Sporttape fest umwickeln (Schalter zugänglich lassen!).
- Optional: Lichtdiffusor (Tüll, Seidenpapier, Plastikflasche) über LEDs für weicheres Licht.
Anpassung & Erweiterung
- Eigene Spell-Funktionen schreiben (Farben, Speed, Muster).
- Mehr Gesten durch Erweiterung der State Machine.
- LiPo + Ladecontroller für „Pro“-Version (leichter, länger Laufzeit).
- Sound-Modul (Buzzer) für akustisches Feedback.
Herstellungsprozess
- AC-Elektrische Felder detektieren: Praktischer Leitfaden zu kapazitiver Kopplung und Abschirmung
- Leistungsdissipation in Widerstandsschaltungen berechnen
- Sieben bewährte Tipps zum Schutz Ihres Post-Processings in der additiven Fertigung
- Lebensmittelfarbe: Wie lebendige Farbtöne Appetit und Präsentation steigern
- IoT-Geschäftsmodelle bauen und validieren, die funktionieren – Ein praktischer Leitfaden
- DIY Google Voice HAT für Raspberry Pi selbst bauen
- Arduino-Roboter mit Raspberry Pi bauen: Schritt-für-Schritt-Anleitung
- Der komplette Leitfaden zur Glasfaserproduktion
- Fertigungsexzellenz feiern – Wählen Sie Ihren eigenen Tag für den Manufacturing Day
- Progressive Cutaway Animation in SolidWorks erstellen – Tutorial