学习目标:
- 理解并能正确使用调试输出和分支结构等节点;
- 能正确连接并使用光线传感器,完成智能植物生长灯的制作;
- 理解并能够正确设置注入节点、判断等节点以及掌握使用Smart_Node制作智能植物生长灯的逻辑。
一、项目描述
植物生长灯是一种特殊的灯具,依照植物生长必须需要太阳光的原理,当光线强度较低时继续向植物提供光线从而促进植物生长,如图1所示。现在市场中已经出现大量的植物生长灯,但是目前市场上植物生长灯主要针对经济作物,对于家庭室内植物提供的较少,并且价格比较昂贵。本节课我们就使用Edison的套材和Smart_Node相结合制作可以判断外界环境光线的强弱,当光线较弱时,触发LED灯亮灭的智能植物生长灯。
图 1 植物生长灯
二、项目分析
制作植物生长灯的关键问题就是判断外界环境的强弱,当光线低于一定的阙值时,就可以触发LED的亮灭来为植物提供外界光线。为了解决这个问题,我们可以使用光线传感器判断外界光线的强弱,项目设计列表可以参考下表1所示。
表 1 智能植物生长灯的项目设计
项目名称 | 智能植物生长灯 |
项目功能 | 判断外界光线强弱,当低于一定的值时触发LED灯。 |
器材清单 | Edison、光线传感器、LED灯 |
工作流程 |
![]() |
三、基础知识
(一)光线传感器
光线传感器也成为环境光线传感器,可以用来对环境光线的强度进行检测,通常用来制作随光线强度变化产生特殊效果的互动作品,如图 2 所示。
光线传感器是一种模拟传感器,需要接到模拟口上,值的范围为0~1023,光线强弱的不同会输出不同的值,光线越强数值越大,光线越暗数值越小。
图 2 光线传感器
(二)调试输出
“调试输出”节点在Smart_Node中运用比较广泛,我们在调试程序时会常用到。其作用类似于Arduino中的串口通信,可以将我们需要调试的数据呈现在“调试”窗口中。例如在本案例中实时读取外界光线的强弱。
(三)分支结构
由于Smart_Node在采用数据流的形式,所以我们常常需要使用分支结构完成分流。例如在本次案例中,我们就需要判断外界光线是否大于20,如果小于20则数据流流入“1”节点中,如果大于等于20则流入“0”节点中。
四、实现过程
(一)硬件连接
将Edison,LED灯和光线传感器连接起来,如下图 3所示。LED灯连接到数字口5(D5),光线传感器连接到模拟输入(A0)。
图 3 智能植物生长灯硬件连接图
- 流程设计
智能植物生长灯采用数据流的形式,通过“时间戳”节点每一分钟触发一次,switch(判断)节点判断外界光线的强弱,当光线值低于一定值时向LED灯发送“1”,LED灯亮;当光线值高于一定值时向LED灯发送“0”,则LED灯灭。具体流程如下图 2所示。
图 4 智能植物生长灯的流程设计图
(三)节点设置
由于要持续监测监测光线传感器所获取的数值,因此我们需要使用“时间戳”节点并对节点进行设置。我们将“重复”下拉框中选择“时间间隔”,并选择每个1分钟监测一次。如下图 5所示:
![]() |
![]() |
图 5 “时间戳”设置
想一想:
- 什么时候“有效载荷”设置为“时间戳”、“字符串”和“空白”呢?他们之间有什么区别?
- 在设置“时间戳”是,选择和不选择在最开始插入一次有什么区别呢?
- 什么时候“重复”设置“无”、“时间间隔”、“时间段内的时间间隔”、“特定时间”,他们之间有什么区别呢?
光线传感器可以实时获取外界的光线强度,那么我们如何读取呢?为了解决这个问题,我们就需要用到调试节点了。调试节点的设置比较简单,本案例主要将“输出”设置为“消息属性”,将“输出到”设置“调试标签页”,具体如图 6所示。
![]() |
![]() |
图 6 “调试节点”设置
怎么能够判断光线的强弱呢?不用担心,这个时候我们需要用到switch(判断)节点了。使用switch节点当外界光线低于一定的阙值时,我们输出1;当高于一定阙值时,switch就输出0。具体设置也很简单的,如下图 7所示。
![]() |
![]() |
图 7 switch节点设置
我们知道LED灯的亮灭主要取决于输入的是0还是1,因此我还需要一个节点,通过switch节点对外界光线强弱判断后,我们选择“改变”节点,向LED灯输入数字。具体设置如图 8所示。
![]() |
![]() |
图 8 “改变”节点输出1的设置
通过对以上节点的设置,将各个节点连接起来,就可以实现我们智能植物生长灯的程序编写。
- 效果测试
点击“部署”按钮,可以观察智能植物生长灯是否正常工作。如果不能正常工作,我们可以选择“调试”框对光线传感器的阙值进行设置,也可以老师或同学交流查找问题所在。最后,分享自己的作品和经验。
五、挑战自我
点击“部署”后,我们的智能植物生长灯就完成了,很简单吧。但是我们发现每次LED灯的亮度值都是一定的,我们能不能根据外界的光线强度自动调整LED的亮度值呢?
六、扩展阅读
range节点
Smart_Node编程环境中有“range节点”,该节点类似Arduino编程环境下的“映射节点”。可以将一定范围内的一个值转化为另一个范围内的值。下面简单介绍一下该节点的使用。
下面给大家举个例子,我们可以将输入的数值从0~1023等比例缩小到0~255的目标范围。
本节课我们学习制作了智能植物成长灯,当光线较弱时,LED灯亮,当光线较强时,LED灯熄灭。那么我们能否根据光线的强弱控制LED灯的亮度呢?【利用映射实现】有同学肯定会有疑问,为什么是0~1023到0~255,而不是别的数值呢?原因就是我们光线传感器值的范围是0~1023,而LED灯的亮度为0~255。