聚丰项目 > 利用热脉冲测量土壤含水量

利用热脉冲测量土壤含水量

本项目利用STC89C52单片机控制2个IDT公司生产的HS3001温湿度传感器和一个PTC加热模块组成热脉冲测含水量模块,通过施加短时低热量热脉冲,使得被测土壤先升温再降温,由高精度HS3001温湿度传感器定时测量土壤温度的变化值,最后基于理想半无限空间热脉冲传导理论,估算土壤体积含水量。该模块具有如下特点:(1)利用热脉冲可以间接测量土壤体积含水量,热脉冲时间控制在60-120s,总线热量控制在1000Jm-1以内,测量周期约300s,具有短时连续监测的优势;(2)在非加热模式下,可以直接获取土壤温湿度,在降雨入渗和水位变化是可以直接监测湿度变化;(3)加热模块还可以为温湿度传感器升温除湿,以增强深埋土壤高湿度环境下长期工作性能;(4)单片机内置T0定时器精确1s定时,T1定时器串口发送数据,定时测量误差很小。

cezhua cezhua

分享
3 喜欢这个项目
团队介绍

cezhua cezhua

团队成员

张华 负责人

分享
项目简介
本项目利用STC89C52单片机控制2个IDT公司生产的HS3001温湿度传感器和一个PTC加热模块组成热脉冲测含水量模块,通过施加短时低热量热脉冲,使得被测土壤先升温再降温,由高精度HS3001温湿度传感器定时测量土壤温度的变化值,最后基于理想半无限空间热脉冲传导理论,估算土壤体积含水量。该模块具有如下特点:(1)利用热脉冲可以间接测量土壤体积含水量,热脉冲时间控制在60-120s,总线热量控制在1000Jm-1以内,测量周期约300s,具有短时连续监测的优势;(2)在非加热模式下,可以直接获取土壤温湿度,在降雨入渗和水位变化是可以直接监测湿度变化;(3)加热模块还可以为温湿度传感器升温除湿,以增强深埋土壤高湿度环境下长期工作性能;(4)单片机内置T0定时器精确1s定时,T1定时器串口发送数据,定时测量误差很小。
硬件说明

1. HS3001温湿度传感器

本项目使用的HS3001如图1所示。该传感器具有如下特点:相对湿度测量精度±1.5%RH,正常工作范围10-90%RH14位转换精度,温度测量:±0.2, 正常工作范围-10 - +80℃,14位转换精度,宽工作电压2.3-5.5V,低能耗,标准IIC数据接口。

图片1.png


1 焊接的HS3001传感器


2. STC89C52单片机

图片2.png 





2 STC89C52单片机开发板


项目才有的单片机和开发板如图2所示。开发板支持USB程序下载(宏晶科技STC52单片机),开发板供电模式为:电脑USB供电(USB接口)和外部5V电源供电(DC-005电源座)。STC89C52单片机具有如下特点:8k字节Flash512字节RAM32 I/O 口线,看门狗定时器,内置4KB EEPROMMAX810复位电路,316 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统515向量2级中断结构),全双工串行口。

3. PTC加热模块

图片3.png 

3 PTC恒温发热模块

项目采用的加热模块如图3所示。它具有体积小,电阻值10Ω最大恒温50℃。

4. 土壤含水量测量模块



图片4.png



4 PTC恒温发热模块

2个HS3001与加热模块捆绑连接,然后置于被测土壤中,通过施加60-120s左右热脉冲,观测土壤升降温情况,以便换算土壤体积含水量。


软件说明

1. 定时功能实现

采用T0定时器进行1s精确定时。首先进行串口T1和T0定时器初始化,程序如下:

图片5.png 

T0定时中断程序如下,其中为了弥补计数误差,TL0每次修正了2个计数,即TL0 += 0x69。

图片6.png 

2. 串口通讯功能实现

串口通讯初始化见上一节,项目中只需单工模式,即只使用发送,不用读取。发送模块程序如下:

图片7.png 

 

3. IIC通讯功能实现

void SHT2x_init()

{

    sda1=1;

    scl1=1;

    sda2=1;

    scl2=1;

}

 

void start1(void)

{

    sda1=1;

    delay2us();

    scl1=1;

    delay2us();

    sda1=0;

    delay2us();

    scl1=0;

    delay2us();

}

void stop1(void)

{

    scl1=0;

    sda1=0;

    delay2us();

    delay2us();

    scl1=1;

    sda1=1;

    delay2us();

    delay2us();

 

}

void ACK1 (void)

{

    scl1=0;

sda1=0;

    delay2us();

 

    scl1=1;

    delay2us();

    scl1=0;

}

void noACK1 (void)

{

    scl1=0;

    sda1=1;

    delay2us();

    scl1=1;

    delay2us();

    scl1=0;

}

bit getACK1(void)

{

unsigned char ucErrTime=0;

sda1=1;

delay2us();   //释放总线

//SDA_IN();      //SDA设置为输入

scl1=1;

    delay2us();

while(sda1)

{

ucErrTime++;

if(ucErrTime>250)

{

stop1();

return 1;

}

}

scl1=0;//时钟输出0    

return 0;  

}

void send1(uchar DATA)

