RS485 DMX512 Controller - [Teil 1]

Jetzt wird es bunt: Wir bauen eine eigene DMX-Regenbogen Farbwechsel Steuerung


Bei uns im Shop gibt es das eine oder andere Modul, dessen breites Anwendungsfeld sich vielleicht nicht jedem auf Anhieb erschließt. Daher habe ich mich entschlossen, eines dieser Module mit Anwendungen in einer spannenden neuen Blogreihe vorzustellen! Es handelt sich dabei um das RS422 / RS485 Modul mit galvanischer Trennung. Dieses Modul wandelt die TTL Pegel einer seriellen Schnittstelle auf die Pegel von RS422 oder RS485 um, aus deren Differenz das Signal ermittelt wird.

Was sich erst einmal langweilig anhört, kann spannend werden, da RS422 und RS485 Pegel in der Industrie und Unterhaltungselektronik weitläufig eingesetzt werden. Eines dieser Anwendungsfelder ist beispielsweise DMX. DMX steht dabei für Digital Multiplexing. Das weitverbreiteste, weil älteste DMX Protokoll, DMX512 ist. 


DMX allgemein ist ein Industriestandard für Steuerung von Lichttechnik und kommt in der Bühnen- und Veranstaltungstechnik zum Einsatz. Anwendungsgebiete für DMX reichen von einfacher Steuerung von Lichttechnik wie Dimmern bis hin zu „intelligenten“ Scheinwerfern, wie Moving Heads und Effektgeräten. Im heutigen Blog werde ich mithilfe eines Arduinos und dem RS422 / RS485 Modul einen einfachen DMX RGB LED Scheinwerfer kontrollieren.

Benötigte Hardware:

Anzahl Bauteil Anmerkungen
1 RS422 / RS485 Modul mit galvanischer Trennung
1 Arduino Uno R3
1 DMX Stecker weiblich

Der Aufbau

Grundsätzlich können über DMX512 bis zu 512 Endgeräte mit jeweils einem Byte Daten gesteuert werden. Wenn mehr als ein Byte pro Gerät benötigt wird, reduziert sich die Geräteanzahl entsprechend. Jedes Datenbyte (max 512) entspricht dabei einem Kanal, wenn das Gerät mehr als ein Datenkanal benötigt.

In unserem heutigen Blog verwenden wir folgenden LED Scheinwerfer vom Typ: PAR56.


Die Belegung des DMX Anschlusses auf der Rückseite ist wie folgt:


Diese Art von PAR 56 RGB LED Scheinwerfer mit DMX Anschluss gibt es bereits ab ca. 40 Euro im Fachhandel. Auf der Rückseite des Scheinwerfers sehen wir den 3 poligen DMX Anschluss. (oberes Bild). Dieser entspricht noch dem alten DMX Standard. Die Anschlüsse A (oder auch hot Anschluss genannt), B und Schild werden mit unserem RS422 / RS485 Modul mit den gleichnamig genannten Anschlüssen auf der Schraubleiste verbunden.


Der neue DMX Standard sieht fünfpolige XLR-Stecker vor. Elektrisch gesehen funktionieren diese jedoch genauso wie die 3 poligen Anschlüsse, vorausgesetzt unser DMX Gerät unterstützt noch den DMX512 Standard. Das freie Kontaktpaar (Pol 4 und 5) wird erst im DMX512-A Standard genutzt.

Für unser geplantes Projekt ist es sehr wichtig, die auf dem obigen Bild gezeigte Jumperkonfiguration und Dip Switch Konfiguration auf dem Bord zu setzen, da hiermit die Betriebsparameter wie z.B. Protokoll, Pin Konfiguration und Betriebsspannung gesetzt werden.

Sobald wir die Konfiguration des Moduls korrekt gesetzt haben, können wir das Shield auf unseren Arduino Uno stecken und die Verkabelung der Komponenten durchführen:


Die Software

Bevor wir aber nun mit der Programmierung loslegen können, benötigen wir noch die Bibliothek „DmxSimple“, die wir der Arduino IDE über unseren Bibliotheksverwalter einfach hinzufügen können. Die Bibliothek ermöglicht uns, über einfache Kommandos DMX Befehle protokollgerecht auszugeben. Nach Verbinden des Arduinos mit dem PC kann der folgende Quelltext hochgeladen werden:

// RS_485_DMX512_Controller_Teil_1 Tobias Kuch GPL 3.0	
#include <DmxSimple.h>

unsigned int r, g, b;

int i;
void setup() {
  DmxSimple.usePin(3);
  DmxSimple.maxChannel(512);
  DmxSimple.write(7, 255);
  DmxSimple.write(4, 0);
  DmxSimple.write(5, 0);
  DmxSimple.write(6, 0);
}


