Neopixel LED-Cube mit dem Pi Zero gesteuert

Nachdem ich schon einige Modelle von LED-Würfeln im Eigenbau konstruiert hatte, bin ich auf den Cube:bit aufmerksam geworden. Dessen Konzept unterscheidet sich zu anderen LED-Cubes, setzt man hier doch auf den Einsatz von „Neopixel“-Elementen.

So der Name für die mittlerweile bekannten RGB-LEDs, welche sich über eine Datenleitung einzeln ansprechen und in Farbe und Helligkeit verändern lassen. Es gibt strang- und ringförmige Module und ganze Flächen. Seit einiger Zeit sind auch „Slices“ erhältlich. Weniger eine Scheibe, mehr ein einzelnes Gitter zum Aufbau einer Würfelebene. Von 4tronix entwickelt, werden diese im Handel z.B. über pimoroni angeboten, und es gibt sie mit 3er, 4er und 5er Kantenlängen.

Die Eigenschaften der fertigen Module bringen einige Vorteile mit sich. So entfallen zusätzliche Schieberegister, Controller und LED-Treiber, wie die Verdrahtung umfangreicher Zusatzelektronik. Man muss sich nicht um das Multiplexen der einzelnen Ebenen kümmern, und es treten weniger Helligkeitsunterschiede bei unterschiedlicher Anzahl von leuchtenden LEDs auf.

Für den „Maker“ war es bisher immer recht schwierig, ein gleichmäßiges Gitter zu konstruieren, damit der Eigenbau auch optisch was hermacht. Schließlich müssen bei einem 5x5x5-Würfel schon 125 LEDs geprüft, gebogen und mit weiteren Drähten möglichst akkurat verlötet werden. Bei noch größeren Würfeln wird das schnell zu einer Mammut-Aufgabe. Das wird einem nun alles abgenommen.

Nachteile hat diese spezielle Lösung natürlich auch. Sofort offensichtlich ist die stärkere Verstrebung zwischen den LEDs, welche beim Betrachten auch Lichtpunkte ausblendet. Man hat auf dem Leiterplattenmaterial jeweils oben und unten eine LED angeordnet, die gleichmäßig angesteuert werden, was das Ganze etwas abmildert, aber ein schlanker Drahtaufbau ist da transparenter. Und natürlich der im Moment noch recht hohe Preis für einen Bausatz und für nachzukaufende Slices. Durch die vorgegebene Adressierung der Pixel, welche nicht die Schnellste ist, werden optische Effekte nur bis zu einer gewissen Geschwindigkeit machbar und sind deshalb langsamer, als man bei individuellen Lösungen erreichen kann.

Trotzdem fand ich es interessant, einen LED-Cube auf Basis eines solchen Bausatzes aufzubauen. Da waren die Vorteile attraktiv genug für mich, wo man sich auf die Software konzentrieren und sich dann vor allem auf die eigene Kreativität bei den optischen Effekten konzentrieren kann. So entstand dieses Projekt.

Den Bausatz gibt es in unterschiedlichen Größen. Um etwas mehr darstellen zu können, haben wir uns für die Gitter mit Kantenlänge von 5 LEDs entschieden. Geliefert wurde ordentlich verpackt. Auch die Abstandhalter gehören dazu.

Mechanisch zu konstruieren war also wenig, aber es sollte ein ansehnlicher Grundkörper sein, in dem alle zusätzliche Elektronik untergebracht ist. Wir nutzen die für den Bausatz empfohlene Basisplatine. Die passt zu den LED-Elementen, stellt Anschlüsse für die Stromversorgung bereit, und neben dem micro:bit lässt sich auch ein Raspberry Pi Zero stecken. Genau den wollen wir verwenden.

Jetzt muss der Cube Schritt für Schritt aufgebaut werden. Der 5x5x5-Cube benötigt fünf Slices, welche mit Abstandhaltern mit einander verbunden werden. Jedes Element bekommt eine Spannungsversorgung, der Datenausgang eines Elements wird jeweils mit dem Dateneingang des darüber liegenden Nachfolgers verbunden.

Es gilt, die Anschlüsse nicht zu verwechseln und jeweils die richtige Seite nach oben zu drehen. Dafür sind die Slices günstigerweise mit „Side A“ und „Side B“ bereits herstellerseitig beschriftet. Am besten, man schafft sich vorher entsprechende Übersicht.

Für den micro:bit wurde in Scratch programmiert, für den Pi ist die Neopixel-Library und entsprechende Software in Python verfügbar. Für die hier verwendeten Elemente gibt es einen Port „cubebit.py“, welcher das Ansprechen der eigentlich strangförmig organisierten Neopixel in einem 3-Achsen-Koordinatensystem ermöglicht. Das macht den Entwurf von Lichteffekten für den Würfel wesentlich einfacher. Mit diesem modularen „Bausatz“ an Soft- und Hardware kann man also richtig viel machen und in seine eigene Entwicklung integrieren.

Unser eigenes Python-Demoscript zur Ansteuerung des Würfels ist auf Git-Hub unter https://github.com/swenae/neocube zu finden. Auf dem Steuer-Pi lassen wir es nach dem Einschalten starten.

Neben dem Bau und Test des Bausatzes war mir das Kennenlernen der cubebit-Library wichtig. Und da sollte eine kleine Weiterentwicklung auch nicht fehlen. So findet sich im Github-Projekt nicht nur die kleine Demo (sw_cube.py), sondern auch einige neue Methoden in „swc.py“, welche den Umgang mit dem Cube vereinfachen sollen. Dort sind nun unter anderem „Lines“, „Slices“, „Squares“ und „Cubes“ festgelegt.

Die kann man nun nutzen, um schnell Linien, Rechtecke, Flächen oder „Subwürfel“ in einem Koordinatensystem innerhalb der Außengrenzen des Cube zu erzeugen. Darauf basiert dann auch die Demo, welche nicht nur die originalen Beispiele wie den Rainbow-Effekt integriert, sondern auch auf unsere Klasse mit den neuen Geometrien zugreift.

Vor dem Ausschalten kann man den Cube bzw. den Pi Zero über „ssh“ an einem Terminal von einem Rechner im heimischen Netzwerk aus definiert herunterfahren. Da sich unser Pi im WLAN befindet, wird es auch möglich, auf unterschiedliche Ereignisse zu reagieren und diese anzeigen lassen. So könnte man eingegangene eMails melden oder ein Wettersymbol für die Vorschau auf den nächsten Tag anzeigen. Aber auch „offline“ wird einiges möglich, wie eine Anzeige für die Raumtemperatur oder man reagiert mittels Mikrofon auf das Abspielen von Musik.

So soll unser NeoCube in nächster Zeit noch Bedienelemente an der Grundplatte erhalten, mit dem man ihn in den Ruhezustand versetzen und diverse Anzeigefunktionen schalten kann. In der Zwischenzeit erfreuen wir uns am „Showprogramm“, was zeigt, wie einfach und dekorativ Neopixel-Elemente für einen solchen LED-Würfel genutzt werden können.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.