LED Strip Matrix Animationsoftware für Arduino und Teensy

LED Strip Matrix Animationsoftware für Arduino und Teensy - Control-LED

Oft werden Schaufenster oder Tresen mit leuchtenden LED Strips verziert. Im Internet gibt es verschiedene Variationen von LED Strips zu kaufen. Es gibt die 5V Ausführung, bei der jede LED adressierbar ist, sowie die 12V Ausführung, bei der 3 LEDs in Serie adressiert werden.

Für den kostengünstigen Anschaffungspreis ist die Verarbeitung und Robustheit der LED Strips sehr gut. Die LEDs sind in Serie geschalten und können an den vorgesehenen Anschlussstellen voneinander getrennt werden. Dadurch können die LED Strips auf kreative Weise den Raum beleuchten.

 

Ah okay, das hört sich cool an. Wie willst du dein Zimmer beleuchten?

 

Ich möchte mit den LEDs eine Anzeigetafel aufbauen, mit der ich Animationen und Lauftexte anzeigen kann. Das sieht schön aus und macht Spaß zu programmieren. Außerdem habe ich bereits ein ähnliches Projekt in der Vergangenheit gemacht. 8x12 RGB Matrix . Darauf kann ich aufbauen. Diesmal soll die LED Anzeige größer werden.

 

In dem Projekt hast du einzelne LEDs benutzt und keine LED Strips. Wie wird die Anzeige jetzt angesteuert?

 

Die LED Strips werden mit einem Microcontroller angesteuert. Dafür eignet sich ein einfacher Arduino Nano. Jedoch wird mit zunehmender Länge der LED Strips eine größere Speicherleistung des Microcontrollers erforderlich.
Welcher Microcontroller für dein Projekt in Frage kommt, klären wir nachher. Vorerst möchte ich dir meine Software vorstellen, sowie das Funktionsprinzip kurz erläutern. Das Programm für die Anzeigetafel ist aufgrund der Vielzahl von LEDs mühselig zu schreiben. Ein Bild benötigt mehrere Pixelpunkte, die alle im Speicher gesetzt werden müssen. Manuell alle Punkte zu setzen ist sehr aufwändig und wenig professionell.

Abhilfe habe ich durch meine LED Control Software schaffen können. Mit einer grafischen Oberfläche lassen sich die Pixelpunkte setzen, speichern und wieder löschen. Das Programm läuft unter Windows und Linux. Die Übertragung auf den Microcontroller erfolgt mit der seriellen USB Verbindung.

 

Das Programmieren der LED Strips ist dadurch einfach und ohne Programmierkenntnisse möglich.

Ok, das bedeutet ich benötige den Arduino Sketch und die LED Control Software aus diesem Post und kann direkt loslegen?

 

Nein, ganz so einfach ist es nicht. Du musst den Sketch auf die Größe deiner LED Anzeige anpassen. Zusätzlich müssen Einstellungen in der config.txt gemacht damit das Python Programm mit deinem Microcontroller kommuniziert. Die Einstellung sind in 10 Minuten gemacht und ich erklär die Schritt für Schritt, was du im Detail verändern musst.

Das hört sich ja kinderleicht an. Ich will die LED Anzeigetafel nachbauen!

 

Okay, dann les dir die nachfolgenden Abschnitte gründlich durch. Falls du Fragen zu dem Projekt hast oder nicht weiter weist, beantworte ich dir deine Fragen gerne in den Kommentaren oder per Email. 

 

 

1. LED Strips platzieren und verkabeln:

 

►Schneide die LED Strips in gleichlange Streifen.

►Befestige die LED Strips auf einer Unterlage. Ich habe dafür ein Brett genommen.

>►Verlöte die Leitungen GND nach GND, 5V nach 5V und Daten nach Daten. Beachte die korrekte Datenrichtung. Die zertrennten Strips müssen in Pfeilrichtung verbunden werden.

 

Datenrichtung LED Strips

 

►Schließe an den Anfang der LED Strips ausreichend lange Kabel an und crimpe einen 3 poligen Steckverbinder an die Kabel. (Crimpverbindungen raussuchen...). Die LED Ketten sollten nicht zu lang sein, da die Spannung bei zunehmender Länge sich langsam verringert, sowie die Datenübertragung länger dauert. Ich habe nach ca. 100 LEDs nicht mehr in Serie geschalten sondern parallel an den Anfang. Für die Daten habe ich einen weiteren Output benutzt. Insgesamt habe ich für 660 LEDs, 4 Ausgangskanäle am Microcontroller gelegt. Mit den Kondensatoren zwischen Vcc und GND lässt sich zwar der Spannungseinbruch etwas verringern, jedoch hilft das bei einer bestimmten Länge nicht mehr viel.

Datenleiltungen

 

2. Auswahl des geeigneten Microcontrollers

 

Wie am Anfang des Beitrags bereit geschrieben, wird für lange LED Strips viel Speicher benötigt. Der benötigte Speicher kann rechnerisch ermittelt werden:

In der LED Control Software können 34 Farben gesetzt werden. Sie werden als 2 stellige Dezimalzahlen an den Microcontroller übermittelt. Ein Bild benötigt demnach 2bytes/LED, die seriell über den USB Ausgang des PCs an den µC übertragen werden.

Dazu kommt das Setzen der LED Farben auf dem Strip. Die Aufgabe übernimmt der Microntroller. Das Datenprotokoll zur Ansteuerung der LED Strips benötigt 3 bytes/LED, da jede LED 256 Helligkeitsstufen der RGB Farben als Einstellwert benötigt.

 

Datenfluss PC Microcontroller

Der Microcontroller muss demzufolge 5bytes/LED bis zum nächsten Umschalten des Bildes speichern. Diese Anzahl an Bytes wird im SRAM (static random memory access) gespeichert, da dieser Speicherplatz für wechselnde Variablenwerte(i.d.F. LED Farbwerte), reserviert ist. Sobald der Microcontroller ausgeschaltet wird, löschen sich die Werte. Dieser Speicher ist nicht zu verwechseln mit dem Flashspeicher. Der Speicher ist für den Sketch reserviert. Die folgende Skizze verdeutlich den Datenfluss zwischen PC-µC und µC-LED Anzeige.

Die Rechnung lautet also: 5 bytes x Anzahl LEDs = Anzahl Speicher In meinem Projekt steuer ich 660 LEDs an was einen SRAM von 5 x 660 LEDs = 3.3 kb benötigt. Der Arduino Nano hat nur 2kb, weshalb er für die Anzahl an LEDs nicht möglich ist.

Auf der Suche im Internet nach Alternativen für den Arduino habe ich das Teensy Board entdeckt. Es ist leistungsstärker als der normale Arduino und zudem billiger als der Arduino Mega. Für 20 Euro habe ich mir einen Teensy bestellt.

Der Teensy 3.2 ist schnell, funktioniert zuverlässig und hat ausreichend SRAM Speicher. Die Boardinformationen für die Erstellung der Build Datei können in die Arduino IDE integriert werden. Dafür stehen auf der Herstellerseite des Teensy Boards die nötigen Addins zum Download bereit. Die Installation ist gut dokumentiert und hat bei mir einwandfrei funktioniert.

Welchen Microcontroller brauche ich jetzt? Es soll funktionieren und das mit der kostengünstigsten Methode!

 

Das ist abhängig von der Anzahl der LEDs. Für 2 x 5 Meter LED Strips sollte ein Arduino Nano oder Uno ausreichend sein. Solltest du mehr als 300 LEDs (1x 5m Rolle) ansteuern wollen würde ich dir einen Teensy raten, da der Arduino an seine Speichergrenzen stößt. Für kleinere LED Anzeigen reicht der Arduino aus.

 

3. Platine für die Elektronik erstellen

 

Die Bauteile sind nun alle angekommen. Dann wird es Zeit die Platine zu erstellen. Ich habe die Schaltung auf einer Lochrasterplatine zusammengebaut.

Im Anhang unter dem Post, findest du den Schaltplan.

Die Datenleitungen der LED Strips kannst du mit einer Steckverbindung auf der Platine platzieren.

Bei den Ausgangspegeln des Teensy verhält es sich gleichermaßen. Bei einem HIGH Signal liegen 3,3V an und bei einem LOW 0V. Die auf dem LED Strip integrierten WS2812b LED Treiber, arbeiten jedoch mit 5V Pegeln. Es gibt 2 Möglichkeiten das Problem für den Teensy zu lösen. Entweder mit einem Pegelconverter von 3,3V auf 5V, was ich gemacht habe... oder..

...was schneller geht und gar keinen Unterschied macht...

die Betriebsspannung des Netzteils der Versorgungsspannung der LEDs mit dem Poti auf ca 4,4V-4.5V einstellen. Die Referenzspannung für die HIGH und LOW Signale der WS2812B Treiber fällt dabei ebenfalls und der HIGH PEGEL des Teensy von 3,3V wird von dem Treiber als HIGH erkannt.

Warum brauche ich überhaupt den FTDI Converter? Ich kann doch einfach über die serielle Verbindung, über die ich den Arduino/Teensy programmiere auch die Daten über den seriellen Monitor senden.
 

 

