普通灯一般使用机械开关控制亮灭,而智能灯使用各种传感器控制亮灭。本课将学习制作一种智能声控灯,它能够在检测到周围光线比较暗、同时声音强度超过指定值时自动点亮。不仅能够给使用者带来方便,还可以节约用电。
要制作本课的范例作品,需要使用以下新的硬件模块:
亮度传感器其实是一个光敏管,能够感知周围光线的强度,通过转化和采集后输出具体数值(如下图7-1所示)。
Arduino套件中亮度传感器输出的光线强度取值范围是(0,4095)。
图7-1 亮度传感器模块
声音传感器里面有一个对声音敏感的电容式驻极体话筒,声波会使话筒内的驻极体薄膜振动,产生电压变化,通过转化和采集后输出具体数值(如上图7-2所示)。
Arduino套件中的声音传感器输出的声音强度取值范围是(0,4095)。
图7-2 声音传感器模块
要制作本课的范例作品,需要使用以下器材:
² UNO主控板和配套的扩展板
² 声音传感器模块:一个
² 亮度传感器模块:一个
² 数码管模块:一个
² RGB LED模块:一个
² 3P连接线:三根
² 4P连接线:一根
要搭建本课的范例作品,可以按以下步骤操作:
1. 将UNO扩展板插入到UNO主控板上。
2. 将4P连接线白色插头插入数码管模块的接口中、黑色插头插入扩展板第二排右边的IIC端口,黑色插头插入时要注意连接线每根线的颜色和扩展板插座针脚的颜色相同。
3. 将一根3P连接线白色插头插入亮度传感器模块的接口中、黑色插头插入扩展板中间的“A0”号端口,黑色插头插入时要注意连接线每根线的颜色和扩展板插座针脚的颜色相同。
4. 将另一根3P连接线白色插头插入声音传感器的接口中、黑色插头插入扩展板中间的“A1”号端口,黑色插头插入时要注意连接线每根线的颜色和扩展板插座针脚的颜色相同。
5. 将第三根3P连接线白色插头插入RGB LED的接口中、黑色插头插入扩展板中间的“D2”号端口,黑色插头插入时要注意连接线每根线的颜色和扩展板插座针脚的颜色相同。
具体器材连接方式如下图3-3所示:
图7-3 “智能声控灯”范例作品硬件连接图
6. 用USB线把主控板和计算机连接起来,打开“好好搭搭硬件下载”插件,选择“型号”为“UNO”,确认插件程序左下角的端口和型号显示正确。
登录“好好搭搭”网站,选择“创作”栏目中的“Arduino模板”,进入“Arduino编程设计页”进行编程。
要在数码管上显示亮度传感器的值,可以使用“重复执行”指令,重复执行“数码管消除”、“数码管显示”及“等待”指令,再将“读模拟口”指令作为“数码管显示”指令的显示数值参数。由于亮度传感器连接的是“A0”端口,因此就会在数码管上每隔“0.5”秒刷新显示当前环境的亮度值。具体程序代码如下图7-4所示:
图7-4 “在数码管上显示亮度传感器值”程序代码
| 将上图7-4所示代码编译后下载到主控板上,然后按下表要求测试不同环境下的亮度值,将数码管上显示的数值记录下来。 |
我发现:________________________________________________________________
_______________________________________________________________________
与数码管上显示亮度传感器值的程序类似,由于声音传感器连接的是“A1”端口,因此在数码管上显示声音传感器值的程序只需要修改“读模拟口”指令的参数为“A1”,这样在数码管上每隔“0.5”秒刷新显示的就是当前环境的声音响度值。具体程序代码如下图7-5所示:
图7-5 “在数码管上显示声音传感器值”程序代码
| 将上图7-5所示代码编译后下载到主控板上,然后按下表要求测试不同环境下的声音情况,将数码管上显示的数值记录下来。 |
我发现:________________________________________________________________
_______________________________________________________________________
要让亮度传感器控制LED亮灭,需要对亮度传感器的值进行判断:如果亮度传感器所连接的“A0”模拟口读取的值小于指定值(本例中指定值为50)、也就是周围光线比较暗,那么点亮连接在“2”数字端口的RGB LED;否则熄灭RGB LED。具体的程序代码如下图7-6所示:
图7-6 “用亮度传感器控制RGB LED亮灭”程序代码
为了使程序更简洁,上图7-6中的程序使用了名为“RGB”的功能块,具体功能块代码如下图7-7所示。
图7-7 “RGB功能块”脚本代码
| 如何在用亮度传感器控制灯光亮灭的同时,用数码管显示实时的周围环境亮度值? |
要用声音和亮度传感器同时控制灯光亮灭,也就是周围光线比较暗的同时,声音的响度还要达到一定的值,灯才会亮。这个程序代码的核心是对判断的条件进行设置,可以使用“数字和逻辑运算”类别中的“且”指令。也就是连接亮度传感器“A0”端口的值小于“50”的同时,连接声音传感器“A1”端口的值还必须大于“500”,只有这两个条件都满足的情况下,灯才会亮;否则,设置灯是灭的。具体程序代码如下图7-8所示:
图7-8 “用亮度和声音传感器同时控制灯光亮灭”程序代码
| 如下图7-9所示程序脚本,与上图7-8有什么不同?它能否让智能声控灯正常工作?分析这两种程序编写方法有什么区别?你喜欢哪种方法? |
图7-9 “用亮度和声音传感器同时控制RGB LED亮灭”程序代码2
| 根据实际环境光线及声音响度情况,调整具体数值,使得智能声控灯更有实用性。 |
除了使用亮度和声音传感器控制灯光,你还能让灯光控制更智能、使用更方便吗?
我打算这么做:_______________________________________________________
______________________________________________________________________。
做的时候需要注意:____________________________________________________
______________________________________________________________________。