硬件

Shell Lab L4 是USB串口控制的可编程LED射灯/塔灯控制器

产品特点:

● 4路PWM调制控制的NMOS场效应管驱动大功率LED灯
● 各路灯独立控制,可设置功率、闪烁频率,闪烁次数,指令简单
● 功率调节范围0~100%
● 集成闪烁效果(频率可调,0.1~20Hz,设置为0时为静态不闪烁)
● 不限于LED灯,可用于其它需要PWM调节功率的设备,如直流电机的软启停,加热丝功率调节
● 扩展板支持两路NPN传感器输入,以及两个测试按键
● 2米USB线长
● 串口交互式控制,开放式通讯协议,自带命令帮助
● 不限制编程语言(推荐Python)
● 提供配套上位机“测试台软件”,自带众多示例代码
● 用pip安装mcush库(支持windows/linux/mac),编写python脚本

应用场景:

● 产品原型设计(用Python快速验证你的创意,收集用户反馈)
● 产品、软件循环测试出现异常时报警提示(可配合Shell Lab测试台软件)
● 产品生产线项目测试结果提示,如控制三色塔灯,绿色正常通过,红灯故障失败并报警
● 看板系统状态提示
● 互动式游戏设计
● 教学实验设计
● 户外无人值守场景,自动信息提示
● 工控设备系统集成
● 艺术创作
● 舞台灯光控制
● 景观灯光控制
● DIY玩具
● 广告招牌

支持定制:

● 定制PCB和外壳,适应不同场景
● 定制固件,实现特定场景下的工作模式,适合作为独立的灯光模块系统集成
● 改用蓝牙转串口模块,方便手机无线控制
● 改用RS232接口控制

注意事项:

● 工作原理控制方式与L1信号灯基本一致,可方便移植
● NMOS驱动板需要外部12~24V直流供电

软件

串口通讯常见问题
C语言编程常见问题

串口指令:

=>light --help
usage: light [-i index] [-r] [-s] [-p power] [-f freq] [-c counter]
options:
 -i/--idx        index param
 -r/--reset      reset channel(s)
 -s/--sync       sync all channels
 -p/--power      PWM modulation 0~100 %
 -f/--freq       0~20 Hz(default 1)
 -c/--counter    blink down-counter
=> 

示例:

(上电自检后,所有通道无输出)
第0通道灯设置100%功率,不闪烁:
=>light -i0 -p100 -f0 -c -1
=> 
第1通道灯设置50%功率,5Hz频率,闪烁10下后关闭:
=>light -i1 -p50 -f5 -c10
=> 
取消第1通道灯次数限制,使之一直闪烁:
=>light -i1 -c -1
=> 
将所有通道灯闪烁效果保持同步(避免同频不同步):
=>light -s
=> 

Python封装:

安装:pip3 install mcush
升级:pip3 install -U mcush
class ShellLabSpotLight(mcush.Mcush.Mcush):
    def light(self, index=None, power=None, freq=None, count=None, reset=None, sync=None):
        # 底层的串口命令封装
    
    def reset(self):
        # 状态复位

    def sync(self):
        # 各通道灯闪烁相位同步

示例:

import mcush
from mcush.linkong.ShellLab import ShellLabSpotLight
s = ShellLabSpotLight('COM10')  # 填入对应的串口号
s.light(index=0, power=100, freq=2)  # 设置0通道灯最大功率2Hz快闪

下载

Shell Lab 测试台软件


CH341虚拟串口驱动(Windows)


应用

灯带闪烁/呼吸灯效果

塔灯控制闪烁效果


配置成传感器触发/按钮开关控制的闪烁声光报警器
# this script runs in ShellLab Testbench Application
fcfs = Utils.FCFS()

fcfs.appendFile("init", '''\
delay
gpio -p0.4 -i
test -p0.4 load /c/stop
load /c/alarm
''')

fcfs.appendFile('stop', '''\
e 0
s -i0 -c1
s -i1 -c1
s -i2 -c1
s -i3 -c1
load /c/pre_check
''')

fcfs.appendFile('alarm', '''\
e 1
s -i0 -p100 -f1 -c -1
s -i1 -p100 -f1 -c -1
s -i2 -p100 -f1 -c -1
s -i3 -p100 -f1 -c -1
s -s
load /c/post_check
''')

fcfs.appendFile('pre_check', '''\
delay 100
test -p0.4 load /c/pre_check
delay 100
test -p0.4 load /c/pre_check
load /c/alarm
''')

fcfs.appendFile('post_check', '''\
delay 100
test -n -p0.4 load /c/post_check
delay 100
test -n -p0.4 load /c/post_check
load /c/stop
''')

s = ShellLabSpotLight(PORT)
s.fcfsFormat()
s.fcfsProgram(fcfs.generate())
s.port.write('reboot\n')
上述代码效果