Seer Robotics 氛围灯|DMX512灯带|说明 240324 V1.0
一、适用范围
本文档针对“DMX512灯带”的配置方法进行说明。
适用灯带IC的选型有:
SM16512
SM17512
TM512AC
SM18512( SRC2000固件版本需要在2.1.36以上,SRC800 rbk版本需要在3.3.5.74以上)
其余灯带IC未测试过,不推荐使用。
二、氛围灯电气连接 | 线束连接
2.1 更换氛围灯连接器,改为TE DT06-4S连接器: (氛围灯连接器官网链接)
| 连接器PIN | 线标 | 对应线束 |
| DT06-4S PIN1 | 485通信A | 灯带蓝线 |
| DT06-4S PIN2 | 电源 | 灯带红线 |
| DT06-4S PIN3 | 地 | 灯带黑线 |
| DT06-4S PIN4 | 485通信B | 灯带绿线 |
注1:灯带黄线不引出。
注2:对接入SRC-2000(S) 控制器的 TE35 连接线的 DT04-4P 连接器中。(线号为17、29、25、10,分别为RS485_N1、RS485_P1、GND、PWR_DO6)
三、模型文件配置 | 氛围灯参数配置(各种用法)
3.1 老模型文件方式
1.将模型文件中的LED勾选即可。

3.2 新模型文件方式
在模型文件中找到led的设备,默认状态不启用。

四、模型配置
点击led,在右侧属性窗口配置参数。
Brand参数为WST-SM16512PS-DMX512 | ADY-SM18-60F4-1024,勾选启用备。
| Key | Description | Value |
| brand | WST-SM16512PS-DMX512 | |
| colorRed | 红色的参数设置 | 范围(0,255) |
| colorGreen | 绿色的参数设置 | 范围(0,255) |
| colorBlue | 蓝色的参数设置 | 范围(0,255) |
| colorWhite | 白色的参数设置 | 范围(0,255) |
| showCharging | 是否显示充电效果 | 勾选则为显示充电效果,不勾选则为不显示 |
| showBattery | 是否显示电池效果 | 勾选则为显示电池效果,不勾选则为不显示 |
| turnLeftFrontPos | 左前转向灯组序号(6 灯珠/组) | 请根据实际使用情况和需求进行配置 |
| turnLeftFrontNum | 左前转向灯组数量(6 灯珠/组) | 请根据实际使用情况和需求进行配置 |
| turnLeftRearPos | 左后转向灯组序号(6 灯珠/组) | 请根据实际使用情况和需求进行配置 |
| turnLeftRearNum | 左后转向灯组数量(6 灯珠/组) | 请根据实际使用情况和需求进行配置 |
| turnRightFrontPos | 右前转向灯组序号(6 灯珠/组) | 请根据实际使用情况和需求进行配置 |
| turnRightFrontNum | 右前转向灯组数量(6 灯珠/组) | 请根据实际使用情况和需求进行配置 |
| turnRightRearPos | 右后转向灯组序号(6 灯珠/组) | 请根据实际使用情况和需求进行配置 |
| turnRightRearNum | 右后转向灯组数量(6 灯珠/组) | 请根据实际使用情况和需求进行配置 |
| lightTotalNum | 灯珠组数量(6 灯珠/组) | 请根据实际使用情况和需求进行配置 |
| redChannel | 红色灯带通道 | 默认通道顺序RWGB:参数配置依次为0、2、3、1 |
| greenChannel | 绿色灯带通道 | 默认通道顺序RWGB:参数配置依次为0、2、3、1 |
| blueChannel | 蓝色灯带通道 | 默认通道顺序RWGB:参数配置依次为0、2、3、1 |
| whiteChannel | 白色灯带通道 | 默认通道顺序RWGB:参数配置依次为0、2、3、1 |
| isBackBreath | 倒退是否白色呼吸 | 勾选则倒退是白色呼吸 |

五、测试
1. Roboshop 点击地图与控制-参数配置-底盘配置-显示更多-参数 【DmxTestFlag】

2. 可以在参数配置界面搜索 【DmxTestFlag】

3. 将DmxTestFlag 配为 【true】

默认为False:
| 参数配置 | 单位 | 默认 | 解释 |
| DmxTestFlag | —— | false | 选择ture,可开启灯带测试 |
4. 可以直接修改模型文件中 【RGB】 参数控制灯带发出对应颜色的光,可以参考网上 【RGB】 配色表进行调色验证