void HSBToRGB(
    unsigned int inHue, unsigned int inSaturation, unsigned int inBrightness,
    unsigned int *oR, unsigned int *oG, unsigned int *oB )
{
    if (inSaturation == 0)
    {
        // achromatic (grey)
        *oR = *oG = *oB = inBrightness;
    }
    else
    {
        unsigned int scaledHue = (inHue * 6);
        unsigned int sector = scaledHue >> 8; // sector 0 to 5 around the color wheel
        unsigned int offsetInSector = scaledHue - (sector << 8);  // position within the sector         
        unsigned int p = (inBrightness * ( 255 - inSaturation )) >> 8;
        unsigned int q = (inBrightness * ( 255 - ((inSaturation * offsetInSector) >> 8) )) >> 8;
        unsigned int t = (inBrightness * ( 255 - ((inSaturation * ( 255 - offsetInSector )) >> 8) )) >> 8;
        switch( sector ) {
        case 0:
            *oR = inBrightness;
            *oG = t;
            *oB = p;
            break;
        case 1:
            *oR = q;
            *oG = inBrightness;
            *oB = p;
            break;
        case 2:
            *oR = p;
            *oG = inBrightness;
            *oB = t;
            break;
        case 3:
            *oR = p;
            *oG = q;
            *oB = inBrightness;
            break;
        case 4:
            *oR = t;
            *oG = p;
            *oB = inBrightness;
            break;
        default:    // case 5:
            *oR = inBrightness;
            *oG = p;
            *oB = q;
            break;
        }
    }
}

void loop() {
for (i=0; i < 180; i++) 
  {  
  HSBToRGB(i, 255, 255, &r, &g, &b); 
  DmxSimple.write(1, r); // Rot
  DmxSimple.write(2, g);  // Grün
  DmxSimple.write(3, b); // Blau 
  delay(50);
  }

i = 180;
do{  
  HSBToRGB(i, 255, 255, &r, &g, &b); 
  DmxSimple.write(1, r); // Rot
  DmxSimple.write(2, g);  // Grün
  DmxSimple.write(3, b); // Blau
  delay(50);
  i--;
} while (i > 1);

}

Kanalbelegung und Bedienung 

Da es leider keine Normierung der Kanalbelegungen eines DMX Gerätes gibt, ist leider bei jedem Hersteller die Kanalbelegung seiner DMX Geräte etwas anders. Unser Code kann daher nur funktionieren, wenn die Kanalbelegung des PAR56 Scheinwerfers auf den unteren 3 Kanälen wie folgt ist:

Kanal Funktion
1 ROT Dimming Werte: 0-255
2 GRÜN Dimming Werte: 0-255
3 BLAU Dimming Werte: 0-255

Ein Blick in das Datenblatt/Betriebsanleitung des Herstellers für den jeweiligen Scheinwerfer, verrät, welche DMX Kanäle mit welcher Funktion belegt sind. Bei meinem PAR56 Scheinwerfer waren die Funktionen zum Zeitpunkt der Erstellung dieses Blogs wie folgt auf die Kanäle verteilt:

Kanal Funktion
1 ROT Dimming Werte: 0-255
2 GRÜN Dimming Werte: 0-255
3 BLAU Dimming Werte: 0-255
4 EFFECT
5 STROBE
6 MASTER DIM

Pro Gerät und Typ kann dies jedoch unterschiedlich sein. Daher empfiehlt sich hier unbedingt vorab ein Blick in das Datenblatt des Herstellers. Zum Beispiel kann ein DMX Moving Head durchaus mal 9 und mehr Kanäle haben. Falls die Belegung hier abweicht, müssen im Code die RGB Kanäle entsprechend angepasst werden.

(Blick von vorne auf den RGB PAR56 Strahler)

 

Ich wünsche Ihnen viel Spaß mit dem heutigen Blog.

4 Kommentare

Andreas

Andreas

Der Beitrag kam für mein Projekt gerade richtig. Aber ich habe kleine Probleme.
Wieso S1/1 auf RS 422?
Was hat die Jumperung auf dem Foto mit dem Programm überhaupt gemeinsam???
Ich bitte um die Erläuterung der 1. und 3. bis 6. Zeile im void setup() im Zusammenhang mit Jumpern.
Noch frohe Ostern, Gesundheit und bald wieder ein normales Leben

Thomas Petzold

Thomas Petzold

Wie wäre es, einen Schritt weiter zu gehen und die DMX-Steuerung über ein Handy zu erweitern? Klassische Veranstalter nutzen dafür Pulte oder Software. Eine Steuerung mit verschiedenen Programmen über das Handy fänd ich da schon viel interessanter. Oder eine Sound To light Steuerung der Kannen mit Audio Input über Chinch.
Dat wäre doch mal geil.

JS

JS

9 Kanäle für einen MovingHead sind ziemlich wenig, ich würde sagen das geht eher bei 15 los. Die Grundsätze von DMX sind gut und auf den Punkt erklärt! Ich würde DMX 512(auch Dreipol!) aber nicht so als veraltet darstellen, es ist einfach weit verbreitet, günstig und bietet viele Möglichkeiten, und ist deswegen auch immer noch der Standart.

Paul

Paul

Ja, und jetzt? :-)
Ich habe zwar weder einen DMX Strahler, noch das passende Shield aber ich lese aus Interesse gerne eure Blogbeiträge.
Ihr habt am Anfang alles so schön erklärt, gibt es kein kleines Video vom fertigen Resultat?
Schönen Gruß aus Aachen
Paul

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert