陸洋,陶杰
(蘇州農(nóng)業(yè)職業(yè)技術(shù)學院,江蘇蘇州,215008)
水培生菜產(chǎn)量高,品質(zhì)好,安全美味,易于管理。目前一般的小型室內(nèi)種植設備逐漸出現(xiàn),但功能相對簡單。如圖1所示的麥佳氧菜源M3型號的智能蔬菜種植機,只具有循環(huán)灌溉、自動補光等功能。為更好的控制生菜生長,提升設備的自動化水平。在原有基礎上,增加了營養(yǎng)液遠程監(jiān)測功能。本文針對此需求設計了控制單元,檢測種植機中營養(yǎng)液箱營養(yǎng)液的電導率、液位、PH計的數(shù)值,通過手機APP上遠程監(jiān)測數(shù)值的變化。
圖1 蔬菜種植機裝置圖
系統(tǒng)由控制單元,上位機和監(jiān)控終端組成,控制單元由控制器和硬件外設組成,控制單元包含單片機,單片機連接OLED顯示屏、傳感器、水泵和ESP8266模塊。上位機采用了物聯(lián)網(wǎng)平臺ONENET智能云與ESP8266無線連接,用來存儲數(shù)據(jù),監(jiān)控終端使用的手機APPONENET設備云來制作圖形界面,來遠程監(jiān)測數(shù)據(jù)的變化。
控制單元采用STM32F103ZET6作為核心控制器,通過SPI連接OLED顯示屏,通過兩個串口與液位、電導率、PH計傳感器和wif i模塊通信。控制單元電路圖如圖3所示。
圖3 控制單元電路圖
OLED顯示屏采用中景園1.8彩色TFT LCD,型號為OLED128160,分辨率為128×160,使用SPI串口,采用5V供電。顯示屏的SDA接在PF115,SCL接在PF13,RES接在PF11,DC接在PF10,CS接線PF12,BL接在PF1上。
電導率、液位、PH值傳感器與單片機采用Modbus協(xié)議通信,采用485總線連接。 單片機串口2 使用TTL轉(zhuǎn)485模塊CP2102實現(xiàn)總線轉(zhuǎn)換。 單片機USART2的RX(PD6)接在模塊的RX上,TX(PD5)接在模塊的TX上,傳感器的RS485A接在模塊的A上,傳感器的RS485B接在模塊的B上,傳感器外接12V電源。
WIFI模塊采用ESP8266-01,通過串口轉(zhuǎn)換與單片機連接,該模塊支持TCP透傳模式,使用3.3V供電。單片機的USART3串口的RX(PD9)接在ESP8266模塊的TX上,TX(PD8)接在模塊的RX上。
WiFi和傳感器出現(xiàn)故障時需要報警,兩個LED報警燈一個負責WIFI連接失敗報警,另一個LED報警燈負責傳感器讀取失敗報警,LED使用3.3V供電。L1接在PC0上,L2接在PC1上。
控制單元程序主要由主程序和串口接收中斷子程序組成。主程序與主程序之間通過幾個全局變量實現(xiàn)程序之間的數(shù)據(jù)操作。
定義全局變量f loat型數(shù)組canshu[4],數(shù)組元素依次作為電導率、液位、PH值當前參數(shù)值及傳感器累積的未復位報警次數(shù);其中電導率和PH值1位整數(shù)2位小數(shù),液位值是1位整數(shù)2位小數(shù)。
主程序中通過串口發(fā)送各傳感器檢測modbus協(xié)議指令,并將傳感器按照modbus協(xié)議返回的檢測值處理,之后將各檢測值顯示在OLED上,并發(fā)送至ONENET智能云。串口接收過程由中斷子程序處理。串口接收數(shù)據(jù)及狀態(tài)由主程序處理。定義全局變量char型數(shù)組RS485_RX_BUF[8],作為串口接收緩存區(qū)。
根據(jù)控制單元和ONENET智能云的數(shù)據(jù)流輸送需要,定義一char型數(shù)組shangchuan[15]。
在shangchuan[15]中第0到11個元素表示三個傳感器讀取電導率、液位、PH值轉(zhuǎn)換后的四位字符;第12至14元素值表示三個傳感器的狀態(tài),“0”表示正常,“1”表示報警。
充分考慮傳感器的檢測及通信時間延遲,項目中設計各傳感器每隔300ms讀取一次,每隔100ms輪流讀取3個傳感器的參數(shù)值。定義char型全局變量f lag,作為單片機串口接收一次傳感器檢測數(shù)值的完成標記。
進入主程序后,先執(zhí)行初始化程序,根據(jù)硬件連接指定各相關引腳號和數(shù)據(jù)方向,控制器采用串口2進行MODBUS通信,設置串口2的波特率為9600;控制器采用串口3進行ESP8266串口通信,設置串口3波特率為115200,發(fā)送AT指令來配置ESP8266使其連接到ONENET智能云,AT指令接收成功則顯示OK,配置失敗則顯示ERROR,如果沒有連接到,就重新發(fā)送配置,在連接不成功重試了三次之后,WiFi報警燈LED開始閃爍。連接到ONENET智能云之后,控制器通過發(fā)送Modbus協(xié)議檢測命令給傳感器,輪詢讀取三個傳感器的參數(shù)檢測值。每個傳感器每隔300ms讀取一次測量值。
在主程序中,根據(jù)傳感器的參數(shù)讀取指令的modbus協(xié)議,定義三個char型數(shù)組TX_diandao[8]、TX_water[8]、TX_ph[8],分 別 為電導率讀取數(shù)組、液位讀取數(shù)組、PH值參數(shù)的讀取指令幀。主程序每次發(fā)送讀取指令幀前,先清空串口接收緩沖區(qū)數(shù)組RS485_RX_BUF[8],并將串口接收檢測數(shù)值的完成標記f lag復位。
圖4 主程序流程圖
程序中設計一int型變量s作為傳感器序號,當s=0時,發(fā)送電導率傳感器modbus指令,當s=1時,發(fā)送液位傳感器modbus接收指令,當s=2時,發(fā)送PH值傳感器modbus接收指令;每次發(fā)送modbus指令后對應的s加1。延時100ms后,通過檢查全局變量f lag,如未正確收到檢測值,則將s減1,再次發(fā)送對應傳感器的檢測指令。
如果發(fā)送正確接收到數(shù)值,先把canshu[0]、canshu[1]、canshu[2]顯示到OLED顯示屏中,并轉(zhuǎn)換成shangchuan[15]中格子對應的字符值;如3次發(fā)送未能收到檢測數(shù)值,在shangchuan[15]中將對應傳感器的狀態(tài)刷新;最后將shangchuan[15]值上傳至智能云。
傳感器通信的modbus協(xié)議規(guī)定,傳感器的測量響應幀為8個字節(jié)。串口接收數(shù)據(jù)后調(diào)用中斷子程序,中斷子程序流程圖如圖5所示。
圖5 子程序流程圖
串口每接收一個字節(jié)進入中斷,將接收數(shù)據(jù)存放進數(shù)組RS485_RX_BUF[8]中。并檢查是否收到8個字節(jié)后檢測數(shù)據(jù)是否符合協(xié)議要求,如正確,則按照IEEE754標準將接收的數(shù)值轉(zhuǎn)換為浮點數(shù),并存入對應的全局變量canshu[4]中,并將接收標記f lag置1。如錯誤,則直接退出,由主程序在100ms的定時后檢查f lag值后處理報警。
在ONENET智能云數(shù)據(jù)流模板中添加diandao、yew ei、p h、baojing1、baojing2、baojing3數(shù) 據(jù)流,分別在圖形界面中顯示電導率、液位、PH值和三個傳感器的狀態(tài)。在設備列表中采用LUA建立關聯(lián)腳本,使用函數(shù)device_data_analyze ()從接收的上行數(shù)據(jù)分離出對應值賦值 給diaodao、yewei、ph、baojing1、baojing2、baojing3數(shù)據(jù)流。
圖形界面的設計使用了ONENET設備云APP進行設計。圖形界面由圖6所示,數(shù)據(jù)查看區(qū)域使用儀表圖和報警燈,分別對應各自數(shù)據(jù)流,通過APP可以查看傳感器運行狀態(tài)和測量值。
圖6 遠程監(jiān)測圖形界面
本文使用STM32F103ZET6單片機實現(xiàn)電導率、液位、PH值的檢測控制單元,通過WIFI的TCP透傳方式實現(xiàn)與ONENET智能云的通信,在ONENET上控制臺設置數(shù)據(jù)流并設計監(jiān)視圖形界面,較好地實現(xiàn)了水培生菜生長環(huán)境遠程監(jiān)測功能。