DMX Lampen steuern mit Arduino und dem DMX Shield

In diesem Recipe wird gezeigt, wie man mit dem Arduino und dem DMX-Shield DMX Scheinwerfer ansteuern kann. Für das Erstellen des Tutorials wurden die Scheinwerfer Cameo RGB LED 5mm PAR 56 CAN verwendet. Dies ist ein Tutorial für fortgeschrittene Arduino User. Falls du noch keine grosse Erfahrung hast mit Arduino werden die Recipes Start mit Arduino und Einstiegsaufgaben mit Arduino empfohlen.
Einstiegsübung für DMX Lichtsteuerung mit Arduino
Benötigte Komponenten:
- Arduino Uno
- DMX Shield CTC-DRA-10-R2
- DMX RGB-Licht (kompatibel mit DMX512) oder ähnliches DMX-kompatibles Gerät
- Jumper (falls nicht bereits bestückt)
- DMX-Kabel (XLR, 3-Pin)
Das DMX-Shield ist eine einfache Möglichkeit, das Arduino als DMX-Master-Gerät zu verwenden. Man kann damit Lichter, Nebelmaschinen oder sonstige DMX-kompatible Geräte steuern. Das Shield kann einfach auf der Oberseite des Arduino aufgesteckt werden.
Vorbereitung
Jumper-Einstellung
Auf dem Board befinden sie vier verschiedene Steckleisten, welche mittels Jumper-Brücken die Funktion und Wirkweise des Boards beeinflussen können. Für dieses Beispiel ist es wichtig, dass die Jumper in folgenden Positionen gesetzt werden:
- EN/EN: Board aktivieren (enable) oder deaktivieren (not enable). Jumper sollte sich after den linken beiden Pins befinden (näher bei EN)
- Slave/DE: Hardware-Slave-Modus oder softwaregesteuerter Slave/Master über Digital-Pin 2. Der Jumper sollte sich auf den beiden rechten Pins befinden (näher bei DE)
- TX-10/TX-uart: Send data via TX or Digital pin 4. Jumper sollte sich rechts befinden
- RX-10/RX-uart: Receive data via RX or Digital pin 3
Verkabelung
- Zunächst das DMX-Shield vorsichtig auf das Arduino UNO aufsetzen. Darauf achten, dass alle Pins korrekt in der Buchsenleiste sitzt
- Mittels 3poligen DMX Kabel verbinde den Stecker XLR-Anschluss mit dem DMX-Kabel, das zum DMX RGB-Licht führt.
Ansteuerung eines DMX RGB-Lichts
Software und Code
Um dein DMX RGB-Licht anzusteuern, benötigst du eine DMX-Bibliothek. Die DMX Library von Conceptinetics eignet sich für dieses DMX-Shield. Downloade das zip File und entpacke es im Arduino Folder. Eine entsprechende Anleitung wie die Library installiert werden muss findest du für einen Mac oder Windows Computer.
Nachdem die Libary installiert ist, startet evtl. Die Arduino Software nochmals neu. Nun kopiere den untenstehenden Code in das Sketch Fenster:
Link zum Beispielcode (Sketch)
Versuche zunächst den Code zu kompilieren.
Falls du keine Fehler im Arduino-Output Fenster beobachtest, dann hat die Installation der Libary geklappt.
Upload
Für den Upload müsst ihr den Jumper kurzzeitig auf “not-enabled” setzen. Das Board muss während des Uploads des Arduino Codes hardware-seitig deaktiviert werden (siehe Photo). Dann klickt man in der Arduino Software auf den Upload-Button. Falls der Upload geklappt hat, könnt ihr den Jumper wieder auf EN stecken.
Details zum Software Beispiel
Der Code lässt ein DMX RGB-Licht (oder ein anderes DMX-gesteuertes Gerät, das an den Kanälen 1 bis 4 angeschlossen ist) langsam heller werden und dann wieder dunkler. Dies ist eine einfache Animation, die als Basis für komplexere Lichtsteuerungen dienen kann.
Alle Code-Komponenten werden hier ausführlich erklärt:
Einbinden der Conceptinetics-Bibliothek
#include <Conceptinetics.h>
Mit dieser Zeile wird die Conceptinetics-Bibliothek in das Projekt eingebunden. Diese Bibliothek stellt Funktionen bereit, um den Arduino als DMX-Master (oder Slave) zu betreiben und DMX-Signale zu senden bzw. zu empfangen.
Definition von Konstanten
#define DMX_MASTER_CHANNELS 100 #define RXEN_PIN 2
DMX_MASTER_CHANNELS:
Hier wird definiert, dass der DMX-Master 100 DMX-Kanäle steuern soll (Kanäle 1 bis 100).
RXEN_PIN:
Dieser Pin (Pin 2) wird verwendet, um den DMX-Shield in den richtigen Modus zu schalten (in diesem Fall „Master“-Modus). Der Jumper muss entsprechend gesetzt sein, damit der Shield den Arduino in den Sendemodus schaltet.
Erzeugen des DMX_Master Objekts
DMX_Master dmx_master ( DMX_MASTER_CHANNELS, RXEN_PIN );
Hier wird ein Objekt dmx_master der Klasse DMX_Master erzeugt.
Parameter:
- DMX_MASTER_CHANNELS gibt an, dass 100 Kanäle verwaltet werden sollen.
- RXEN_PIN definiert den Pin, der für die Steuerung des Transmitters verwendet wird.
Das Objekt stellt dann Methoden zur Verfügung, um DMX-Daten zu senden
Setup Funktion
void setup() { // Enable DMX master interface and start transmitting dmx_master.enable (); // Set channel 1 - 25 @ 50% dmx_master.setChannelRange ( 1, 25, 127 ); }
Schritt 1 – DMX-Master aktivieren:
dmx_master.enable();
Diese Zeile schaltet den DMX-Master ein und startet die Übertragung des DMX-Signals.
Schritt 2 – Kanäle initial einstellen:
dmx_master.setChannelRange ( 1, 25, 127 );
Hier werden DMX-Kanäle von 1 bis 25 auf einen festen Wert gesetzt. Der Wert 127 entspricht 50% Helligkeit (bei einem Wertebereich von 0 bis 255).
Globale Variable für Helligkeit
unsigned int brightness = 0;
Diese Variable wird verwendet, um den aktuellen Helligkeitswert (0 bis 255) zu speichern und in der loop()-Funktion zu aktualisieren.
Die loop()-Funktion
void loop() { for (brightness = 0; brightness <= 255; brightness++) { /* Update DMX channel 1 to new brightness */ dmx_master.setChannelValue ( 1, brightness ); dmx_master.setChannelValue ( 2, brightness ); dmx_master.setChannelValue ( 3, brightness ); dmx_master.setChannelValue ( 4, brightness ); /* Small delay to slow down the ramping */ delay(10); }
for (brightness = 255; brightness > 0; brightness--) { /* Update DMX channel 1 to new brightness */ dmx_master.setChannelValue ( 1, brightness ); dmx_master.setChannelValue ( 2, brightness ); dmx_master.setChannelValue ( 3, brightness ); dmx_master.setChannelValue ( 4, brightness ); /* Small delay to slow down the ramping */ delay(10); } }
Erster for-Loop:
- Die Schleife erhöht den brightness-Wert von 0 bis 255.
- In jedem Schritt werden die DMX-Kanäle 1 bis 4 auf den aktuellen Helligkeitswert gesetzt.
- delay(10); bewirkt eine kurze Pause (10 Millisekunden) zwischen den Aktualisierungen, sodass der Helligkeitsanstieg visuell als sanfter Übergang wahrgenommen wird.
Zweiter for-Loop:
- Nachdem der Helligkeitswert 255 erreicht hat, wird in einer zweiten Schleife der Wert wieder von 255 auf 0 verringert.
- Auch hier werden die DMX-Kanäle 1 bis 4 kontinuierlich aktualisiert, um den Abfall der Helligkeit zu steuern.
- delay(10); sorgt erneut für eine sanfte Übergangsanimation.
Gesamteffekt:
- Der Code lässt ein DMX RGB-Licht (oder ein anderes DMX-gesteuertes Gerät, das an den Kanälen 1 bis 4 angeschlossen ist) langsam heller werden und dann wieder dunkler. Dies ist eine einfache Animation, die als Basis für komplexere Lichtsteuerungen dienen kann.
Was gibt es zu beachten?
Sind alle Jumper richtig gesetzt?
Stelle sicher, dass das DMX RGB-Licht auf die gleichen DMX-Kanäle hört, die du im Sketch ansprichst (z. B. Kanäle 1-3 für ein RGB-Licht). In der Bedienungsanleitung des DMX Lichtes gibt es weitere Hinweise, wie man diese Kanäle einstellen kann.
Stelle sicher, dass das DMX RGB-Licht ebenso an eine Spannungsversorgung angeschlossen ist.
Wichtige Links
DMX Shield Board Schaltplan und Details