Ja das stimmt schon. Damit kannst du die Daten senden. Leider ist der serielle Input Puffer dieser Leitung auf 64byte begrenzt. Wie vorhin erwähnt, schickt die LED Control Software pro LED 2byte. Damit könntest du 32 LEDs ansteuern und der Speicher wäre voll. Damit die Verarbeitung der Daten nicht zu kompliziert wird, ist es einfacher die HardwareSerial UART Ports des Arduino/Teensy zu benutzen. Für diese Ports kann der Speicherplatz für eingehende Daten bis zum maximalen physikalische RAM definiert werden. In meinem Projekt habe ich den Input Speicher von voreingestellten 64kb auf 2048kb gesetzt.

Zusätzlich sind die Datenpakete ausgehend vom PC als USB Signale bekannt. Die Microcontroller arbeiten jedoch mit TTL Levels. Der FTDI Stick wandelt die USB Signale des PCs in TTL Levels (3,3V oder 5V) um. Eine direkte Verbindung des USB Kabels an den Microcontroller ist demnach nicht möglich.

 

4. Arduino/Teensy Sketch einstellen

 

Der Teensy lässt sich mit der Arduino IDE programmieren. Dafür wird der Teensyloader und die Software Teensyduino benötigt.

Der Teensyloader wird für die Programierung des Teensys benutzt. Um Sketches auf den Teensy zu laden können, muss der Teensy in den "Programm Mode" gesetzt werden. Diese Aufgabe übernimmt der Teensy Loader.

Auf der Herstellerseite findest du die Doku, wie der Teensyloader installiert werden muss.
https://www.pjrc.com/teensy/loader.html

Der Teensyloader ist mit der Arduino IDE verknüpft, weshalb bei jedem Sketch Upload, der Teensyloader automatisch gestartet wird.

Als nächstes benötigst du das AddIn Teensyduino. Es implementiert die nötigen Boardinformationen der Teensy Microcontrollereihe in die Arduino IDE. Die Doku hierzu, findest du auf der Herstellerseite.
https://www.pjrc.com/teensy/teensyduino.html
 

Ok, ich habe alles installiert und die Arduino IDE erneut geöffnet. Wo kann ich jetzt den Teensy als Microcontroller einstellen?

 

Schau mal unter dem Reiter "Werkzeuge-Board". Da stehen jetzt neben den Arduino Boards auch die Teensy Boards!

Nachdem du alles nötige installiert hast um den Sketch zu kompilieren und auf das Board des Teensys zu flashen, beginnen wir jetzt mit den Sketch Einstellungen:
 

►Lade dafür den Sketch Serial_Teensy_Python.rar im Anhang herunter und öffne den Sketch in der Arduino IDE.

 

►Downloade die FastLED 3.1 Library vonGithub. Es beinhaltet die FastLED library für den Teensy. Die Arduino FastLED library findest du im Bibliothekmanager. Dort kannst du die aktuelle Version downloaden.

 

►Entpacke die ZIP datei in den library Ordner des Teensys C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries. Während der Installation des Teensyduino wurde der Ordner ...\hardware\teensy\... erstellt. Für den Arduino ist die library unter ...\hardware\arduino\... zu finden.

 

►Wechsel in den Ordner C:\Program Files (x86)\Arduino\hardware\teensy\avr\cores\teensy3
(Teensy) 
C:\Program Files (x86)\Arduino\hardware\teensy\avr\cores\arduino 
(Arduino) und öffne die Datei HardwareSerial1.cpp und ändere die Zeile in: #define SERIAL1_RX_BUFFER_SIZE 2048. Damit änderst du den SRAM für den seriellen Input Buffer auf 2048bytes.

 

►Wechsel wieder in den Sketch.

 

►Trage die Anzahl der LEDs ein:

#define NUM_LEDS 680        			//Setzt die Anzahl der LEDs

►Trage die Anzahl der Zeilen und Spalten ein:


#define num_rows 20                 //Setzt die Anzahl der Zeilen
#define num_cols 34                 //Setzt die Anzahl der Spalten

►Lege die Ausgangspins zu den Datenleitungen der LED Strips fest. Das sind die Teensy Pins an denen die Datenleitungen der LED Strips angeschlossen sind. Die Werte beziehen sich auf meine LED Anzeige! Änder die Anzahl und den Datenkanal auf deine Schaltung. Wie du siehst, sind bei mir 204 LEDs über einen Kanal angesteuert.

 

