嵌入式智能物联网设备,不仅要采集上报数据,还应该具备远程控制、边缘计算、自动响应事件等能力,达到智能化、快响应等效果。
简介
业务扩展
本项目通过控制风机转动,带动空气流动,从而达到降温的效果,这也是最常用的降温方案。常见于设备机柜、厂房等场景。
一、硬件连接
在原有的电路基础上,增加了一个风机驱动电路,如下图所示。
实物连接图如下。
二、风机基础控制
风机的控制根据所选风机的类型,有多种方式,如直接DO开关、RS485通信控制等。此处选用DO输出,直接控制风机开关。
1. 节点介绍1.1 gpio_outgpio_out 节点,提供了 GPIO 输出节点,可以根据需求输出对应电平信号。
1.1.1 属性
-
名称(name):节点名称,用于索引查找本节点;
-
显示名称(displayName):用于画布上显示的名称;
-
GPIO序号(gpio_id):GPIO引脚ID;
-
模式(mode):GPIO输出模式(推挽、开漏…);
-
初始状态(init_stat):引脚初始输出状态。
1.1.2输入
- msg.payload:指定输出状态,0:低电平,1:高电平。
通过简单的脚本控制 gpio_out 节点驱动外部风机。
2.1 添加节点
在已有的流图中添加 timer、fscript、gpio_out 节点到画布中。
2.2 配置节点timer 配置如下,1s 周期输出。
fscript 配置如下,保持输出高电平。
gpio_out 配置如下。
- GPIO序号(gpio_id):P4.9;
- 模式(mode):push pull(推挽输出);
- 初始状态(init_stat):low(初始低电平)。
可以看到风扇已经被驱动起来。
3. 风机智能控制
风机智能化控制,主要实现两个基础功能:- 根据高温信号,自动启动进行降温;
- 支持手动启动。
3.1.1 属性
-
名称(name):节点名称,用于索引查找本节点;
-
显示名称(displayName):用于画布上显示的名称;
-
监控节点(monitored_nodes):指定需要监控的节点名称(json格式)。
3.1.2 输出
仅触发向下一节点执行,并不会传递任何数据。
3.2 流图测试
/*初始化高温预警环境变量*/
global.high_temp=30
/*初始化低温预警环境变量*/
global.low_temp=15
/*高温异常信号*/
global.high_temp_anomaly=false
/*低温异常信号*/
global.low_temp_anomaly=false
3.2.1.2 运行阶段
增加对高低温异常标志的处理,如下所示。
/*实际温度与高温预警温度温差*/
temp_diff=msg.temperature-global.high_temp
/*温度超过高温预警值,标记高温异常*/
if(temp_diff>=0.3){
global.high_temp_anomaly=true
}elseif(temp_diff<= -0.3) {
global.high_temp_anomaly=false
}
/*实际温度与低温预警温度温差*/
temp_diff=msg.temperature-global.low_temp
/*温度低于低温预警值,标记低温异常*/
if(temp_diff<= -0.3) {
global.low_temp_anomaly=true
}elseif(temp_diff>=0.3){
global.low_temp_anomaly=false
}
/*输出报警信号*/
if(global.high_temp_anomaly||global.low_temp_anomaly){
output.payload=1
}else{
output.payload=0
* 其中±0.3 的温差幅度,是为了扩大判定边界,起到软件滤波的效果,避免边缘状态引起频繁开关的情况。
3.2.2 完善风机控制逻辑为了后续更好地接收远程控制请求,需要将风机控制模块的业务逻辑进一步完善。3.2.2.1 初始阶段
声明一个 global.fan_control 全局控制标志,用于控制风机运转状态,总共包括以下3个状态:
-
on:手动启动风机;
-
off:手动关闭风机
-
auto:根据温度自动控制。
脚本如下:
global.fan_control="auto"
3.2.2.2 运行阶段
根据 global.fan_control 的值,执行不同的风机控制逻辑。
if(global.fan_control=="on"){
/*手动启动*/
msg.payload=1
}elseif(global.fan_control=="off"){
/*手动停止*/
msg.payload=0
}else{
if(global.high_temp_anomaly==true){
/*高温异常自动启动*/
msg.payload=1
}else{
/*常温自动停止*/
msg.payload=0
}
}
当控制标志不为 on 或 off 时,即为 auto 模式,此时,根据 global.high_temp_anomaly 高温异常标志来决定是否启动风机。
3.2.3 添加complete节点
配置如下,添加节点名称 abnormal_monitoring。
同时为异常监测节点添加一个节点名称 abnormal_monitoring。
3.2.4 下载流图
默认控制模式为 auto,并且默认高温预警温度为 30℃,通过外部热风机加热空气温度,观察运行情况。
4.远程控制
上一期已经实现了数据上报至物联网云平台,本期为系统添加远程控制功能,其中包括3个控制命令:
- 高温预警值配置(high_temp)
- 低温预警值配置(low_temp)
- 风机控制(fan_control)
4.1 云端添加命令
需要在物联网云平台(ZWS)添加所需控制命令,登录到:
https://www.zlgcloud.com4.1.1 添加风机控制命令打开设备类型页面。
点击编辑 iot_mpc_zc1 类型。
选择设备控制设置页面,并添加 fan_control 风机控制命令,如下所示。
为风机控制命令添加参数,如下所示。
总共3个参数选项 on、off、auto,与风机控制脚本的控制标志一致。4.1.2 添加高低温预警配置命令
同样的操作,继续添加高温、低温预警配置命令,如下所示。
添加高温预警命令
高温预警命令参数
添加低温预警命令
低温预警命令参数
4.1.3 所有新增命令如下
4.2响应远程控制
4.2.2 配置节点
为 zws_iot_data_in 绑定一个配置,选择 zws_iot,与 zws_iot_data_out 使用同一个配置。
4.2.3 运行测试点击运行,验证接收功能。
4.2.4 下发命令打开设备列表。
进入设备详情。
进入设备控制页面,并下发风机启动命令,如下所示。
点击发送,确保发送成功。
此时,可以看到接收到云端下发的命令和参数。
4.2.5 添加解析节点
添加一个新的 fscript 节点,用于解析云端命令。
4.2.6 添加解析脚本
if(msg.name=="high_temp"){
global.high_temp=f32(msg.value)
}elseif(msg.name=="low_temp"){
global.low_temp=f32(msg.value)
}elseif(msg.name=="fan_control"){
global.fan_control=msg.value
}else{
aborted=1
}
脚本通过判断命令名称 msg.name,来解析下发的命令,同时通过 global 对象修改对应的全局变量。同时为风机控制数据流的 complete 节点添加一个监测节点名称 fan_control,如下所示。4.2.7 下载流图
云端下发风机启动命令,效果如下。
停止命令。
配置为自动模式。
外部施加热风,观察风机变化。
4.2.8 完成
至此,完成了远程控制、智能降温等业务。为了可以更加深入的体会 MPC-ZC1 和 EsDA 的应用开发,在下一期文章中,计划将风机更换为大功率的厂房风机设备,真正地应用到实际场景中。
整理本期流图如下。
审核编辑:汤梓红
-
控制系统
+关注
关注
41文章
6604浏览量
110574 -
物联网
+关注
关注
2909文章
44557浏览量
372750
原文标题:EsDA MPC-ZC1 应用——IoT 监测控制系统(二)
文章出处:【微信号:ZLG_zhiyuan,微信公众号:ZLG致远电子】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论