Index
Introducción
En este post, vamos a trabajar con luces usando la Librería de Industrial Shields DMX512. Con esta librería, podemos trabajar fácilmente con el protocolo DMX y trabajar hasta 512 canales diferentes.
El protocolo DMX512 (conocido como DMX) se utiliza en los sistemas de iluminación profesionales y en las máquinas de humo o efectos especiales.
Gracias a esta comunicación, podemos enviar a cada una de las 512 direcciones un número entre 0 y 255. Usando este control, y sabiendo que algún sistema puede tener más de una dirección, podemos trabajar con una amplia gama de sistemas.
Lecturas previas
Te recomendamos que leas el siguiente blog a fin de poder entender el programa de este blog. Nosotros hemos usado este artículo para poder hacer el ejemplo:
Aprende cómo programar nuestro controlador industrial PLC para automatización industrial con Arduino IDE: Instalación de las placas de Industrial shields en el Arduino ID
Requisitos
cPara trabajar con un protocolo DMX512, necesitarás las siguientes cosas:
Cualquiera de nuestros controladores industriales:
Decodificador DMX512
Conexión del decodificador DMX512 al controlador industrial Arduino
1) Lo primero que debemos hacer es conectar el bus RS485 al descodificador. Debemos tener en cuenta que hay que poner en la posición correcta el interruptor RS485:
2) Una vez que el Controlador Lógico Programable está correctamente configurado, tenemos que conectar los pins al codificador DMX:
Recuerda configurar cada codificador DMX con la dirección correcta. Generalmente hay un interruptor en el descodificador. Esta configuración será importante porque con eso podremos configurar el rango de direcciones que tendrá este condificador:
Software
1) En primer lugar debemos hacer es incluir la librería Arduino que incluye las funciones DMX512:
#include <DMX512.h>
Recuerda iniciar la librería DMX:
DMX512.begin();
DMX512.begin();
2) Antes de enviar algo a esta biblioteca, vamos a tener que preguntar si el bus está libre. La siguiente función devuelve TRUE if the bus is idle. FALSE if is still working:
DMX512.idle();
DMX512.idle();
3) Finalmente, con esta función podremos enviar información a las direcciones DMX. Ten en cuenta que esta función necesita un puntero a una variable uint8_t con el nivel de potencia (cananles), y una variable const uint16_t con el número total de canales (numChannels):
DMX512.write(*channels, numChannels);
DMX512.write(*channels, numChannels);
Ejemplo
El siguiente ejemplo envía información a las direcciones 1, 2 y 3 DMX. Si ponemos un codificador DMX trabajando con estas direcciones, vamos a ver una luz parpadeando lentamente.
// DMX512 library example // by Industrial Shields
// Include the DMX512 library #include <DMX512.h>
// Define the variables for work with the addresses uint8_t channels[] = {0, 80, 160}; const uint16_t numChannels = sizeof(channels) / sizeof(uint8_t); // Setup function void setup()
{DMX512.begin(); } // Loop function void loop()
// Ask if the DMX bus is busy
{
if (DMX512.idle())
{
// Wait some time between commands
delay(100);
// Update channels brightness
for (uint16_t i = 0; i < numChannels; ++i)
{
// Increase the power value of the channels
channels[i] += 5;
} // Update channels DMX512.write(channels, numChannels); } }
DMX512 en un PLC Arduino de Industrial Shields®