FastLED.addLeds(leds, 0, 204);                //A9 = Datenleitung; 0 = erste LED im Kanal; 203 = letzte LED im Kanal
FastLED.addLeds(leds, 204, 408);				//A8 = Datenleitung; 204 = erste LED im Kanal; 407 = letzte LED im Kanal
FastLED.addLeds(leds, 408,544);				//A7 = Datenleitung; 408 = erste LED im Kanal; 543 = letzte LED im Kanal
FastLED.addLeds(leds, 544, 680);				//A6 = Datenleitung; 544 = erste LED im Kanal; 679 = letzte LED im Kanal

♦Beachte: Die Aufzählung der LEDs beginnt programmtechnisch bei 0!

Wie finde ich die Bezeichnung meiner Pins raus?

 

Google nach Teensy oder Arduin Pinout. Die Pinbezeichnungen werden in Grafiken dargestellt.

Sobald du alle Einstellungen gemacht hast, kannst du den Sketch auf den Teensy/Arduino uploaden.

Falls es nicht funktioniert, kannst du mir gerne eine Email schreiben, dann kann ich dir weiterhelfen. 

 

5. Animationssoftware einstellen

 

►Downloade und entpacke die LED_Control_Software.rar aus dem Anhang am Ende des Posts.
Damit die Software mit dem µC richtig kommuniziert, müssen Variablen in der config.txt eingestellt werden.

►Öffne die Datei config.txt

►Trage hinter "anzahl_zeilen = " die Anzahl der Zeilen und hinter "anzahl_spalten = " die Anzahl der Spalten der LED Anzeige ein.

►Ändere die variable pathname in den Pfad um, indem auf deinem PC der Ordner animationengespeichert ist.
Achte darauf die Pfadstruktur C:/../LED_Tafel_v3/animationen/ nicht zu verändern.

►Gebe den COM_PORT an, an den der FTDI Converter angeschlossen ist. Die Nummer des COM Port findest du unter Start-Systemsteuerung-Geräte Manager-Anschlüsse (COM & LPT).

COM Port FTDI Converter

 

♦Die "screen_width = " (Fensterbreite) kannst du beliebig ändern, je nachdem welche Auflösung dein Bildschirm hat.

►Wechsel in den Ordner der LED_Control_Software und starte das Programm durck Klicken auf LED_Anzeige.exe Die Verbindung zum µC wird nun aufgebaut und das Programm startet.

 

6. Animationssoftware benutzen

 

Nachdem die Software gestartet, hast siehst du die Oberfläche und die Konsole. In der Konsole ist der verundenen COM-Port aufgelistet. Sollte der COM-Port in der config.txt falsch benannt sein, schließt das Programm nach dem Start direkt wieder. Du kannst die Software ohne Microcontroller benutzen indem du in der config.txt bei der Variablen den Wert None gibst. (COM_PORT = None).

Die Oberfläche ist selbsterklärend.

Neue Animationen können durch den Klick auf "Neue Animation" erstellt werden. Dabei öffnet sich die Tabelle und die Farbauswahl auf der linken Seite. Die Farben werden mit Linksklick gewählt und können durch das Anklicken auf die Zellen gesetzt werden. Dabei können mit gedrückter Maustaste auch Muster gezogen werden.

Mit der Funktion "Zeiteinstellung" wird die Umschaltzeit zwischen LED Bildern eingestellt. Es kann zwischen 0.02s und 2s gewählt werden

Über den Reiter "Animationen" werden die erstellen Animationen aufgerufen, sowie über Animation anzeigendargestellt. Die gespeicherten Animationen werden als HEX Zahlen in den Textdateien im Ordner "animationen" gespeichert und können durch das ändern des Textnamen umbenannt werden.

Das Starten eines Textes oder der Uhrzeit erfolgt durch das Klicken auf "Start Schrift". Dadurch wird der Text der in der config.txt neben der Variablen "text" eingetragen wird abgespielt. Wenn dort "text = Uhrzeit" eingetragen ist, läuft die aktuelle Uhrzeit ab.

So, das wars. wink Wenn dir das Projekt gefällt, würde ich mich freuen wenn du einen Kommentar hinterlässt.  smiley

 

Bauteilliste:

 

Bauteil Beschreibung Link
Teensy 3.2 ARM Cortex A4 Entwicklerboard amazon* affiliate
Bestellen
Netzteil 5V Netzteil 5V/200Watt/40A amazon* affiliate
Bestellen
RGB LED Streifen WS2812B LED Streifen amazon* affiliate
Bestellen
FTDI 232RL Converter USB to UART/TTL Level Signal Converter 5v/3,3V amazon* affiliate
Bestellen
10x Pegelconverter 3,3V -5V Logic Level Shifter Bidirectional 3.3V <-> 5V amazon* affiliate
Bestellen
Elektrobauteile 4x 300 Ohm Widerstand, 4x 1000µF Kondenstator  
Elektroaurüstung Lochrasterplatine, Kabel, Stecker