蔡向科, 高振斌, 范書瑞
(河北工業(yè)大學(xué)電子信息工程學(xué)院,天津 300401)
隨著傳感器技術(shù)、自動控制技術(shù)、物聯(lián)網(wǎng)技術(shù)的發(fā)展,無線傳感網(wǎng)絡(luò)(WSN)已經(jīng)被應(yīng)用到了生產(chǎn)中的各個方面[1-5]。WSN主要通過在監(jiān)測區(qū)域內(nèi)部署大量的傳感器節(jié)點來感知周圍環(huán)境信息,然后通過互聯(lián)網(wǎng)實現(xiàn)感知數(shù)據(jù)的遠程傳輸。WSN應(yīng)用在水產(chǎn)養(yǎng)殖中,可以實時監(jiān)測魚類的生存環(huán)境,實現(xiàn)水產(chǎn)養(yǎng)殖的數(shù)據(jù)化和信息化。目前,國內(nèi)外已經(jīng)有許多相關(guān)的研究[6-8]。
部署在水面上的檢測節(jié)點主要采用電池供電。為了延長節(jié)點的生存周期,必須盡可能降低節(jié)點功耗。研究表明,節(jié)點上大部分能量消耗在數(shù)據(jù)收/發(fā)過程中[9]。Bakr等[10]通過添加備用節(jié)點來延長節(jié)點生存周期,但只是對能量耗盡的節(jié)點進行“接力”,并沒有降低節(jié)點的能量消耗。Thakkar等[11]通過考慮系統(tǒng)延時和節(jié)點剩余能量來選擇“下一跳”,從整個系統(tǒng)層面來維護能量平衡。黃庭培等[12]研究表明,接收信號強度(RSSI)能夠很好地反應(yīng)當(dāng)前的鏈路通信質(zhì)量。蔣建明等[13]通過基站對各節(jié)點能量的估算,周期性選擇不同節(jié)點作為簇頭節(jié)點,避免某個節(jié)點因能量消耗過快而過早地“死亡”,導(dǎo)致系統(tǒng)癱瘓。徐立鴻等[14]提出了節(jié)點自適應(yīng)調(diào)節(jié)算法,但該方法的傳輸距離僅為40 m,不適合搭建大規(guī)模的無線傳感網(wǎng)絡(luò)。
本設(shè)計根據(jù)水產(chǎn)養(yǎng)殖的特點,在不丟失重要監(jiān)測數(shù)據(jù)、滿足系統(tǒng)丟包率的基礎(chǔ)上,提出了發(fā)射功率和采集周期自適應(yīng)調(diào)節(jié)算法來降低節(jié)點功耗。同時,為了降低網(wǎng)關(guān)功耗,設(shè)計了NB-IoT數(shù)據(jù)傳輸方式和基于嵌入式實時操作系統(tǒng)軟件。
本系統(tǒng)主要包括檢測節(jié)點、簇頭節(jié)點、檢測網(wǎng)關(guān)、本地監(jiān)控中心、遠程監(jiān)控中心以及手機應(yīng)用程序(圖1)。檢測節(jié)點和簇頭節(jié)點用來連接溫度傳感器、pH傳感器、溶氧傳感器等采集監(jiān)測區(qū)域內(nèi)的水體信息。監(jiān)測區(qū)域內(nèi),系統(tǒng)采用分簇的方式進行系統(tǒng)組網(wǎng),簇與簇之間采用多跳方式連接,簇內(nèi)采用單跳方式連接,采用ZigBee方式進行數(shù)據(jù)通訊。檢測網(wǎng)關(guān)負責(zé)接收來自簇頭節(jié)點上的融合數(shù)據(jù)包,然后通過以太網(wǎng)發(fā)送至本地監(jiān)控中心,或通過NB-IoT發(fā)送至遠程監(jiān)控中心。本地監(jiān)控中心或遠程監(jiān)控中心對來自檢測網(wǎng)關(guān)的數(shù)據(jù)進行存儲或顯示。另外,本系統(tǒng)提供自動控制和人工控制兩種方式,當(dāng)檢測到水體信息不在系統(tǒng)設(shè)置范圍內(nèi)時,通過監(jiān)控中心自動發(fā)送遠程控制命令打開相應(yīng)設(shè)備,并且發(fā)出報警信號;若自動開啟設(shè)備失敗,監(jiān)控中心向用戶推送設(shè)備開啟失敗消息,提示用戶手動開啟相關(guān)設(shè)備。
圖1 系統(tǒng)總體設(shè)計
針對節(jié)點上的能量大部分消耗在無線模塊收發(fā)數(shù)據(jù)上的問題[15],設(shè)計了一種采集周期自適應(yīng)調(diào)節(jié)算法和發(fā)射功率自適應(yīng)調(diào)節(jié)算法來降低節(jié)點功耗,延長節(jié)點生存周期。
現(xiàn)有水產(chǎn)養(yǎng)殖監(jiān)測系統(tǒng)中,大多采用15 min、30 min、60 min等固定周期采樣[16-18]。對于固定周期而言,檢測周期設(shè)置過長,可能漏掉一些重要變化數(shù)據(jù);設(shè)置過短,又會造成大量的數(shù)據(jù)冗余,造成節(jié)點能量的浪費。本設(shè)計根據(jù)水產(chǎn)養(yǎng)殖環(huán)境變化不會很大的特點,通過比較感知數(shù)據(jù)和系統(tǒng)設(shè)置的魚類生存最佳環(huán)境數(shù)據(jù),自適應(yīng)調(diào)節(jié)節(jié)點采集周期,在不丟失重要變化數(shù)據(jù)的條件下,減少數(shù)據(jù)發(fā)送次數(shù),從而降低節(jié)點功耗。該算法具體調(diào)節(jié)策略如下:設(shè)置水溫、pH、溶氧各參數(shù)允許變化的范圍分別為δT、δP、δD;魚類最佳生存環(huán)境值分別為MT0、MP0、MD0,系統(tǒng)的初始采樣周期為5 min。水溫、pH、溶氧各參數(shù)第i次的感知數(shù)據(jù)分別為MTi、MPi、MDi,根據(jù)公式(1)計算出各個參數(shù)的變化率。
(1)
式中:Pi—各參數(shù)第i次的變化率;Mi—各參數(shù)第i次的感知數(shù)據(jù);M0—系統(tǒng)設(shè)置的各參數(shù)參考值;δ—系統(tǒng)設(shè)置的各參數(shù)最大允許變化范圍。
選擇變化率最大的參數(shù)作為第i+1次采樣周期的參考,以文獻[16-18]中的固定采樣周期為參考,得到本設(shè)計中的自適應(yīng)采樣周期模型,見公式(2)。
(2)
式中 :Ti+1—第i+1次采樣周期;Pi—各參數(shù)第i次變化率。
由于在監(jiān)測區(qū)域內(nèi)各檢測節(jié)點的無線傳輸距離各不相同,當(dāng)每個檢測節(jié)點都以最大發(fā)射功率工作時,網(wǎng)絡(luò)的通信質(zhì)量固然可以得到保障,但勢必會造成節(jié)點能量消耗過快,節(jié)點生存周期縮短。本系統(tǒng)根據(jù)接收信號強度和丟包率之間的關(guān)系,自適應(yīng)調(diào)節(jié)節(jié)點的發(fā)射功率。當(dāng)傳輸距離遠、接收信號強度弱時,采用高發(fā)射功率;當(dāng)傳輸距離近、接收信號強度強時,采用低發(fā)射功率。為了實現(xiàn)該算法,需要對本系統(tǒng)中使用的CC2530(Zigbee模塊)傳輸特性進行測試,通過數(shù)據(jù)對傳的方式,測得CC2530模塊接收信號強度與丟包率之間的關(guān)系(圖2)。
圖2 接收信號強度與丟包率的關(guān)系
根據(jù)電磁波理論[19],無線信號的傳輸距離、發(fā)射功率、接收功率之間的關(guān)系如公式(3)。
PT-PR=10Nlgd
所有受檢者均采用全子宮生化分析儀檢測,取受檢者早晨空腹靜脈血,將血液標(biāo)本放入37℃水當(dāng)中浸泡,時間為25 min,后分離血清,在分離后3 h內(nèi)進行血糖指標(biāo)與糖化血清蛋白指標(biāo)的測定。
(3)
式中:PT—信號發(fā)射功率, dBm;PR—信號傳輸1 m時的接收強度,dBm;N—環(huán)境傳播因子;d—傳輸距離,m。
(4)
本系統(tǒng)硬件的選擇從低功耗和系統(tǒng)性能兩方面考慮。檢測節(jié)點和簇頭節(jié)點相對檢測網(wǎng)關(guān)而言,處理的數(shù)據(jù)量較少,因此選用一款超低功耗處理器STM32L151C6,其待機電流僅為7 μA。檢測網(wǎng)關(guān)需要處理大量的匯聚數(shù)據(jù),對實時性要求比較高,因此選擇STM32F103ZET6作為主處理器,其待機電流為22 μA。針對全球定位系統(tǒng)(GPRS)無線傳輸功耗較高的情況,采用上海穩(wěn)恒公司生產(chǎn)的WH-NB73電信版NB-IoT模塊,該模塊具有低功耗,接受靈敏度高的特點。
檢測節(jié)點和簇頭節(jié)點的硬件結(jié)構(gòu)完全一樣。由于簇頭節(jié)點除了采集數(shù)據(jù)外,還具有路由轉(zhuǎn)發(fā)的功能,能量消耗要比檢測節(jié)點快很多,因此采用鋰電池加太陽能電板的方式供電,而檢測節(jié)點僅采用鋰電池供電。檢測節(jié)點硬件包括水質(zhì)檢測傳感器、信號調(diào)理電路、模/數(shù)轉(zhuǎn)換電路、低功耗處理器、ZigBee模塊、供電單元、電壓轉(zhuǎn)換電路以及控制電路(圖3)。傳感器采集到的模擬電信號經(jīng)信號調(diào)理電路放大、整流、濾波處理后進行模/數(shù)轉(zhuǎn)換,最后將數(shù)字信號經(jīng)SPI隔離后存儲在寄存器中,控制電路用來控制進/出水閥門、增氧機、投飼機、加熱棒等設(shè)備。
圖3 水質(zhì)檢測節(jié)點框圖
檢測網(wǎng)關(guān)作為連接感知網(wǎng)絡(luò)和互聯(lián)網(wǎng)的重要橋梁,在物聯(lián)網(wǎng)應(yīng)用系統(tǒng)中擔(dān)負著“上傳下達”的重要作用。由于網(wǎng)關(guān)的功耗較大,因此,網(wǎng)關(guān)的供電單元同樣采用鋰電池加太陽能板的方式。本系統(tǒng)中網(wǎng)關(guān)主要由微處理器、ZigBee模塊、NB-IoT模塊、RS485接口、以太網(wǎng)接口、調(diào)試接口、存儲單元以及供電單元組成(圖4)。
圖4 水質(zhì)檢測網(wǎng)關(guān)框圖
本設(shè)計在Modbus協(xié)議的基礎(chǔ)上對系統(tǒng)的數(shù)據(jù)傳輸結(jié)構(gòu)進行設(shè)計。Modbus協(xié)議是一種主從應(yīng)答的串行通信協(xié)議,支持ASSII、RTU、TCP三種通信模式[20]。在相同的波特率條件下,RTU模式要比ASSII模式傳輸更多的數(shù)據(jù)。本設(shè)計采用RTU模式,其數(shù)據(jù)幀結(jié)構(gòu)如圖5所示。
圖5 Modbus/RTU數(shù)據(jù)幀結(jié)構(gòu)
站號為各節(jié)點分配從機地址,目的是實現(xiàn)網(wǎng)關(guān)與節(jié)點之間的通信。Modbus協(xié)議最多支持247個從機設(shè)備。主機設(shè)備通過功能碼向從機設(shè)備下發(fā)指令信息,Modbus協(xié)議支持的功能碼眾多,在本設(shè)計系統(tǒng)中主要用到的功能碼以及作用見表1。
表1 功能碼及作用
對于ZigBee設(shè)備,包括固定不變的IEEE地址和有可能改變的網(wǎng)絡(luò)短地址[21]。為了實現(xiàn)Modbus主從設(shè)備之間的地址定向,本設(shè)計將Modbus站號和網(wǎng)絡(luò)短地址綁定在一起,以路由表的形式保存在網(wǎng)關(guān)中,當(dāng)檢測節(jié)點因能量耗盡造成網(wǎng)絡(luò)短地址改變后,網(wǎng)關(guān)可以及時廣播新的地址給所有從機設(shè)備,更新路由表,由此提高主從設(shè)備之間的通信成功率。檢測網(wǎng)關(guān)的讀數(shù)據(jù)命令和檢測節(jié)點返回的應(yīng)答信息如圖6和圖7所示。網(wǎng)關(guān)接收到節(jié)點返回的數(shù)據(jù)后,根據(jù)丟包率和接收信號強度判斷檢測節(jié)點是否需要自適應(yīng)調(diào)節(jié)發(fā)射功率,若需要,可通過Modbus 06功能碼向檢測節(jié)點發(fā)出調(diào)節(jié)發(fā)射功率的命令,其數(shù)據(jù)幀結(jié)構(gòu)如圖8所示。遠程控制命令由監(jiān)控中心發(fā)送給檢測網(wǎng)關(guān),檢測網(wǎng)關(guān)對命令解析后,同樣通過Modbus 06功能碼發(fā)出遠程控制命令,實現(xiàn)對進/出水閥門、增氧機、投飼機、加熱棒等設(shè)備的控制。
圖6 檢測網(wǎng)關(guān)讀數(shù)據(jù)命令
圖7檢測節(jié)點返回的應(yīng)答信息
Fig.7 Response information returned by testing node
圖8 自適應(yīng)調(diào)節(jié)節(jié)點發(fā)射功率數(shù)據(jù)幀
NB-IoT技術(shù)是IoT領(lǐng)域的一個新興技術(shù),支持低功耗設(shè)備在廣域網(wǎng)的蜂窩數(shù)據(jù)連接,也被稱為低功耗廣域網(wǎng)(LPWA),與傳統(tǒng)GPRS系統(tǒng)相比,其具有覆蓋范圍廣、功耗超低、鏈接多、成本低的優(yōu)點[22],非常適合作為物聯(lián)網(wǎng)中無線連接方式。圖9為本系統(tǒng)WH-NB73發(fā)送/接收數(shù)據(jù)框圖。
圖9 WH-NB73發(fā)送/接收數(shù)據(jù)框圖
模塊先進行上電初始化,通過AT指令與基站建立連接;連接成功后獲取服務(wù)器IP地址,AT指令建立Socket;最后通過AT指令發(fā)送/接收數(shù)據(jù),此后進入PSM模式。
為提高CPU利用率,采用FreeRTOS嵌入式實時操作系統(tǒng)。其任務(wù)調(diào)度策略如下:首先,通過任務(wù)1向檢測節(jié)點發(fā)送采集數(shù)據(jù)命令,檢測節(jié)點收到命令后立即由睡眠模式轉(zhuǎn)入工作模式。當(dāng)檢測節(jié)點采集完成后,將數(shù)據(jù)按圖7所示幀結(jié)構(gòu)進行打包,發(fā)送給檢測網(wǎng)關(guān),數(shù)據(jù)發(fā)送完成后,節(jié)點轉(zhuǎn)入低功耗模式。其次,當(dāng)網(wǎng)關(guān)收到數(shù)據(jù)后,對數(shù)據(jù)幀進行解析,根據(jù)幀結(jié)構(gòu)中的采樣周期決定下次采樣時間,根據(jù)接收信號強度和丟包率來判斷節(jié)點是否需要自適應(yīng)調(diào)節(jié)發(fā)射功率,若需要,則通過任務(wù)2向檢測節(jié)點發(fā)送調(diào)節(jié)命令。最后,通過任務(wù)3將緩存區(qū)數(shù)據(jù)上傳到監(jiān)控中心,并接收監(jiān)控中心下發(fā)的設(shè)備控制命令。當(dāng)所有任務(wù)執(zhí)行完成后,網(wǎng)關(guān)進入低功耗模式。
在實驗室通過控制水溫、pH、溶氧,模擬水產(chǎn)養(yǎng)殖環(huán)境對系統(tǒng)進行測試,試驗中用到的設(shè)備包括3個簇頭節(jié)點、12個檢測節(jié)點和1個網(wǎng)關(guān)節(jié)點,試驗內(nèi)容主要包括周期自適應(yīng)調(diào)節(jié)算法和發(fā)射功率自適應(yīng)調(diào)節(jié)算法以及系統(tǒng)的自動控制功能,以驗證系統(tǒng)的可行性。
為了測試周期自適應(yīng)調(diào)節(jié)算法,令上述算法中提到的δT=2 ℃、δP=0.8(pH)、δD=0.8 mg/L;MT0=20 ℃、MP0=7.5(pH)、MD0=8 mg/L。自動控制功能的驗證采用人工對溶氧進行干擾的方式進行測試,設(shè)置當(dāng)溶氧低于7.2 mg/L時打開增氧機。這里設(shè)置的參數(shù)只是為了驗證該算法的可行性,并非實際養(yǎng)殖環(huán)境中的參數(shù),實際參數(shù)可以根據(jù)所養(yǎng)殖的魚類進行設(shè)定。測試結(jié)果部分?jǐn)?shù)據(jù)見表2。
從表2中可以看出,節(jié)點能夠自適應(yīng)調(diào)節(jié)采集周期,當(dāng)水中參數(shù)偏離系統(tǒng)設(shè)置值越大時,采集周期也會越快;當(dāng)水中的溶氧值低于系統(tǒng)設(shè)置的下限時,增氧機開啟并開始報警。與固定周期15 min、30 min采集方式相比,該算法在不丟失重要變化數(shù)據(jù)的條件下,數(shù)據(jù)發(fā)送次數(shù)分別減少了140%和20%。極大地降低了節(jié)點由于發(fā)送冗余數(shù)據(jù)而造成的能量浪費。
試驗中設(shè)置CC2530模塊的功率調(diào)節(jié)范圍為-10~4 dBm,系統(tǒng)最大允許的丟包率為3%,節(jié)點初始默認發(fā)射功率為4 dBm,在數(shù)據(jù)傳輸過程中根據(jù)接收信號強度自適應(yīng)調(diào)節(jié)節(jié)點發(fā)射功率(表3)。從表3可以看出,節(jié)點能夠根據(jù)接收信號強度自適應(yīng)地調(diào)節(jié)發(fā)射功率,在滿足系統(tǒng)要求丟包率的同時,盡可能降低節(jié)點功耗,延長節(jié)點的生存周期。
表2 測試結(jié)果匯總表
表3 發(fā)射功率自適應(yīng)調(diào)節(jié)算法測試結(jié)果
由于簇頭節(jié)點和網(wǎng)關(guān)節(jié)點均采用太陽能電池板加鋰電池的方式供電,因此只對檢測節(jié)點進行節(jié)能效果測試。試驗中,為了加快電量消耗,檢測節(jié)點并沒用使用周期自適應(yīng)調(diào)節(jié)算法,而是采用固定周期(3 min)的方式進行數(shù)據(jù)采集。試驗分為兩組,一組采用固定發(fā)射功率4 dBm,另一組采用發(fā)射功率自適應(yīng)調(diào)節(jié)的方式,兩組均采用24 V、10 Ah的鋰電池供電,兩組設(shè)備均部署在相同的位置,盡量減小外部環(huán)境對測試結(jié)果的影響。剩余電量與采集次數(shù)之間的關(guān)系如圖10所示。
圖10 剩余電量與采集次數(shù)之間的關(guān)系
從圖10可以看出,在以固定發(fā)射功率工作時,節(jié)點大約能采集7 300次,以發(fā)射功率自適應(yīng)調(diào)節(jié)方式工作時節(jié)點最少可以采集8 000次,最多可以采集10 400次。節(jié)點生存周期延長了9.5%~42.5%。
與文獻[7]中節(jié)能方法相比,該算法主要針對耗電量較大的無線收發(fā)模塊進行降耗處理,使其節(jié)點生存周期延長了近1.3倍。與文獻[13]中的節(jié)能方法相比,該算法不需要復(fù)雜的路由策略,減少了節(jié)點在尋找最優(yōu)路徑時的能量消耗。與文獻[14]中的自適應(yīng)調(diào)節(jié)算法只能傳輸40 m相比,該算法通信距離更遠,更適合在水產(chǎn)養(yǎng)殖中組建無線傳感網(wǎng)絡(luò)。
針對現(xiàn)有水產(chǎn)養(yǎng)殖水質(zhì)監(jiān)測系統(tǒng)功耗高、節(jié)點能量有限的問題,設(shè)計了一款基于周期自適應(yīng)調(diào)節(jié)算法和發(fā)射功率自適應(yīng)調(diào)節(jié)算法的水產(chǎn)養(yǎng)殖監(jiān)測系統(tǒng)。將采集數(shù)據(jù)與系統(tǒng)設(shè)置的魚類最佳生存環(huán)境值進行對比,決定檢測節(jié)點下一次的采樣周期,做到在不丟失重要監(jiān)測數(shù)據(jù)的條件下,減少節(jié)點的采集次數(shù)。通過與Modbus協(xié)議結(jié)合,設(shè)計了一種根據(jù)接收信號強度與丟包率自適應(yīng)調(diào)節(jié)節(jié)點發(fā)射功率的數(shù)據(jù)幀結(jié)構(gòu)。測試結(jié)果表明,在滿足系統(tǒng)丟包率低于3%的條件下,采用發(fā)射功率自適應(yīng)調(diào)節(jié)算法的節(jié)點生存周期延長了9.5%~42.5%。系統(tǒng)具有較高的應(yīng)用價值。
□