喬琳君, 魏嚴鋒
(1.西安航空職業(yè)技術學院 自動化工程學院, 陜西 西安 710089;2.中航西飛民用飛機有限責任公司, 陜西 西安 710089)
居家和辦公環(huán)境中常常會擺放綠植以改善居家環(huán)境,調節(jié)工作氛圍,但經常會存在澆水過量使綠植過澇或忘記澆水、外出過旱,最終都可能導致綠植死亡。為能夠及時、按需根據土壤濕度對家庭或辦公場所的綠植進行自動澆灌,設計基于STC89C52型單片機的自動澆花系統(tǒng)一套,防止人們澆水過量或外出時綠植長期干旱。
本自動澆花系統(tǒng)由六個單元組成,即單片機控制單元、土壤濕度采集單元、模數轉換單元、按鍵選擇單元、繼電器驅動水泵單元和液晶顯示單元。當土壤濕度變化引起濕敏傳感器的阻值發(fā)生變化,系統(tǒng)上電后,該阻值變化在電路中會轉換為變化的電壓信號,經過模數轉換后送至單片機識別運算控制,并由LCD顯示器顯示土壤濕度。通過此方式對土壤的濕度信息進行實時監(jiān)測和控制,以達自動澆花之目的。系統(tǒng)框圖,如圖1所示。
圖1 系統(tǒng)框圖
系統(tǒng)采用低功耗、高性能的STC89C52型單片機為控制器,其內部有8位中央處理器(CPU)、4k字節(jié)Flash閃速存儲器、128Byte內部RAM、32個I/0口、2個16位定時/計數器、一個5向量兩級中斷結構、一個全雙工串行通信口、片內振蕩器和時鐘電路[1]。其最小應用系統(tǒng)由單片機、晶振電路和復位電路構成。
濕度傳感器用來檢測花盆土壤濕度大小,由敏感元件以及轉換電路組成。當土壤濕度變化時,傳感器電阻值發(fā)生變化,經轉換電路引起輸出電壓的變化,并將此電壓信號輸送至數模轉換器以便單片機判別運算。本設計選用YL-69土壤濕度傳感器[2],其濕度檢測范圍0%-100%,仿真電路中用電位器模擬濕度傳感器。
為了實時顯示土壤濕度,提示使用者該系統(tǒng)的工作模式,因此選用LCD1602液晶顯示器用來顯示濕度大小和工作模式。運行過程中第一行Humidity顯示當前濕度;第二行state顯示工作模式,Maul為手動模式,Aoto為自動模式;自動模式下調節(jié)濕度參數時上下兩行分別顯示濕度上下限值。液晶顯示器的8位數據端D1-D7由單片機的P0口控制,RS、R/W、E端分別由單片機P2.5-P2.6控制。
該模塊由PNP型三極管和繼電器及水泵組成,單片機P2.0口控制三極管基極。當系統(tǒng)選擇手動澆花模式或自動模式下濕度低于下限濕度時,P2.0輸出為0,則PNP型三極管導通,繼電器得電,常開觸點吸合,電動機回路接通,執(zhí)行澆花工作。當自動模式下濕度高于上限濕度時,P2.0輸出為1,則PNP型三極管導通,繼電器失電,常開觸點復位,電動機回路斷開,結束澆花工作。
除以上五大單元外,系統(tǒng)還設置有工作模式選擇、參數調節(jié)按鍵單元和燈光指示單元。
當系統(tǒng)上電后進行初始化,同時獲取設定濕度并采集當前濕度值。經過A/D轉換后,送到LCD顯示器顯示信息;系統(tǒng)判斷當前土壤濕度和預設濕度大小關系,如果小于預設值,繼電器就會驅動水泵進行抽水灌溉;如果高于預設值,繼電器和水泵不工作。濕度傳感器實時監(jiān)測土壤濕度,當澆花過程中土壤濕度大于設定值,則澆花過程結束。系統(tǒng)流程圖,如圖2所示。
圖2 主程序流程圖
系統(tǒng)部分程序如下。
#include〈reg52.h〉 //頭文件
#include〈intrins.h〉
#include"eeprom52.h"
#define uchar unsigned char //宏定義
#define uint unsigned int
#define LCD1602_dat P0 //液晶數據口定義
sbit LCD1602_rs=P2^5;//IO 定義
sbit LCD1602_rw=P2^6;
sbit LCD1602_e=P2^7;
sbit beep=P1^3; //蜂鳴器
sbit led_1=P1^4; //指示燈
sbit led_2=P1^6;
sbit key_1=P3^0; //按鍵
sbit key_2=P3^1;
sbit key_3=P3^2;
sbit alarm_1=P2^0; //繼電器
sbit ADC0832_CS=P1^2;
sbit ADC0832_CLK=P1^0;
sbit ADC0832_DIO=P1^1; //adc0832引腳
uint sum;
uchar RH,RH_H=60,RH_L=20,state,ms,time_num,cs;
bit beep1,zt,s1;
void main() //主循環(huán)
{
float Ad_dat=0;
TMOD=0x01; //配置定時器0
TH0=0x3c;
TL0=0xb0; //賦50 ms初值
ET0=1;
TR0=1;
EA=1; //打開總中斷
LCD1602_cls(); //液晶初始化
RH_H=byte_read(0x2000);
RH_L=byte_read(0x2200);
if((RH_H>99)||(RH_L>99)||(RH_L>=RH_H)) {RH_H=30; RH_L=20;}
while(1)
{
sum+=A_D(); //累加5次AD數據
cs++;
if(cs==5)
{
cs=0;
Ad_dat=(float)(sum/5); //取一個平均值,用于濾波
if(Ad_dat>250) Ad_dat=0;
else if(Ad_dat<=70) Ad_dat=100;
else Ad_dat=100-((Ad_dat-70)/1.8);
RH=(uint)(Ad_dat);
sum=0;
}
show(); //調用顯示函數
key(); //調用按鍵掃描
proc(); //調用報警子函數
}
}
選用Proteus仿真軟件實現自動澆花系統(tǒng)的軟件仿真調試,按照所設計的方案搭建電路模型,如圖3所示。
圖3 手動工作模式
系統(tǒng)所需元件明細表,如表1所示。
表1 自動澆花電路所需元件列表
模型搭建完畢,點擊單片機添加程序,打開仿真開關開始調試。
系統(tǒng)上電后直接為手動模式。
由圖3可知,LCD1602第一行49%為顯示當前濕度,第二行Manul為手動工作模式;P2.0輸出為0,繼電器工作,水泵轉,LCD1602實時顯示當前土壤濕度,當濕度增加到人為預期值,按S3鍵手動關水泵,手動澆花結束。
按下S2工作模式切換為自動。按下S1設置鍵,進入濕度預設值調節(jié)模式,分別按S2/S3鍵,實現增/減預設值。設置完成后,再按S1鍵退出,返回到正常模式。將濕度上下限分別設置為RH-L20~RH-H30%。當濕度在30%以下時P2.0輸出為0,繼電器得電工作,水泵轉,濕度在20%以下時D2報警;當濕度在30%以上時P2.0輸出為1,繼電器斷電,水泵停,D3報警指示,完成自動澆花,如圖4所示。
圖4 自動工作模式
從仿真實驗結果表明,該系統(tǒng)可以實現低于設定下限濕度時系統(tǒng)自動澆花,高于設定上限濕度停止?jié)不?,同時帶有燈光報警指示和濕度實時顯示,在實際中有一定的應用價值。