王 向 玲
(1. 呂梁學院 礦業工程系, 山西 呂梁 033000;2. 中北大學 電子測試技術國家重點實驗室, 儀器科學與動態測試教育部重點實驗室, 太原 030051)
單片機原理是一門工程實踐性極強但理論知識抽象的課程,學習過程應注重“邊學邊做”即理論與實踐的高度融合。針對應用型本科院校的人才培養要求,結合自身教學經驗,在課堂引入Proteus軟件,學生自帶計算機,課堂上自行設計電路、編寫程序聯合Keil調試,真正實現了時間、空間上的學做融合,將抽象的理論知識直觀化、形象化,增加課堂趣味性、調動學生積極性的同時加深了對理論知識的鞏固[1-5]。
在單片機I/O口使用、中斷、定時器、串口通信、AD/DA轉換、LCD液晶顯示、傳感器等基礎知識實踐的基礎上,為了提高學生綜合運用知識的能力和設計能力,列出了幾個綜合性、設計性實驗,具體以分組形式進行。以其中一組學生設計的“溫室溫濕度控制系統”為例,講述總體思路及關鍵的硬件電路、軟件設計。
溫室溫濕度控制在農作物生長的適宜范圍非常關鍵。溫濕度控制系統采用DHT11溫濕度傳感器采集數據且實時準確地通過LCD1602顯示,為了滿足不同農作物的生長,系統溫濕度上下限可通過按鍵設置。當測量值不在范圍內,對應的LED燈點亮、蜂鳴器報警,同時啟動控制模塊進行溫濕度調節直至正常[6-7]。
整個系統由主控、溫濕度采集、按鍵設置、報警、控制以及顯示等模塊組成,整體框圖如圖1所示。

圖1 系統整體框圖
主控模塊作為整個系統的核心,采用AT89C52單片機,其片內帶有8 KB、支持擦寫的Flash存儲器,與AT89C51相比,中斷源和存儲空間多,便于后期增加其他環境參數的測量[8-9]。
主控模塊與各模塊連接關系如下:P0.0~P0.7、P2.0~P2.2口與顯示模塊相連,P2.3口與溫濕度采集模塊相連,P2.4~P2.7口與控制模塊相連,P1.0~P1.3口與報警模塊相連,P1.4~P1.7口與按鍵設置模塊相連。該模塊中P3口空閑,后續可用于溫室其他環境參數如光照強度、CO2等的控制。
主控模塊實現如下功能:① 接收溫濕度傳感器的數據并將其發送給顯示模塊;② 接收按鍵設置模塊指令并進行溫濕度上下限的調節;③ 溫濕度不正常時給出報警指令并啟動相應控制模塊進行溫濕度的調節。
該模塊采用出產前精度已校準的DHT11數字溫濕度傳感器,供電電壓范圍3.3~5.5 V,溫濕度測量范圍分別為0~500 ℃、20%~90%RH。其內部包含一個電阻式感濕元件和一個NTC測溫元件,單線制串行接口,僅需一個I/O口直接與單片機相連。體積小、功耗低、響應快、抗干擾能力強等特點使其成為采集溫濕度的理想選擇[10-11]。
該模塊主要供用戶設置溫濕度上下限,主要由4個按鍵組成,依次為功能選擇鍵、加1鍵、減1鍵、保存鍵。功能選擇鍵用于對溫濕度上下限的選擇,加1鍵、減1鍵分別對各項參數進行加1、減1操作,保存鍵用于保存已設置好的溫濕度參數。
具體操作步驟如下:首先按下功能選擇鍵進行預設參數的選擇。當第1次按下該鍵時對溫度上限WDH設置,當第2次按下該鍵時對溫度下限WDL設置,以此類推當第3、4次按下該鍵時分別對濕度上限SDH、下限SDL設置。選中預設置參數后再通過加1、減1鍵調整WDH、WDL、SDH、SDL,最后按下保存鍵保存閾值。
控制模塊主要由驅動芯片ULN2004A、加熱器、風扇、加濕器、除濕器、三極管、繼電器組成,Proteus仿真中加熱器、風扇、加濕器、除濕器均用直流電機替代,當電機轉動時代表對應控制模塊啟動工作,以其中一路加濕器為例,控制模塊原理圖如圖2所示。

