zurück zum Artikel

LED-Cube für 3D-Animationen

Hintergrund
Ein Würfel aus vielen LEDs unter einer Glaskuppel

Eine große Menge LEDs würfelförmig zusammenzulöten ist eine beliebte Geduldsprobe, fasziniert aber durch räumliche Lichteffekte. Mein LED-Würfel kann nicht nur beliebige Farben zeigen, mit ihm sind auch 3D-Animationen darstellbar.

Neopixel-LEDs sind weithin bekannt – es gibt sie fertig als Streifen, Ringe und Matten angeordnet zu kaufen, aber sie sind auch einzeln erhältlich und setzen bei vielen Maker-Projekten farbige und leuchtende Akzente. Bei meinem Neopixel-Würfel habe ich Exemplare der SMD-Variante WS2812B so übereinander angeordnet, dass sie jeweils nach oben leuchten. Je fünf LEDs sind dabei im Abstand von etwa 1,5cm mit zwei dünnen Drähten verlötet, über die auch die Stromversorgung läuft. Das Ganze sieht dann aus wie eine kleine Säule.

25 solcher LED-Säulen habe ich dann quadratisch auf einer Grundplatte angeordnet, wodurch ein würfelförmiges Gebilde aus 125 Neopixeln entsteht. Die Verdrahtung unterhalb der Grundplatte verbindet alle Säulen in Bezug auf Strom und Daten. Innerhalb der Säulen sind die LEDs mit feinem Kupferlackdraht verschaltet.

Schaut man von schräg oben im richtigen Winkel auf den LED-Würfel, sind fast alle Neopixel zu sehen. Da man die LEDs über ein Mikrocontrollerboard alle einzeln ansteuern kann, sind dadurch kleine 3D-Animationen möglich. Bei insgesamt 125 Pixeln im Raum ist die Auflösung natürlich zu klein, um von einem 3D-Farb-Display zu sprechen, aber der Effekt ist faszinierend und der Würfel ein echter Hingucker.

Quelle: Siegbert Weidl

Für die Arduino-Plattform gibt es die nötigen Bibliotheken, welche die Ansteuerung der LEDs übernehmen und auch viele Funktionen für die Programmierung bieten. Meine kleinen 3D-Animationen zu meinem Neopixel-Würfel nutzen die Library FastLED [1].

Zum Nachbauen

Der Nachbau des Würfels setzt das Verständnis von Schaltplänen, gewisse Lötfertigkeiten sowie Geschick bei der Bearbeitung kleiner Metall- und Kunststoffteile voraus. Seine Bestandteile sind die Grundplatte, die darauf eingesteckten 25 selbstgebauten Neopixel-Säulen, ein 5V-Netzteil sowie ein mit der Arduino-IDE programmierbares Mikrocontrollerboard mit ausreichend Speicher.

Damit die LEDs in den Säulen die richtigen Abstände haben und alle gleich sind, habe ich für das Zusammenlöten eine spezielle Lehre gebaut. Wie der Aufbau der Säulen und die gesamte Konstruktion des Neopixelwürfels Schritt für Schritt gelingt, steht auf den folgenden Seiten – Schritt für Schritt mit vielen Bildern und allen nötigen Schaltplänen erklärt. Den Code für die Beispielanimationen gibt es zum Download bei Github [2]. Wer den Umgang mit dieser Plattform nicht gewohnt ist, findet hier eine Kurzanleitung zu Github [3].

Kurzinfo

Checkliste

Material

Übersicht

Bestandteile meines LED-Cubes – im Folgenden auch oft Neopixelwürfel genannt – sind die Grundplatte, die darauf eingesteckten 25 Neopixel-LED-Säulen, ein 5V-Netzteil und ein auf der Arduino-Plattform programmierbarer Mikrocontroller mit ausreichend RAM. Wie viel "ausreichend" ist, ist relativ – mein komplettes Beispielprogramm passt etwa auf einen Arduino Mega oder einen ESP8266. Wer einen Arduino UNO benutzt, muss sich für eines von drei Programmen entscheiden, die jeweils nur einen Teil der Animationen enthalten.

Schaltplan der Grundplatte

