亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

DMX RGB LED 户外

组件和用品

Arduino Nano R3
× 1
Adafruit PCA9685 16PWM 通道 I2C
× 1
自己的PCB
× 1

应用和在线服务

Arduino IDE
freestyler DMX 控件

关于这个项目

大家好,我家里已经有很多 DMX 控制的灯,但我也想在外面放一些。由于这些 RGB DMX 灯相当昂贵(一个约 200 - 300 欧元),我寻找替代品。

我发现这些非常便宜的带有红外控制单元的 RGB LED 泛光灯。这些大约是 8 欧元 / 10W RGB。

所以,我所要做的就是将这些转换为理解 DMX。

为了降低成本和所需的 PCB 空间,所有 5 次洪水都在一个单独的盒子里只有一个 Arduino 大脑。每个灯都有一个 3 通道 PWM 触发的恒流源 PCB 和一个 D-Sub 9 连接器电缆。该 PCB 非常适合灯底部的小隔间。 LED的每个通道设置为350mA。

所有 5 个灯都连接到一个带有 arduino 和无线 DMX 接收器的中央盒

这个盒子里面是:

  • 12V 3.5A 电源
  • 12V - 5V 手机充电器
  • 用于 DMX (RS485) 转换器的自有 PCB 上的 Ardunino Nano
  • 基于 I2C 的 Ardufruit 16 通道 PWM 扩展​​
  • 无线 DMX 接收器
  • 用于 D-Sub 带状电缆的分配 PCB
  • 大量热胶使其防水

它在大雨中存活了 3 周,将盒子接缝,密封防水。

我安装 Nano 的 PCB 对我所有的 DMX 项目都是通用的,它可以将 DMX 总线信号转换为 Ardunio,也是 I2C 总线和/或所有 6 个带有 MosFET (BUZ11) 的 PWM 通道的突破口。我还将它与 MosFET 一起使用,将内部灯更新为 DMX。

因此,总共产生了 5 个独立的受控灯(这里是我的玻璃栏杆),它们通过 PC/手机上的无线 DMX 进行控制。

在下载中,您会找到 PCB 的 eagle 文件、我复制粘贴的 Arduino 草图以及 PC 控制软件 Freestyler 中灯的定义文件。

DMX-Adresses 被硬编码为起始地址 200,然后是 5x 3 通道 R、G 和 B,没有任何调光通道。

在 Arduino-Sketch 中,我必须操纵红色通道的值,因为红色 LED 比绿色和蓝色亮得多,因此不会混合成纯白色。

或者,有一个用于测试/错误修复的草图,您可以在其中直接通过 Ardunio IDE 终端设置 RGB 值

总共 5 盏灯的总成本约为 110 欧元,所有部件(除了灯)均来自 Reichelt.de,所有 PCB 均由 platinenbelichter.de 制造(强烈推荐!)

随意修改或优化所有!

再见,

塞巴斯蒂安

代码

  • DMX 版本
  • USB 输入版本
  • Freestyler 的固定装置
