Make 4/2023
S. 58
Make
Projekt
Bild: CC-BY-SA 4.0 timoschindler.de

Festivaltotem mit RGB-LEDs

Ein Flugzeug mit schlagenden Flügeln. Ein handgeschriebenes Schild „Bitte raven Sie hart!“. Von lauten Bässen durchgeschüttelte Hängematten im Birkenwald: All das findet man auf Festivals wie dem Fusion. Nur oft seine Gruppe nicht. Wir zeigen, wie man mit einer guten Portion Making einen unverwechselbaren Wegweiser für seine Crew baut.

von Alexander Alber und Thomas Schmid

An ungewöhnlichen Eindrücken mangelt es auf dem Fusion-Festival nicht. Unter anderem ist die deutsche Variante des Burning Man auch für die sogenannten Festival-Totems bekannt: Kunstwerke und Basteleien, die mit auf die Tanzfläche (siehe auch Titelbild) genommen werden, damit sich die eigene Crew auch findet. Denn Handyempfang sucht man meist vergeblich.

Mit den Totems finden sich die Gruppen.
Mit den Totems finden sich die Gruppen.

In diesem Artikel geht es um die Entwicklung unseres eigenen Festivaltotems. Sie beginnt ein paar Wochen vor dem großen Einsatz mit einer zentralen Idee – es soll mit Licht auf Musik reagieren. Am Ende steht ein 3D-gedrucktes Ei, in seinem Inneren befinden sich ein lasergeschnittenes Holzskelett, LED-Ketten und Elektronik. Das Totem blinkt und flackert zum Beat, lässt sich über Bewegungen und Aufstampfen des Stabes steuern und verbreitet gute Laune, wo es hinkommt.

Grundaufbau

Die Hülle des Eies besteht aus drei vertikal gestapelten 3D-Druckteilen. Die mittlere Komponente ist für den schnellen Druck im Spiralvasenmodus ausgelegt – dazu später mehr. Im Inneren des Mittelteils befindet sich zur Stabilisierung ein geklebtes Skelett aus per Laser geschnittenem Holz. Dieses ist formschlüssig mit dem Mittelteil verbunden und mit Boden und Deckel verschraubt. Innerhalb des Holzskeletts ist eine Holzplatte eingespannt, die als Träger der Elektronik dient. Das Gesamtkonzept ist in der Explosionszeichnung dargestellt.

Explosionsansicht und Schema des Totems.
Explosionsansicht und Schema des Totems.

Das Ei wird auf einen gedruckten Sockel geschraubt. Dieser enthält einen kreisrunden Schlitz zur Aufnahme eines handelsüblichen Aluminiumrohres aus dem Baumarkt. Die leichte Spielpassung im Entwurf in Verbindung mit den typischen Druckertoleranzen sorgt hier für einen stabilen Reibkraftschluss.

Im Inneren befinden sich ein ESP32-Mikrocontroller, ein Mikrofon, ein Beschleunigungssensor, eine 10Ah-Powerbank und drei WS2812-LED-Streifen.

Auf dem ESP32 läuft ein in C++ geschriebenes Programm, das zwischen verschiedenen Animationen umschaltet. Die Umschaltung erfolgt über den Beschleunigungssensor – ein zweimaliges Auftippen des Stabes auf den Boden wird hier als Umschaltsignal interpretiert.

Auf dem Festival hatten wir zwei verschiedene Animationen implementiert, die wir hier Beat Detection und Torch nennen. Die Beat-Erkennung lässt bei jedem zweiten Beat eine Lichtwelle über das Ei laufen, die Fackel simuliert ein Feuer, das durch hohe Lautstärke angefacht wird. Nach den beiden Animationen geht das Ei in einen Deep-Sleep, ein doppeltes Auftippen des Stabes bringt es zurück zur ersten Animation.

Vasemode einmal anders

In einer idealen Welt würden wir das ganze Ei einfach ganz normal drucken. Leider sagte der Slicer für unseren naiven ersten Entwurf eine Druckzeit von fast einer Woche voraus. Der zweite und endgültige Entwurf verwendet zwei Tricks, um das 32 Zentimeter hohe Ei in etwa einem Tag zu drucken.