Neopixelwürfel in einem einfachen Gehäuse ohne ...
Hinweise für den Einkauf

Bei der Beschaffung der Stift- und Federleisten ist darauf zu achten, dass die Kunststoffkörper der beiden im zusammengesteckten Zustand bündig aufeinander liegen, damit die LED-Säulen später stabil stehen. Alternativ können auch lange Federleisten anstelle der 50 einzelnen verwendet werden. Die LED-Säulen werden dann an den richtigen Stellen eingesteckt.

... und mit Acrylglas–Halbkugel zum Schutz der LEDs

Mir liegen drei Varianten der Neopixel-LEDs WS2812B [4] vor, die alle mit dieser Bezeichnung verkauft worden sind. Sie funktionieren einwandfrei, leuchten aber bei manchen Farben leicht unterschiedlich, was beim Neopixelwürfel etwas stört. Es empfiehlt sich deshalb, alle bei einem Lieferanten zu besorgen.

Bei Einsatz des ESP8266 als Mikrocontroller-Board, das mit 3,3V betrieben wird, ist kein Pegelwandler erforderlich. Die Neopixel LEDs WS2812B akzeptieren auch die geringere Augangsspannung. Getestet habe ich den Würfel mit dem ESP8266-01, ESP8266-08S und ESP8266-12F. Der jeweilige Port zur Ansteuerung ist dem Programm zu entnehmen.

Aufbau der Grundplatte

Die Grundplatte besteht aus einer ausgesägten Epoxyd-Platine in den Maßen 10cm × 10cm mit Lötstreifenraster. Das ergibt 38 Kupferstreifen mit je 39 Löchern. Zur besseren Orientierung werden wie im Bild gezeigt mit Filzstift die roten und blauen Linien eingezeichnet und mit grün die Mittelpunkte der LED-Säulen.

Der nächste Arbeitsgang ist das Unterbrechen der Leiterbahnen an den bezeichneten Stellen: an den LED-Säulen-Mittelpunkten und bei den Brücken der Datenleitung. Danach werden Brücken aus verzinntem Kupferdraht mit 0,8mm Durchmesser eingelötet. Für die vier Datenleitungsbrücken (grün ummantelt) kann auch dünnerer Draht genommen werden. Dann kann man mit dem Einlöten der Elkos weitermachen, siehe Text im Bild.

Es folgt dann das Einlöten der restlichen Bauelemente wie im nachstehendem Bild.

Einbau- und Löthilfe für die 50 Federleisten

Die im Bild gezeigte kleine Hilfskonstruktion unterstützt das Einsetzen und Verlöten der Federleisten. Die zwei Stiftleisten sind durch drei Lochrasterplatinen verbunden, diese können später beim Herstellen der LED-Säulen wiederverwendet werden. An den entsprechenden Stellen der Stiftleiste werden die einzulötenden Federleisten aufgesteckt und in die Grundplatte eingesetzt. Dann lötet man zunächst nur die beiden äußeren Kontakte der jeweiligen 3er-Federleiste an.

Nach Abziehen der Hilfskonstruktion drückt man die einzelnen Federleisten nochmal fest an die Platine an und lötet nach, damit der Kunststoffkörper vollständig auf der Platine sitzt. Danach verlötet man die inneren Kontakte. Die Leiterbahnen, die zu äußeren Kontakten (Stromversorgung der LED-Säulen) führen, verzinnt man komplett und etwas dicker. Es sollte kein Loch mehr zu sehen sein, da hier größere Ströme fließen können.

LED-Säulen-Bau

Da pro Säule je fünf LEDs an zwei Drähten übereinander verlötet werden müssen, wird eine weitere Hilfskonstruktion gebaut.

Zum Herstellen einer SMD-LED-Halterung zum Löten der LED-Säulen benötigt man:

Auf dem Holzbrettchen werden, wie im Foto zu sehen, die beiden 100mm-Röhrchen getrennt durch zwei der 5mm-Röhrchen mittig angeordnet. Das 10mm-Röhrchen kommt auf die Seite, an der alle Röhrchen bündig mit dem Holzbrettchen abschließen; das 40mm-Teil auf die andere.

