顧亞龍
(新疆醫科大學醫學工程技術學院,新疆烏魯木齊,830011)
現代社會生活中,越來越多的環境對溫度的恒定具有較高的要求。例如,泳池的水溫不能太低或太高,否則會引起人的不適;蔬菜大棚無論是在冬天還是夏天,室內的溫度要保持在一定范圍之內,因為植物的生長受到環境溫度的影響。單片機和傳感器組成的測控系統可以完成對多種信號的采集和控制,被廣泛的應用在工業、農業、交通、醫療等行業[1-4]。51 單片機作為測控系統的核心,功能齊全、可靠性強,一經推出,就得到了極大的普及。本文設計的溫度監測報警系統,采用了市面上常見的芯片,結構簡單,成本低廉,可以同時監測多個環境的溫度,應用在多種場合,滿足絕大多數的溫度監控需求。
系統以單片機為核心,單片機與溫度傳感器之間雙向通信。當單片機向溫度傳感器發出溫度轉換命令后,DS18B20 溫度傳感器首先將測量到的環境溫度值進行AD轉換,再將采集到的溫度通過總線發送給單片機。單片機執行讀引腳操作,將總線上讀取到的溫度值保存并做運算處理,傳送給LCD1602 液晶顯示器顯示。若溫度傳感器發送給單片機的溫度值超出了預定溫度范圍,則單片機向聲光報警電路發出信號,此時聲光報警電路同時發出聲音和燈光報警。系統中電源分別向單片機、LCD1602 和聲光報警電路供電。系統的整體設計框圖如圖1 所示。

圖1 溫度監測報警系統總體設計框圖
本文采用DS18B20 作為溫度傳感器。DS18B20 是DALLAS 公司生產的一種數字溫度傳感器,測量精度±0.5℃,可以直接將溫度轉化為數字信號傳送給單片機,不用單獨設計AD 轉換電路[5]。
每個DS18B20 傳感器具有單獨的64 位ROM,因此,該溫度傳感器不僅可以和單片機組成單點測溫系統[6-7],還可以構成多點測溫系統。單總線的優點是結構簡單、成本低廉,節省單片機的IO 口資源,若要對系統進行擴展,可將新增的溫度傳感器掛接在總線上。單總線也有缺點,數據和地址等信息的傳送都通過一條線路,帶寬低、負載重,數據傳送時對時序的要求較高,編程難度加大。本文中溫度采集電路設計如圖2 中所示。每個溫度傳感器被放置在不同的測溫區,測量各個區域的溫度,單總線經4.7kΩ 的上拉電阻接單片機的P1.7 引腳。電源同時對4 個溫度傳感器供電,傳感器的GND 端同時接地。

