RS485 DMX512 Controller - [Teil 1]

Ahora se pone colorido: Construimos nuestro propio controlador de cambio de color del arco iris DMX


En nuestra tienda tenemos algún otro módulo cuyo amplio abanico de aplicaciones puede no ser inmediatamente obvio para todos. Por ello, he decidido presentar uno de estos módulos con aplicaciones en una nueva y emocionante serie de blogs. Se trata del Módulo RS422 / RS485 con separación de corriente. Este módulo convierte los niveles TTL de una interfaz serial a los niveles de RS422 o RS485, a partir de cuya diferencia se determina la señal.

Lo que al principio parece aburrido puede convertirse en apasionante, ya que los niveles RS422 y RS485 se utilizan ampliamente en la industria y la electrónica de consumo. Uno de estos campos de aplicación es el DMX, por ejemplo. DMX son las siglas de Digital Multiplexing. El protocolo DMX más extendido, porque es el más antiguo, es el DMX512.


DMX en general es un estándar de la industria para controlar la tecnología de iluminación y se utiliza en la tecnología de escenarios y eventos. Las aplicaciones del DMX van desde el simple control de los equipos de iluminación, como los reguladores, hasta los dispositivos "inteligentes", como las cabezas móviles y las unidades de efectos. En el blog de hoy voy a utilizar un Arduino y el módulo RS422/RS485 para controlar un simple foco LED RGB DMX.

Hardware requerido:

Cantidad Componente Anotación
1 Módulo RS422 / RS485 con separación de corriente
1 Arduino Uno R3
1 Conector DMX Hembra


La estructura

En principio, se pueden controlar hasta 512 unidades terminales a través de DMX512, cada una con un byte de datos. Si se requiere más de un byte por unidad, el número de unidades se reduce en consecuencia. Cada byte de datos (máximo 512) corresponde a un canal si el dispositivo requiere más de un canal de datos.

En el blog de hoy utilizamos el siguiente tipo de luminaria LED: PAR56.


La asignación del conector DMX en la parte posterior es la siguiente:


Este tipo de foco LED PAR56 RGB con conexión DMX se puede adquirir en tiendas especializadas a partir de unos 40 euros. En la parte posterior del faro vemos el conector DMX de 3 pines (Imagen superior). Esto corresponde al antiguo estándar DMX. Las conexiones A (o también llamada conexión caliente), B y apantallamiento se conectan a nuestro módulo RS422/RS485 con las conexiones del mismo nombre en la barra de tornillos.


El nuevo estándar DMX prevé conectores XLR de cinco pines. Sin embargo, eléctricamente funcionan igual que los conectores de 3 pines, siempre que nuestro dispositivo DMX siga soportando el estándar DMX512. El par de contactos libres (pines 4 y 5) sólo se utiliza en el estándar DMX512-A.

Para nuestro proyecto planeado, es muy importante establecer la configuración de los puentes y los interruptores DIP que se muestran en la imagen de arriba en la placa, ya que esto establece los parámetros de funcionamiento como el protocolo, la configuración de los pines y el voltaje de funcionamiento.

Una vez que hayamos establecido la configuración del módulo correctamente, podemos conectar la Shield a nuestro Arduino Uno y realizar el cableado de los componentes:


El software

Antes de empezar a programar, necesitamos la biblioteca "DMXSimple", que podemos añadir fácilmente al Arduino IDE a través de nuestro administrador de la biblioteca. La biblioteca nos permite dar salida a los comandos DMX de forma compatible con el protocolo mediante comandos sencillos. Después de conectar el Arduino a la PC, se puede cargar el siguiente código fuente:

// rs_485_dmx512_controller_teil_1 tobias kuch gpl 3.0	
#include <Dmxsimple.H>

no firmado En t r, GRAMO, B;

En t I;
vacío configurar() {
  Dmxsimple.UsoPin(3);
  Dmxsimple.Maxchannel(512);
  Dmxsimple.escribiendo(7, 255);
  Dmxsimple.escribiendo(4, 0);
  Dmxsimple.escribiendo(5, 0);
  Dmxsimple.escribiendo(6, 0);
}


