En la primera parte de este blog le mostré el montaje experimental de una de las aplicaciones industriales más importantes del bus RS-485: el Modbus. Aquí, el PC con un adaptador USB-RS485 actuó como maestro y el microcontrolador con Atmel 328 y shield RS-485 como esclavo. Para familiarizarme con el tema, he investigado principalmente en la página web de nuestro proveedor, zihatec, y en Wikipedia.
Encontré un segundo campo de aplicación para el shield RS-485 en las publicaciones del blog de Tobias Kuch en la primavera de 2020 (enlaces Parte 1, Parte 2, Parte 3). Se trata del controlar sistemas de iluminación con DMX-512. Aquí, el microcontrolador se utiliza como maestro.
Desafortunadamente, no pude conseguir la lámpara que se utiliza allí, así que busqué en Amazon con la abreviatura DMX y encontré una LED similar. Sin embargo, el número de canales para el controlador y la asignación de canales no están estandarizados, lo que tiene sentido con una funcionalidad diferente, por lo que no pude replicar fácilmente los blogs anteriores.
Por lo tanto, este blog se centra en cómo conectar y programar su iluminación DMX. No hay que dejar de estudiar el respectivo "Manual del usuario", a menudo de una sola hoja con los detalles más importantes.
En primer lugar, el hardware. En la siguiente imagen de mi foco LED, puede ver muchos LEDs a la izquierda, que son rojos, verdes o azules en filas. También puede controlar esta lámpara con el mando a distancia suministrado con diferentes funciones. En el lado derecho se puede ver la parte trasera con dos conectores XLR de tres pines, una pantalla matricial LED de cuatro dígitos y debajo de ella (apenas visible) cuatro botones para la operación manual, especialmente importante para ajustar la dirección cuando se utilizan varios aparatos o dispositivos DMX.
Los contactos XLR también pueden ser de cinco polos si es necesario; sin embargo, sólo necesitamos dos contactos. El enchufe izquierdo es la entrada y el de la derecha es la salida. Por eso necesito un enchufe XLR hembra para mi cable casero (Neutrik NC-3 FX BAG - enchufe XLR, el FX significa "hembra"). Esto me permitió establecer fácilmente la conexión entre la lámpara y el shield.
Se presentan dos diferencias con respecto al blog de Tobias Kuch: en mi lámpara, los contactos se encuentran con un giro de 180 °, por lo que el contacto central A está abajo, el contacto B está a la derecha. Y en mi caso, la lámpara se quedó a oscuras cuando hice la conexión a tierra con el shield. Así que solo dos cables: de A a A y de B a B.
Todavía se deben realizar algunos ajustes en el shield. Esto se hace, por un lado, con conectores de cortocircuito (jumpers) y, por otro, con la ayuda de pequeños interruptores (interruptores DIP, "mouse piano"). El etiquetado de la placa es muy útil.
Para nuestro microcontrolador con ATmega328 conectamos el único jumper J1 a 5V, en la fila junto a los pines 0 a 7, sólo necesitamos un jumper para el envío, así que conectamos la conexión de la línea TX al puerto 3 (cuarta fila, porque el conteo comienza en 0). Los puertos 0 y 1 permanecen libres, por lo que podemos cargar fácilmente el sketch y también utilizar el monitor en serie en el Arduino IDE.
Por favor, configure los interruptores DIP como se presenta en la siguiente imagen:
Una vez más, el microinterruptor más importante es el primero en el SW 3: Este activa la resistencia de terminación.
En cuanto al software, necesitamos la biblioteca de programas DmxSimple de Peter Knight. El nombre lo dice todo. De hecho, la biblioteca sólo tiene tres funciones para el usuario, que explicaré brevemente a continuación. Se instala como siempre con el gestor de bibliotecas.
Al comienzo del sketch, la biblioteca se incluye con:
Las tres funciones son inicialmente
Dmxsimple.UsoPin(3);
Dmxsimple.Maxchannel(norte);
Y lo más importante
Dmxsimple.escribiendo(canal, valor);
Con usePIN (3) se establece el puerto para la línea TX. Debido al desarrollo histórico, el trabajo preliminar de la empresa Tinker.it!, Puerto 3 está preestablecido. Sin embargo, puede desviarse de esto.
El número de canales se fija en maxChannel. La configuración por defecto es 512, el máximo posible. Para actualizar los datos más rápidamente, puede elegir un número menor. Yo mismo sólo he conectado una lámpara con 6 canales, por lo que selecciono
Dmxsimple.Maxchannel(6);
Para dos lámparas, ingresaría 2*6 = 12 y configuraría la dirección base 7 en la segunda lámpara para controlar todas las funciones individualmente.
Una vez más: maxChannel es la suma de todos los canales de todos los dispositivos DMX conectados en serie (Daisy Chain). En las instalaciones individuales, la suma de todos los canales anteriores se establece como dirección base.
Para mis experimentos sencillos, solo he utilizado una unidad con seis canales. Ahora a las funciones para mi lámpara según la hoja de datos:
Canal |
Valor de canal |
Instrucción de la función |
CH 1 |
0~255 |
Atenuación total |
CH 2 |
0~255 |
R atenuación |
CH 3 |
0~255 |
G atenuación |
CH 4 |
0~255 |
B atenuación |
CH 5 |
0~9 |
No estroboscópica |
10~255 |
Cuanto mayor sea el valor, más lento el estroboscópico. |
|
CH 6 |
0~50 |
Moda manual, los primeros 5 canales son válidos. |
51~100 |
Cambio de salto |
|
101~150 |
Cambio gradual |
|
151~200 |
Cambio de pulso |
|
201~250 |
Modo automático |
|
25~255 |
Modo de sonido |
Entonces: mi lámpara tiene tres LEDs de colores diferentes que puedo controlar individualmente (CH 2 a 4). Puedo atenuar todos los LEDs al mismo tiempo (CH 1). Puedo configurar la luz estroboscópica (parpadeo rápido de luz) (CH 5). Y puedo seleccionar diferentes modos de funcionamiento.
Otros dispositivos DMX pueden tener luz blanca adicional o pueden ser paneadas con servos (pan y tilt). Como he dicho, consulte la hoja de datos y anote el número del canal más la dirección base, si es el caso.
Con la inclusión de la biblioteca, también se proporcionan dos ejemplos. Con el ejemplo de FadeUp, es posible que necesite cambiar el canal o añadir más canales antes de que su aparato cambie continuamente de brillo. Puede probar todas las funciones con el programa SerialToDMX. Para hacer esto, abra el monitor de serie y siga las instrucciones. Con el comando 1C 255W en la línea superior de entrada y envío, escribo (w = write) el valor 255 para el canal (c = canal) 1, en mi caso "atenuación total".
Con mi sketch modificado, primero escribo 255 para el canal 1 (causa común de errores cuando no se ilumina: si la atenuación total se establece a 0, todos los LEDs permanecen oscuros). Luego cuento primero de 0 a 180 y asigno el valor al canal 2 (color rojo); así el rojo se va haciendo más brillante poco a poco. Asigno el valor (180 - variable de recuento) al canal 3 (color verde); así el verde se va oscureciendo poco a poco. Cuando el rojo es más brillante, selecciono el modo de luz estroboscópica durante tres segundos, entonces el rojo vuelve a ser más y el verde más brillante.
Mi sketch (descargar):
// rs_485_dmx512_controller
no firmado En t r, GRAMO, B;
En t I;
vacío configurar() {
Dmxsimple.UsoPin(3);
Dmxsimple.Maxchannel(6);
Dmxsimple.escribiendo(6, 1); // modo manual
Dmxsimple.escribiendo(1, 255); // atenuación total
Dmxsimple.escribiendo(2, 0); // r atenuación
Dmxsimple.escribiendo(3, 0); // g de atenuación
Dmxsimple.escribiendo(4, 0); // b atenuante
Dmxsimple.escribiendo(5, 0); // No Strobe, Strobe> 10}
vacío círculo() {
por (I=0; I < 180; I++) {
r=I;
GRAMO=180-I;
Dmxsimple.escribiendo(2, r); // rojo
Dmxsimple.escribiendo(3, GRAMO); // verde
// dmxsimple.write (4, b); // Azul
demora(50);
}
Dmxsimple.escribiendo(5, 16); // strobe
demora(3000);
Dmxsimple.escribiendo(5, 0); // no strobe
I = 180;
hacer{
r=I;
GRAMO=180-I;
Dmxsimple.escribiendo(2, r); // rojo
Dmxsimple.escribiendo(3, GRAMO); // verde
// dmxsimple.write (4, b); // Azul
demora(50);
I--;
} muecero (I > 1);
}
Por último, me gustaría mostrar una captura de pantalla de la señal RS-485 en el analizador lógico, en la que puede ver muy bien la polaridad opuesta de las dos líneas de señal del bus RS-485. En comparación con el antiguo estándar de teleimpresora RS-232, esto hace posibles mayores distancias y múltiples dispositivos en primer lugar.
Espero poder despertar su curiosidad y evitar mis errores de principiante.
Diviértase con la reconstrucción.