Ein 100mm-Röhrchen wird außen an beiden Enden mit Heißkleber fixiert. Nach Abkühlung wird das zweite 100mm-Röhrchen genauso befestigt, dabei die beiden Röhrchen fest zusammendrücken. Das 10mm-Röhrchen wird jetzt einseitig und nur oben mit dem einen 100mm-Röhrchen mit Heißkleber verbunden.

Einsetzen der LEDs und der Röhrchen

Die LEDs und Röhrchen werden wie im nachstehendem Bild mit einer Pinzette in die Halterung eingesetzt. Das Fenster aller LEDs zeigt zum Winkel, die Markierung (kleine Aussparung an der Fensterseite) ist einheitlich oben rechts, wie im Bild. Nach dem waagrechten Einlegen des 40mm-Röhrchens sollten die LEDs so fixiert sein, dass sie nicht wackeln können.

Verlöten der LEDs

Zum Verlöten der LEDs verwendet man verzinnten Schaltdraht mit etwa 0,4mm und Fadenlötzinn mit 0,5mm Durchmesser. Es hat sich auch als hilfreich erwiesen, vor jedem Lötvorgang die LED-Anschlüsse sowie den Schaltdraht an den Lötstellen mit etwas Kolophoniumlösung zu benetzen.

Teil 1

Zuerst werden alle LEDs an den Anschlüssen (mit der Markierung) verzinnt, dann wird das eine Ende des Schaltdrahtes verzinnt und an den Anschluss (mit der Markierung) der LED beim 40mm-Röhrchen angelötet.

Danach verzinnt man zuerst den Schaltdraht an den Stellen, die mit den Anschlüssen der anderen LEDs verlötet werden. Hier ist es besser, etwas dicker zu verzinnen, da im nächsten Arbeitsgang keine Hand mehr frei ist, um Lötzinn zuzuführen. Mit einer Pinzette wird der Draht dann etwas auf den jeweiligen LED-Anschluss gedrückt und verlötet.

Das überstehende andere Drahtende wird dann bündig zum Holzbrettchen abgeschnitten. Damit ist der erste Teil des Verlötens fertig. Das 40mm-Röhrchen entfernen und die LEDs mit den Röhrchen vorsichtig nach oben entnehmen.

Teil 2

Das Gebilde um 180 Grad drehen und wieder einsetzen. Der zuvor angelötete Schaltdraht ist jetzt unten und das 1cm lange Ende wird in den Zwischenraum des 10mm- und 100mm-Röhrchens geführt, an jener Seite, auf der der Heißkleberklecks sitzt.

Alle Röhrchen wieder einsetzen, dann wie im Teil 1 verfahren, die Markierung der LEDs spielt jetzt natürlich keine Rolle mehr. Nach Fertigstellung die Konstruktion wieder aus der Halterung entnehmen, die Röhrchen entfernen.

Die beiden Schaltdrähte sind jetzt an jeweils diagonal gegenüberliegenden Ecken mit den LEDs verbunden. Über sie erfolgt später die Stromversorgung.

Steckkontakte für die Platine

Um das Verlöten der LED-Säulen mit ihrer Basisplatine zu erleichtern, empfiehlt es sich, noch eine Halterung zu bauen. Dazu werden auf einem Reststück Lochrasterplatine zwei Reihen von je drei Federkontakten verlötet – die gleichen, die auch auf der Grundplatte verbaut sind.

In der Mitte zwischen den Federkontaktleisten ist ein stärkerer Schaltdraht mit etwa 3cm Länge einzulöten, der als Abstandshalter zwischen der Säulenplatine und der untersten LED fungieren wird.

Für die Säulenplatine wird ein 3×3-Lochstreifenplatinenstück genommen. In der Mitte, wo auch der Abstandsdraht der Halterung hindurchgeht, wird die Leiterbahn unterbrochen. Der Zusammenbau ist in den nachstehenden Bildern zu sehen. Die Halterung spannt man am besten in einen Schraubstock.

LED-Cube – Säulen-Steckkontakte für die Platine (4 Bilder) [5]

[6]
Halterung zum Verlöten der LED-Säulen, in der Mitte der Abstandhalter aus Draht

