LED cube

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

LED Cubes sind ein sehr beliebtes Projekt, dabei gehen die Größen von 3x3x3 bis hin zu über 10x10x10 mit RGB LEDs. Ich liege mit meinem Projekt (8x8x8 einfarbig) mittendrin und möchte hier für Interessierte einige Tipps und Anregungen geben, sei es beim Bau als auch beim Sourcecode.

Ledcube 2 480.jpg

Hier der Würfel in Aktion (v1.2 komplett mit space invaders und ohne GEMA-Zensur):

http://youtu.be/8Gb1SqbHcfk

http://www.youtube.com/watch?v=68BqC6qhNoM (1.0, GEMA-Zensiert)

Randdaten

  • 512 blaue LEDs
  • ATMega32
  • sehr schneller Code
  • umfangreiche Animationen
  • ca. 1/2 ASCII Support

Todo (eventuell auch erst beim Nachfolger)

  • Musiksteuerung
  • SD Card + Simple PC-Software für Animationen

Benötigte Teile

Ich habe folgendes verbaut, hier kann natürlich nach belieben modifiziert werden.

Gehäuse

  • 2 Spanplatten 10x250x250mm
  • 2 Spanplatten 10x250x40mm
  • 2 Spanplatten 10x230x40mm
  • Schwarzes Lackspray
  • 1 Plexi grau getönt 3x250x250mm
  • 2 Plexi grau getönt 3x230x250mm
  • 2 Plexi grau getönt 3x230x244mm
  • Plexikleber
  • Sonstiges (Schrauben, Heisskleber, Kältespray, etc.)

Cube

  • 600 blaue 3mm LEDs ultrahell, klar (mehr dazu nachher)
  • ca. 24m 0,6mm Silberdraht

Teile der Schaltung an sich folgen weiter unten.

Bau

LEDs

Zuerst der Bau des Würfels selbst. Am besten beginnt man damit, ein Raster auf die Grundplatte (250x250mm) zu zeichnen, ich habe für meinen Würfel je 30mm Abstand gewählt, da ich so die volle Anodenpinlänge ausnutzen konnte. In dieses Raster bohrt man nun 3mm Löcher, um eine Art Montageschablone zu erstellen.

Damit kann man dann die 8 Ebenen erstellen. Bei meinem LED cube habe ich die Anoden gerade stehen lassen, die Kathode ca. 3-4mm über dem Gehaeuse abgeschnitten und längs mit dem Silberdraht verlötet. Quer dazu habe ich pro Ebene 4 Leitungen Silberdraht gelegt. Hier ein Bild davon:

Ledcube 6 480.jpg

Auf jede der LEDs habe ich einen kleinen Tropfen weisse Farbe gelegt, dadurch wird zum einen der Punkt besser sichtbar, zum anderen wird die Strahlwirkung auf die darüberliegende LED vermindert. Diffuse LEDs gingen genauso, sind aber erheblich teurer.

Nachdem man alle LEDs durchgetestet hat (es empfiehlt sich, dies mehrere Stunden zu tun, da vor allem nichtselektierte billig-LEDs nach einiger Zeit gerne ausfallen), kann man die Ebenen zusammenlöten. Dazu werden die Anoden vertikal miteinander verlötet, im gleichen Abstand wie die LEDs im Raster zueinander. Die Verschaltung wird hier - für einen 3x3x3x Würfel - erklärt:

Sockel

Anschliessend wird die Grundplatte (die mit den Löchern) schwarz lackiert, das mindert Reflexionen. Der Würfel wird dann durch diese Platte gesteckt, so dass der Gehäuseboden der untersten LEDs etwa 10mm von der Grundplatte entfernt ist. Um alle 64 Pins in die Löcher zu bekommen, hilft eine dünne Stange und viel Geduld. Wenn man das geschafft hat, kann man den Würfel von der Rückseite mit etwas Heisskleber in den Löchern fixieren (Hitze an den LEDs -> Kältespray). Dann fehlen noch die Leitungen der jeweiligen Massen der Ebenen, die man idealerweise hinten führen sollte, wie in diesem Bild:

Ledcube 9 480.jpg

Die restlichen Gehäuseteile werden natürlich auch schwarz lackiert und geklebt bzw. geschraubt.

Haube

