式中:RHlinear为经过线性补偿后的湿度值,SORH为相对湿度测量值,C1、C2、C3 为线性补偿系数,取值如表4.1所列。
由于温度对湿度的影响十分明显,而实际温度和测试参考温度25℃有所不同,所以对线性补偿后的湿度值进行温度补偿很有必要。补偿公式如下[8]:
式中:RHtrue为经过线性补偿和温度补偿后的湿度值,T为测试湿度值时的温度(℃),t1和t2为温度补偿系数,取值如表4.2所示。
表4.1 湿度的线性补偿系数
12位 -4 0.0405
8位 -4 0.648
表4.2 湿度的温度补偿系数
12位 0.01 0.00008
8位 0.01 0.00128
补偿程序如下:
void caculation_SHT(SHT_dat *s)
{ const float c1=-4;
const float c2=+0.0405;
const float c3=-0.0000015955;
const float t1=+0.01;
const float t2=+0.00008; //以上为 12 位湿度修正公示取值
float t=s->temperature;
float rh=s->humidity;
float rh_lin;
float rh_ture;
float t_c;
t_c=t * 0.01 - 40; //温度的补偿
rh_lin=c3*rh*rh + c2*rh + c1;//相对湿度非线性补偿
rh_ture=( t_c - 25 ) * ( t1 + t2*rh ) + rh_lin; //相对湿度对于温度依赖性补偿
if( rh_ture > 100 ) rh_ture=100; //相对湿度最大值修正
if( rh_ture < 0.1 ) rh_ture=0.1; //相对湿度最小值修正
if(t_c<0)t_c=0;
s->temperature=t_c; //保存温度补偿后的结果
s->humidity=rh_ture; //保存相对湿度补偿后的结果
}
注:本设计中主要通过湿度来判断是否浇花,因此只需显示湿度即可,在此就不再赘述温度值的测量与相关处理了。
4.3.2湿度判断程序
本系统中设定的湿度值为30.00%RH,只需在主函数中定义赋值即可,判断是否需要浇花的程序也比较简单,通过一个while循环语句即可,部分程序如下:
while(humicede.humidity<setshi) //湿度低于设定值时浇花
{ watering();
convert_SHT(&humicede,HUMI);//从SHT11读取湿度值
convert_SHT(&humicede,TEMP); //从SHT11读取温度值
caculation_SHT(&humicede); } //温度和湿度补偿处理,并计算温度值和相对湿度值
4.4定时定量浇花控制系统
定时定量浇花需要先从DS1302读取实时时间,设定定时时间,然后判断是否到浇花时间,如果到了就置P2.3口为高电平,继电器闭合,打开电磁阀,开始浇花。浇花的量由时间控制,本系统通过单片机的定时器控制浇花10分钟,10分钟后电
磁阀关闭,停止浇花。定时定量浇花控制系统框图如图4.4所示。
图4.4 定时定量浇花控制系统
4.4.1 DS1302的软件设计
1)DS1302有关寄存器:
DS1302有关日历、时间的寄存器共有12个,其中有7个寄存器(读时81h~8Dh,写时80h~8Ch),存放的数据格式为BCD码形式。如表4.3所示。
表4.3 DS1302有关日历、时间的寄存器
小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。本设计选用24小时制。在24小时模式时,位5是第二个10小时位。 AT89S52单片机的家庭智能浇花器设计+源程序(8):http://www.751com.cn/zidonghua/lunwen_2625.html