vacío Hsbtogb(
    no firmado En t inhalado, no firmado En t insolación, no firmado En t inbridiencia,
    no firmado En t *o, no firmado En t *og, no firmado En t *transmisión exterior )
{
    Si (insaturación == 0)
    {
        // actromatic (gris)
        *o = *og = *transmisión exterior = inbridiencia;
    }
    demás
    {
        no firmado En t gramedhue = (inhuir * 6);
        no firmado En t sector = gramedhue >> 8; // sector 0 a 5 alrededor de la rueda de color
        no firmado En t despegue = gramedhue - (sector << 8);  // Posición dentro del sector
        no firmado En t pags = (inbridiencia * ( 255 - insaturación )) >> 8;
        no firmado En t q = (inbridiencia * ( 255 - ((insaturación * despegue) >> 8) )) >> 8;
        no firmado En t t = (inbridiencia * ( 255 - ((insaturación * ( 255 - despegue )) >> 8) )) >> 8;
        cambiar( sector ) {
        caso 0:
            *o = inbridiencia;
            *og = t;
            *transmisión exterior = pags;
            descanso;
        caso 1:
            *o = q;
            *og = inbridiencia;
            *transmisión exterior = pags;
            descanso;
        caso 2:
            *o = pags;
            *og = inbridiencia;
            *transmisión exterior = t;
            descanso;
        caso 3:
            *o = pags;
            *og = q;
            *transmisión exterior = inbridiencia;
            descanso;
        caso 4:
            *o = t;
            *og = pags;
            *transmisión exterior = inbridiencia;
            descanso;
        defecto:    // Caso 5:
            *o = inbridiencia;
            *og = pags;
            *transmisión exterior = q;
            descanso;
        }
    }
}

vacío círculo() {
por (I=0; I < 180; I++) 
  {  
  Hsbborgb(I, 255, 255, &r, &gramo, &B); 
  Dmxsimple.escribir(1, r); // pudrirse
  Dmxsimple.escribir(2, gramo);  // grün
  Dmxsimple.escribir(3, B); // BLAU 
  demora(50);
  }

I = 180;
hacer{  
  Hsbborgb(I, 255, 255, &r, &gramo, &B); 
  Dmxsimple.escribir(1, r); // pudrirse
  Dmxsimple.escribir(2, gramo);  // grün
  Dmxsimple.escribir(3, B); // BLAU
  demora(50);
  I--;
} mientras (I > 1);

}

Asignación de canales y funcionamiento

Lastimosamente, no existe una estandarización de la asignación de canales de un dispositivo DMX, por lo que la asignación de canales de los dispositivos DMX de cada fabricante es ligeramente diferente. Por lo tanto, nuestro código sólo puede funcionar si la asignación de canales de la luminaria PAR56 en los 3 canales inferiores es la siguiente:

Canal Función
1 ROJO Valores de regulación: 0-255
2 VERDE Valores de regulación: 0-255
3 AZUL Valores de regulación: 0-255

Un vistazo a la hoja de datos del fabricante/instrucciones de funcionamiento de la luminaria respectiva revela qué canales DMX están asignados a cada función. En el momento de escribir esto, las funciones de mi dispositivo PAR56 estaban asignadas a los canales de la siguiente manera:

Canal Función
1 ROJO Valores de regulación: 0-255
2 VERDE Valores de regulación: 0-255
3 AZUL Valores de regulación: 0-255
4 EFECTO
5 Estroboscópico
6 Regulador Principal

Sin embargo, esto puede variar según la unidad y el tipo. Por ello, se recomienda consultar previamente la ficha técnica del fabricante. Por ejemplo, una cabeza móvil DMX puede tener 9 o más canales. Si la asignación difiere aquí, los canales RGB se deben ajustar en consecuencia en el código.

(Vista frontal del foco RGB PAR56)


Espero que disfrute del blog de hoy.

Para arduinoProyectos para principiantes

5 comentarios

Katrin

Katrin

Wie in dem Kommentar von Thomas Petzold wäre es eine echt coole Idee das mit einer Handyapp anzusteuern. Ich bin mir nur unsicher mit was man das macht genau bzw. ob es hierfür dann Programme geben würde( da ich nicht die Beste in programmieren bin ). Falls sich da jemand gut auskennt würd ich mich sehr auf eine Antwort freuen wie das mit dem Programmieren aussieht,
Schönen Gruß,
Katrin

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

Deja un comentario

Todos los comentarios son moderados antes de ser publicados

Artículos de blog

  1. Ahora instalamos el esp32 a través de la administración.
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. Transporte Aéreo - programación de ESP mediante redes locales inalámbricas