SmartNode与物联网:项目1-4 智能植物生长灯

学习目标:

  • 理解并能正确使用调试输出和分支结构等节点;
  • 能正确连接并使用光线传感器,完成智能植物生长灯的制作;
  • 理解并能够正确设置注入节点、判断等节点以及掌握使用Smart_Node制作智能植物生长灯的逻辑。

 

一、项目描述

植物生长灯是一种特殊的灯具,依照植物生长必须需要太阳光的原理,当光线强度较低时继续向植物提供光线从而促进植物生长,如图1所示。现在市场中已经出现大量的植物生长灯,但是目前市场上植物生长灯主要针对经济作物,对于家庭室内植物提供的较少,并且价格比较昂贵。本节课我们就使用Edison的套材和Smart_Node相结合制作可以判断外界环境光线的强弱,当光线较弱时,触发LED灯亮灭的智能植物生长灯。

image089

图 1 植物生长灯

 

二、项目分析

制作植物生长灯的关键问题就是判断外界环境的强弱,当光线低于一定的阙值时,就可以触发LED的亮灭来为植物提供外界光线。为了解决这个问题,我们可以使用光线传感器判断外界光线的强弱,项目设计列表可以参考下表1所示。

表 1 智能植物生长灯的项目设计

项目名称 智能植物生长灯
项目功能 判断外界光线强弱,当低于一定的值时触发LED灯。
器材清单 Edison、光线传感器、LED灯
 

工作流程

 image091

三、基础知识

(一)光线传感器

光线传感器也成为环境光线传感器,可以用来对环境光线的强度进行检测,通常用来制作随光线强度变化产生特殊效果的互动作品,如图 2 所示。

光线传感器是一种模拟传感器,需要接到模拟口上,值的范围为0~1023,光线强弱的不同会输出不同的值,光线越强数值越大,光线越暗数值越小。

image093

图 2 光线传感器

(二)调试输出

“调试输出”节点在Smart_Node中运用比较广泛,我们在调试程序时会常用到。其作用类似于Arduino中的串口通信,可以将我们需要调试的数据呈现在“调试”窗口中。例如在本案例中实时读取外界光线的强弱。

(三)分支结构

由于Smart_Node在采用数据流的形式,所以我们常常需要使用分支结构完成分流。例如在本次案例中,我们就需要判断外界光线是否大于20,如果小于20则数据流流入“1”节点中,如果大于等于20则流入“0”节点中。

四、实现过程

(一)硬件连接

将Edison,LED灯和光线传感器连接起来,如下图 3所示。LED灯连接到数字口5(D5),光线传感器连接到模拟输入(A0)。

image095

图 3 智能植物生长灯硬件连接图

  • 流程设计

智能植物生长灯采用数据流的形式,通过“时间戳”节点每一分钟触发一次,switch(判断)节点判断外界光线的强弱,当光线值低于一定值时向LED灯发送“1”,LED灯亮;当光线值高于一定值时向LED灯发送“0”,则LED灯灭。具体流程如下图 2所示。

image097

图 4 智能植物生长灯的流程设计图

(三)节点设置

由于要持续监测监测光线传感器所获取的数值,因此我们需要使用“时间戳”节点并对节点进行设置。我们将“重复”下拉框中选择“时间间隔”,并选择每个1分钟监测一次。如下图 5所示:

image099 image101

图 5 “时间戳”设置

想一想:

  • 什么时候“有效载荷”设置为“时间戳”、“字符串”和“空白”呢?他们之间有什么区别?
  • 在设置“时间戳”是,选择和不选择在最开始插入一次有什么区别呢?
  • 什么时候“重复”设置“无”、“时间间隔”、“时间段内的时间间隔”、“特定时间”,他们之间有什么区别呢?

image103

光线传感器可以实时获取外界的光线强度,那么我们如何读取呢?为了解决这个问题,我们就需要用到调试节点了。调试节点的设置比较简单,本案例主要将“输出”设置为“消息属性”,将“输出到”设置“调试标签页”,具体如图 6所示。

 image104 image105

图 6  “调试节点”设置

怎么能够判断光线的强弱呢?不用担心,这个时候我们需要用到switch(判断)节点了。使用switch节点当外界光线低于一定的阙值时,我们输出1;当高于一定阙值时,switch就输出0。具体设置也很简单的,如下图 7所示。

image106 image108

图 7 switch节点设置

我们知道LED灯的亮灭主要取决于输入的是0还是1,因此我还需要一个节点,通过switch节点对外界光线强弱判断后,我们选择“改变”节点,向LED灯输入数字。具体设置如图 8所示。

image110 image112

 

图 8 “改变”节点输出1的设置

通过对以上节点的设置,将各个节点连接起来,就可以实现我们智能植物生长灯的程序编写。

  • 效果测试

点击“部署”按钮,可以观察智能植物生长灯是否正常工作。如果不能正常工作,我们可以选择“调试”框对光线传感器的阙值进行设置,也可以老师或同学交流查找问题所在。最后,分享自己的作品和经验。

五、挑战自我

点击“部署”后,我们的智能植物生长灯就完成了,很简单吧。但是我们发现每次LED灯的亮度值都是一定的,我们能不能根据外界的光线强度自动调整LED的亮度值呢?

六、扩展阅读

range节点

Smart_Node编程环境中有“range节点”,该节点类似Arduino编程环境下的“映射节点”。可以将一定范围内的一个值转化为另一个范围内的值。下面简单介绍一下该节点的使用。

image118
下面给大家举个例子,我们可以将输入的数值从0~1023等比例缩小到0~255的目标范围。

image120
本节课我们学习制作了智能植物成长灯,当光线较弱时,LED灯亮,当光线较强时,LED灯熄灭。那么我们能否根据光线的强弱控制LED灯的亮度呢?【利用映射实现】有同学肯定会有疑问,为什么是0~1023到0~255,而不是别的数值呢?原因就是我们光线传感器值的范围是0~1023,而LED灯的亮度为0~255。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

跳至工具栏