Jetzt kann man die Schaltdrähte mit der Säulenplatine verlöten. Von den beiden Drähten ist der Minuspol/Masse/GND derjenige, der an den LED-Markierungen angelötet ist. Die Seite der Platine, an der er verlötet ist, zur Orientierung mit einem Filzstift blau markieren. Die gegenüberliegende Seite ist der Pluspol (+5V) und wird rot markiert.

Kupferlackdraht verzinnen

Für die Datenverkabelung wird Kupferlackdraht mit 0,1mm Durchmesser verwendet. Pro Säule braucht man:

Die abgeschnittenen Stücke müssen an den Enden verzinnt werden, bevor sie an die LEDs angelötet werden können.

Datenverdrahtung der LED-Säule

Die LED-Säule spannt man am besten vorsichtig in einen kleinen Schraubstock. Ideal ist ein nach allen Seiten schwenkbarer Typ.

Zuerst werden die Datenanschlüsse der LEDs verzinnt, dann die Kupferlackdrahtstücke angelötet. Die Verschaltung ist in den nachstehenden Bildern zu sehen. Da die LEDs diagonal, auf der Platine aber gerade verlötet sind, kann man durch leichtes Drehen an der untersten LED die Kanten der LEDs in der Säule und ihrer Grundplatine parallel ausrichten.

Stromversorgung

Eine WS2812B-LED nimmt maximal etwa 60mA auf, sie leuchtet dann weiß in voller Stärke. Beim Neopixelwürfel würde dann ein maximaler Strom von 7,5A fließen (0,06A × 125 LEDs), den das Netzteil liefern muss. Wenn man mit dem Neopixelwürfel nicht noch sein Zimmer beleuchten will, reicht auch ein weniger leistungsstarkes Netzteil aus, bei mir genügte bisher eins mit 2 Ampere.

Die Grundplatte hat für den Strom- und Datenanschluss eine 5-polige Stiftleiste. Die 4 äußeren Stifte sind für die Stromversorgung vorgesehen, der mittlere für die Datenleitung. Das Gegenstück bildet eine Federleiste mit abgewinkelten Lötanschluss zu einer kleinen Platine und ist so ausgeführt, dass man Steckverbindung nicht verkehrt herum aufstecken kann.

Die Datenleitung ist über einen Schutzwiderstand (330 Ohm) mit dem mittleren Anschluss der Federleiste verlötet. Der Kupferdraht (Litze) der Kabel zum Netzteil hat einen Durchmesser von etwa 0,7mm. Optional kann man noch mit zwei seitlich angeordneten Drahtbrücken auf der Grundplatte ein versetztes Einstecken verhindern.

Test der Grundplatte und der LED-Säulen

Für einen ersten Test schließt man das ausgeschaltete oder nicht eingesteckte Netzteil und den Mikrocomputer (Mikrocontroller) wie im Schaltplan zu Beginn des Artikels gezeigt an die Grundplatte an, in die noch keine LED-Säulen gesteckt wurden. In meinen Beispielprogrammen für den Ardunino verwende ich den Digitalport 6 für die Datenleitung.

Der Test läuft wie folgt ab:

  1. Netzteil einschalten oder einstecken und die Spannung von 5V an den Federleisten für die Säulen 4, 5, 14, 15, 24 überprüfen (die Numerierung ergibt sich aus dem Bild unten). Fehlt die Spannung an einer oder mehreren Stellen, sind Brücken und Leitbahnen zu überprüfen. Ansonsten Netzteil wieder ausschalten.
  2. Eine LED-Säule in die Position der Säule 0 einstecken, die Farbmarkierung an der Säule (rot/blau) muss mit der Markierung auf der Grundplatte übereinstimmen. Hier muss man sorgfältig sein, die LED-Säulen sind nicht verpolungssicher. Das Netzteil wieder einschalten.
  3. Die Arduino IDE am PC starten, im seriellen Monitor 115200 Baud und Kein Zeilenende einstellen. Dann den Mikrocontroller einschalten und das Programm NPW_uno1.ino aus unseren Downloads hochladen. Es sollte sich dann am seriellen Monitor melden und die Farbanimation Würfelumriss sollte starten.
  4. Am seriellen Monitor ein t eingeben, mit Senden oder <CR> übermitteln. Es wird das Wort Test am Monitor ausgegeben und alle LEDs der eingesetzten Säule sollten dann weiß leuchten, mal etwas heller und wieder dunkler.
  5. Wenn das funktioniert, kann man weitere LED-Säulen einsetzen. Dazu unbedingt das Netzteil jeweils aus- und wieder einschalten. Am besten immer fünf Säulen einbauen, auf senkrechten Stand justieren und nochmal den Funktionstest durchführen, bei dem alle LEDs der eingesetzten Säulen weiß leuchten.

