当前位置:首页|资讯

可遥控应援棒的控制信号

作者:pikeman发布时间:2024-09-24

应援棒与遥控设备

演唱会的应援棒可以分区遥控开关变色。淘宝和阿里巴巴上有不少在售,具体可以参考这些商品的介绍。

遥控器可以通过上面的按键控制发射无线控制信号,不同分区的应援棒接收信号变换各自的灯光,从而实现分区场控(废话)。有的遥控器上还有DMX512接口。

这些设备的控制大概率通用(都是深圳几家厂产的)。控制信号有433.92MHz和2.4GHz两种频率,前者更常见,本文介绍的也是这种。


信号捕捉

我用的是HackRF One(硬件)+Universal Radio Hacker(软件)录制遥控器信号,反正随便什么SDR都行。

最简单的OOK(On-off keying)信号,频率433.92MHz,波特率3936(即每个信号持续254μs,实际录下来的是这么多,不确定是不是应该是4000)。

Universal Radio Hacker会自动识别为ASK,然后解析出对应的二进制串。

总体来说,是在用牛刀杀鸡。


信号分析

以“所有分区都长亮白光”为例,OOK信号解析后的二进制串为:

11111111000011110010010010010010010010010011011011011011011011011011011011011011011011011011011011011011011011011010010010010010010010011010010010010010011010010011010010011011010010010

标了颜色之后特征就很明显了,最前面蓝色的17个bit固定,然后每两个绿色的bit(01)后面接一个红色的bit。这些红色的bit是实际有意义的数据,我们把它们分离出来(实际上述信号会重复数次防止干扰,重复之间有间隔,所以最后面应该加几个0,这里就忽略了)。

00000000 11111111 11111111 11111111 00000001 00000100 10011000

总共56个bit,分成7组,每组8个bit。

最前面紫色一组表示功能,其数值决定了后面有多少组,每组的定义是什么,在后面“编码规则”一节详细讨论。

最后面橙色一组是checksum,其数值等于前面n组(这里n=6)都加起来再加10010110,取末尾的8个bit。

比如这里 00000000 + 11111111 11111111 11111111 00000001 00000100 + 10010110 1110011000


一些常量

介绍编码的规则之前先做一点准备工作。应援棒在不接收新的信号的情况下,会保持一种固定的颜色和固定的闪烁状态。这些颜色和闪烁状态用以下数字表示:


颜色:

0(0000): 红色    1(0001): 绿色    

2(0010): 蓝色    3(0011): 粉色    

4(0100): 白色    5(0101): 黄色    

6(0110): 浅蓝    7(0111): 浅绿    

8(1000): 紫色    9(1001): 橙色    

10(1010): 浅粉    11(1011): 没那么浅的蓝    

12(1100): 浅黄    13(1101): 没那么浅的绿    

14(1110): 浅红    15(1111): 更亮的白色    

名字乱写的,屏幕上的颜色更是乱选的,请以实物为准。

总共16种颜色,括号内的是二进制数,此外还有特殊的(10101010),表示颜色不变。


闪烁状态:

0(0000): 长暗(不亮)    1(0001): 常亮    

2(0010): 慢速闪烁    3(0011): 中速闪烁    

4(0100): 快速闪烁    

5(0101): Fade in    6(0110): Fade out    

11(1011): 闪烁状态不变    

注意这个Fade in和Fade out比较坑爹,必须要Fade in点亮的才能Fade out熄灭,猜测做出来就是为了实现呼吸灯的效果,所以总是成对出现,就没考虑单独使用的场景。


编码规则

“信号分析”一节提到,编码的前8个bit定义了后面内容的具体含义,依此进行分类:


指定分区变更(00000000)

指定的分区的应援棒变更为指定的颜色和指定的闪烁状态,应该是最常用的一种类型。

还是上面“所有分区常亮白光”的例子:

00000000 11111111 11111111 11111111 00000001 00000100 10011000

最前和最后的8个bit已经有了明确的定义,剩下中间的5组。

11111111 11111111 11111111 00000001 00000100

最后一组是颜色,倒数第二组是闪烁状态。如上一节所示,00000100代表白色,00000001代表常亮。

前面的两组代表分区的选择,各个比特对应的分区依次为:

HGFEDCBA PONMLKJI

第三组固定为11111111,实际改了也没影响,不清楚是不是给另外8个分区预留。

再举一个例子:

00000000 00000101 00000000 11111111 00000100 10101010 01001000

表示A, C两个分区的应援棒维持当前颜色不变,闪烁状态变更为快速闪烁。


所有分区变色(11000000)

一次性让不同分区的应援棒变更为各自不同的颜色。

举个例子:

11000000 01000001 00000000 00000000 00000000 00000000 10010111

中间的五组:第一组前半表示A分区的颜色,后半表示B分区颜色,第二组前半C分区,后半D分区,依此类推。

所以这串码会让A分区变更为白色(0100),B分区变更为绿色(0001),CDEFGH分区变更为红色(0000)。

这里有个问题,分区总共有A到P共16个,但这串码只能覆盖到10个。我手里只有A到H共8个分区的应援棒,所以不清楚后8个分区的应援棒会如何响应。


解锁(11011010)

应援棒接收信号变换状态后会锁定当前状态,无法再通过物理按键改变颜色。解锁即恢复该按键的功能。

11011010 11111111 11111111 11111111 00000001 00000000 01101110

中间的五组,前两组表示分区,后三组的数值对信号效果无影响。


脉冲(10100110)

所有分区应援棒闪一下,然后快速熄灭。

举例:

10100110 00000111 01000011

与前面几种长度不同,除去头尾的两组,只有中间的一组8个bit表示脉冲的颜色,这里是浅绿色(0111)。


上述编码均来自遥控器的按键操作,不清楚连接DMX512接口时是否会使用另外的编码类型。

参考本节内容写编码,再按照“信号分析”一节还原为“原始”二进制串,之后就可以用各种能发射433.92MHz信号的设备控制应援棒了,便宜的比如Arduino加上对应模块。


题外话

1. 几年前的应援棒和遥控器之间通信用的也是433.92MHz的频率,但编码的规则不同(比如小黄鱼上卖的旧遥控器大多是老编码的),不排除后面厂商会再次更新。

2. 大多数商家都不愿意卖少量不同分区的应援棒,淘宝上问了很多家都要200根起。反而是阿里巴巴上有个别(可能是接近源头的)商家愿意单卖。

3. 感叹一下,编程菜鸟在嵌入式平台上写程序真的太折磨了……



Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1