Nothing Special   »   [go: up one dir, main page]

Blog Toni Merino - Deskontrol - Mini Controlador DMX Con Arduino

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 6

Blog Toni Merino deskontrol - Mini controlador DMX con Arduino http://blog.deskontrol.

net/mini-controlador-dmx-con-arduino/

Mini controlador DMX con


Arduino
Publicado el 10 agosto, 2012 por Toni Merino en Proyectos Arduino

En este post te mostramos como realizar un pequeo y util controlador


DMX 512 con Arduino, que puede servirte por ejemplo para manejar
una maquina de humo con DMX, o como equipo para pruebas, etc.
Podemos utilizar Arduino Mega, Arduino UNO y otros con pequeos
cambios.
Solamente se utilizan un puado de componentes adicionales, faciles de
localizar y de precio economico.

En la configuracion mostrada disponemos de 6 canales con valores


variables, proporcionados por 6 potenciometros conectados a las
entradas analogicas del Arduino, los valores de 10 bits son reducidos a
8 bits (0-255 que son los que utiliza el dmx), y 12 canales con valores
todo-nada manejados con 12 pulsadores conectados a las entradas
digitales del arduino, las entradas digitales utilizan las resistencias de
pullup internas del arduino, luego si el boton esta pulsado el valor de la
entrada es 0, y si no esta pulsado el valor de la entrada es 1.
Necesitaras descargar e instalar nuestra Libreria Arduino cuatro
universos DMX 512

Descargar codigo controlador DMX con Arduino

Problemas conocidos:
Al compilar nos aparece el error: ArduinoDmxN was not declared in this
scope:
Comprobar si esta configurado correctamente el tipo de placa en el IDE
Arduino, menu tools > board
(con Arduino nano y uno solo se puede utilizar una USART =
ArduinoDmx0 = USART0)
Errores al programar el Arduino:
Quitar el shield DMX para programar el Arduino y enchufarlo otra vez
despues.
En las siguientes imagenes se detalla el conexionado:

1 de 6 14/10/2016 10:56 a.m.


Blog Toni Merino deskontrol - Mini controlador DMX con Arduino http://blog.deskontrol.net/mini-controlador-dmx-con-arduino/

Esquema Mini controlador DMX con Arduino

Mini controlador DMX con Arduino

Imagenes y esquema realizados con Fritzing: www.fritzing.org

Ejemplo de codigo para testear el funcionamiento:

