LightBox

Allgemein

Diese Seite beschreibt den Bau einer LightBox die per DMX angesteuert werden kann. Die Idee der LightBox ist das ON-AIR-Schild das typischer weiße Teil der Livestreams war.

image-1636776025317.jpg

Anforderungen für die LightBox sind:

  • leichter Wechsel der Frontseite mit Folierung für verschiedene Veranstaltungen (Bandworkshop, Rocknacht, Scheune)
  • kompakte Abmessung
  • Anpassbarkeit der Helligkeit
  • Plug&Play - Strom an und los geht es
  • opt. Ansteuerung über DMX 

image-1636775884135.jpg

Konzept der Box

Die Box sollte so simple wie möglich sein. Ein Holzrahmen mit Führungsfugen welche die Rückplatte und die Frontplatte halten. 

Abmessungen: 1000mmx200mmx412mm 

Materialwahl: 

  • Holzrahmen - Multiplex 12mm
  • Rückplatte -  Speerholz mit weißer Beschichtung auf einer Seite
  • Frontplatte - Polystyrolplatte als Diffuser mit Folierung (es werden die Buchstaben ausgeplottet) 

Technik für Beleuchtung und Steuerung

  • Led-Strip WS2812 - etwas Overkill, da jedes LED einzeln angesteuert werden kann. Option für Zukünftige Workshops des Medienwochenende von Sandra, LEDs zu programmieren. GIbt es auf Amazon in verschiedenen Ausführungen.
  • 5V 90 Watt Netzteil - in diesem Fall von Amazon
  • Kaltgeräte EInbaustecker
  • Ardurino Nano - ich nutze hier die V3 von AZDelivery
  • MAX-RS485 - Modul 
  • DMX-Female Stecker
  • Breadboard
  • div. Kabel 

Steuerung der LEDs per Arduino Nano

Jede LED (WS2812) besitzt einen eigenen Chip zur Ansteuerung. Das LED Stipe hat 3 Anschlüsse Ground, Data, und  + bzw. 5-Votl Spannung. Achtung die Data ist eine DaisyChain und richtungsabhängig. Das Signal vom Arduino muss in Data-In (DI) gehen. 

Die Ansteuerung der LEDs ist mit der Bibliothek FastLed simple:

  1. Öffnen der Arduino IDE
  2. Installieren der Bibliothek FastLed. Hierzu Werkzeuge/Bibliotheken verwalten..../ - FastLed suchen - Installieren - schließen
  3. Der Code um die LEDs der Reihe nach zum Blinken zubringen sieht dann so aus:

#include <FastLED.h> //Einfügen der Bilithek FastLED in das aktuelle Projekt

// Wie viele LEDs sind in deinem LED Stripe ?
#define Number_Leds 280
// Über welchen PIN soll das Datensignal für die LEDS ausgegeben werden ?
#define Signal_Pin 6
// Jedes LED kann einzeln Angesteuert werden und hat eine einzelne Farbe.
// Die Farbe jeder LED wird hier in einer Liste(Array) LEDs[] des Dateityps CRGB gespeicehrt.
// Die Zahl innerhalb der Eckigen Klammer [] gibt die Anzahl der Elemente in der Liste an
CRGB LEDs[Number_Leds];

// Setup Funktion
void setup() {
// Setup of LED-Strip WS2812n
// Welcher Chip Typ ? WO soll das Signal gesended werden, Welches Farbsystem ? Wo werden die Statuse gespeichert ? Wie viele LEDs haben wir ?
FastLED.addLeds<WS2812B, Signal_Pin , RGB>(LEDs,Number_Leds);
}

