The Torch

Vorgeschichte

Beim Stöbern auf der Project share Seite im Forum von Spark.IO bin ich auf dieses Projekt gestossen. Die Grundidee ist, einen LED-Streifen mit den individuell programmierbaren WS2812 LEDs spiralförmig auf einen zylindrischen Tubus zu wickeln. Bei geschickter Anordnung ergibt sich eine leicht geneigte senkrechte LED Reihe. Mit entsprechender Software lassen sich ausser Farbmuster auch Texte anzeigen. Die im Projekt gezeigten Tuben waren mir aber etwas zu klein. Etwas Grösseres musste her….

Spezifikationen

Die Leuchtfläche der Lampe sollte etwa einen Meter hoch sein. Im Sockel wird das Netzteil, im Kopf die Elektronik platziert. Da der Spark.core über WiFi ansprechbar ist, soll die Lampe übers Internet bedienbar sein.

Elektronik

Kernstück ist ein Spark.core. Es wird derselbe Typ wie im Originalprojekt verwendet. Aufgrund der grösseren Dimension dieser Lampe müssen einige Einschränkungen in der Software wegen des RAM-Speichers gemacht werden. Der Core sitzt zuoberst in der Lampe um guten Kontakt zum WiFi zu haben. Der LED-Streifen wird von unten angesteuert. Als LED kommt die Type WS2812(B) zum Einsatz. Diese LED ist kaskadierbar. Daten am Eingang der LED werden angenommen und bei weiteren Daten die vorhergehenden an die nächste LED weitergegeben. Das Ganze funktioniert wie ein Schieberegister. Überschreitet die Lücke zwischen zwei Datenfeldern eine bestimmte Zeit, übeträgt die LED den zuletzt empfangenen Wert in ihr eigenes Steuerregister und steuert damit deren RGB LED an. Es kann somit jede LED mit einer eigenen Farbe und Helligkeit gesteuert werden. Einziger Nachteil ist die nötige hohe Bitrate von ca. 800 kHz für die Übertragung der Daten. Arduinos und kleinere Mikrokontroller haben zuweilen Mühe das Timing bei längeren LED-Streifen einzuhalten. Das Netzteil liefert 5V mit einer maximalen Leistung von 350W (70A). Um diese grosse Leistung an die LED zu übertragen, werden vier Einspeisepunkte verteilt entlang des LED-Streifens angebracht.

Hardware

Die Computerhardware mit dem Spark.Core fertig vorhanden und bedarf hier keiner weiteren Erklärung. Für die Lampe selber sind ein paar Erläuterungen hilfreich.

Die LED-Streifen sind selbstklebend. Idealerweise werden Sie auf ein Trägerrohr mit passendem Durchmesser geklebt. Dieses sollte einen Durchmesser haben bei dem die LEDs exakt zwischen Trägerrohr und Lampenglas passen. Als weitere Schwierigkeit kommt dazu, dass die LEDs idealerweise gerade in einer Kolonne und leicht schräg nach rechts zu liegen kommen. So wird eingespielter Text leichter lesbar. Da Text für mein Projekt nicht wichtig ist, habe ich die LEDs auf ein mit Styropormatte aufgedicktes Kartonrohr geklebt. Man kann auf den Fotos gut erkennen, dass es keine gerade Kolonne um unteren Bereich gibt. Das ist in der weichen Struktur der Styropormatte begründet.

Die Beschaffung eines durchsichtigen, Milchglas-artigen Rohres ist für Private durchaus mit hohen Hürden verbunden. Solche Rohre sind meist nur von Grosshändlern erhältlich, die kaum mit privaten Abnehmern geschäften wollen. Ausserdem ist der Preis kaum interessant.

Zu meinem Glück verkauft die Migros in der Sparte Micasa eine passende Lampe mit einem Durchmesser von 150mm und ca. 1.6m Höhe. Der Preis von CHF 150 ist zwar deftig, jedoch ist darin auch gleich ein metallener Sockel enthalten. Die Länge des Rohres war zu lang und wurde entsprechend gekürzt. Der Deckel, die Halterung des Lüfters und des Controllers wurde mittels eines 3D-Druckers hergestellt. Hier zeigt sich dessen Überlegenheit beim Konstruieren um Sonderformen in Kürze herzustellen.

Der Sockel wurde um eine CNC-gefräste Holzkonstruktion erweitert, die das Netzteil trägt und die Basis für das Rohr mit den LEDs bildet.

Software

Die ursprüngliche Software ist darauf ausgelegt, einen LED-Streifen mit ca. 720 LEDs zu steuern. Das ist momentan die maximale Anzahl LEDs die der Core bezüglich RAM verwalten kann, ohne auf weitere Features wie Text und Fackelanimation zu verzichten. Diese Variante geht hier einen etwas anderen Weg. Die Software generiert dynamische und statische LED-RGB-Daten. Dynamische Daten werden kurz vor Übermittlung noch modifiziert oder Aufgrund einer Simulation verändert. Statische RGB-Daten werden on the fly berechnet und übermittelt, benötigen daher kein RAM für jede LED.

Dazu zwei Beispiele:

Fackel-Modus: Die Software simuliert eine Fackel mit einer glühenden Basis und einer dynamischen Entwicklung der ‚Flammen‘ die nach oben steigen. Diese ist im Original rund 720 LED lang (Anzahl LEDs pro Umfang x Anzahl Wicklungen). Da diese Fackel mit 1200 LEDs ausgerüstet ist, behelfe ich mich mit einem Teilbereich aus den ersten 720 LEDs und hänge diesen an dessen Ende. Dieser Beschiss ist nur beim Starten der Lampe auffallend wenn der obere Abschnitt zeitgleich ebenfalls Licht ausstrahlt. Sind alle LEDs aktiv fällt das kaum mehr auf.

Cycle-Modus: Dieser Modus macht nichts anderes als alle Farben durch den LED-Streifen zu schieben. Man erhält somit eine bunte Säule in der viele Farben nach oben steigen. Da sich die Startparameter mit jedem Durchgang (10ms) etwas ändern, verändern sich auch die Farben für jede LED. Diese Ansteuerung ist statisch, da keine LED-RGB-Daten gespeichert werden müssen.

Die aktuelle Software ist auf GitHub zu finden.

sam_1049-medium.jpg sam_1053-medium.jpg sam_1056-medium.jpg sam_1057-medium.jpg sam_1072-medium.jpg sam_1074-andere.jpg sam_1081-medium.jpg sam_1082-medium.jpg sam_1085-medium.jpg sam_1100-andere.jpg sam_1101-andere.jpg