Der erste Trick ist der Wechsel zu einer 0,8-mm-Düse. Standardmäßig sind die meisten Drucker mit 0,4 mm Düsen ausgestattet. Die breitere Düse erhöht die Druckgeschwindigkeit um ein Vielfaches, wenn auch etwas auf Kosten der Genauigkeit. Für unser Projekt ist die Genauigkeit aber immer noch ausreichend.

Der zweite Trick ist der kreative Umgang mit dem Vasemode. Auf den ersten Blick scheidet unser Ei für den Vasemode aus, da ein gewisses Innenleben notwendig ist, um die LED-Streifen zu befestigen. Hier nutzen wir daher die Definition einer Vase im Slicer aus: Der Slicer fährt in jeder Schicht stur die Außenkontur des Volumenmodells ab. Diese Außenkontur ist hier rein mathematisch definiert, indem wir also diesen soliden Körper von außen dünn einschneiden, können wir auch im Inneren des Eis einen Tunnel für die LED-Streifen erzeugen und den Vasemode austricksen.

 Geometrie, wie sie im CAD definiert ist
Geometrie, wie sie im CAD definiert ist
Vorschau der tatsächlich gedruckten Geometrie im Vasenmode
Vorschau der tatsächlich gedruckten Geometrie im Vasenmode

Die Verwendung einer 0,8-mm-Düse ist auch hier sehr vorteilhaft, da das bei Vasemode-Objekten übliche Stabilitätsproblem durch die dickeren Extrudate deutlich reduziert wird.

Für den Boden und den Deckel des Eies ist der Vasemode ungeeignet, da die Überlappung aufeinanderfolgender Schichten hier immer kleiner wird. Daher wird das Ei in drei Teile geteilt, wobei die beiden Enden normal gedruckt werden. Trotz dieser Aufteilung ist das verbleibende Teil recht groß, ein Drucker mit mindestens 250 mm Bauhöhe ist also Voraussetzung. Wir selbst haben für den Mittelteil und die Kralle einen Voron 2 in der 350-mm-Version verwendet, für die restlichen Teile einen Prusa MK 3.

Druck der Deckel
Druck der Deckel
Druck der Kralle
Druck der Kralle

Holzskelett

Um dem Ei trotz der dünnen Schale eine ausreichende Steifigkeit zu verleihen, wird es im Inneren durch ein Holzskelett verstärkt. Dieses ist so konstruiert, dass es in das Innere des Vasenteils eingepasst und verklebt werden kann und es von innen aussteift. Alle Teile des Holzskeletts können mit einem Lasercutter hergestellt werden.

Das Holzskelett im CAD
Das Holzskelett im CAD

In der Praxis haben die Eier (es gibt inzwischen zwei Stück davon) dank des Skeletts auch den einen oder anderen rauen Umgang auf dem Festival und Katzenangriffe zu Hause überlebt.

Software

Auf der Softwareseite wurde ein selbst geschriebenes C++ Programm verwendet. Dieses ist in verschiedene, von uns Apps genannte Zustände strukturiert, die jeweils unterschiedliche Animationen und Funktionen auf dem Ei ausführen. Eine übergeordnete Kontrollschleife, die auf den Beschleunigungssensor reagiert, schaltet zwischen den Apps um und initialisiert/deinitialisiert diese. Außerdem implementiert die Kontrollschleife eine kleine Zustandsmaschine, um zwischen einem aktiven Modus und einem Sleep- bzw. Stromsparmodus zu wechseln.

Für die Ansteuerung der LED-Streifen wurde die FastLED-Bibliothek verwendet, für die Kommunikation mit dem Beschleunigungssensor die ADXL345-Bibliothek. Visual Studio Code mit der Erweiterung PlatformIO erwies sich als praktische Entwicklungsplattform. Insgesamt haben wir fünf Apps entwickelt, von denen allerdings nicht mehr alle im produktiven Einsatz sind:

  • Eine Fackelanimation, die bei lauten Beats sozusagen „Brennstoff ins Feuer schmeißt“.
  • Eine Animation mit Beaterkennung, die sich mittelfristig in Frequenz und Phase an die BPM (Beats per Minute) anpasst.
  • Ein VU-Meter zum Testen der Aussteuerung des Mikrofons
  • Eine FFT-Anzeige für Testzwecke
  • Deep-Sleep – das Ei hat keinen Ein/Aus-Schalter, aber diese Anwendung ermöglicht es, eine ziemlich lange Zeit im Stand-by-Modus zu verbringen.

