程雪敏
(蘇州工業職業技術學院,江蘇蘇州,215104)
本課題設計的是一種游泳池的智能恒溫控制系統,系統主要分為手動調節溫度和自動調節溫度兩個模塊,主要功能是通過溫度的設定實現智能控制溫度大小,采用STM32F103C8T6 微控制器配合其他器件做成最小系統板,水溫度傳感器負責將實時溫度信息采集并進行儲存,溫濕度傳感器同理負責將說采集到的溫濕度數據進行儲存,單片機通過單總線協議讀取傳感器所儲存的數據后進行計算,從而得到想要的數據。
游泳池用智能恒溫系統控制的設計是根據現在人們喜愛這項運動的始點出發,解決了泳池在受到溫度影響而無法及時使用的情況下設計的。本智能恒溫控制系統在各個領域應用廣泛,市場前景較為廣闊,能夠提高能源利用率。
圖1 為系統的框圖設計。本設計的核心控制器為一顆STC32F 系列單片機,由一些外圍元器件搭建出此核心控制器的簡易工作環境,從而提供整個系統所需要的算力及邏輯控制,電源方面采用了雙電源設計,單片機通過與溫濕度傳感器、水溫傳感器通信獲取實時數據,用戶操作編碼器按鍵輸入預設信息,采集到這三個外設的數據后即可實現離線控制水溫,WiFi 模塊有接收到數據后會將數據發送到單片機,單片機對信息篩選后寫入指定寄存器后開啟離線控制模式,此時WiFi 會將離線的數據實時上傳到云端。里面控制模式會將所采集到的信息,以及當前離線模式的狀態發送到OLED 顯示屏上進行顯示,供用戶閱讀。當需要開啟加熱器時單片機會給陶瓷加熱片驅動電路PWM 信號,來控制陶瓷加熱片的功率。

圖1 系統設計框圖
硬件電路的設計要滿足是高質量、安全性、簡略性等。本系統主要由STM32F103C8T6 主控電路、狀態指示電路、LDO 降壓電路、溫濕度檢測電路、加熱驅動電路、WiFi 通信模塊、OLED 顯示電路、DC 降壓電路組成。
圖2 是STM32F103C8T6 的最小工作系統,圖中BOOT0 引腳直接拉低,只因此設計程序無特殊要求,程序代碼體積也相對較小,故只需要將主閃存作為啟動區域,而無需從系統存儲器或者內置的SRAM 中啟動系統程序。考慮到本系統需要在高溫高濕的環境中運行,晶振采用了外置8MHz 晶振提高系統工作可靠性。芯片復位端口有外接按鍵,當出現緊急情況可以以最快速度復位芯片增加安全性。此單片機部分引腳可以接受5V 電平輸入,當外設電壓受干擾產生波動信號電平也會跟隨波動,因為可以容忍5V 電平所以不易導致芯片損壞。

圖2 STM32F103C8T6 主控電路
如圖3 所示,Q2 MOS 采用新節能的NCE01P13K,支持100V 電壓13A 的電流,大電流可根據實際情況更換不同功率的陶瓷發熱片,從而適應各種泳池大小。MOS 的開關由8050 三極管控制,當三極管基極受電導通后,會拉低MOS 的柵極電壓從而使PMOS(Q2)導通,12V 電源經過Q2 與P4 接口的陶瓷加熱片接通,加熱片即開始工作。電容C7 為鋁電解電容,抑制通電瞬間產生的壓降,防止壓降過大,導致系統缺電復位。

圖3 加熱驅動電路
在電阻R12 上拉至3.3V 電源防止ESP8266 因干擾復位,LED3 為是否開啟加熱功能指示燈,當接收到云端的開啟數據LE3 點亮,當云端選擇關閉加熱功能LED3 也會熄滅。當解析完成云端數據后會通過串口將數據發送給主控。底層會將實時溫濕度數據通過串口發送給EP8266,解析成功后ESP8266 將數據上傳ONENET,在用戶操作界面即可看到實時數據。數據解析功能可以避免干擾數據導致上傳數據出錯。EPS8266 與云端通信采用的JSON 通信格式,便于云端對數據分析處理。如圖4 所示。

圖4 WiFi 通信模塊
圖5 DC 降壓電路采用的芯片是MP1584EN,其輸入電壓范圍較寬(4.5~28V)所以能接受12V 的電源輸入。R15、R16 通過分壓給到芯片的使能引腳使能信號,D1 防止電感L1 的反向電動勢擊穿芯片內部MOS,MP1584EN開關頻率可達1.5MHz 電感L1 的反向電動勢會很大,D1 可以消耗掉反向電動勢保證芯片安全。R9、R10 構成輸出電壓采樣用于反饋輸出電壓,讓芯片實時調整輸出電壓保證輸出電壓在設置的范圍內。MP1584EN 對于防止EMI 也有良好的效果,對于電流失控及溫度過高都有良好的保護,并且其工作頻率較高非常適合當前電路。