1 //******************************************************************
?
2 #include <lib_dmx.h> // libreria DMX 4 universos // four universe
3
4 //******************************************************************
5 // New DMX modes *** EXPERIMENTAL ***
6 //******************************************************************
7 #define DMX512 (0) // (250 kbaud - 2 to 512 channels) Stan
8 #define DMX1024 (1) // (500 kbaud - 2 to 1024 channels) Com
9 #define DMX2048 (2) // (1000 kbaud - 2 to 2048 channels) ca
10
11 void setup()
12 {
13 // configurar pines arduino del 2 al 13 como entradas con pullup,
2 de 6
14 // configure arduino pins 2 to 13 as inputs with pullup, (button p 14/10/2016 10:56 a.m.
Blog Toni Merino deskontrol - Mini controlador DMX con Arduino http://blog.deskontrol.net/mini-controlador-dmx-con-arduino/

12 {
13 // configurar pines arduino del 2 al 13 como entradas con pullup,
14 // configure arduino pins 2 to 13 as inputs with pullup, (button p
15 for (int i=2;i<=13;i++)
16 {
17 pinMode(i,INPUT); // pines como entradas
18 // pins as inputs
19 digitalWrite(i, HIGH); // activar resistencias pullup inte
20 // turn on pullup internal resistor
21 }
22
23 ArduinoDmx0.set_tx_address(1); // poner aqui la direccion de
24 // put here DMX start address
25
26 ArduinoDmx0.set_tx_channels(100); // poner aqui el numero de can
27 // put here the number of DMX
28
29 ArduinoDmx0.init_tx(DMX512); // iniciar transmision univers
30 // starts universe 0 as TX, st
31 } //end setup()
32
33 void loop()
34 {
35 // seis entradas con potenciometros que envian valores DMX entre 0
36 // six analog inputs with potentiometers, sending values from 0 to
37
38 ArduinoDmx0.TxBuffer[0] = scale(analogRead(0));
39
40 ArduinoDmx0.TxBuffer[1] = scale(analogRead(1));
41
42 ArduinoDmx0.TxBuffer[2] = scale(analogRead(2));
43
44 ArduinoDmx0.TxBuffer[3] = scale(analogRead(3));
45
46 ArduinoDmx0.TxBuffer[4] = scale(analogRead(4));
47
48 ArduinoDmx0.TxBuffer[5] = scale(analogRead(5));
49
50
51 if (digitalRead(2) == LOW) // pulsador en pin 2 apretado //
52 ArduinoDmx0.TxBuffer[6] = 255; // enviar 255 al canal DMX 7 //
53 else
54 ArduinoDmx0.TxBuffer[6] = 0; // si no enviar 0 //
55
56 if (digitalRead(3) == LOW) // pulsador en pin 3 apretado
57 ArduinoDmx0.TxBuffer[7] = 255; // enviar 255 al canal DMX 8
58 else
59 ArduinoDmx0.TxBuffer[7] = 0; // si no enviar 0
60
61 if (digitalRead(4) == LOW) // pulsador en pin 4 apretado
62 ArduinoDmx0.TxBuffer[8] = 255; // enviar 255 al canal DMX 9
63 else
64 ArduinoDmx0.TxBuffer[8] = 0; // si no enviar 0
65
66 // aadir aqui hasta el pin 13
67 // add here the others inputs
68
69 } //end loop()
70
71 uint8_t scale(uint16_t value) // scale values from 10 bits to 8 bits
72 {
73 if(value > 1023) // test for 10 bits limit
74 value = 1023;
75
76 return (value >> 2); // scale
3 de 6 77 } //end scale() 14/10/2016 10:56 a.m.
Blog Toni Merino deskontrol - Mini controlador DMX con Arduino http://blog.deskontrol.net/mini-controlador-dmx-con-arduino/

74 value = 1023;
75
76 return (value >> 2); // scale
77 } //end scale()
78
79 //******************************************************************

Ejemplo de codigo 2:

