牟晓东
常规的颜色传感器内置有红、绿、蓝三基色传感元器件,在滤色器的作用下从可视光的区域中进行颜色数据的获取,输出RGB数值。如果将颜色传感器接入树莓派进行“识色”,然后在古德微机器人网站进行“积木”式图形化编程,可以非常方便地开发出一些比较有趣、实用的创客作品模块,比如看卡识色的“变色龙”灯带和视觉障碍者的“红绿灯语音提醒器”。
根据颜色传感器获取到不同卡片(或其他物体)的颜色信息,分解出对应的RGB数值,作为灯带60颗灯珠的发光三基色,相当于“复制”卡片的颜色再“粘贴”到每一颗灯珠上,实现“变色龙”灯带的显示效果。
实验器材包括树莓派3B+和古德微扩展板各一块,GY-33 TCS34725颜色传感器(带遮光筒)一个,可编程ws281x灯带一条,公对母异色杜邦线四根,各种颜色卡片若干。
首先将灯带插入扩展板的18号引脚,注意三根线的标注要与扩展板一一对应;接着,将四根杜邦线一端连接颜色传感器(VCC、GND、SCL和SDA端),另一端连接至扩展板IIC接口(VCC、GND、CLK和DATA端);最后,给树莓派通电,启动操作系统(如图1)。
访问古德微机器人网站(http://www.gdwrobot.cn),登录进入自己账号后点击“设备控制”进入“积木”界面,开始图形化编程:
首先,通过模块语句“设置GPIO‘18可控制灯带‘60个灯珠并设置亮度为‘50”对灯带进行初始化;接着,建立一个“重复当‘真执行”的循环结构,通过模块语句“输出调试信息‘获取颜色检测传感器的数据”,将颜色传感器获取的RGB数据以数组的形式在LOG调试信息区输出,比如:“[172,144,240]”;然后建立三个变量:“红色分量”、“绿色分量”和“蓝色分量”,分别赋值为RGB数据列表中的“第一”、“第二”和“最后”序列值,即分别获取对应的颜色分量数值;再建立一个内部循环结构,设置60个灯珠的发光颜色为对应的三个变量值;最后,添加“灯带刷新显示”模块语句,控制灯带按照设置的颜色效果发光,再添加“等待0.2秒”,防止程序运行占用过多的系统资源而“死机”(如图2)。
将程序保存后点击“连接设备”,再点击“运行”按钮进行测试。此时,会在调试信息区不断显示由颜色传感器实时获取的各组RGB颜色数据;尝试将红色、绿色、蓝色和黄色卡片分别放置于颜色传感器的遮光筒附近,灯带立刻会随之变色,发出对应颜色的光(如图3),实现了“变色龙”灯带的显示效果。
颜色传感器“负责”实时检测十字路口的红绿灯变换情况,根据不同颜色的灯光信号信息,树莓派控制音箱发出对应的语音提醒信息,比如“绿灯,行!”、“红灯,停!”。
实验器材包括树莓派3B+和古德微扩展板各一块,颜色传感器一个,杜邦线四根,红色、黄色和绿色LED灯各一支,音箱一个。
保持颜色传感器与案例1相同的连接方式,然后,将红色、黄色和绿色LED灯分别连接至扩展板的5号、6号和12号引脚(注意长腿为正极、短腿为负极),用来模拟路口红绿灯;接着,将音箱的连接线插入树莓派的圆形音频输出孔,通电,启动操作系统(如图4)。
首先,建立一个名为“红绿灯”的函数,作用是模拟路口“红绿灯”实现的功能:绿灯(12号)亮10秒,闪烁三次,熄灭;黄灯(6号)亮3秒,熄灭;红灯(5号)亮10秒,熄灭(如图5)。
接着,建立对应的子线程(注意名称要与函数完全一致),对函数进行调用;然后,再建立一个“重复当‘真执行”的循环结构,将颜色传感器获取的颜色数据在LOG调试信息区进行实时显示输出;建立两个变量“红色分量”和“绿色分量”,分别为其赋值为颜色传感器输出数据的RGB列表中的第一个和第二个数据;建立第三个变量,名为“最大值分量”,为其赋值为RGB列表中数值最大的数据,表示RGB分量中最“占优势”的颜色对应数据;接着,建立一个“如果…执行…否则如果…执行…否则…”三分支选择结构,判断条件为“最大值分量”与“绿色分量”或“红色分量”是否相等,相等则说明对应颜色的LED灯亮起,执行的动作分别是输出文字调试信息和音箱播放对应的语音信息:“绿灯,行!”和“红灯,停!”,注意要分别添加“等待3秒”模块语句,作用是等待音箱播放完语音提醒;如果两个条件均不符合,说明是黄色LED灯亮起,则执行“黄灯,等!”的文字信息输出和提醒语音的播放(如图6)。
将程序保存后点击“运行”按钮进行测试,“红绿灯”LED开始循环闪亮工作,同时颜色传感器在不断检测灯光的颜色,并且音箱中也会响起对应的“绿灯,行!”、“黄灯,等!”和“红灯,停!”提醒语音,实现了预设的视觉障碍者“红绿灯语音提醒器”的功能(如图7)。