// Dauerschleife die vom Arduino ausgeführt wird sobald er Strom hat
void loop(){
// Setze alle LEDs auf AUS/Schwarz
for (int i = 0; i < Number_Leds;i++)
{
// Angabe der Farbe im RGG-Format
LEDs[i].r =00;
LEDs[i].g =00;
LEDs[i].b =0;
// Ausgabe und Update des Statuese aller LEDs
}
// Gebe Aus-Status für alle LEDs auf dem DaisyChain aus
FastLED.show();
// Lasse alle LEDS nach einandern angehen mit einem Delay von 300ms -> FastLED.show()und delay(300) in der Schleife
for (int i = 0; i < Number_Leds;i++)
{
// Angabe der Farbe im RGG-Format
LEDs[i].r =30;
LEDs[i].g =20;
LEDs[i].b =20;
FastLED.show();
delay(300);
// Ausgabe und Update des Statuese aller LEDs
}

Senden und Auslesen von DMX-Signalen mit dem Arduino

DMX ist ein simples Protokoll basierend auf der standardisierten Schnittstelle RS-485 Protokoll. Kurz und simple - DMX dient in der Veranstaltungstechnik zur Ansteuerung von allem was Leuchtet und sich dabei auch beweget, LEDs,Moving-Heads und Co, im Allgemein als "Geräte" bezeichnet . Es gibt immer ein "Pult" und "Geräte". DMX überträgt "elektronisch" die Anweisungen des "Pults" an die "Geräte", wobei ein Kabel(Signalleitung) für 512 Kanäle Werte im Bereich von 0 bis 255, über Spannungsunterschiede zwischen ±1,5 V bzw. ±5 V., was wiederum als Nullen und Einsen interpretiert werden kann, Daten überträgt. Die Geräte lesen je nach Typ eine Anzahl an Kanälen und deren Werte und wissen so was sie tuen sollen. Hier ein kurzes Video zur Erklärung.

Um die LightBox per DMX ansteuern zu können, müssen wir DMX-Signale empfangen können. Hierzu gibt es hier einen guten Blog-Beitrag der das ausführlich erklärt. Auf dem Bild seht ihr den Arduino Nano(hellblaue Platine), ein MAX-RS485.Modul(dunkle blaue-Platine), ein DMX-Female Stecker (grüne Platine) und paar Kabel und Widerstände.  

image-1636777287821.png

Als Bibliothek um das Signal des MAX-RS485-Moduls mit den Arduino verständlich in unserem Code zu verwenden, nutzen wir die Libary DMXSerial. Um die DMXSerial zu nutzen, müsst ihr die Libary installieren. Hierzu:

  • Arduino IDE öffnen
  • Werkzeuge/Bibliotheken verwalten..../
  • DMXSerial suchen
  • Installieren
  • schließen

ACHTUNG die Libary blockiert die Komplette Serielle Schnittstelle des Arduinos. In eurem Code darf nirgendwo Serial.beginn(XXXXX) stehen. Sonst kommt es zu Problemen. 

Um die Bibliothek zu testen habe ich das Setup des Bild 2 mal aufgebaut um einen Sender und einen Empfänger zu haben, A zu A und B zu B jeweils mit einem Kabel verbunden. Alternativ kann man anstelle eines Arduinos auch ein DMX-Pult als Sender verwenden und Pin 1 des Steckers auf Ground, Pin 2 des Steckers auf A und Pin 3 des Steckers auf B verbinden.  

DMX-Sender

Der Code für den Sender sieht folgender Maßen aus:

// Laden der notwendigen Bibliothekn
#include <DMXSerial.h>
#include Libary

// Statuse die durch gelaufen werden
int RedList[] = {255,0,0};
int GreenList[] = {0,255,0};
int BlueList[] = {0,0,255};
//int Dimmer[]={10,50,100,150,200,150,100};

// Initialisieren von DMXSerial wichtig ist der Modus DMXController
void setup() {
// put your setup code here, to run once:
DMXSerial.init(DMXController);
}

//Loop, der nach dem Setup in Endlos schleife durch gelaufen wird
void loop()
{
// Schleife in der die Statuses durchlauften werden.
for (int i = 0; i < 3;i++)
{
DMXSerial.write(1,RedList[i]); //Senden Rot-Wert auf DMX-Kanal-1
DMXSerial.write(2,GreenList[i]); // Senden Grün-Wert auf DMX-Kanal 2
DMXSerial.write(3,BlueList[i]); // Senden Blau-Wert auf DMX-Kanal-3
delay(600);//Delay von 600ms bis nächstes DMX-Signal gesendet wird
}
}

DMX-Receiver

Unsere LightBox als DMX-Controller ist simple Stupid gehalten. Die LightBox ließt die DMX-Kanäle 1 bis 3 aus, und gibt die Werte als RGB-Werte über die LEDS aus, wobei Kanal 1 rot. Kanal 2 grün und Kanal 3 blau entspricht.

Der Code sieht folgender Maße aus:

// Laden der notwendigen Bibliotheken
#include <FastLED.h>
#include <DMXSerial.h>

// How many leds are in your stripe ?
#define Number_Leds 280
// Which is the digital output pin for the data-line of the Pixels
#define Signal_Pin 6
// The leds are represendet by a chaine of indiviuals Pixels as an Array
CRGB LEDs[Number_Leds];

void setup() {
DMXSerial.init(DMXProbe);// Initilisieren DMXSerial
FastLED.addLeds<WS2812B, Signal_Pin , RGB>(LEDs,Number_Leds);// Setup of LED-Strip WS2812n
DMXSerial.maxChannel(3); // Anzahl der DMX Kanäle die ausgewertet werden sollen
//RGB-Wert aller LEDs auf weiß bei 30% setzen
for (int i = 1; i < Number_Leds;i++)
{
LEDs[i].r =30;
LEDs[i].g =30;
LEDs[i].b =30;
}
// Weiß LED-Wert aufgeben
FastLED.show();
}

// Funktion um DMX-Werte von einer Start-Adresse ausgehend in Farbwerte der LEDs umzurechne und alle LEds auf diese RGB Werte zu setzen und Status der LEDs auszugeben
void Leds_DMX(int start_adresse){
for (int i = 1; i < Number_Leds;i++)
{
LEDs[i].r =DMXSerial.read(start_adresse);
LEDs[i].g =DMXSerial.read(start_adresse+1);
LEDs[i].b =DMXSerial.read(start_adresse+2);
}
FastLED.show();
}
//Dauerschleife die nach dem Setup endlos ausgeführt wird
void loop() {
//Bedingung bei Änderung der DMX-Werte - Erhalten eines neuen Datenpakets die Funktion Leds_DMX auszuführen und ab Kanal 1 die DMXWerte aus zuleseen
if (DMXSerial.receive()) {
Leds_DMX(1);
}
}

Design und Folierung des Schilds

Die Folierung der Polystyrol-Frontplatte war etwas schwieriger. Es hat sich als hilfreich gezeigt, keine Übertragungsfolie zu verwenden und mit 2 Personen die Platte zu folieren. Am besten beginnt ihr von Rechts nach Links, also gegen die Leserichtung der Schrift und passt dabei auf die Folie nicht einzureißen, in dem ihr die Folie die ihr nicht braucht nahezu parallel zu der noch kommende Folie abzieht, nicht gerade nach oben, und ab und zu auf der unter Seite schaut ob ihr Buchstaben wie ein Balken beim E abziehen müsst. 

Falls ihr kein richtigen Scharber habt, eignen sich Kreditkarten und Co sehr gut zum feststreichen und rausstreichen von Blasen. 

Abschluss

Das wars mit der Magic, der Rest war etwas Holzarbeit, Löten, Verkabeln und das allgemeine Training des Makers bei Fehlern, wenn es nicht auf Anhieb so klappt wie gedacht.

VG

Joni