1 /******************************************************************
?
2 *
3 * Title : Controlador DMX con Arduino
4 * Version : v 0.1
5 * Last updated : 28.08.2012
6 * Target : Arduino mega 2560, Arduino mega 1280, Arduino
7 * Author : Toni Merino - merino.toni at gmail.co
8 * Web : blog.deskontrol.net
9 *
10 *
11 * Ejemplo de codigo para el mini-controlador DMX con Arduino:
12 * Este codigo lee los valores de 6 potenciometros conectados a 6
13 * solo cuando se presiona el pulsador correspondiente. (canales d
14 *
15 *******************************************************************
16 #include <lib_dmx.h> // libreria DMX 4 universos // deskontrol f
17
18 //*****************************************************************
19 // New DMX modes *** EXPERIMENTAL ***
20 //*****************************************************************
21 #define DMX512 (0) // (250 kbaud - 2 to 512 channels) Sta
22 #define DMX1024 (1) // (500 kbaud - 2 to 1024 channels) Co
23 #define DMX2048 (2) // (1000 kbaud - 2 to 2048 channels) c
24
25 uint8_t buffer[6]; // buffer DMX data
26
27 void setup()
28 {
29 // configurar pines arduino del 2 al 13 como entradas con pullup,
30 // configure arduino pins 2 to 13 as inputs with pullup, (button
31 for (int i=2;i<=13;i++)
32 {
33 pinMode(i,INPUT); // pines como entradas
34 // pins as inputs
35 digitalWrite(i, HIGH); // activar resistencias pullup int
36 // turn on pullup internal resisto
37 }
38
39 ArduinoDmx0.set_tx_address(1); // poner aqui la direccion de
40 // put here DMX start address
41
42 ArduinoDmx0.set_tx_channels(100); // poner aqui el numero de ca
43 // put here the number of DMX
44
45 ArduinoDmx0.init_tx(DMX512); // iniciar transmision univer
46 // starts universe 0 as TX, s
47 } //end setup()
48
49 void loop()
50 {
51 // seis entradas con potenciometros que envian valores DMX entre
52 // six analog inputs with potentiometers, sending values from 0 t
53
54 buffer[0] = scale(analogRead(0)); // copiar valor de la entrada a
55 // copy value from analog input
56 buffer[1] = scale(analogRead(1)); // copiar valor de la entrada a
4 de 6 57 // copy value from analog input 14/10/2016 10:56 a.m.
Blog Toni Merino deskontrol - Mini controlador DMX con Arduino http://blog.deskontrol.net/mini-controlador-dmx-con-arduino/

55 // copy value from analog input


56 buffer[1] = scale(analogRead(1)); // copiar valor de la entrada a
57 // copy value from analog input
58 buffer[2] = scale(analogRead(2)); // copiar valor de la entrada a
59 // copy value from analog input
60 buffer[3] = scale(analogRead(3)); // copiar valor de la entrada a
61 // copy value from analog input
62 buffer[4] = scale(analogRead(4)); // copiar valor de la entrada a
63 // copy value from analog input
64 buffer[5] = scale(analogRead(5)); // copiar valor de la entrada a
65 // copy value from analog input
66
67 if (digitalRead(2) == LOW) // pulsador en pin 2 apret
68 ArduinoDmx0.TxBuffer[0] = buffer[0]; // enviar valor potenciome
69 else
70 ArduinoDmx0.TxBuffer[0] = 0; // si no enviar 0
71
72 if (digitalRead(3) == LOW) // pulsador en pin 3 apret
73 ArduinoDmx0.TxBuffer[1] = buffer[1]; // enviar valor potenciome
74 else
75 ArduinoDmx0.TxBuffer[1] = 0; // si no enviar 0
76
77 if (digitalRead(4) == LOW)
78 ArduinoDmx0.TxBuffer[2] = buffer[2];
79 else
80 ArduinoDmx0.TxBuffer[2] = 0;
81
82 if (digitalRead(5) == LOW)
83 ArduinoDmx0.TxBuffer[3] = buffer[3];
84 else
85 ArduinoDmx0.TxBuffer[3] = 0;
86
87 if (digitalRead(6) == LOW)
88 ArduinoDmx0.TxBuffer[4] = buffer[4];
89 else
90 ArduinoDmx0.TxBuffer[4] = 0;
91
92 if (digitalRead(7) == LOW)
93 ArduinoDmx0.TxBuffer[5] = buffer[5];
94 else
95 ArduinoDmx0.TxBuffer[5] = 0;
96
97
98 } //end loop()
99
100
101 uint8_t scale(uint16_t value) // scale values from 10 bits to 8 bit
102 {
103 if(value > 1023) // test for 10 bits limit
104 value = 1023;
105
106 return (value >> 2); // scale
107 } //end scale()
108
109 //*****************************************************************

Podriamos por ejemplo, utilizar la mitad de los pulsadores como flash de


canal DMX, y los otros 6 como memorias de escenas, para ello
deberemos almacenar los valores DMX en la eeprom y rellamarlos al
pulsar una memoria
Sin duda hay muchas opciones para experimentar cada uno, y adaptar
el software a nuestras necesidades.
Espero que compartas tus experiencias.
5 de 6 14/10/2016 10:56 a.m.
Blog Toni Merino deskontrol - Mini controlador DMX con Arduino http://blog.deskontrol.net/mini-controlador-dmx-con-arduino/

el software a nuestras necesidades.


Espero que compartas tus experiencias.
Saludos.

6 de 6 14/10/2016 10:56 a.m.

También podría gustarte