圖2 硬件電路圖
本文采用LCD1602 液晶顯示器顯示當前的四個溫度傳感器采集的溫度值。該傳感器是最常見、并且市場普及率最高的字符型液晶顯示模塊。該顯示器每行可以顯示16 個字符,同時顯示兩行。LCD1602 的8 條數據線經上拉電阻與單片機的P0 口相連接,當單片機對顯示器寫命令或需要顯示字符時,命令字或字符的ASCII 碼通過8 條數據線被寫入顯示器內部的顯示數據RAM(DDRAM)。控制引腳RS 和EN 分別為寄存器選擇端和使能信號端,兩個引腳分別接單片機的P2.6 和P2.7 引腳。RS 和EN 引腳的不同信號組合可以控制顯示器的不同讀寫狀態,由于溫度轉換時設有延時程序,遠大于顯示器內部處理數據的時間長度,所以不用檢測LCD1602 的讀忙標志。單片機只向顯示器寫數據,不用讀取,因此RW 引腳接地,恒為低電平。
揚聲器工作時需要的電流較大,而單片機驅動能力最強的P0 口每個引腳最大只能提供3mA 左右的灌電流,或者400μA 的拉電流,無法驅動揚聲器工作。本文為了使單片機能夠驅動揚聲器,采用了三極管驅動的方式。當系統需要發出報警信號時,單片機P3.6 發出低電平信號,PNP 三接管發射結導通,被放大的電流經集電極驅動揚聲器發出聲音報警信號。當單片機復位重啟或不需要發出報警信號時,P3.6 引腳為高電平,發射結兩側沒有電位差,基極無電流,通過揚聲器的電流也為0。LED 的驅動電流較小,單片機引腳的灌電流足以驅動LED 發光,在揚聲器工作的同時,P3.5 發出高低電平信號,使LED 斷續發光,產生燈光報警信號,引起工作人員的注意。
除此之外,硬件電路還設有時鐘電路和復位電路,用于產生數字電路系統所需的時鐘信號和初始化系統所用,以滿足單片機系統工作的基本需求。
每個DS18B20 都有一個唯一的64 位ROM 碼,從而允許多只DS18B20 同時連接在一根總線上。若單片機要與總線上的某一只DS18B20 通信,必須要知道該溫度傳感器的ROM 碼,以識別“身份”。本文中的溫度監測系統共有4只DS18B20,需要獲取每一只溫度傳感器的ROM 碼。
首先讓總線上的三個傳感器先與總線斷開,剩余一個溫度傳感器與單片機相連接。單片機與該DS18B20 初始化通信結束后,接著發送[33h](讀取ROM 指令),溫度傳感器會由低位到高位發送內部64 位ROM 碼,單片機按位讀取后,存儲在內部數據存儲器預定的8 個字節存儲單元中。分別讓剩余三個DS18B20 單獨與單片機相連,讀取ROM碼并存儲起來。系統工作時,單片機要核對收到的ROM 碼,因此要將ROM 顯示出來,以供編程時使用。最后,調用LCD1602 顯示子程序分別顯示已存儲的每個溫度傳感器的ROM 碼,并寫入源程序中。
單片機在總線上依次與各個DS18B20 通信,獲取溫度值。首先在總線上發出初始化信號,DS18B20 做出回應。單片機再發送[55h](匹配ROM)指令,后跟64 位ROM碼,目的是與指定的溫度傳感器建立通信,其余的溫度傳感器不再對后面的指令做出回應。單片機接著發送[44h](溫度轉換指令)。已經建立通信的DS18B20 接收到溫度轉換指令以后,開始溫度轉換,將轉換好的溫度保存在內部暫存器的第0 和第1 字節,此過程最長需要750ms,單片機需要延時等待。再發出[BEh](讀暫存器指令),DS18B20將溫度值的補碼由低位至高位發送到總線上,單片機讀取總線上的數據后將之儲存在寄存器中。此后,單片機分別于各個DS18B20 建立通信,獲取4 個傳感器測量到的溫度值。溫度值經過運算處理后,被依次發送給LCD1602,每次顯示兩個區域的溫度,間隔2 秒再顯示兩個區域的溫度,如圖3 所示。

圖3 溫度的顯示
單片機讀取完所有的溫度值后會進行判斷,如果有溫度值超過預設的溫度上限或低于溫度下限值后,單片機調用報警子程序。報警子程序同時令單片機的P3.5 和P3.6 引腳發出低電平,通過中斷子程序中的定時延時程序每0.5 秒使P3.5 和P3.6 引腳電平同時相反變化一次,可得到變化的聲光報警信號,提示當前溫度超出預設范圍。LCD1602 顯示屏同時顯示超出預設范圍的區域溫度,提示操作人員及時做出相應處理。若單片機讀取的溫度值在預設范圍內時,P3.5和P3.6 引腳保持高電平,無報警信號發出,程序繼續循環掃描讀取每個傳感器測得的溫度值進行判斷。
本文將溫度傳感器的初始化、讀字節、寫字節、啟動溫度轉換、液晶顯示器的初始化、寫命令、寫數據等過程分別建立子程序。主程序中在變量聲明,初始化液晶顯示器程序后,進入無線循環程序。無限循環程序中,單片機分別依次調用DS18B20 初始化、讀取各個傳感器溫度、判斷溫度、溫度報警、顯示溫度子程序。無限循環確保了單片機能一直監測溫度,無需人為再進行操作。如果單片機受到干擾死機或者程序跑飛,按下復位按鍵重新啟動即可。定時器中斷程序為揚聲器和LED提供了1秒的閃爍周期,放在主程序之后。
本文設計的溫度監測報警系統可以應用于室內房間、保溫箱、農業大棚等多種場所,能夠有效地幫助人們同時監測多個區域的溫度。如果加以驅動,同一總線最多可以支持掛接256 個DS18B20 溫度傳感器,在本文的基礎上,可以擴展同時監測更多的目標區域溫度,擴大溫度監測的范圍。若加繼電器以驅動升溫或降溫電路,可以控制將環境溫度保持在一個區間內,構成恒溫控制系統[8]。本設計能夠滿足溫度監測精度不小于±0.5℃的監控場所需求,具有成本低,可靠性強,易擴展的特點。