本帖最后由 xukejing 于 2017-6-28 00:57 编辑
夏天到了,天气也热起来了。
今天我们来做一个基于OneNet的高温预警器。
既然是要表征体感炎热程度,那么就要用到温度。
当然,还要考虑湿度因素。
所以,这儿引入炎热指数的概念。
炎热指数是衡量气象条件对人体影响的判别指标,是一种舒适度指标,是温湿指数的一种表示方法,能准确反映出人体在相对湿度与气温共同作用下的实际感受。
炎热指数的模型是这样的:
因为数学公式不太直观,所以我们画个图表示一下。
介绍一个科学研究的神器,matlab。小伙伴们业余时间可以自学一下。
在matlab里,按下图把代码敲上
于是,炎热指数的3D曲面就显示出来了。
底部是xy平面,也是温湿度平面。
y轴往左0到1是湿度,x轴往右20到40是温度。
竖轴z轴,60到110就是炎热指数的坐标轴。
可以看出,温度和湿度是有协同效应的。有文献记载,当炎热指数达到86的时候,人的体感就是很热了。
有了表征体感温度的炎热指数,为了做高温预警,我们还需要一个表征与86的距离的安全裕度模型。
这个热裕度模型可以用当前炎热指数与86的差来表示。
另外,因为气温小于20度时(此时炎热指数小于60),体感凉爽,所以可以认为是预警下限。
所以,我们可以建立一个高温预警模型,把60到86这个区间的裕度值标准化到1至0的范围。
程序代码可以在我第10篇的onenet文章的基础上改。
首先是增加热指数与热裕度的变量,变量类型float,另外再添加一个字符串用来存上传到平台的数据。
float heat_index;//热指数
float t_m;//热裕度
char t_m_Str; //字符串格式温度
char h_i_Str; //字符串格式热指数
然后,SHT20获取玩温湿度以后,用我们的模型计算一下热裕度,并把float型数据打印为字符串。
/* 获取温湿度 */
SHT2x_MeasureHM(SHT20_Measurement_T_HM, &temp);
mDelay(500);
SHT2x_MeasureHM(SHT20_Measurement_RH_HM, &humi);
heat_index=(float)temp*0.81+46.3+(float)humi*((float)temp*0.99)/100.0-(float)humi*14.3/100.0;
if(heat_index>86)
t_m=0;
else if(heat_index>60)
t_m=(86.0-heat_index)/26.0;
else
t_m=1;
sprintf(t_m_Str, "%f", t_m);
sprintf(t_m_Str, "%f", t_m);
最后把这个字符串上传到OneNet平台。
strcat(send_buf, "tm,");
sprintf(text,"%s",t_m_Str);
strcat(send_buf, text);
strcat(send_buf, ";");
strcat(send_buf, "hi,");
sprintf(text,"%s",h_i_Str);
strcat(send_buf, text);
strcat(send_buf, ";");
好了,这样就结束了。。。。
编译,烧写。
当然,也别忘了去Onenet页面上把数据流给填上
然后在应用里把数据流接到曲线图或仪表上
显示一切正常!
完事!收工!
本帖最后由 xukejing 于 2017-6-28 00:57 编辑
夏天到了,天气也热起来了。
今天我们来做一个基于OneNet的高温预警器。
既然是要表征体感炎热程度,那么就要用到温度。
当然,还要考虑湿度因素。
所以,这儿引入炎热指数的概念。
炎热指数是衡量气象条件对人体影响的判别指标,是一种舒适度指标,是温湿指数的一种表示方法,能准确反映出人体在相对湿度与气温共同作用下的实际感受。
炎热指数的模型是这样的:
因为数学公式不太直观,所以我们画个图表示一下。
介绍一个科学研究的神器,matlab。小伙伴们业余时间可以自学一下。
在matlab里,按下图把代码敲上
于是,炎热指数的3D曲面就显示出来了。
底部是xy平面,也是温湿度平面。
y轴往左0到1是湿度,x轴往右20到40是温度。
竖轴z轴,60到110就是炎热指数的坐标轴。
可以看出,温度和湿度是有协同效应的。有文献记载,当炎热指数达到86的时候,人的体感就是很热了。
有了表征体感温度的炎热指数,为了做高温预警,我们还需要一个表征与86的距离的安全裕度模型。
这个热裕度模型可以用当前炎热指数与86的差来表示。
另外,因为气温小于20度时(此时炎热指数小于60),体感凉爽,所以可以认为是预警下限。
所以,我们可以建立一个高温预警模型,把60到86这个区间的裕度值标准化到1至0的范围。
程序代码可以在我第10篇的onenet文章的基础上改。
首先是增加热指数与热裕度的变量,变量类型float,另外再添加一个字符串用来存上传到平台的数据。
float heat_index;//热指数
float t_m;//热裕度
char t_m_Str; //字符串格式温度
char h_i_Str; //字符串格式热指数
然后,SHT20获取玩温湿度以后,用我们的模型计算一下热裕度,并把float型数据打印为字符串。
/* 获取温湿度 */
SHT2x_MeasureHM(SHT20_Measurement_T_HM, &temp);
mDelay(500);
SHT2x_MeasureHM(SHT20_Measurement_RH_HM, &humi);
heat_index=(float)temp*0.81+46.3+(float)humi*((float)temp*0.99)/100.0-(float)humi*14.3/100.0;
if(heat_index>86)
t_m=0;
else if(heat_index>60)
t_m=(86.0-heat_index)/26.0;
else
t_m=1;
sprintf(t_m_Str, "%f", t_m);
sprintf(t_m_Str, "%f", t_m);
最后把这个字符串上传到OneNet平台。
strcat(send_buf, "tm,");
sprintf(text,"%s",t_m_Str);
strcat(send_buf, text);
strcat(send_buf, ";");
strcat(send_buf, "hi,");
sprintf(text,"%s",h_i_Str);
strcat(send_buf, text);
strcat(send_buf, ";");
好了,这样就结束了。。。。
编译,烧写。
当然,也别忘了去Onenet页面上把数据流给填上
然后在应用里把数据流接到曲线图或仪表上
显示一切正常!
完事!收工!