圖2 系統控制模塊原理圖
當DHT11檢測到溫濕度不在預先設定范圍內時便啟動控制模塊進行調節。當溫度低于預設溫度下限時加熱器開始工作,溫度高于溫度上限時風扇開始工作,濕度高于濕度上限時除濕器開始工作,濕度低于濕度下限時加濕器開始工作。
4個直流電動機與單片機P2.4~P2.7口連接時需設計驅動電路,驅動芯片選用輸出電流可達500mA的ULN2004A,其內部包含7路反向器電路,即當輸入端為高電平時輸出端為低電平,反之亦然[12]。ULN2004A輸入端適合于CMOS、PMOS器件,本設計中單片機輸出的TTL電平先通過連接2 kΩ的上拉電阻轉換為CMOS電平再接至ULN2004A輸入端;ULN2004A輸出端電流先通過三極管放大再通過繼電器控制電動機是否轉動。
依據模塊化編程思想,建立多文件工程,具體包括:主程序、DHT11驅動程序、LCD顯示程序。子程序包括定時器中斷函數和按鍵掃描子程序。
主程序流程圖如圖3所示。
(1) 初始化DHT11、LCD1602并預先在程序中設置溫濕度上下限;
(2) 啟動DHT11進行溫濕度的采集;
(3) 將采集數據及上下限通過LCD顯示;
(4) 檢測溫濕度是否超閾值。若超出閾值則LED燈亮、蜂鳴器報警,同時啟動對應的控制模塊進行調節,而后返回(2)循環執行上述過程直至溫濕度調至設置范圍內;若沒超閾值則進行(5)。
(5) 掃描是否有按鍵按下。若有按鍵按下則進行上下限的調節并返回(2)進行數據的采集及顯示;若無按鍵按下則結束。

圖3 主程序流程圖
由于DHT11采用單線制串行接口,故驅動程序(初始化、讀取溫濕度數據)需按照嚴格的時序圖編寫,時序圖如圖4所示。

圖4 DHT11時序圖
總線空閑時為高電平,開始工作時單片機拉低總線至少18 ms,然后拉高總線約20~40 μs等待DHT11響應。DHT11接收到單片機發送的開始信號且等開始信號結束后,輸出80 μs的低電平作為響應,接著輸出80 μs高電平進入數據發送階段。每一位數據都是以50 μs的低電平開始,緊跟其后的高電平時間決定數據為1或0。若高電平時間為26~28 μs則為0,若高電平時間為70 μs則為1[13-15]。
DHT11的DATA引腳用于和單片機之間的通信,一次傳送40 bit數據且高位先出,數據格式為:8 bit濕度整數數據+8 bit濕度小數數據+8 bit溫度整數數據+8 bit溫度小數數據+8 bit校驗位,其中溫濕度小數部分均為0。待40 bit數據傳輸完畢后,若校驗位等于前4 Byte數據相加取其低8 bit,則接收的數據正確。反之接收的數據有誤,重新接收[16]。
首先在Proteus軟件中繪制系統硬件電路圖,然后采用Keil軟件編寫程序并編譯、鏈接,最后將生成的Hex文件加載到單片機中進行仿真。
圖5為溫濕度不超閾值的仿真結果圖,WD為溫度,SD為濕度。程序中溫濕度預設范圍分別為20~30 ℃、60%~85%RH,測得的溫濕度分別為27 ℃、80%RH,均在預設范圍內,故報警模塊4個LED均不亮,直流電動機均不轉動。
針對某一農作物,溫濕度預設范圍調整為28~30 ℃、66%~75%RH,通過按下功能選擇鍵、加1、減1鍵設置溫濕度上下限,設置后按下保存鍵保存閾值,仿真結果如圖6所示,實測溫度27 ℃低于下限,濕度80%RH高于上限,則對應的低溫、高濕LED燈亮,且控制模塊中加熱器、除濕器開始工作進行溫濕度的調節。

圖5 溫濕度不超閾值的仿真結果圖

圖6 溫濕度超閾值的仿真結果圖
通過課堂引入Proteus仿真軟件聯合Keil調試,設計了主要由DHT11數字溫濕度傳感器和AT89C52組成的溫室溫濕度控制系統,實現了預設范圍內的溫濕度自動控制;做到了教學與實驗的同步,增強了學生的綜合知識應用能力和單片機開發能力,激發了學習興趣,為后續制作實物奠定基礎。
另外,該系統具有結構簡單、價格低廉、易操作等優點,結合全球移動通信系統(Global System for Mobile Communication,GSM)、ZigBee等無線通信技術,在溫室大棚的遠程監測中具有良好的應用前景。