Nach Abschluss dieser Arbeiten können die im Programm enthaltenen Animationen gestartet werden.

Tipps zur Fehlersuche

Das Programm muss im Testmodus oder in einer Animation laufen, dann werden laufend Signalsequenzen über den entsprechenden GPIO-Port ausgegeben.

Leuchtet gar keine LED, bekommt schon die erste (LED 0) kein Signal am Data IN. Dann GND und Leitung zum GPIO überprüfen sowie die korrekte Nummer dieses Ports.

Leuchten nur einige untere LEDs in der Säule und die weiter oben nicht, erhält die erste dunkle entweder kein Signal, hat keine Verbindung zu 5V oder GND (schlechte Lötstelle) oder ist defekt.

Hilfsschaltung zur Fehlersuche

Eine kleine Schaltung mit einem Widerstand etwa 5,6kOhm und einer LED (high efficiency) in Reihenschaltung hilft bei der Fehlersuche. Für einen ersten Fuktionstest dieser Konstruktion verbindet man die Klemmprüfspitze mit einen GND-Anschluss. Berührt man mit der Prüfspitze eine +5V führende Leitung, muss die LED aufleuchten.


Für die Fehlersuche verbindet man die Klemmprüfspitze mit einen GND-Anschluss auf der Grundplatte. Mit der Prüfspitze testet man die Datenleitungen von und zu den LEDs durch vorsichtiges Berühren der entsprechenden Anschlüsse. Liegt dort ein Signal an, sieht man die LED schwach flackern.

Gehäuse

Weil die kleinen LED-Säulen schnell verbogen sind, wenn man versehentlich daran stößt, sollte man zum Schutz ein Gehäuse vorsehen. In Bastelläden, Kunstläden, auch in manchen Baumärkten gibt es Acrylglaskugeln mit 15cm Durchmesser, die aus zwei Hälften bestehen. Beispielsweise kann man in der unteren die Grundplatte mit den LED-Säulen befestigen, die obere schützt dann gegen Berührung.

Eine andere Möglichkeit ist, die Grundplatte in einen Ring einzubauen und nur eine Acrylglashälfte zu nutzen. Ich habe mich für diese Variante entschieden. Leider spiegelt das Acrylglas recht stark, weshalb ich die Halbkugel für Fotos und Videos zum Teil abgenommen habe.

Arduino-Programm

Mein Programm für den Neopixelwürfel [7] zeigt einige Animationen und kann sicherlich noch optimiert und geschickter programmiert werden. Auch wurden manche Möglichkeiten der zugrunde liegenden Library FastLED [8] nicht genutzt. Zum Download gibt es verschiedene Versionen für verschiedene Boards.

Auf make-magazin.de gibt es ausführliche Anleitungen, wie man die Arduino-IDE installiert [9], dort Librarys (Bibliotheken) einbindet [10] und wie man den Boardverwalter für den ESP8266 [11] in die Arduino IDE installiert.

Das Programm arbeitet interaktiv. Während eine Animation läuft, können Befehle über den seriellen Monitor abgesetzt werden, die etwa die Geschwindigkeit der Animation bestimmen, den automatischen Farbwechsel an- und ausschalten, Farbeinstellungen und Richtung verändern. Am Programmanfang führt ein Kommentar-Feld die Befehle auf.

Folgende Animationen sind enthalten:

Farben und Helligkeit

