林開(kāi)司 張 露 邢兵鎖
(銅陵職業(yè)技術(shù)學(xué)院電氣工程系, 安徽 銅陵 244000)
工農(nóng)業(yè)生產(chǎn)和科學(xué)實(shí)驗(yàn)及醫(yī)療、氣象服務(wù)等眾多領(lǐng)域都會(huì)用到溫度和濕度監(jiān)控技術(shù)?,F(xiàn)有的溫濕度監(jiān)控系統(tǒng)多以單片機(jī)為控制核心,單片機(jī)除了控制傳感器采集溫濕度信息,還要進(jìn)行數(shù)據(jù)的分析處理與顯示,存在軟件編程復(fù)雜、硬件設(shè)計(jì)不易和系統(tǒng)擴(kuò)展應(yīng)用不夠理想等問(wèn)題。隨著計(jì)算機(jī)軟件技術(shù)的發(fā)展,可將單片機(jī)技術(shù)和軟件技術(shù)相結(jié)合來(lái)進(jìn)行溫濕度檢測(cè)與控制,這樣既可節(jié)約資源,又便于計(jì)算機(jī)控制[1]。
Visual Basic 6.0 是微軟開(kāi)發(fā)的一種通用的基于對(duì)象的程序設(shè)計(jì)語(yǔ)言[2]。我們?cè)O(shè)計(jì)了一種基于單片機(jī)和VB6.0的溫濕度監(jiān)測(cè)系統(tǒng):?jiǎn)纹瑱C(jī)對(duì)溫濕度傳感器采集的溫濕度信息,通過(guò)串口發(fā)送給上位機(jī),上位機(jī)再利用VB6.0編程分析和處理數(shù)據(jù)。該系統(tǒng)可實(shí)時(shí)測(cè)量并顯示環(huán)境的溫濕度,繪制并呈現(xiàn)溫濕度隨時(shí)間變化曲線,在實(shí)時(shí)溫濕度超過(guò)設(shè)定值時(shí)會(huì)發(fā)出報(bào)警信號(hào)。
設(shè)計(jì)的溫濕度監(jiān)測(cè)系統(tǒng),硬件部分包括溫濕度傳感器STH11、STC89C52RC單片機(jī)、LCD1602液晶和安裝了VB6.0軟件的PC機(jī)(見(jiàn)圖1)。采用SHT11溫濕度傳感器對(duì)被測(cè)環(huán)境進(jìn)行溫濕度測(cè)量,在字符型液晶顯示器LCD1602上顯示溫濕度,利用單片機(jī)將測(cè)量的溫濕度信息通過(guò)串口發(fā)送給上位機(jī)(PC機(jī)),PC機(jī)通過(guò)VB程序讀取溫濕度信息,同時(shí)對(duì)信息進(jìn)行實(shí)時(shí)顯示、繪制溫濕度走勢(shì)圖、設(shè)置上下限并進(jìn)行超限報(bào)警。
圖1 溫濕度監(jiān)測(cè)系統(tǒng)的硬件
SHT11是瑞士Sensirion(盛世瑞恩)公司推出的二線制接口型溫濕度傳感器,可輸出經(jīng)過(guò)校準(zhǔn)的溫濕度數(shù)據(jù)。SHT11具有超小型、高精度、自校準(zhǔn)、多功能和智能化的特點(diǎn),得到廣泛應(yīng)用。SHT11的溫度測(cè)量范圍為-40 ℃~+123.8 ℃,測(cè)量精度為±0.4 ℃,分辨率為0.01 ℃;相對(duì)濕度的測(cè)量范圍為0~100%RH,測(cè)量精度為±3%RH,分辨率為0.03%RH。SHT11與單片機(jī)的連接比較簡(jiǎn)單,如圖2所示[3],將DATA和SCK與單片機(jī)的I/O口相連即可。
系統(tǒng)前端由SHT11、LCD1602和單片機(jī)最小系統(tǒng)構(gòu)成。單片機(jī)對(duì)SHT11采集的溫濕度信息,在本地LCD1602上實(shí)時(shí)顯示,同時(shí)通過(guò)串口向PC機(jī)發(fā)送。常用的串行通信接口有RS-232、RS-422和RS-485等。在通信距離30 m以內(nèi),抗干擾能力要求不高的情況下,可采用RS-232。在本系統(tǒng)中采用RS-232。采用Protues軟件仿真,仿真硬件電路如圖3和圖4所示。
圖2 SHT11與單片機(jī)的連接電路
COMPIM是Protues中非常重要的虛擬元件。COMPIM建立起一個(gè)映射,把仿真電路中的數(shù)字量映射到計(jì)算機(jī)的物理端口。單片機(jī)的TXD和RXD與COMPIM相連接,就可以直接操作映射到物理端口。需要注意的是,TXD和RXD兩根信號(hào)線是直通方式連接,而非交叉。由于單片機(jī)是TTL電平,串口是RS-232電平,兩種電平互不兼容,兩者直接對(duì)接時(shí)必須進(jìn)行電平轉(zhuǎn)換。本系統(tǒng)采用MAX232芯片進(jìn)行電平轉(zhuǎn)換[4]。
圖3 液晶顯示仿真電路
圖4 RS-232串口通信仿真電路
需要設(shè)計(jì)的軟件包括單片機(jī)程序和PC機(jī)上的VB程序。
單片機(jī)程序采用C語(yǔ)言編程,主要功能包括SHT11溫濕度數(shù)據(jù)采集、溫濕度信息液晶顯示和利用串口通信將溫濕度信息發(fā)送給上位機(jī)。SHT11程序流程圖如圖5所示。
VB程序主要是利用串行通信控件MSComm實(shí)現(xiàn)與單片機(jī)的串行通信。利用MSComm控件中的Input和Output屬性,完成串口對(duì)信息的接收和發(fā)送。除了串行通信外,程序還要具有以下功能:對(duì)單片機(jī)發(fā)送的溫度信息進(jìn)行實(shí)時(shí)顯示;繪制隨時(shí)間變化的溫濕度曲線圖;在Text文本控件中逐條打印溫濕度信息;如果采集的溫濕度信息超過(guò)設(shè)置值的上下限,則通過(guò)shape控件發(fā)出報(bào)警信號(hào)。
2.2.1 串口通信初始化
串口通信首先要設(shè)置通信端口,然后設(shè)置波特率。通信端口可以根據(jù)實(shí)際端口進(jìn)行選擇。這里將波特率設(shè)置為9 600 b/s,8位數(shù)據(jù)位,沒(méi)有奇偶校驗(yàn)位,1位停止位。波特率、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位,都可以在程序?qū)υ捒蛑懈鶕?jù)實(shí)際測(cè)試情況進(jìn)行選擇。初始化代碼為:
MSComm1.CommPort=1
MSComm1.Settings=“9600,n,8,1”
MSComm1.InputMode=comInputModeText
MSComm1.PortOpen=True
MSComm1.InputLen=1
MSComm1.SThreshold=1
通過(guò)Settings屬性設(shè)置通信波特率為9 600 b/s、沒(méi)有校驗(yàn)位、8位數(shù)據(jù)位和1位停止位。InputLen表示Input屬性從接收緩沖區(qū)讀取的字符數(shù),該屬性值為0時(shí)表示讀取緩沖區(qū)的全部?jī)?nèi)容。這里將其設(shè)置為1,表示每次讀取1個(gè)字符。讀取數(shù)據(jù)的類型(InputMode)設(shè)為文本(Text)。Sthreshold表示OnComm事件產(chǎn)生之前在傳輸緩沖區(qū)中的最小字符數(shù),這里設(shè)為1。
圖5 SHT11程序流程
2.2.2 定時(shí)器事件處理
VB中的定時(shí)器控件Timer是一個(gè)在程序運(yùn)行時(shí)不可見(jiàn)的控件,它有一個(gè)重要屬性,就是時(shí)間間隔屬性(Interval屬性)。時(shí)間間隔屬性以ms為單位,取值范圍為0~65 536 ms。具體取值為多少,用戶可通過(guò)屬性窗口中的Interval文本框進(jìn)行設(shè)置。程序運(yùn)行時(shí),每隔一定時(shí)間執(zhí)行一次Timer事件中的相應(yīng)代碼。這里的一定時(shí)間,由Interval屬性設(shè)置。本系統(tǒng)設(shè)置的時(shí)間間隔為200 ms,即每隔200 ms接受一次串口數(shù)據(jù)。
單片機(jī)向PC機(jī)發(fā)送的溫度數(shù)據(jù)格式為:1位符號(hào)位“+”或“-”號(hào),2位整數(shù)位,1位小數(shù)點(diǎn)位,1位小數(shù)位,結(jié)束符為1位空格位,共6位;發(fā)送的濕度數(shù)據(jù)格式為:3位整數(shù)位,1位小數(shù)點(diǎn)位,1位小數(shù)位,結(jié)束符為“%”(采用相對(duì)濕度單位),一共也是6位數(shù)據(jù)。為解決單片機(jī)發(fā)送數(shù)據(jù)與VB定時(shí)器事件掃描串口接收數(shù)據(jù)的同步問(wèn)題,每次以“+”或“-”為有效數(shù)據(jù)接收的開(kāi)始位,以“%”為一次溫濕度數(shù)據(jù)接收的結(jié)束位。也就是一共12位,每12位為一組溫濕度信息,當(dāng)檢測(cè)到有效數(shù)據(jù)的標(biāo)志位后,nCount記為0。代碼為:
If buf = "+" Or buf = "-" Then
nCount = 0
End If
nCount = nCount + 1
If nCount = 13 Then
nCount = 1
End If
2.2.3 溫濕度變化曲線
以橫坐標(biāo)表示時(shí)間值,以縱坐標(biāo)表示采集的溫濕度值,縱橫相交就構(gòu)成一系列的點(diǎn)。用line方法將這些點(diǎn)連接起來(lái),畫(huà)出溫濕度隨時(shí)間變化曲線。實(shí)現(xiàn)代碼為:
Picture1.Line (x- 1,y)-(x,y0), RGB(255, 0, 0) ‘畫(huà)溫度曲線
Picture2.Line (x- 1,y1)-(x,y2), RGB(255, 0, 0) ‘畫(huà)濕度曲線
其中,x為橫坐標(biāo),y、y1分別表示溫度和濕度前一時(shí)刻縱坐標(biāo),y0和y2分別表示溫度和濕度當(dāng)前時(shí)刻縱坐標(biāo)。RGB函數(shù)設(shè)置曲線的顏色,這里設(shè)為紅色。
實(shí)現(xiàn)Protues仿真硬件和PC機(jī)的串行通信,須使用虛擬串口。系統(tǒng)測(cè)試使用Virtual Serial Port Driver 6.9虛擬串口軟件,建立一對(duì)虛擬串口COM1和COM2。設(shè)置單片機(jī)為串口COM2,VB為串口COM1。溫度和濕度上限初值都設(shè)為100,下限初值都設(shè)為0。運(yùn)行過(guò)程中,可以隨時(shí)重新設(shè)置溫濕度上下限值。程序運(yùn)行結(jié)果如圖6所示。
實(shí)驗(yàn)結(jié)果顯示,通過(guò)配置通信窗口、設(shè)置通信端口和數(shù)據(jù)格式,然后點(diǎn)擊打開(kāi)串口,便可啟動(dòng)串口接收來(lái)自單片機(jī)發(fā)送的數(shù)據(jù)。系統(tǒng)能實(shí)時(shí)顯示SHT11采集的溫濕度信息,畫(huà)出溫濕度隨時(shí)間變化的曲線??梢酝ㄟ^(guò)文本框隨時(shí)設(shè)置溫濕度上下限值。實(shí)際溫濕度超過(guò)設(shè)定的上下限值時(shí),報(bào)警燈由綠色變成紅色,顯示報(bào)警。另外,溫濕度信息還通過(guò)數(shù)據(jù)接收窗口逐條顯示出來(lái)。點(diǎn)擊退出系統(tǒng)按鈕,便可退出系統(tǒng)。
圖6 VB運(yùn)行結(jié)果
現(xiàn)有溫濕度監(jiān)測(cè)系統(tǒng)多以單片機(jī)為控制核心,單片機(jī)在進(jìn)行溫濕度數(shù)據(jù)采集的同時(shí),還要進(jìn)行數(shù)據(jù)的分析處理,存在編程復(fù)雜、硬件應(yīng)用不夠等問(wèn)題。本次研究設(shè)計(jì)的溫濕度監(jiān)測(cè)系統(tǒng),是在VB6.0環(huán)境下利用MSComm控件接收來(lái)自單片機(jī)發(fā)送的溫濕度信息,可對(duì)接收到的數(shù)據(jù)信息進(jìn)行實(shí)時(shí)顯示和記錄,并在實(shí)時(shí)溫濕度超過(guò)設(shè)定值時(shí)發(fā)出報(bào)警信號(hào)。系統(tǒng)中單片機(jī)的作用只是控制SHT11采集環(huán)境溫濕度信息和通過(guò)串口發(fā)送數(shù)據(jù),而對(duì)溫濕度信息的監(jiān)測(cè)和報(bào)警控制則由VB程序處理。仿真實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)能實(shí)現(xiàn)所設(shè)計(jì)的功能。