六、灯带使用技巧
很多时候车上需要多段灯带,但控制器只能接一根灯带,如何处理?
灯带是基于RS485总线的设备,RS485总线是可以串联的,我们用到的灯带是按节控制的,一节一般长度是100mm,RBK目前能控制的总节数是有上限的,当长度没法满足我们的布局,可以按100mm的整数倍长度(焊接处)将灯带剪断,再用导线连起来,分成多段来控制。
剪开灯带时,注意不要打乱原来整条中每段的顺序,每段灯带都有对应的地址!

不同控制器RBK可控灯带长度限制:
| 控制器 | 灯带总节数 | 灯带亮灯长度总长 |
| SRC-2000 | 60 | 6m |
| SRC-3000/880 | 20 | 2m |
| SRC-800 | 12 | 1.2m |
七、左右转向灯示意

剪开灯带时,注意不要打乱原来整条中每段的顺序,每段灯带都有对应的地址!
* 如果地址打乱了,需要使用DMX512写码器重新写码。自备写码控制器后,还有一个优点是,万一出现灯带不亮的情况,也可以用DMX512写码控制器进行测试确认,是灯带问题还是设置问题。而不需要返厂检测,节省时间。
> DMX512写码控制器推荐01:K1000C控制器, 操作有点复杂, 网址= https://www.nvled.com/?p=6897
> DMX512写码控制器推荐02:W1000控制器, 操作相对简单, 使用微信扫码小程序控制, 可视化操作, 网址= W1000-BT全能型DC5V/12V/24V三段电压输出直流电源嵌入式蓝牙幻彩灯光控制器 – 深圳市爱得意照明灯具厂
> DMX512写码控制器推荐03:W2000控制器, 操作相对简单, 使用微信扫码小程序控制, 可视化操作, 产品尺寸最小
> DMX512写码控制器推荐04:XB-C100触屏写码控制器, 操作最简单, 网址= XB-C100带电池带触控大屏DMX512地址写码器和控制器2合1 – 深圳市爱得意照明灯具厂
八、常见问题
- 出错报警:红色呼吸
- 急停:暗红色闪烁
- 被阻挡:粉紫色跑马灯
- 运动中:蓝色呼吸
- 充电中:橙黄色呼吸
- 电量低于 20%(可配置): 暗红色跑马灯同时伴随蜂鸣器响
- 静止状态:显示电量,从绿色 (100%)至暗红色 (20%)渐变
- 电池类型未配置(或电池通讯出错)且机器人静止:彩虹灯带
以上顺序即为氛围灯显示的优先级,即出错报警优先于急停显示。高优先级的条件满足后,即显示相应的灯带效果,并且不再对低优先级的条件进行判断。每次更新的时间间隔约为【300ms】。
九、穿透脚本使用说明(dmx512氛围灯)
条件:
- SRC2000控制器
- Robokit版本在3.3.5.70及以上
- roboshop版本2.4.1.36及以上
- DMX512氛围灯为rpc通信方式
种类:
- Battery:显示电池电量
- ConstantLight:常亮
- Errofatal:紧急报错(红色呼吸)
- MutableBreath:呼吸灯
- Charging:充电中(橙黄色呼吸)
- MutableHorseRace:跑马灯
- FlowCalculator:流水灯
- Rainbow:彩虹灯
Python脚本接口解析 | 脚本示例(dmx512_demo.py)
import time
import math
import sys
import syspy.dmx512.dmx512_base as dmx
import syspy.lib.udp_debug as ud
class demo_dmx512(dmx.dmx512Base):
def __init__(self):
'''初始化基类,必须做'''
super(demo_dmx512, self).__init__()
self.__debug_out = ud.udpDebug()
sys.stdout = self.__debug_out
self.str1 = "battery"
self.not_stop_counts = 0
self.battery_exist = False
self.is_stop = True
self.ym_dxm512_enable = False
self.cur_w = 0.0
self.cur_x = 0.0
self.cur_y = 0.0
def run(self):
dmx512_info = self.createDmx512Message()
while 1:
'''从其他插件获取所需相关数据信息'''
movestatus_info = self.recMoveStatus()
robotspeed_info = self.recRobotSpeed()
'''cur_w:旋转度, cur_x:前进距离, cur_y:平移距离'''
self.cur_w = robotspeed_info.rotate
self.cur_x = robotspeed_info.x
self.cur_y = robotspeed_info.y
'''实时获取电池信息并转换为dmx类型 '''
dmx_battery = self.recBattery()
tem = (dmx_battery.percetage * 100.0)
dmx512_info.battery = int(tem)
'''非停止状态计数'''
if self.getChassisStop() == True :
self.is_stop = True
else:
if self.not_stop_counts >= 1:
self.is_stop = False
else:
self.not_stop_counts = self.not_stop_counts + 1
'''设定初始正常运动状态蓝色rgbw'''
RGBW = [0, 80, 164, 0]
dmx512_info.color_r = RGBW[0]
dmx512_info.color_g = RGBW[1]
dmx512_info.color_b = RGBW[2]
dmx512_info.color_w = RGBW[3]
'''判断是否从模型文件读取到'''
self.battery_exist = self.modelDeviceEnable(self.str1)
if self.warningExists(54001):
self.battery_exist = False
if (((self.getErrorNum()>0) and \
not(self.getErrorNum() == 1 and self.errorExists(52200)) and \
not(self.getErrorNum() == 1 and self.errorExists(52702)) and \
not(self.getErrorNum() == 2 and self.errorExists(52200) and self.errorExists(52702))) \
or self.getFatalNum()>0):
'''报错状态下红色呼吸'''
dmx512_info.type = dmx.LightType.Errofatal.value
elif self.getEMCState() == True:
'''急停状态下暗红色闪烁'''
dmx512_info.type = dmx.LightType.FlowCalculator.value
RGBW = [230, 30, 0, 0]
dmx512_info.color_r = RGBW[0]
dmx512_info.color_g = RGBW[1]
dmx512_info.color_b = RGBW[2]
dmx512_info.color_w = RGBW[3]
elif movestatus_info.blocked:
'''被阻挡状态下粉紫色跑马'''
dmx512_info.type = dmx.LightType.MutableHorseRace.value
RGBW = [30, 0, 30, 0]
dmx512_info.color_r = RGBW[0]
dmx512_info.color_g = RGBW[1]
dmx512_info.color_b = RGBW[2]
dmx512_info.color_w = RGBW[3]
elif (not self.is_stop):
'''not ym_dxm512'''
if (not self.ym_dxm512_enable):
'''正常运动下蓝色呼吸'''
dmx512_info.type = dmx.LightType.MutableBreath.value
if (self.cur_w >= math.radians(1) * 3):
'''机身左旋'''
if (self.cur_x > 0.0):
'''机身左旋+前进'''
dmx512_info.turn_left_or_right=1
elif (self.cur_x < 0.0):
'''机身左旋+后退'''
dmx512_info.turn_left_or_right=2
else:
'''机身原地左旋'''
dmx512_info.turn_left_or_right=3
elif (self.cur_w <= math.radians(-1) * 3):
'''机身右旋'''
if (self.cur_x > 0.0):
'''机身右旋+前进'''
dmx512_info.turn_left_or_right=2
elif (self.cur_x < 0.0):
'''机身右旋+后退'''
dmx512_info.turn_left_or_right=1
else:
'''机身原地右旋'''
dmx512_info.turn_left_or_right=3
else:
'''无转向状态'''
dmx512_info.turn_left_or_right=0
elif self.battery_exist:
'''静止状态且battery存在'''
maxPer = self.getBatteryMaxPercentage()
if (dmx_battery.is_charging and (self.getShowCharging()==True)):
'''充电中为橙黄色呼吸'''
dmx512_info.type = dmx.LightType.Charging.value
elif (dmx_battery.percetage * 100 < maxPer):
'''电量低于20 %(可配置)为暗红色跑马灯'''
dmx512_info.type = dmx.LightType.MutableHorseRace.value
RGBW = [170, 20, 0, 0]
dmx512_info.color_r = RGBW[0]
dmx512_info.color_g = RGBW[1]
dmx512_info.color_b = RGBW[2]
dmx512_info.color_w = RGBW[3]
elif (self.getShowCharging()==True):
'''显示电量,从绿色至暗红色渐变'''
dmx512_info.type = dmx.LightType.Battery.value
tem = (dmx_battery.percetage * 100.0)
dmx512_info.battery = int(tem)
else:
'''否则蓝色常亮'''
dmx512_info.type = dmx.LightType.ConstantLight.value
else:
'''电池类型未配置且机器人静止为彩虹灯'''
dmx512_info.type = dmx.LightType.Rainbow.value
self.sendDmx512(dmx512_info)
if __name__ == '__main__':
client = demo_dmx512()
client.run()
脚本崩溃信息查看
脚本运行无反应,重启脚本并在终端指令实时查看有无脚本崩溃
tail -f /var/log/syslog
重要升级更新提醒:
2024年起DMX512芯片升级为SM18512PS, 敬请留意。新品链接在这里:SM18512PS明微DMX512协议驱动RGBW四合一AGV机器人防水灯带 – 深圳市爱得意照明灯具厂 (nvled.com)