Die Plexiglasteile sollte man zuschneiden lassen, sofern man nicht die richtigen Maschinen dazu besitzt (Stichsäge oder Handsägen gehören nicht dazu). Die Schnittkanten sind aber auch dann noch etwas rauh, man sollte sie daher polieren (lassen). Zuhause geht das mit etwas Schleifpapier (600, 1000) und Schleifpaste, alles aus dem Autozubehör. Alle Teile kann man dann zur Haube zusammenkleben. Um die Haube auf die Grundplatte schraubbar zu machen, klebt man einfach 4 PVC-Quader mit Löchern in die man sie von der Unterseite der Grundplatte aus festschrauben kann.

Das wär's schon fast mit dem Würfel selbst, praktisch sind noch 9 8-polige Stecker an den Leitungen.

Controller

Der Controller für den Würfel basiert auf einem ATMega32. Ein Schaltplan dafür ist hier zu finden:

Dabei ist PORTC für die Ebenen zuständig, PC0 ist unten, PC7 oben. PD0 bzw. Q0 sind die vorderen LEDs bis PD7 hinten. PA0 bzw. U9 ist dann die linke Reihe bis zu PA7 rechts.

Teile dafuer:

C1, C3: 22p
C2: 10p
C4: 100u
C5: 0.33u
C6-C11: 100n
P1: 2 pin Header (Stromversorgung)
P2: 2x5 pin Header (ISP)
P3: 8 pin Header (gemeinsame Masse jeder Ebene)
P4-P11: 8 pin Header (vertikal verkabelte Anoden)
Q1-Q8: N-MOSFET (egal, mindestens 0,5A. z.B.: IRLZ34N IRLU2905, IRLIZ44N)
R1: 100k
R2-R9: ~1k (passend zum FET)
R11-73: Vorwiderstände, so bemessen, dass jede LED mit 8,75mA läuft
U1: 7805
U2-U9: 74HC573
IC1: ATMega32
X1: 16MHz

Die 8,75mA sind notwendig, weil der 74HC573 nur max. 70mA auf allen Ausgängen zusammen sourcen kann. Bei einer superhellen LED reicht das aber aus.

Da dieser Punkt immer wieder unklar ist: die 8.75mA müssen wirklich mit der jeweiligen LED ausgemessen werden oder es muss im If/Uf-Diagramm der LED der Arbeitspunkt konstruiert werden. LEDs sind keine linearen Bauteile, deshalb sind Werte nach Methode R = (5V-Uf) / 8.75mA bei einer 20mA LED deutlich zu klein.

Da während des flashens die Latches und FETs unkontrolliert schalten können, kann man noch mittels eines Jumpers die FETs von der Masse trennbar auslegen, um Überlastung zu verhindern.

Aufgebaut habe ich alles auf einer kleinen Lochrasterplatine, das sieht so aus:

Ledcube 10 480.jpg

Software

Die Software ist für AVR-GCC in C geschrieben. Download hier:

Ich habe den kompletten Cube in einem uint8_t 8x8 Array organisiert, die 8 Bits jedes Elements sind die 3. Achse. In Verbindung mit dem Controller können so die Variablen direkt auf den entsprechenden Port gelegt werden, was die Ausführung sehr schnell macht. Die Routine ist recht simpel: die 64 Ausgangspegel an den 74HC573 werden gesetzt, dann wird die entsprechende Ebene für eine kurze Zeit durch den entsprechenden n-MOSFET aktiv geschaltet. Die Ausführung davon erfolgt über eine Interrupt-Routine oder über eine Schleife, da in einigen Animationen die ISR die Animation mittendrinnen erwischt und so ungewolltes Flackern erzeugt. Die restlichen Animationen greifen dann nur noch auf dieses globale Array zu. Am besten einfach den Code ansehen.

Was aufgefallen ist/weitere Hinweise

  • Live sieht alles natürlich viel besser aus :)
  • Der ATMega32 stösst hier schon ziemlich an seine Grenzen. Für aufwendigere und komplexere Würfel sollte man besser einen anderen Controller wählen.
  • Für das Zusammenlöten der Ebenen empfiehlt es sich, die Löttemperatur auf ca. 210-220°C herunterzuregeln, damit das Zinn nicht so leicht wegfliesst.
  • Man könnte diesen Wuerfel direkt per USB betreiben (max. 500 mA), was natürlich auch eine direkte Datenanbindung interessant macht.

Downloads & Links

Projektseite auf meiner Website: