郝結來,王子權,林 華
(1.安徽省汽車工業學校現代制造系,安徽合肥 231131;2.上海衛星裝備研究所總裝中心,上海 200240;3.合肥工業大學機械工程學院,安徽合肥 230009)
農業、林業、環保等工程中經常需要得到土壤的溫濕度數據[1-2],文獻[3]提出了一種基于射頻識別技術傳感標簽的農田土壤環境監測方法,設計分析了一種無源射頻識別溫濕度傳感標簽。文獻[4]對土壤的溫濕度數據進行取樣,探究溫濕度對高寒草甸土壤氮礦化的影響;文獻[5]測量出了土壤溫濕度數據,研究了不同的覆蓋方式對土壤溫濕度的影響。工程中通常采用電子儀表對土壤進行溫濕度測量[6-7]。文獻[8]利用虛擬儀器技術,基于51 單片機搭建了一套農田土壤溫濕度監測平臺,實現了單個土壤溫濕度的測量與顯示,裝置的測量通道數較少,并行處理能力較弱。相較于51 單片機和DSP 處理器,STM32 單片機具有更強大的計算能力和豐富的參考資料與設計案例[9-12]。文獻[13]利用PWM 輸出功能實現了對LED 燈的亮度調節。文獻[14]基于STM32,針對分布式光纖拉曼測溫系統中定標光纖和雪崩光電二極管的溫控要求,設計了一套高精度恒溫控制系統。文獻[15]在STM32 單片機中移植了UCOS 操作系統,設計了一種智能在線分析儀。
文中基于STM32F103ZET6 單片機,在單片機上移植UCOS 操作系統,實現了多任務的并行處理功能;進行了8 通道溫濕度采集系統硬件、電路、軟件等的設計,通過按鍵設置溫濕度報警值,并對報警信號進行功率放大,基于STemWin 設計制作操作簡便、友好的人機交互界面。
系統的整體組成如圖1 所示,主要包括8 對傳感器組件,即溫度傳感器1~8、濕度傳感器1~8,溫度傳感器通過單總線與單片機連接;PCF8591A 和PCF8591B 分別與濕度傳感器1~4 和濕度傳感器5~8連接,PCF8591 模數轉換芯片通過自身的IIC 總線與單片機連接。

圖1 系統整體組成
復位電路、晶振電路等為單片機正常工作的基本電路,留有串口電路的目的有兩個:程序燒寫和與上位機通信;通過按鍵設置溫濕度的報警值;對8 個傳感器組分別設置LED 指示燈,當LED 等亮起時表明對應的傳感器組在工作;設置報警信號的功率放大電路的目的是保證報警信號的響度足夠大,以使人員及時感知報警。
SEN0114 土壤濕度傳感電路如圖2 所示。該傳感器是一種簡易的水分傳感器,可用于檢測土壤的水分。當土壤缺水時,傳感器輸出值減小,反之增大。采用4 線制進行模擬量的采集,其中,VCC 和GND 分別表示電源的高電平和地。當濕度低于或高于設定值時,DO 輸出高電平或低電平。AO 為濕度模擬量的輸出端口,該接口與PCF8591 連接,用于實現模擬量到數字量的轉換。

圖2 土壤濕度傳感電路
A/D 轉換模塊集成了2 塊PCF8591 芯片,該芯片內部集成了IIC 總線,占用單片機2 個GPIO 端口,所以兩塊芯片共用IIC 總線。芯片的A0、A1 和A2 為器件地址配置端口,PCF8591A 配置為0x01 時,A0 為高電平,A1 和A2 均為低電平;PCF8591B 配置為0x00時,A0、A1 和A2 均為低電平。STM32 單片機可通過IIC 通信功能與其連接,轉換芯片的模擬量輸入端口為AIN0~AIN4,所以每個芯片可與4 個濕度傳感器連接。PCF8591 模數轉換芯片如圖3 所示。

圖3 PCF8591模數轉換芯片
DS18B20 溫度傳感器的電路簡單、測溫精度較高,遵循單總線通信協議,可使用STM32 單片機的通用GPIO 引腳實現與DS18B20 的數據通信。配置8個DS18B20 的單總線引腳分別為PB0、PB1、PC5、PC6、PA0、PA1、PE2 和PE3。
設計使用4.3 英寸電容觸摸屏,其分辨率為800×480 像素,采用16 位真彩顯示。相對電阻式觸摸屏而言,電容觸摸屏只需輕微的手指觸碰就能激活,容易進行多點觸摸,采用硬度較大的鋼化玻璃材料,使用壽命長[16]。
在按鍵設計中,共設置了7 個按鍵,其中一個為復位按鍵,其余6 個為濕度×10、濕度×1、濕度×0.1,溫度×1、溫度×0.1、溫度×0.01,分別表示濕度相對變化量10、1、0.1,溫度相對變化量1、0.1 和0.01。配置6個按鍵的GPIO 分別為PA11、PA12、PB8、PB9、PB10和PB11,按鍵引腳的初值化值均配置為高電平,通過人機交互界面可進一步設置溫濕度報警值。
為提高報警器的響度,降低單片機的負載,使用D2822A 芯片完成對報警信號的單聲道音頻功率放大,如圖4 所示。Input 為音頻輸入端,可與音頻設備進行連接。揚聲器接口配置為USB 標準的4 接口方式,接口的第一位和第三位為音頻線,第二位和第四位為地線,圖4 中USB4 元器件的1 和3 腳為音頻線,2 和4為地線。

圖4 音頻功率放大電路
系統軟件設計主要包括系統任務配置、人機界面設計、互斥信號量配置、系統程序整體流程、溫濕度測量任務等。
系統任務主要包括任務創建函數start_task、觸摸屏刷新任務touch_task、人機界面顯示與刷新任務emwin_task、報警任務boom_task、按鍵檢測任務key_task、系統工作指示任務led_task、溫濕度測量任務THmer_task1~THmer_task8。
start_task 用于創建其他任務,執行完畢后掛起,配置該任務的優先級為8,堆棧容量為128 B。touch_task 用于觸摸屏的刷新任務,配置該任務的優先級為3,堆棧容量為128 B。emwin_task 用于人機交互界面的顯示與刷新,配置該任務的優先級為5,堆棧容量為512 B。報警任務boom_task 用于輸出報警信號至功率放大芯片的音頻輸入端,配置該任務的優先級為7,堆棧容量為64 B。按鍵檢測任務key_task 用于實時檢測哪個按鍵按下,同時將按鍵的對應值在觸摸屏上刷新,配置該任務的優先級為9,堆棧容量為128 B。led_task 用于通過led 的亮滅判斷系統是否已經開始工作,配置該任務的優先級為10,堆棧容量為64 B。THmer_task1~THmer _task8為溫濕度測量任務,通過調用溫度和濕度的測量函數完成對溫濕度數據的采集,并將處理后的數值顯示在觸摸屏的對應位置,配置該任務的優先級為6,堆棧容量為512 B,時間片長度為50 ms。
友好的人機界面可大大提高系統的工作效率,文中主要設計了溫濕度報警值設置界面、溫濕度值顯示界面,兩界面可相互切換,以方便設置與觀測。
2.2.1 溫濕度報警值設置界面
溫濕度報警值設置界面為系統初始化界面,即系統開機時自動進入該界面,如圖5 所示。按住“START”按鈕并釋放,系統開始工作,按住“STOP”按鈕并釋放,系統停止工作。按住“Temperature Set”按鈕并釋放,此時系統進入溫度設置狀態,通過溫度設置按鍵即可完成溫度報警值的設置。按住“Humidity Set”按鈕并釋放,此時系統進入濕度設置狀態,通過濕度設置按鍵即可完成濕度報警值的設置。滑動長條的作用是通過觸摸屏對溫濕度值進行設置。在溫度和濕度設置中,長條的運動單位分別為0.01和0.1。

圖5 溫濕度報警值設置
設置好溫濕度報警值后,按住“ENTER”按鈕并釋放,系統進入溫濕度值顯示界面。在此界面下,“RETURN”按鈕不起作用。
2.2.2 溫濕度值顯示界面
溫濕度值顯示界面較簡便地顯示了各通道的溫濕度數值,如圖6 所示,T1~T8 和H1~H8 分別表示第1~8 通道的溫度和濕度數據。當測量到溫濕度數值時,在對應位置顯示溫濕度數值,當沒有測量到溫濕度數值時,在對應位置顯示“NULL”字符串。在此界面中,按住“RETYRN”按鈕并釋放,界面返回到報警值設置界面,“ENTER”按鈕不起作用。

圖6 溫濕度值顯示界面
由于2 個PCF8591 芯片共享一組IIC 總線,因此每次只能讀取一個芯片上的數據,為了避免由共享總線導致的數據串聯,配置了一個互斥信號量以防止優先級反轉,同時保證單片機在一次通信周期里只與一個轉換芯片進行通信。
在程序中配置一個任務標志變量TASK_FLAG,用于記錄每個任務的狀態,變量的位數為32 位。通過配置32 位中部分位的邏輯功能,可標志不同任務的運行狀態。其位邏輯設置如表1 所示。

表1 TASK_FLAG位邏輯
系統的整體程序流程如圖7 所示[17]。程序首先完成系統所必須的初始化過程,如單片機時鐘初始化、程序庫的初始化、串口初始化等。在UCOS 操作系統初始化后,進行start_task 任務,開始創建系統所需的其他任務,運行結束后掛起。任務都包含在任務池中,其中,emwin_task 任務完成人機界面的顯示。系統初始化后進入報警值界面,在該界面設置好數值后,通過“START”按鈕使系統正式進入工作狀態,通過“ENTER”按鈕進入數值顯示界面。在數值顯示界面,通過“RETURN”按鈕返回到報警值界面。

圖7 系統整體流程
溫濕度測量任務的主要工作是調用溫度、濕度測量函數,得到溫濕度數據,通過一定的數據處理,將溫濕度值顯示在觸摸屏上,其任務流程如圖8 所示。圖中,變量err 是操作系統必須定義的變量,用于存儲程序運行錯誤信息。由于溫度測量函數沒有共享數據總線,所以調用溫度測量函數無需增加互斥信號量的判斷,而濕度測量函數必須進行互斥信號量的判斷。
濕度測量函數如圖9 所示。在進行器件地址判斷之前,需要請求互斥信號量,當請求到信號量時,繼續執行后續程序,若沒有請求到信號量,則一直執行請求操作。PCF8591 的AD 轉換的數字量為8 位,以相對濕度最大為100 進行計算,可得相對濕度處理函數為:

式中,d為數字量(d≤255),對應圖9 中的函數變量ad。

圖8 溫濕度測量任務

圖9 濕度測量函數
如圖10 所示,實驗裝置主要包括溫度傳感器、濕度傳感器、變送器、STM32F103ZET6 開發板、觸摸屏、功率放大器、PCF8591 芯片組、LED 指示燈等。其中,變送器與濕度傳感器連接,用于得到準確的模擬量電信號。

圖10 實驗調試裝置
調試結果表明,土壤濕度傳感器經過變送器后將模擬量的電信號傳送到PCF8591 芯片組,經過模數轉換后得到了濕度數據,同時得到溫度傳感器的溫度數據;界面顯示正常,按鈕功能正常,能夠在報警值界面和數值顯示界面間切換;數據顯示正常,測量任務運行正常,溫度測量函數和濕度測量函數調用正常;功率放大器正常,在溫濕度到達報警值時能夠發出響度較大的報警信號。
基于STM32F103ZET6 單片機與UCOS 操作系統設計實現了多通道并行土壤溫濕度測量裝置,實現了8 通道的溫濕度并行采集與顯示。裝置不僅可用于土壤的溫濕度測量,也可用于環境溫度、盆栽綠植、流體溫度及濕度等的測量中,可方便地擴展裝置的通道數,并對裝置增加其他測量功能。