DMX RGB LED para exteriores
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Aplicaciones y servicios en línea
| ||||
|
Acerca de este proyecto
Hola chicos, ya tengo muchas luces controladas por DMX dentro de la casa, pero también quería tener algunas afuera. Como estas luces RGB DMX son bastante caras (unas 200 - 300 €), busqué alternativas.
Lo que encontré fueron estas inundaciones LED RGB realmente baratas con unidades de control IR. Estos rondan los 8 € / 10W RGB.
Entonces, todo lo que tuve que hacer fue convertirlos para que entendieran DMX.
Para mantener bajos los costos y el espacio necesario de PCB, las 5 inundaciones tienen solo un cerebro Arduino en una caja separada. Cada luz tiene una PCB de fuente de corriente constante activada por PWM de 3 canales y un cable conector D-Sub 9. Este PCB encaja perfectamente en el pequeño compartimento en la parte inferior de la luz. Cada canal del LED está configurado en 350 mA.
Las 5 luces están conectadas a una caja central con el arduino y el receptor DMX inalámbrico
Dentro de esta caja están:
- Fuente de alimentación 12V 3,5A
- Cargador de teléfono móvil de 12 V a 5 V
- Ardunino Nano en PCB propio para convertidor DMX (RS485)
- Extrensión PWM de 16 canales de Ardufruit sobre I2C
- Receptor DMX inalámbrico
- PCB de distribución para cables planos D-Sub
- Mucho pegamento termofusible para impermeabilizarlo
Sobrevivió hasta ahora 3 semanas bajo fuertes lluvias, cierra la caja y el sellado es hermético.
El PCB donde monté el Nano es universal para todos mis proyectos DMX, puede convertir las señales del bus DMX al Ardunio y también es una ruptura para el bus I2C y / o los 6 canales PWM con MosFETs (BUZ11). También lo usé con los MosFET para actualizar las lámparas internas a DMX.
Así que todos juntos dan como resultado 5 lámparas controladas individualmente (aquí para mi barandilla de vidrio) que se controlan a través de DMX inalámbrico a través de una PC / teléfono móvil.
En las descargas, encontrará los archivos eagle para los PCB, mi boceto de Arduino para copiar y pegar y el archivo de definición para la lámpara en el software de control de PC Freestyler.
Las direcciones DMX están codificadas para iniciar la dirección 200 y luego 5x 3 canales R, G y B sin ningún canal de atenuación.
En Arduino-Sketch tuve que manipular los valores de los canales rojos, ya que el LED rojo es mucho más brillante que el verde y el azul y, por lo tanto, no se mezclaría con el blanco puro.
Alternativamente, hay un boceto para probar / corregir errores donde puede configurar los valores RGB directamente a través del terminal Ardunio IDE
En total, el costo total de 5 lámparas es de alrededor de 110 €, todas las piezas (excepto las luces) se obtienen a través de Reichelt.de, todos los PCB fabricados por platinenbelichter.de (¡gran recomendación!)
¡Siéntete libre de modificar u optimizar todo!
Adiós
Sebastián
Código
- Versión DMX
- Versión de entrada USB
- accesorio para Freestyler
Versión DMX Arduino
Programa de control para 5 luces RGB de 3 canales// 15 PWM en 5 LED RGBs / DMX Start-Address 200 / 5x 3channel RGB # include#include #include Adafruit_PWMServoDriver pwm =Adafruit_PWMServoDriver (); # define DMX_SLAVE_CHANNELS 15DMX_Slave dmx_slave (DMX_SLAVE_CHANNELS); int canal [16]; int channelOut [16]; int valor [16]; int ch =0; int rojo =0; int azul verde =0; =0; configuración vacía () {Wire.begin (); // unirse al bus i2c (dirección opcional para el maestro) pwm.begin (); pwm.setPWMFreq (120); // Esta es la frecuencia máxima de PWM # ifdef TWBR // guardar la tasa de bits I2C uint8_t twbrbackup =TWBR; // debe cambiarse después de llamar a Wire.begin () (dentro de pwm.begin ()) TWBR =12; // ¡Actualiza a 400KHz! #endif // Configuración DMX dmx_slave.enable (); dmx_slave.setStartAddress (200); // establece todos los PWM en alto -> LED apagados pwm.setPWM (0, 4096, 0); pwm.setPWM (1, 4096, 0); pwm.setPWM (2, 4096, 0); pwm.setPWM (3, 4096, 0); pwm.setPWM (4, 4096, 0); pwm.setPWM (5, 4096, 0); pwm.setPWM (6, 4096, 0); pwm.setPWM (7, 4096, 0); pwm.setPWM (8, 4096, 0); pwm.setPWM (9, 4096, 0); pwm.setPWM (10, 4096, 0); pwm.setPWM (11, 4096, 0); pwm.setPWM (12, 4096, 0); pwm.setPWM (13, 4096, 0); pwm.setPWM (14, 4096, 0);} void loop () {// Entrada DMX para (int j =0; j <=14; j ++) {channel [j] =dmx_slave.getChannelValue (j + 1); } // sintonizar con precisión el color channelOut [0] =map (canal [0], 0, 255, 0, 1400); // reducir el LED rojo 1 channelOut [1] =map (canal [1], 0, 255, 0, 4095); channelOut [2] =mapa (canal [2], 0, 255, 0, 4095); channelOut [3] =mapa (canal [3], 0, 255, 0, 1400); // reducir el LED rojo 2 channelOut [4] =map (canal [4], 0, 255, 0, 4095); channelOut [5] =mapa (canal [5], 0, 255, 0, 4095); channelOut [6] =mapa (canal [6], 0, 255, 0, 1400); // reducir el LED rojo 3 channelOut [7] =map (canal [7], 0, 255, 0, 4095); channelOut [8] =mapa (canal [8], 0, 255, 0, 4095); channelOut [9] =mapa (canal [9], 0, 255, 0, 1400); // reducir el LED rojo 4 channelOut [10] =map (canal [10], 0, 255, 0, 4095); channelOut [11] =mapa (canal [11], 0, 255, 0, 4095); channelOut [12] =mapa (canal [12], 0, 255, 0, 1400); // reducir el LED rojo 5 channelOut [13] =map (canal [13], 0, 255, 0, 4095); channelOut [14] =mapa (canal [14], 0, 255, 0, 4095); // asigna valores para (int i =0; i <=14; i ++) {if (channelOut [i] ==0) {pwm.setPWM (i, 4096, 0); } else {pwm.setPWM (i, 0, 4095 - channelOut [i]); }}}
Versión de entrada USB Arduino
Versión de depuración con entrada directa para lámpara Nr. y valores RGB// 15 PWM en 5 LEDs RGB # incluyen#include // llamado de esta manera, usa la dirección predeterminada 0x40Adafruit_PWMServoDriver pwm =Adafruit_PWMServoDriver (); // puedes también llámelo con una dirección diferente que desee // Adafruit_PWMServoDriver pwm =Adafruit_PWMServoDriver (0x41); int channel [15]; int channelOut [15]; int value [15]; int ch =0; int red =0; int green =0; int blue =0; void setup () {Wire.begin (); // unirse al bus i2c (dirección opcional para el maestro) Serial.begin (9600); Serial.println ("Esperando entrada:LED, R, G, B, [cada 0-255]"); pwm.begin (); pwm.setPWMFreq (120); // Esta es la frecuencia máxima de PWM // si realmente quieres acelerar las cosas, puedes entrar en el modo 'I2C rápido de 400khz' // a algunos dispositivos i2c no les gusta tanto, así que si estás compartiendo el bus, mira / / ¡fuera para esto! #ifdef TWBR // guardar la tasa de bits I2C uint8_t twbrbackup =TWBR; // debe cambiarse después de llamar a Wire.begin () (dentro de pwm.begin ()) TWBR =12; // ¡actualiza a 400KHz! #endif // configura todo PWM en alto -> LED apagados pwm.setPWM (0, 4096, 0); pwm.setPWM (1, 4096, 0); pwm.setPWM (2, 4096, 0); pwm.setPWM (3, 4096, 0); pwm.setPWM (4, 4096, 0); pwm.setPWM (5, 4096, 0); pwm.setPWM (6, 4096, 0); pwm.setPWM (7, 4096, 0); pwm.setPWM (8, 4096, 0); pwm.setPWM (9, 4096, 0); pwm.setPWM (10, 4096, 0); pwm.setPWM (11, 4096, 0); pwm.setPWM (12, 4096, 0); pwm.setPWM (13, 4096, 0); pwm.setPWM (14, 4096, 0);} void loop () {// color de entrada while (Serial.available ()> 0) {ch =Serial.parseInt (); rojo =Serial.parseInt (); verde =Serial.parseInt (); azul =Serial.parseInt (); if (Serial.read () =='\ n') {} ch =restringir (ch, 0, 4); rojo =restringir (rojo, 0, 255); verde =restringir (verde, 0, 255); azul =restringir (azul, 0, 255); // imprime los tres números:Serial.print ("nuevos valores:"); Serial.print ("LED ="); Serial.print (ch, DEC); Serial.print ("R ="); Serial.print (rojo, DEC); Serial.print (", G ="); Serial.print (verde, DEC); Serial.print (", B ="); Serial.println (azul, DEC); } interruptor (ch) {caso 0:canal [0] =rojo; canal [1] =verde; canal [2] =azul; descanso; caso 1:canal [3] =rojo; canal [4] =verde; canal [5] =azul; descanso; caso 2:canal [6] =rojo; canal [7] =verde; canal [8] =azul; descanso; caso 3:canal [9] =rojo; canal [10] =verde; canal [11] =azul; descanso; caso 4:canal [12] =rojo; canal [13] =verde; canal [14] =azul; descanso; } // sintonizar con precisión el color channelOut [0] =map (canal [0], 0, 255, 0, 1400); // reducir el LED rojo 1 channelOut [1] =map (canal [1], 0, 255, 0, 4095); channelOut [2] =mapa (canal [2], 0, 255, 0, 4095); channelOut [3] =mapa (canal [3], 0, 255, 0, 1400); // reducir el LED rojo 2 channelOut [4] =map (canal [4], 0, 255, 0, 4095); channelOut [5] =mapa (canal [5], 0, 255, 0, 4095); channelOut [6] =mapa (canal [6], 0, 255, 0, 1400); // reducir el LED rojo 3 channelOut [7] =map (canal [7], 0, 255, 0, 4095); channelOut [8] =mapa (canal [8], 0, 255, 0, 4095); channelOut [9] =mapa (canal [9], 0, 255, 0, 1400); // reducir el LED rojo 4 channelOut [10] =map (canal [10], 0, 255, 0, 4095); channelOut [11] =mapa (canal [11], 0, 255, 0, 4095); channelOut [12] =mapa (canal [12], 0, 255, 0, 1400); // reducir el LED rojo 5 channelOut [13] =map (canal [13], 0, 255, 0, 4095); channelOut [14] =mapa (canal [14], 0, 255, 0, 4095); // asigna valores para (int i =0; i <=14; i ++) {if (channelOut [i] ==0) {pwm.setPWM (i, 4096, 0); } else {pwm.setPWM (i, 0, 4095 - channelOut [i]); }}}
accesorio para Freestyler BatchFile
definición de canales descripción para el programa de control DMX en la PCBuzzComments:"" Exterior LED3 0 0 RBG Outdoor.gif0000000 1 123RedGreenBlueMacros 2 0 0 0 1 0 0255000000255025502550255025502550255000-0-0-0-1Sliders 0
Esquemas
Base Nano universal con entrada DMX y salida PWM / I2C universaldmx_2ixt4yqoce.sch universaldmx_a0KdrmJqGU.brd5x 3 ch. Distribución (15x PWM) con entrada de 12V (+/-) verteiler_dmx_a0M4khDOMv.sch verteiler_dmx_P6etUU6zsN.brd3x Fuente de 350mA / 12V con entradas PWM 3xksq_rework_2VYUHjd5Xl.sch 3xksq_rework_4rpvCLaFrs.brd 3xksq_rework_qp87kzXQGy.txt universaldmx_GtNeOjMWZL.txtProceso de manufactura
- Visualizador de música DIY LUMAZOID Arduino
- Controlador DMX operado por la web
- Luz de mesa interactiva controlada por gestos
- ¡Arduino con Bluetooth para controlar un LED!
- Arduino Cuadrúpedo
- Lucha contra el coronavirus:temporizador de lavado de manos simple
- Mezclador de colores Arduino RGB
- Controlar una matriz de LED con Arduino Uno
- Máquina de tratamiento DIY Arduino RADIONICS
- Juego de ruleta LED
- Garaje de estacionamiento automatizado Arduino