实验20 自动灭火场景实验

1. 实验目的

串口屏通过温度传感器,检测火焰温度,当火焰温度超过报警温度时,启动风扇进行灭火。

2. 实验工具

  • 支持MODBUS、IO的串口屏,本例程串口屏型号为(SANY-WV-S43-04M-C)

  • 支持MODBUS的温度传感器,本例程使用的是自主生产的传感器

  • 一个5V继电器、一个直流电机、一个IO转接板及软排线

3. 页面设计

  • 项目设置,勾选MODBUS 主机。修改波特率为9600(传感器波特率为9600,需要保持一致)。

  • page0 页面控件

    控件名

    属性

    功能

    image0

    可见 图片

    场景UI

    progressbar6

    可见 进度条

    显示当前温度

    numf6

    可见 浮点数

    显示当前温度

    numf8

    可见 浮点数

    设置报警温度(透明度属性设置为0)

    gif7

    可见 GIF图片

    显示动态报警

    io2

    不可见 IO控件

    输出高低电平(初始化为低电平0)

    mod3

    不可见 MODBUS

    支持使用MODBUS协议

    timer4

    不可见 定时器

    用于定时查询温度传感器并显示

    timer10

    不可见 定时器

    用于对比报警值,超出报警温度时,IO输出高电平

4. 传感器模块参数

波特率:9600 功能码:03,读取寄存器

设备地址

寄存器地址

1

0x0000

温度

只读

float类型,一个寄存器表示温度,单位*0.01℃

0x0001

湿度

只读

float类型,一个寄存器表示湿度,单位*0.01%rh

本例程仅使用温度寄存器。

5. 逻辑实现

5.1. 页面加载事件,初始报警温度

脚本如下:

numf8.valf = 60.0;//初始化报警温度

5.2. 定时查询温度(timer4)

脚本如下:

int Ret;
Ret = modbusRead(0x01,0x03,0x0000,2,100);//查询一次
if(Ret == 0)//查询成功
{
	numf6.valf = (float)(mod3.rxBuf[1]<<8 | mod3.rxBuf[2])/100;//转换温度
	progressbar6.val = (int)numf6.valf;
}

5.3. 对比报警温度(timer10)

脚本如下:

if(numf6.valf > numf8.valf)//读取温度超过设置温度
{
	gif7.visible = 1;//GIF图片可见
	io2.val = 1;//IO.Pin0输出高电平
}
else 
{
	gif7.visible = 0;//GIF图片隐藏
	io2.val = 0;//IO.Pin0输出低电平
}

6. 实验结果

编译成功后,点击下载按钮,下载到串口屏。

具体实验现象:用串口屏做一个自动灭火场景_哔哩哔哩_bilibili