Für das Umschalten zwischen den Anwendungen wurden die Interrupts des Beschleunigungssensors verwendet. Die ADXL345-Bibliothek bietet hier bereits die Möglichkeit, die notwendigen Parameter für einen Double Tap einfach einzustellen. Sobald das Ei zweimal mit dem richtigen zeitlichen Abstand und der richtigen Beschleunigung bewegt wird, wird ein Double Tap ausgelöst und die Applikation gewechselt. Weitere Anwendungen können leicht hinzugefügt werden. Es müssen nur jeweils eine init(), eine deinit() und eine loop() Methode definiert werden.

Beat-Erkennung

Die erste der beiden Animationen besteht aus einer Welle, die sich von jedem zweiten Schlag (Beat) bis zum nächsten Schlag von oben nach unten ausbreitet. Dazu muss zu jedem Zeitpunkt sowohl die Frequenz als auch die Phase des Beats bekannt sein, auch bei kürzeren Störungen oder komplexeren Rhythmen.

Die Kernidee des Algorithmus besteht darin, schwach dämpfende Bandpassfilter als Phasenschätzer zu verwenden. Dazu werden mehrere Bandpässe mit unterschiedlichen Durchlassfrequenzen parallel geschaltet. Diese Durchlassfrequenzen gehören zu unterschiedlichen Taktraten. In unserem Fall von 105 bis 150 BPM, dem typischen Bereich elektronischer Tanzmusik.

Zuerst nehmen wir Samples vom Mikrofon auf. Wir subtrahieren den gleitenden Mittelwert, um ein Signal zu erhalten, das um null schwingt. Über jeweils einen Chunk (also einen Teil des Samples) – hier eine vierzigstel Sekunde – addieren wir quadrierte Samples, um die Signalenergie in diesem Chunk zu erhalten. Alles andere geschieht nun ebenfalls 40-mal pro Sekunde. Wir geben die Signalenergie parallel als Input auf alle Bandpässe – zufällig ebenfalls 40 an der Zahl. Einer der Bandpässe schwingt am stärksten. Wir folgern daher, dass seine Resonanzfrequenz dem tatsächlichen Takt am nächsten liegt. Kleine Abweichungen werden durch die Rückkopplung ständig korrigiert.

Nun haben wir das Problem, dass der Bandpass einmal pro Takt schwingt, unsere gewünschte Animation aber zwei Takte benötigt. Wir müssen also irgendwie die Frequenz halbieren. Dazu verzögern wir das Signal um π/4 und schätzen die Phase mit der atan2-Funktion. Mit der bekannten Phase und einem einfachen Zustandsautomaten konstruieren wir die Phase eines Systems mit halber Frequenz. Diese Phase skalieren wir linear und erhalten so die Sollposition des Maximums der Lichtwelle. Das Ganze ist in der Abbildung Beat-Erkennung illustriert.

Wir kennen also zu jedem Zeitpunkt die Position des Scheitelpunktes der Lichtwelle. Um diese Position herum wird die Helligkeit langsam reduziert und so die Welle geformt. Die Maxima des roten und blauen Kanals sind dabei gegenläufig verschoben, sodass ein räumlicher Farbverlauf entsteht.

Schema der Beat-Erkennung
Schema der Beat-Erkennung

Fackel

Die zweite Animation imitiert eine Fackel bzw. ein Feuer, bei der das Brennmaterial im Takt der Musik nachgelegt wird. Im Takt der Musik steigen die Flammen langsam auf.

Entwicklung der Fackelanimation
Entwicklung der Fackelanimation

Kurzfristige Änderungen in der Musik – z. B. durch Bass-Drops – führen vorübergehend zu größeren Feuerschwaden, was besonders spektakulär aussieht.

Wie in der ersten Animation wird das Mikrofonsignal zunächst auf einen Mittelwert von null normiert und daraus die Signalenergie in Zehn-Millisekunden-Schritten ermittelt. Diese Signalenergie wird nun mit zwei verschiedenen Tiefpässen gefiltert. Ein Tiefpass hat eine kurze Zeitkonstante und dient nur zur Glättung des Signals. Der andere Tiefpass hat eine Zeitkonstante von mehreren Sekunden und liefert Informationen über die mittlere Lautstärke.