Es werden drei Farbarten und das Hue-Saturation-Value-Farbmodell von FastLED verwendet. Alle Werte sind während des Programmablaufs einstellbar, werden aber bei einem Neustart wieder auf die Startwerte zurückgesetzt.

Durch die Unterscheidung in primäre und sekundäre Farbe sind auf einfache Weise zweifarbige Animationen möglich – so kann etwa bei der Schlange der Kopf eine andere Farbe haben als der Körper.

Beim Programmstart wird standardmäßig ein langsamer automatischer Farbwechsel für die Animationen eingeschaltet, der auf Wunsch abschaltbar ist.

Nummern der einzelnen Pixel in den 25 Säulen
LED-Nummerierung

Mit Ausnahme der mit Zufallszahlen gesteuerten Animation der Schlage und des Würfels werden in allen Animationen die LEDs über das Auslesen von Arrays geschaltet, in denen deren Nummer steht. Die LEDs sind wie in der Tabelle rechts oben gezeigt durchnummeriert, die Grafik darunter zeigt (zur Erinnerung) nochmal die Nummerierung der Säulen.

Koordinaten per Zufallszahlen

Da die oben erwähnte Schlange und der Würfel im Zufallsmodus keine fest programmierte Bahnen verfolgen, sondern per Zufallszahlen gesteuert werden, wird ein einfaches Koordinatensystem zur Positionskontrolle verwendet. Mit einer Übersetzungstabelle in einem Array im Programmcode werden dann die LEDS geschaltet.

Bei der Schlangenaninmation gibt es eine Spezialität: Wenn sich die Schlange in den Schwanz beißen müsste, um weiterzukommen, wird kurzeitig ein rotes Funkeln ausgelöst. Der Programmcode ist weitgehend kommentiert, ich hoffe das die gemischte Verwendung deutscher und englischer Begriffe und Wörter verständlich ist.

Schema des Programmablaufs
Programmübersicht

Das folgende Flowchart gibt eine Übersicht über das Programm. Es besteht aus einer Ablaufsteuerung, einen Eingabeteil für Befehle und den Animationsprogrammteilen als Funktionen. Zentraler Teil ist in der Hauptschleife (void loop()) der Programmteil millis, über den andere Programmteile und Funktionen aufgerufen werden. Wer mit der Arduino-Programmierung vertraut ist, kann das Gerüst zur Realisierung eigener Animationen nutzen. Und jetzt: Viel Spaß beim Löten, beim Programmieren und beim Vorführen und Betrachten des eigenen Neopixelwürfels! Wenn Sie Ihren eigenen Würfel erfolgreich zum Laufen bekommen haben, schicken Sie bitte eine Mail, Fotos oder Videos an mail@make-magazin.de [12] – und gerne auch Code für eigene Animationen. (pek [13])

Schema des Programmablaufs
Mehr zum Thema

URL dieses Artikels:
http://www.heise.de/-4484515

Links in diesem Artikel:
[1] http://fastled.io/
[2] https://github.com/MakeMagazinDE/LED-Cube
[3] https://www.heise.de/make/artikel/Make-Projektdateien-auf-Github-finden-und-herunterladen-4312511.html
[4] https://learn.adafruit.com/adafruit-neopixel-uberguide
[5] https://www.heise.de/bilderstrecke/bilderstrecke_4489000.html?back=4484515
[6] https://www.heise.de/bilderstrecke/bilderstrecke_4489000.html?back=4484515
[7] https://github.com/MakeMagazinDE/LED-Cube
[8] https://github.com/FastLED/FastLED/wiki/Overview
[9] https://www.heise.de/make/artikel/Starthilfe-fuer-die-Arduino-IDE-3226852.html
[10] https://www.heise.de/make/artikel/Arduino-Bibliotheken-einbinden-und-verwalten-3643786.html
[11] https://www.heise.de/make/artikel/ESP-Boards-mit-der-Arduino-IDE-programmieren-4130861.html
[12] mailto:mail@make-magazin.de
[13] mailto:pek@ct.de
[14] https://www.heise.de/developer/artikel/Von-Erleuchtungen-und-Lichterketten-3277261.html
[15] https://www.heise.de/developer/artikel/Arduino-goes-ESP8266-3240085.html