圖5 DC 降壓電路
網頁端的數據處理采用的是ONENET 平臺,底層ESP8266 將數據打包上傳至服務器183.230.40.39 的6002端口,依靠ONENET 平臺實現遠程控制。
如圖6 所示,MQTT 協議接入,能看到當前上傳數據的總數及七日新增,能夠讓用戶直觀判斷當前數據是否有效,在面板界面可以看到三組數據,標題分別為TEMP、Temp、Humi 分別對應水溫、環境溫度、環境濕度,這三組數據都可看到最后更新時間,可以不借助圖形界面就可直觀的觀察當前數據,每一個標題都對應ESP8266 所訂閱的標題,標題用于區分不同數據。數據的獲取是從通過MQTT協議上傳到服務器的JSON 數據中解析的,預先根據指定的數據格式上傳數據,ONENET 平臺會自動解析數據,并將解析過的數據顯示到當前頁面。當在ONENET 平臺創建產品后,會自動生產產品ID 與產品KEY,在上傳數據前需要與服務器握手ID 與KEY 信息,只有這些都正確后才可向服務器傳輸數據。

圖6 MQTT 協議接入
如圖7 所示,可視化操作界面是由ONENET 的可視化項目編輯工具來完成的,可視化頁面數據可直接對接MQTT協議接入的數據,可視化界面的數據需要自行編寫代碼解析,環境溫濕度與水溫是由表盤組價來進行編輯,接入MQTT 數據流后即可接管底層上傳對應訂閱主題的數據,經過JAVA 程序對接管數據進行有效信息提取后,再將數據發送至表盤數據接口表盤即可自動更新數據,當前設置參數為5s 更新一次參數。

圖7 可視化操作頁面
設定水溫是由ONENET 的旋鈕接口組件進行實現,當用戶操作結束時此組件會自動往設定的訂閱主題下下發一組數據,此組數據包含當前所設置的水溫數值。對于按鈕的操作也同理,當操作按鈕改變狀態時,按鈕組件也會向對應的訂閱主題下發開關數據。開關數據可自行定義,當前所定義的數據為關:0x01,開:0x00。
恒溫系統的工作流程圖如圖8 所示,通過操作系統RT-Thread 對所需要進行的任務進行合理的安排,由于RTThread 是實時線性操作所以任務的安排具有優先級,獲取水溫任務尤為關鍵,程序運行后會首先與防水行數字傳感器D18B20 進行通信,獲取到溫度數據后再與溫濕度傳感器(DHT11)通信,獲取環境的溫濕度值后用戶可以根據環境溫濕度調整水溫,程序所獲取的溫濕度都會上傳的用戶操作界面顯示。

圖8 恒溫系統工作流程圖
根據當前所采集到的水溫信息,并且通過串口數據獲取到的用戶所設置的水溫信息進行比對,水溫控制方面采用了類PID 算法的模糊控制,考慮到水溫不均衡,并沒有采用PID 算法的精確控制特性,而是在水溫即將到達預設值時進行模糊控制,通過簡易算法結果STM32 操作硬件IO 口對陶瓷加熱驅動電路進行控制,通過PWM 控制驅動器的工作時間,從而有效控制陶瓷加熱片的功率,即可實現快速升溫與恒溫控制,確保水溫不會有太大的波動從而提高用戶體驗感。
ESP8266 通電后會首先自檢各功能,當檢查無誤后會對當前WiFi 進行連接,如果發現連接不成功會啟動自動配網模式,此時用戶開啟手機自動配網APP 即可讓ESP8266連接到與手機同一網絡。當網絡連接成功后會自動與ONENET 服務器進行握手,發送用戶ID 與用戶Key 后燈帶服務器驗證后握手,驗證成功后會持續檢測串口數據,當檢測到ESP8266 串口數據不為零時延時100ms 后對串口數據全部讀取,后進行解析出有效數據,將數據發送至對應的訂閱主題下。當ONENET 服務器下發數據后,MQTT 庫函數會調用接收函數,接收函數對ONENET 下發數據進行解析后通過串口發送給STM32F103 單片機,發送成功后會復位并等待下次數據下發。如圖9 所示。

圖9 ESP8266 程序流程
如圖10 所示,圖形是示波器測量陶瓷加熱片驅動電路的輸入信號,示波器保持情況下進行截圖所獲取的,加熱片驅動電路輸入信號頻率為65kHz,圖中0.08 占空比為內部經過計算所得出當前加熱片需要開啟的比例,此時水溫已經接近預設溫度程序會自動降低占空比來降低加熱片功率來防止水溫過沖,導致用戶燙傷或其他不可出現意外。

圖10 加熱器驅動波形
如圖11 所示,圖中代碼為ONENET 圖形化界面的數據解析代碼,剛開始調試時數據總是出錯,經過反復檢查后發現代碼并沒有起作用,所以ONENET 界面一直顯示數據解析錯誤,當調整好配置好代碼正常運行,但是顯示數據總是60,以為是底層數據上傳失敗,后經過MQTTx 軟件進行數據獲取發現數據格式與數據都不曾有錯,經過返回數據對比發現當前代碼return arr[1];所返回的數據位不同,后改成如圖的代碼數據即顯示成功。

圖11 云端數據過濾器代碼
本設計是一個基于STM32 微控制器的恒溫控制系統,水溫溫度能根據環境溫度保持恒溫并且可以調控溫度,實現對溫度的采集與分析。在本設計的制作過程中,完成了軟硬件的設計和實物的制作。
本系統使用嵌入式技術,采用DS18B20 數字溫度傳感器和DHT11 溫濕度傳感器,實現了模糊控制下的恒溫控制并且實時溫度的顯示。能夠實現智能恒溫解決了日常熱水器需要手動調節溫度的問題,有效的減少了能源的消耗。通過對本設計的研究與實現,我深刻體會到了單片機技術的先進性和諸多優點,在現代和未來的工業發展中單片機技術必定會擁有廣闊的應用前景。