聚豐項目 > 利用熱脈沖測量土壤含水量

利用熱脈沖測量土壤含水量

本項目利用STC89C52單片機控制2個IDT公司生產(chǎn)的HS3001溫濕度傳感器和一個PTC加熱模塊組成熱脈沖測含水量模塊,通過施加短時低熱量熱脈沖,使得被測土壤先升溫再降溫,由高精度HS3001溫濕度傳感器定時測量土壤溫度的變化值,最后基于理想半無限空間熱脈沖傳導理論,估算土壤體積含水量。該模塊具有如下特點:(1)利用熱脈沖可以間接測量土壤體積含水量,熱脈沖時間控制在60-120s,總線熱量控制在1000Jm-1以內(nèi),測量周期約300s,具有短時連續(xù)監(jiān)測的優(yōu)勢;(2)在非加熱模式下,可以直接獲取土壤溫濕度,在降雨入滲和水位變化是可以直接監(jiān)測濕度變化;(3)加熱模塊還可以為溫濕度傳感器升溫除濕,以增強深埋土壤高濕度環(huán)境下長期工作性能;(4)單片機內(nèi)置T0定時器精確1s定時,T1定時器串口發(fā)送數(shù)據(jù),定時測量誤差很小。

cezhua cezhua

分享
3 喜歡這個項目
團隊介紹

cezhua cezhua

團隊成員

張華 負責人

分享
項目簡介
本項目利用STC89C52單片機控制2個IDT公司生產(chǎn)的HS3001溫濕度傳感器和一個PTC加熱模塊組成熱脈沖測含水量模塊,通過施加短時低熱量熱脈沖,使得被測土壤先升溫再降溫,由高精度HS3001溫濕度傳感器定時測量土壤溫度的變化值,最后基于理想半無限空間熱脈沖傳導理論,估算土壤體積含水量。該模塊具有如下特點:(1)利用熱脈沖可以間接測量土壤體積含水量,熱脈沖時間控制在60-120s,總線熱量控制在1000Jm-1以內(nèi),測量周期約300s,具有短時連續(xù)監(jiān)測的優(yōu)勢;(2)在非加熱模式下,可以直接獲取土壤溫濕度,在降雨入滲和水位變化是可以直接監(jiān)測濕度變化;(3)加熱模塊還可以為溫濕度傳感器升溫除濕,以增強深埋土壤高濕度環(huán)境下長期工作性能;(4)單片機內(nèi)置T0定時器精確1s定時,T1定時器串口發(fā)送數(shù)據(jù),定時測量誤差很小。
硬件說明

1. HS3001溫濕度傳感器

本項目使用的HS3001如圖1所示。該傳感器具有如下特點:相對濕度測量精度±1.5%RH,正常工作范圍10-90%RH,14位轉(zhuǎn)換精度,溫度測量:±0.2, 正常工作范圍-10 - +80℃,14位轉(zhuǎn)換精度,寬工作電壓2.3-5.5V,低能耗,標準IIC數(shù)據(jù)接口。

圖片1.png


1 焊接的HS3001傳感器


2. STC89C52單片機

圖片2.png 





2 STC89C52單片機開發(fā)板


項目才有的單片機和開發(fā)板如圖2所示。開發(fā)板支持USB程序下載(宏晶科技STC52單片機),開發(fā)板供電模式為:電腦USB供電(USB接口)和外部5V電源供電(DC-005電源座)。STC89C52單片機具有如下特點:8k字節(jié)Flash,512字節(jié)RAM, 32 I/O 口線,看門狗定時器,內(nèi)置4KB EEPROM,MAX810復位電路,316 位定時器/計數(shù)器,4個外部中斷,一個7向量4級中斷結(jié)構(gòu)(兼容傳統(tǒng)515向量2級中斷結(jié)構(gòu)),全雙工串行口。

3. PTC加熱模塊

圖片3.png 

3 PTC恒溫發(fā)熱模塊

項目采用的加熱模塊如圖3所示。它具有體積小,電阻值10Ω,最大恒溫50℃。

4. 土壤含水量測量模塊



圖片4.png



4 PTC恒溫發(fā)熱模塊

2個HS3001與加熱模塊捆綁連接,然后置于被測土壤中,通過施加60-120s左右熱脈沖,觀測土壤升降溫情況,以便換算土壤體積含水量。


軟件說明

1. 定時功能實現(xiàn)

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

圖片5.png 

T0定時中斷程序如下,其中為了彌補計數(shù)誤差,TL0每次修正了2個計數(shù),即TL0 += 0x69。

圖片6.png 

2. 串口通訊功能實現(xiàn)

串口通訊初始化見上一節(jié),項目中只需單工模式,即只使用發(fā)送,不用讀取。發(fā)送模塊程序如下:

圖片7.png 

 

3. IIC通訊功能實現(xiàn)

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讀數(shù)功能實現(xiàn)

#define add_w 0x88   //傳感器地址 + 寫操作

#define add_r 0x89   //傳感器地址 + 讀操作

sbit sda1=P0^1;//數(shù)據(jù)線

sbit scl1=P1^1;//時鐘線

// 1 濕度測量

// 啟動》發(fā)送地址+寫操作》接收ACK》濕度測量命令》接收ACK》啟動》發(fā)送地址+讀操作》...

// ...接收ACK》測量時間延時》讀取高位數(shù)據(jù)》ACK》讀取低位數(shù)據(jù)》NO_ACK》停止。

// 計算結(jié)果。返回結(jié)果。

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;//溫度小于零,則數(shù)值前面加‘-’負號

else TEMP1[0]=0x20;//溫度大于等于零,則數(shù)值前面加空格

     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;//小數(shù)點

   TEMP1[5]=tem1%10+'0';//溫度小數(shù)點后第一位

   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. 半無限空間熱脈沖傳導理論

均質(zhì)各向同性半無限空間勻速熱傳導基本方程(Carslaw & Jaeger 1959, p13)如下:圖片12.png                           [1]

其中α是熱擴散系數(shù)(m2/s),U是流速(m/s)。當半無限空間一無限長線熱源加熱有限時間,即產(chǎn)生一熱脈沖,其理論解如下(Carslaw & Jaeger 1959, p258):

圖片13.png                                   [2]

其中Q是熱量(m2),Q=q/ρc,q輸入線強度(J/m),ρc是體積比容。當傳感器距離熱源位置rm溫度升到最大ΔTm時,對公式[2]求導數(shù)可得:

圖片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. 初步數(shù)據(jù)整理

部分實測濕砂溫度升降原始數(shù)據(jù)如下表:

1.png

2.png

附件

(18.02 MB)下載

評論區(qū)(0 )