Eine LED Matrix ist ein Feld aus LEDs. Wenn man mehrere LEDs zum Leuchten bringt, können Buchstaben oder andere Zeichen dargestellt werden. Der Schaltplan wird an einer 3x3 Matrix erklärt, die Funktionsweise ist aber bei allen Größen gleich. Das Prinzip ist ganz einfach: Alle Kathoden einer Reihe werden miteinander verbunden und alle Anoden einer Spalte werden ebenfalls miteinander verbunden. Eine 3x3 Matrix hat also insgesamt sechs Anschlüsse, eine 5x5 Matrix hat zehn, und so weiter. Des weiteren wird jeder dieser Anschlüsse mit einem digitalen Ausgang des Arduino verbunden. Ich habe für meine 3x3 Matrix die Anschlüsse D2 bis D7 gewählt. Da ein Pin eines Arduino Uno (wenn dieser "HIGH" geschrieben ist) eine Spannung von 5V zur verfügung stellt, wurden noch drei 330Ω Widerstände verwendet, um die Spannung zu reduzieren, damit die LEDs nicht beschädigt werden. Das Bild unter dem Schaltplan soll dabei helfen, den Überblick über die Polung der LEDs zu behalten.
Wenn keine LED leuchten soll, sollten alle Pins, die an die Kathoden der LEDs angeschlossen sind HIGH gesetzt werden und die Pins an den Kathoden LOW. Um jetzt eine LED zum leuchten zu bringen, muss nur der Zustand der Pins geändert werden, an die die LED angeschlossen ist. Beipiel: Die blau markierte LED soll leuchten. Sie ist an Pin D4 und D5 angeschlossen, deshalb muss jetzt nur der Zustand dieser beiden Pins geändert werden.
Pin |
Alle aus |
Blau leuchtet |
Grün leuchtet |
Fehler |
D2 |
LOW |
LOW |
HIGH |
HIGH |
D4 |
LOW |
HIGH |
LOW |
HIGH |
D6 |
LOW |
LOW |
LOW |
LOW |
D3 |
HIGH |
HIGH |
HIGH |
HIGH |
D5 |
HIGH |
LOW |
HIGH |
LOW |
D7 |
HIGH |
HIGH |
LOW |
LOW |
Wie man sich sicherlich denken kann, kommt eine LED Matrix erst richtig zur Geltung, wenn man auch mehrere LEDs gleichzeitig leuchten lässt. Wir wollen jetzt beispielsweise mal die grüne und die blaue LED zum leuchten bringen. Das geht aber nicht einfach indem man mehr als zwei Zustände der digitalen Ausgänge des Arduino ändert. Dann sieht das nämlich so aus, wie in der Spalte mit der Überschrift Fehler. Nun werden zwar die grüne und die blaue LED leuchten, aber zusätzlich werden auch die beiden rot markierten LEDs leuchten.
Um dennoch beide LEDs zum leuchten zu bringen, muss man bei der Programmierung etwas beachten: Es werden niemals zwei LEDs gleichzeitig leuchten! Der Trick ist, dass mein eine LED zum leuchten bringt, dann eine Millisekunde wartet (delay(1);) und dann die andere LED erleuchten lässt. So sieht es für das menschliche Auge so aus, als würden beide LEDs gleichzeitig leuchten, in Wahrheit blinken sie aber nur extrem schnell. Auch das ist bei allen Matrizen gleich. Das funktioniert bei einer 3x3 Matrix und auch noch bei einer 16x16 Matrix.
Bau einer Matrix
Jetzt, wo wir verstanden haben, wie eine LED Matrix funktioniert, können wir damit beginnen unsere eigene Matrix zu bauen. Die folgenden Bilder zeigen zwei Matrizen, die ich gebaut habe. Eine 3x3 Matrix und eine 5x5 Matrix. Beide haben Vor- und Nachteile: Eine kleinere LED Matrix kann schneller gebaut werden und erfordert weniger Material. Allerdings kann man auf ihr Buchstaben nicht so gut darstellen, wie auf einer größeren Matrix. Ein "H" und ein "M" sehen auf einer 3x3 Matrix genau gleich aus, auf einer 5x5 Matrix kann man die Unterschiede aber deutlich erkennen. Außerdem ist die Programmierung einer 3x3 Matrix einfacher, als die einer 5x5 Matrix, da im Programmcode vier Ausgänge weniger beschrieben werden müssen.
Programmierung
Programme für LED Matrizen können sehr groß werden, da man für jede einzelne LED viele Befehle braucht. Bei einer 3x3 Matrix sechs Änderungen mit dem Befehl digitalWrite und bei einer 5x5 Matrix sogar zehn. Was für Ausmaße das schon bei einer 3x3 Matrix mit einer einfachen Funktion annehmen kann, zeigt das Programm Lauflicht (Siehe unten). Dort wurde für jede LED eine Methode geschrieben. Man kann das Programm kürzen, wenn man die nötigen digitalen Ausgänge und die benötigten Zustände in einer Array speichert (Eine Array ist eine Gruppe aus Variablen, die unter einem Namen zusammengefasst werden. Mit Arrays kann man sehr viele Variablen ohne großen Aufwand deklarieren. Das macht das Programm kürzer und übersichtlicher. Für genauere Informationen einfach mal Google verwenden). Dadurch wird der Programmcode zwar viel kürzer, aber das Programm ist schwieriger zu verstehen. Ein Beispiel für das Programmieren mit Arrays ist das Programm Wortausgeber (Siehe unten).
Erweitern des Projekts
Wie auf dem Foto von der 5x5 Matrix zu sehen ist, habe ich auf das Shield neben den LEDs noch ein Steuerkreuz gebaut (Siehe
Schalterpad) und außerdem einen Resetbutton, da der auf dem Arduino durch das Shield verdeckt wurde. Um einen Arduino zu resetten, einfach den Reset-Pin mit GND verbinden. Mit dem Steuerkreuz kann man kleine Spiele steuern: Man kann beispielsweise einen Punkt steuern, der einen zufällig erzeugten Punkt fangen muss (Siehe unten).
Downloads
Arduino Programme:
- 3x3 Matrix Lauflicht:
hier
- 5x5 Matrix Wortausgeber:
hier
- 5x5 Matrix Fangspiel:
hier