Der folgende Programmteil wird alle 45 Millisekunden ausgeführt: Wenn der schnelle Tiefpass mindestens 15 % über dem langsamen Tiefpass liegt, dann gehen wir davon aus, dass aktuell ein Beat vorliegt. Die untersten beiden LEDs werden nun mit der maximalen Helligkeit angesteuert. Alle anderen LEDs ermitteln ihre Helligkeit aus der durchschnittlichen Helligkeit der beiden LEDs darunter im vorhergehenden Zeitschritt, abzüglich einer kleinen Dämpfung. Das führt dazu, dass die Feuerschwaden nach oben hin dunkler, aber auch größer werden. Das Vorgehen ist im Bild Beat-Erkennung und Reaktion der Fackel illustriert.

Beat-Erkennung und Reaktion der Fackel
Beat-Erkennung und Reaktion der Fackel

Die Konstruktion in Kürze

Wer unser Totem nachbauen will, findet hier die nötigen Schritte knapp zusammengefasst, denn an manchen Stellen ist die Reihenfolge wichtig. Über die Kurzlinks findet Ihr alle nötigen Dateien und noch weitere Bilder vom Zusammenbau in unserem GitHub.

  • Organisiere in deiner Werkstatt oder in einem lokalen Makerspace die folgenden Fertigungsmittel: Einen 3D-Drucker mit mindestens 25 cm Bauhöhe. Einen Lasercutter oder eine andere Möglichkeit, 3 mm dickes Sperrholz zu schneiden. Eine Lötstation.
  • Montiere eine 0,8-mm-Düse an deinem 3D-Drucker.
  • Drucke Boden und Deckel mit normalen Druckeinstellungen aus hellem PLA, eine Stützstruktur (Support) ist nicht nötig. Drucke die Kralle in einer anderen Farbe. Ein Support ist ebenfalls nicht nötig, aber wenn sich das Druckbett schnell bewegt, kann ein Brim helfen, das Druckteil auf dem Druckbett zu halten.
  • Drucke das Mittelteil im Vasemode mit hellem PLA. Setze die Anzahl der unteren Schichten auf Null, sodass kein Boden gedruckt wird. Auch hier kann ein Brim helfen.
  • Schneide die Holzteile zu. Überprüfe, ob die Holzteile ineinander passen.
  • Senke mit einem Lötkolben die neun Einpressmuttern in die neun Mutternhalter (mutter-halter.stl). Sie sollten oben bündig sein oder ein kleines Stück weiter hineingesenkt werden, auf keinen Fall aber herausragen.
  • Drücke mit einem Lötkolben die Einpressmuttern in das Bodenteil (boden.stl).
  • Stecke die Holzteile in das Vasenteil und verklebe die Holz-Holz-Kontakte mit Holzleim. Bitte keinen Express-Holzleim, der lässt kaum Zeit die Teile auszurichten.
  • Klebe drei der Mutternhalter (mit Heißkleber, er muss nur die Mutternhalter am Platz fixieren) von innen auf das Vasenteil, sodass später die Klaue dagegen geschraubt werden kann.
  • Klebe die restlichen sechs Mutternhalter von unten auf den oberen Holzring, sodass später der Deckel dagegen geschraubt werden kann.
  • Stecke das LED-Band in einen Kanal und kürze es so an einer der vorgesehenen Stellen, dass es oben noch 10mm herausschaut. Ziehe es wieder heraus und schneide LED-Streifen in gleicher Länge für die anderen Kanäle ab.
  • Löte am oberen Ende der LED-Streifen die dreipoligen Stecker an. Dabei so ausrichten, dass die aufgedruckten Pfeile (Datenrichtung) später nach unten zeigen.
  • Verschraube den Boden mit dem Mittelteil.
  • Die LED-Streifen in die Kanäle schieben.
Einschieben der LED-Streifen
Einschieben der LED-Streifen
  • Spiele die Software auf den ESP, z. B. mit Visual Studio Code und der Erweiterung PlatformIO.
  • Verlöte Mikrofon, ESP, Beschleunigungssensor, Spannungsversorgung und die Anschlussleitungen für die LEDs gemäß dem Fritzing-Schaltplan.
Schaltung aus Fritzing
Schaltung aus Fritzing
  • Montiere die gelöteten Teile auf dem gelochten Holzbrett, z. B. mithilfe von dünnen Kabelbindern und Heißkleber.
  • Lade die Powerbank. Wir verwenden ein abgeschnittenes USB-Kabel und Wago-Klemmen, um den Strom zu verteilen.
Montierte und verkabelte Elektronik
Montierte und verkabelte Elektronik
  • Schraube die Kralle an den Boden des Eies.
  • Stecke das Holzbrett in die dafür vorgesehene Aussparung im Inneren des Bodens.
  • Verbinde die Steckverbinder der LEDs.
  • Schließe den Deckel und schraube ihn fest.
  • Stecke die Kralle auf den Stab.

Praxistest

Nach vielen Nachtschichten waren wir kurz vor dem Festival endlich so weit und hatten zwei funktionierende Festival-Totems. Auch den mehrstündigen, ungepolsterten Transport in Eurokisten haben alle Komponenten problemlos überstanden. Nach einem kurzen Zusammenbau und Funktionscheck kam der erste große Test.

Anfangs war das Laufen mit dem Totem noch sehr ungewohnt. Das lag zum einen am hohen Schwerpunkt, zum anderen an der Aufmerksamkeit, die wir unweigerlich auf uns zogen.

Totem auf dem Festivalgelände, CC-BY-SA 4.0 timoschindler.de
Totem auf dem Festivalgelände
CC-BY-SA 4.0 timoschindler.de

Eine Warnung an dieser Stelle: Das Totem verwandelt eine Festivalnacht zuverlässig in eine Nerd-Veranstaltung. Viele Interessierte kamen auf uns zu und stellten Fragen. „Ist das Ding selbst gebaut?“ „Was für einen Mikrocontroller habt ihr dafür genommen?“ „Wo im Netz gibt es die Anleitung dafür?“ „Kannst du meinem Kumpel noch mal zeigen, wie das mit dem Double-Tap geht?“

Besonders viel Spaß hat uns der Austausch mit den Bastlern der anderen Totems gemacht. So unterschiedlich die Basteleien aussahen, so ähnlich waren oft die Lösungen dahinter. Ein Sommertrend war auch klar erkennbar: WLED.

WLED, der Sommertrend 2022
WLED, der Sommertrend 2022

Am ersten Abend hatten wir zum Debuggen noch ein VU-Meter in die Firmware eines der Eier implementiert, um den Pegel zu messen. Die wenig überraschende Erkenntnis war, dass die Mikrofone wenige Meter vor der Bühne komplett übersteuerten. Glücklicherweise funktionierten die audioreaktiven Animationen trotzdem.

Die Beat-Erkennung überzeugte vor allem bei Musik mit gleichmäßigem Rhythmus, während die Fackelanimation vor allem bei Bass-Drops das Publikum zum Staunen brachte. Der heimliche Star des Abends war jedoch die Double-Tap-Funktion.

Totem im Einsatz
Totem im Einsatz

Vor dem zweiten Abend stellten wir sicherheitshalber die Empfindlichkeit der Mikrofone mit dem kleinen Potentiometer auf der Platine auf den kleinstmöglichen Wert ein. Bei dieser Gelegenheit haben wir auch die Helligkeit der Animationen reduziert. Weitere Änderungen waren während des Festivals nicht mehr nötig.

Erfreulich war, dass die Akkus nach einer langen Nacht weniger als die Hälfte ihrer Ladung verbraucht hatten. Wir schätzen, dass die Akkulaufzeit etwa einen Tag im Dauerbetrieb und etwa drei Tage im Deep-Sleep-Modus beträgt.

Da alles so gut funktionierte, war es an der Zeit, gedanklich vom Bastelmodus in den Festivalmodus zu wechseln. Wir freuen uns schon auf nächstes Jahr, wenn wir einen Teleskopstab und eine Ladelösung haben werden, bei der das Ei nicht mehr aufgeschraubt werden muss. Außerdem denken wir bereits über weitere Animationen nach. —caw