DMX 版本Arduino
5x 3channel RGB灯控制程序
// 15 PWM on 5 RGBs LEDs / 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 channel[16];int channelOut[16];int value[16];int ch =0;int red =0;blueint green ==0;void setup() { Wire.begin(); // 加入 i2c 总线(主机地址可选) pwm.begin(); pwm.setPWMFreq(120); // 这是最大 PWM 频率#ifdef TWBR // 保存 I2C 比特率 uint8_t twbrbackup =TWBR; // 必须在调用 Wire.begin() 后更改(在 pwm.begin() 内) TWBR =12; // 升级到 400KHz!#endif // DMX 设置 dmx_slave.enable(); dmx_slave.setStartAddress (200); // 将所有 PWM 设置为高 -> LED 关闭 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() { // DMX 输入 for (int j =0; j <=14; j++) { channel[j] =dmx_slave.getChannelValue (j+1); } // 微调颜色 channelOut[0] =map(channel[0], 0, 255, 0, 1400); // 减少红色 LED 1 channelOut[1] =map(channel[1], 0, 255, 0, 4095); channelOut[2] =map(channel[2], 0, 255, 0, 4095); channelOut[3] =map(channel[3], 0, 255, 0, 1400); // 减少红色 LED 2 channelOut[4] =map(channel[4], 0, 255, 0, 4095); channelOut[5] =map(channel[5], 0, 255, 0, 4095); channelOut[6] =map(channel[6], 0, 255, 0, 1400); // 减少红色 LED 3 channelOut[7] =map(channel[7], 0, 255, 0, 4095); channelOut[8] =map(channel[8], 0, 255, 0, 4095); channelOut[9] =map(channel[9], 0, 255, 0, 1400); // 减少红色 LED 4 channelOut[10] =map(channel[10], 0, 255, 0, 4095); channelOut[11] =map(channel[11], 0, 255, 0, 4095); channelOut[12] =map(channel[12], 0, 255, 0, 1400); // 减少红色 LED 5 channelOut[13] =map(channel[13], 0, 255, 0, 4095); channelOut[14] =map(channel[14], 0, 255, 0, 4095); //为 (int i =0; i <=14; i++) { if (channelOut[i] ==0) { pwm.setPWM(i, 4096, 0); 赋值} else { pwm.setPWM(i, 0, 4095 - channelOut[i]); } }}
USB输入版Arduino
带有灯号直接输入的调试版本。 and RGB values
// 15 PWM on 5 RGBs LEDs#include #include // 这样调用,它使用默认地址 0x40Adafruit_PWMServoDriver pwm =Adafruit_PWMServoDriver();// 你可以也用你想要的不同地址调用它//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(); // 加入 i2c 总线(主机地址可选) Serial.begin(9600); Serial.println("等待输入:LED, R, G, B, [每个0-255]"); pwm.begin(); pwm.setPWMFreq(120); // 这是最大 PWM 频率 // 如果你想真正加快速度,你可以进入“快速 400khz I2C”模式 // 一些 i2c 设备不喜欢这个,所以如果你共享总线,看 / / 为此!#ifdef TWBR // 保存 I2C 比特率 uint8_t twbrbackup =TWBR; // 必须在调用 Wire.begin() 后更改(在 pwm.begin() 内) TWBR =12; // 升级到 400KHz!#endif // 将所有 PWM 设置为高 -> LED 关闭 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() { //输入颜色 while (Serial.available()> 0) { ch =Serial.parseInt();红色 =Serial.parseInt();绿色 =Serial.parseInt();蓝色 =Serial.parseInt(); if (Serial.read() =='\n') {} ch =constrain(ch, 0, 4);红色 =约束(红色,0, 255);绿色 =约束(绿色,0, 255);蓝色 =约束(蓝色,0, 255); // 打印三个数字:Serial.print("new values:"); Serial.print(" LED="); Serial.print(ch, DEC); Serial.print (" R="); Serial.print(红色,DEC); Serial.print(", G="); Serial.print(绿色,DEC); Serial.print(", B="); Serial.println(蓝色,DEC); } switch (ch) { case 0:channel[0] =red;通道[1] =绿色;通道[2] =蓝色;休息;情况 1:通道 [3] =红色;通道[4] =绿色;通道[5] =蓝色;休息;情况 2:通道 [6] =红色;通道[7] =绿色;通道[8] =蓝色;休息;情况 3:通道 [9] =红色;通道[10] =绿色;通道[11] =蓝色;休息;情况 4:通道 [12] =红色;通道[13] =绿色;通道[14] =蓝色;休息; } // 微调颜色 channelOut[0] =map(channel[0], 0, 255, 0, 1400); // 减少红色 LED 1 channelOut[1] =map(channel[1], 0, 255, 0, 4095); channelOut[2] =map(channel[2], 0, 255, 0, 4095); channelOut[3] =map(channel[3], 0, 255, 0, 1400); // 减少红色 LED 2 channelOut[4] =map(channel[4], 0, 255, 0, 4095); channelOut[5] =map(channel[5], 0, 255, 0, 4095); channelOut[6] =map(channel[6], 0, 255, 0, 1400); // 减少红色 LED 3 channelOut[7] =map(channel[7], 0, 255, 0, 4095); channelOut[8] =map(channel[8], 0, 255, 0, 4095); channelOut[9] =map(channel[9], 0, 255, 0, 1400); // 减少红色 LED 4 channelOut[10] =map(channel[10], 0, 255, 0, 4095); channelOut[11] =map(channel[11], 0, 255, 0, 4095); channelOut[12] =map(channel[12], 0, 255, 0, 1400); // 减少红色 LED 5 channelOut[13] =map(channel[13], 0, 255, 0, 4095); channelOut[14] =map(channel[14], 0, 255, 0, 4095); //为 (int i =0; i <=14; i++) { if (channelOut[i] ==0) { pwm.setPWM(i, 4096, 0); 赋值} else { pwm.setPWM(i, 0, 4095 - channelOut[i]); } }}
Freestyler 的夹具BatchFile
PC上DMX控制程序的通道定义描述
BuzzComments:""Outdoor LED3 0 0 RBG Outdoor.gif0000000 1 123RedGreenBlueMacros 2 0 0 0 1 0 0255000000255025502525020505055020505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050205 

示意图

具有 DMX 输入和 PWM / I2C 输出的通用 Nano 底座 Universaldmx_2ixt4yqoce.sch Universaldmx_a0KdrmJqGU.brd5x 3 通道。 (15x PWM) 分配与 12V (+/-) 输入 verteiler_dmx_a0M4khDOMv.sch verteiler_dmx_P6etUU6zsN.brd3x 350mA / 12V 电源,带 PWM 输入 3xksq_rework_2VYUHjd5Xl.sch 3xksq_rework_4rpvCLaFrs.brd 3xksq_rework_qp87kzXQGy.txt Universaldmx_GtNeOjMWZL.txt

制造工艺

  1. DIY LUMAZOID Arduino 音乐可视化器
  2. Web 操作的 DMX 控制器
  3. 手势控制互动桌灯
  4. Arduino 带蓝牙控制 LED!
  5. Arduino Quadruped
  6. 抗击冠状病毒:简单的洗手计时器
  7. Arduino RGB 混色器
  8. 使用 Arduino Uno 控制 LED 矩阵
  9. DIY Arduino RADIONICS 治疗MMachine
  10. LED 轮盘游戏
  11. Arduino 自动停车库
  12. 超声波测距仪