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