{

    uchar Bit_Counter=8;

 

scl1=0;

    while(Bit_Counter>0)

    {

 

        sda1=(bit)(DATA&0x80);

        DATA<<=1;

 

        scl1=1;

        delay2us();

        scl1=0;

        delay2us();

 

        Bit_Counter--;

    }

 

}

unsigned char Read1()

{

    unsigned char x=0,y=8;

 

    sda1=1;

 

    while(y>0)

    {

        scl1=0;

        delay2us();

        scl1=1;

        delay2us();

 

 

        if(sda1)

            x=x|0x01;

        else

            x=x&0xfe;

 

 

        scl1=0;

        delay2us();

 

        if(y>1)

            x=x<<1;

 

        y--;

    }

 

    return x;

}

4. HS3001读数功能实现

#define add_w 0x88   //传感器地址 + 写操作

#define add_r 0x89   //传感器地址 + 读操作

sbit sda1=P0^1;//数据线

sbit scl1=P1^1;//时钟线

// 1 湿度测量

// 启动》发送地址+写操作》接收ACK》湿度测量命令》接收ACK》启动》发送地址+读操作》...

// ...接收ACK》测量时间延时》读取高位数据》ACK》读取低位数据》NO_ACK》停止。

// 计算结果。返回结果。

void RHT_Result1(void)

{

    start1();

    send1(add_w);

    while(getACK1());//从机应答

    stop1();

    delay4ms();

 

start1();

    send1(add_r);

    while(getACK1());//从机应答

BUFh[0]=Read1()&0x3F;  

    ACK1();

BUFh[1]=Read1();

    ACK1();

    BUFt[0]=Read1();

    ACK1();

    BUFt[1]=Read1()&0xFC;

    noACK1();

    stop1();

}

void Convert_HS3001(void)

{

unsigned char TEMP1[7]; //用于记录温度

unsigned char HUMI1[7]; //用于记录湿度

unsigned char j;

unsigned long tem1,hum1;

float tem,hum; 

tem=165.0f*(float)((BUFt[0]<<8)|BUFt[1])/16383.0f/4.0f-40.0f; //摄氏度

hum=100.0f*(float)((BUFh[0]<<8)|BUFh[1])/16383.0f;

BUFt[0]=0;

BUFt[1]=0;

BUFh[0]=0;

BUFh[1]=0;

tem1=(unsigned long)(tem*10); //摄氏度

hum1=(unsigned long)(hum*10);

if(tem1<0)TEMP1[0]=0x2D;//温度小于零,则数值前面加‘-’负号

else TEMP1[0]=0x20;//温度大于等于零,则数值前面加空格

     TEMP1[1]=tem1/1000+'0';     //温度百位

if (TEMP1[1]==0x30) TEMP1[1]=0x20;

TEMP1[2]=tem1%1000/100+'0';     //温度十位

if (TEMP1[2]==0x30 && TEMP1[1]!=0x30) TEMP1[2]=0x20;

   TEMP1[3]=tem1%100/10+'0';//温度个位

      TEMP1[4]=0x2e;//小数点

   TEMP1[5]=tem1%10+'0';//温度小数点后第一位

   TEMP1[6]=0x20;//最后一位为空格

for(j=0;j<7;j++)

{

演示效果

1. 湿细砂热脉冲温度升降

将传感器模块埋入重力含水量10.4%的细砂中10cm,分别施加120s和60s热脉冲,传感器升降温曲线如图6所示。从图中可以看出微量热脉冲对土体扰动小,升温曲线有很好的一致性。

图片9.png 

6 w=10.4%湿砂热脉冲温度升降曲线

2. 干细砂热脉冲温度升降

再将传感器模块埋入重力含水量0.13%的细砂中10cm,分别施加240s和120s热脉冲,传感器升降温曲线如图7所示。从图中可以看出微量热脉冲对土体扰动小,升温曲线有很好的一致性。湿砂和干砂升降温曲线比较如图8所示,显示升降温曲线斜率有较大差别。

图片10.png 

7 w=0.13%湿砂热脉冲温度升降曲线

图片11.png 

8 湿砂和干砂热脉冲温度升降曲线比较

3. 半无限空间热脉冲传导理论

均质各向同性半无限空间匀速热传导基本方程(Carslaw & Jaeger 1959, p13)如下:图片12.png                           [1]

其中α是热扩散系数(m2/s),U是流速(m/s)。当半无限空间一无限长线热源加热有限时间,即产生一热脉冲,其理论解如下(Carslaw & Jaeger 1959, p258):

图片13.png                                   [2]

其中Q是热量(m2),Q=q/ρcq输入线强度(J/m),ρc是体积比容。当传感器距离热源位置rm温度升到最大ΔTm时,对公式[2]求导数可得:

图片14.png                                           [3]

Campbell等(1991)给出土的体积比容ρc与最大温升有关,即

图片15.png                               [4]

其中ρw是水的密度,cw是水的比热,θ是土的体积含水量,ρb是土的总密度,cm是土颗粒的比热。给定热脉冲q=I2Rt,I是加热电流,R是加热模块电阻,t是加热时间,实测最大温升ΔTm和传感器距离热源的位置rm之后,就公式[4]可以计算出土的体积含水量θ,如公式[5]所示。

图片16.png                                      [5]

4. 初步数据整理

部分实测湿砂温度升降原始数据如下表:

1.png

2.png

附件

(18.02 MB)下载

评论区(0 )