高翔 熊偉杰 徐韜穎 余豐 吳壘
摘 要:項(xiàng)目所設(shè)計(jì)研制的水質(zhì)檢測(cè)無(wú)人船是一款基于IoT技術(shù),以各類中小型湖泊或河流為場(chǎng)景,將遠(yuǎn)程控制、自動(dòng)路徑巡航、實(shí)時(shí)監(jiān)測(cè)水質(zhì)和預(yù)警功能結(jié)合為一體的水質(zhì)檢測(cè)無(wú)人船系統(tǒng)。該無(wú)人船調(diào)用百度地圖中的API,讓用戶可以遠(yuǎn)程在網(wǎng)頁(yè)端的地圖上繪制路徑、發(fā)送指令,使無(wú)人船根據(jù)指定繪制路徑自動(dòng)巡航,同時(shí)在微信小程序上實(shí)時(shí)獲取傳感器數(shù)據(jù)。該項(xiàng)目設(shè)計(jì)集成自動(dòng)坐標(biāo)巡航、水質(zhì)檢測(cè),數(shù)據(jù)交互傳輸和微信小程序開(kāi)發(fā)。通過(guò)測(cè)試,已實(shí)現(xiàn)在小型湖泊的現(xiàn)實(shí)場(chǎng)景中無(wú)人船按指定軌跡巡航,實(shí)時(shí)在小程序中檢測(cè)水質(zhì)數(shù)據(jù)的系統(tǒng)功能。
關(guān)鍵詞:物聯(lián)網(wǎng);繪制路徑巡航;微信小程序;數(shù)據(jù)傳輸;低成本
中圖分類號(hào):U674 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1674-1064(2021)05-041-04
DOI:10.12310/j.issn.1674-1064.2021.05.020
湖泊作為人類的一種寶貴的自然資源,在我國(guó)經(jīng)濟(jì)社會(huì)可持續(xù)發(fā)展中起著重要作用。然而,由于經(jīng)濟(jì)的快速發(fā)展,工業(yè)化、城鎮(zhèn)化的快速推進(jìn),人類對(duì)湖泊資源的掠奪性開(kāi)采和開(kāi)發(fā)已經(jīng)對(duì)湖泊造成了嚴(yán)重破壞,導(dǎo)致湖泊現(xiàn)狀十分嚴(yán)峻,如湖面萎縮、水質(zhì)惡化、生態(tài)功能退化、資源急劇減少等[1]。對(duì)此,建立詳細(xì)可靠的水質(zhì)檢測(cè)系統(tǒng)并及時(shí)做出應(yīng)對(duì)措施,就顯得極為重要。
然而,目前市面上的水質(zhì)檢測(cè)無(wú)人船系統(tǒng),大多具有搭建和維護(hù)成本高昂,控制系統(tǒng)設(shè)計(jì)較為復(fù)雜,巡航功能較為單一等問(wèn)題,對(duì)于漁業(yè)、林業(yè)等領(lǐng)域的個(gè)體用戶不是很友好。所以,針對(duì)現(xiàn)有問(wèn)題,文章結(jié)合國(guó)內(nèi)外移動(dòng)在線水質(zhì)監(jiān)測(cè)系統(tǒng)的研究現(xiàn)狀,設(shè)計(jì)了一個(gè)集遠(yuǎn)程通信、微信小程序平臺(tái)監(jiān)控、坐標(biāo)定位、自定義繪制路徑自主巡航等技術(shù)于一體,基于物聯(lián)網(wǎng)的可遠(yuǎn)程操控的水質(zhì)檢測(cè)無(wú)人船系統(tǒng)。
1 水質(zhì)監(jiān)測(cè)無(wú)人船系統(tǒng)的整體設(shè)計(jì)思路
整體系統(tǒng)大致分為兩大部分,硬件部分設(shè)計(jì)和軟件部分設(shè)計(jì)。如果按照功能來(lái)分類,可分為數(shù)據(jù)傳輸部分和自定義路徑巡航和控制部分。數(shù)據(jù)部分涉及到船體的姿態(tài)及位置數(shù)據(jù)的獲取和水質(zhì)檢測(cè)傳感器數(shù)據(jù)的獲取,以及姿態(tài)位置數(shù)據(jù)的處理和傳感器數(shù)據(jù)的傳輸問(wèn)題。自定義繪制坐標(biāo)路徑巡航和控制系統(tǒng),由網(wǎng)頁(yè)端和樹(shù)莓派中筆者搭建的服務(wù)器和電機(jī)驅(qū)動(dòng)文件實(shí)現(xiàn)。水質(zhì)檢測(cè)無(wú)人船系統(tǒng)的基本框架如圖1所示。
2 無(wú)人船硬件設(shè)計(jì)
2.1 無(wú)人機(jī)硬件結(jié)構(gòu)組成
無(wú)人船主要由密封防水船殼、電機(jī)、傳感器、控制主板、電源等部分構(gòu)成,以下是一些部件的具體信息和功能介紹。
主控芯片:樹(shù)莓派4B。樹(shù)莓派負(fù)責(zé)承載驅(qū)動(dòng)電機(jī)運(yùn)轉(zhuǎn)的腳本文件,用bottle庫(kù)建立的電機(jī)控制服務(wù)端,應(yīng)用在坐標(biāo)巡航的Nginx網(wǎng)頁(yè)服務(wù)器,以及各個(gè)水質(zhì)傳感器數(shù)據(jù)和姿態(tài)位置傳感器的數(shù)據(jù)儲(chǔ)存文件。目前,在互聯(lián)網(wǎng)企業(yè)實(shí)際生產(chǎn)環(huán)境中,Nginx作為一款開(kāi)源的高效解決高并發(fā)、高負(fù)載問(wèn)題的Web反向代理服務(wù)器而被廣泛應(yīng)用,是實(shí)現(xiàn)集群負(fù)載均衡技術(shù)的有效方式[2]。
Arduino:Arduino結(jié)合傳感器實(shí)現(xiàn)數(shù)據(jù)的精準(zhǔn)提取,利用Arduino作為數(shù)據(jù)中轉(zhuǎn)站,再利用Arduino和樹(shù)莓派的串口通信進(jìn)行數(shù)據(jù)交互,使用戶能更加方便地修改傳感器和代碼,只需要在Arduino替換上傳商家的新傳感器數(shù)據(jù)提取和串口傳輸代碼,再換上新的傳感器便可以進(jìn)行新的傳感器數(shù)據(jù)的提取和顯示。
姿態(tài)傳感器:GY955是一款高穩(wěn)定性的九軸導(dǎo)航AHRS模塊,其中電子羅盤自帶傾角補(bǔ)償算法,融合了卡爾曼濾波。通過(guò)改寫代碼將純文本的電子羅盤數(shù)據(jù)提取并發(fā)送到串口。
GPS模塊:通過(guò)GPS模塊和天線收集GPS數(shù)據(jù),通過(guò)Arduino與樹(shù)莓派串口通信并將位置數(shù)據(jù)作為數(shù)組形式儲(chǔ)存在樹(shù)莓派上面。
水質(zhì)檢測(cè)傳感器:PH傳感器,濁度傳感器,溶解氧傳感器等。
電源:采用可充電的12V和5V的鋰電池供電,為主板、電機(jī)和電機(jī)驅(qū)動(dòng)器供電。
2.2 無(wú)人船動(dòng)力系統(tǒng)設(shè)計(jì)
無(wú)人船的動(dòng)力推進(jìn)裝置由兩個(gè)可正反轉(zhuǎn)的無(wú)刷直流電機(jī)組成,兩個(gè)電機(jī)位于船體尾部?jī)蓚?cè),配合電機(jī)驅(qū)動(dòng)器,通過(guò)樹(shù)莓派主板GPIO引腳直接進(jìn)行PWM控制。利用雙電機(jī)差速運(yùn)轉(zhuǎn)改變和控制船的方向,當(dāng)船直行時(shí)兩電機(jī)同速運(yùn)轉(zhuǎn)。
2.3 硬件架構(gòu)
硬件架構(gòu)如圖2、圖3所示。
3 無(wú)人船軟件設(shè)計(jì)
3.1 巡航路徑繪制網(wǎng)頁(yè)的設(shè)計(jì)
百度地圖JavaScript API是一套由JavaScript語(yǔ)言編寫的應(yīng)用程序接口,可幫助用戶在網(wǎng)站中構(gòu)建功能豐富、交互性強(qiáng)的地圖應(yīng)用,支持PC端和移動(dòng)端基于瀏覽器的地圖應(yīng)用開(kāi)發(fā),且支持HTML5特性的地圖開(kāi)發(fā)[3]。
為增強(qiáng)用戶使用體驗(yàn),該設(shè)計(jì)決定摒棄直接輸入GPS坐標(biāo)的方式,采用用戶手動(dòng)繪制路徑的方式。主要通過(guò)調(diào)用百度地圖JavaScript API v1.0中的Polyline類和LocalResultPoi類配合JavaScript,使用戶觀察到地區(qū)實(shí)景以便路徑的繪制,滿足本項(xiàng)目的功能需求。
網(wǎng)頁(yè)后端部分,通過(guò)網(wǎng)頁(yè)前端調(diào)用百度API獲取的路徑坐標(biāo),利用編寫的php后端文件將自動(dòng)獲取的坐標(biāo)數(shù)據(jù)作為JSON格式傳到樹(shù)莓派本地文件中并儲(chǔ)存起來(lái),此數(shù)據(jù)方便之后巡航算法文件和電機(jī)控制文件的調(diào)用。巡航路徑繪制網(wǎng)頁(yè)設(shè)計(jì)整體結(jié)構(gòu)如圖4所示。
3.2 基于物聯(lián)網(wǎng)平臺(tái)和微信小程序的數(shù)據(jù)監(jiān)測(cè)系統(tǒng)設(shè)計(jì)
3.2.1 水質(zhì)檢測(cè)傳感器數(shù)據(jù)傳輸
水質(zhì)傳感器數(shù)據(jù)的傳輸過(guò)程如圖5所示。傳感器數(shù)據(jù)實(shí)時(shí)由Arduino獲取并進(jìn)行數(shù)據(jù)類型轉(zhuǎn)化處理和校準(zhǔn),并實(shí)時(shí)通過(guò)串口通信傳輸?shù)綐?shù)莓派主控板上,然后由樹(shù)莓派主控板中的數(shù)據(jù)上傳程序,將傳感器數(shù)據(jù)上傳到OneNET物聯(lián)網(wǎng)平臺(tái)進(jìn)行數(shù)據(jù)的統(tǒng)計(jì)和儲(chǔ)存,微信小程序調(diào)用物聯(lián)網(wǎng)平臺(tái)的API,實(shí)現(xiàn)實(shí)時(shí)水質(zhì)檢測(cè)傳感器數(shù)據(jù)的獲取和刷新。
3.2.2 微信小程序設(shè)計(jì)
微信小程序使用和開(kāi)發(fā)的簡(jiǎn)便性備受用戶和開(kāi)發(fā)者青睞,該小程序項(xiàng)目一共實(shí)現(xiàn)了以下四大主要功能:
實(shí)時(shí)查詢水質(zhì)傳感器收集的最新數(shù)據(jù),并附加數(shù)值報(bào)警提醒功能。
根據(jù)不同的傳感器數(shù)據(jù)分類,給予用戶相應(yīng)的水質(zhì)改善方案。
用戶通過(guò)賬號(hào)登錄來(lái)獲取無(wú)人船手動(dòng)控制頁(yè)面和導(dǎo)航頁(yè)面的域名。
提供水質(zhì)檢測(cè)科普知識(shí)。
3.3 基于GPS的自定義坐標(biāo)路徑巡航系統(tǒng)設(shè)計(jì)
無(wú)人船的自動(dòng)沿路徑巡航建立在手機(jī)移動(dòng)終端的無(wú)線遠(yuǎn)程操控系統(tǒng)下,利用手機(jī)移動(dòng)終端登錄網(wǎng)頁(yè)客戶端,在百度地圖上自定義繪制坐標(biāo)路徑,并通過(guò)無(wú)線網(wǎng)絡(luò)發(fā)送路徑坐標(biāo),無(wú)人船接收到坐標(biāo)數(shù)據(jù)后開(kāi)始執(zhí)行巡航程序。
3.3.1 自定義坐標(biāo)路徑巡航系統(tǒng)工作流程
自定義坐標(biāo)路徑巡航系統(tǒng)流程如圖6所示。在通過(guò)網(wǎng)頁(yè)端調(diào)取設(shè)定路徑點(diǎn)的經(jīng)緯度坐標(biāo)、GPS坐標(biāo)數(shù)據(jù)、電子羅盤方向角數(shù)據(jù)后,需要利用路徑點(diǎn)的經(jīng)緯度坐標(biāo)計(jì)算巡航路徑相鄰點(diǎn)之間的方向角及行駛距離。在程序設(shè)計(jì)中,當(dāng)無(wú)人船主控系統(tǒng)從網(wǎng)頁(yè)獲取并發(fā)送船體當(dāng)前的方向角、GPS坐標(biāo)、目標(biāo)路徑初始點(diǎn)的坐標(biāo)后,程序就會(huì)開(kāi)始計(jì)算船體當(dāng)前位置和初始點(diǎn)(巡航路徑設(shè)定的第一個(gè)坐標(biāo)位置)位置之間的方向角和距離,并運(yùn)行電機(jī)控制的程序進(jìn)行目標(biāo)靠近。在靠近初始路徑點(diǎn)的過(guò)程中,由于船在水面上具有慣性,所以需要實(shí)時(shí)計(jì)算當(dāng)前位置與目標(biāo)位置的距離與方向角,并根據(jù)計(jì)算數(shù)據(jù)調(diào)整電機(jī)運(yùn)轉(zhuǎn)。當(dāng)程序檢測(cè)到船到達(dá)目標(biāo)位置(初始點(diǎn))后,自動(dòng)停止計(jì)算初始點(diǎn)的數(shù)據(jù)信息,并開(kāi)始計(jì)算當(dāng)前船體坐標(biāo)與巡航路徑中的第二個(gè)設(shè)定點(diǎn)之間的距離及方向角。程序周而復(fù)始直至檢測(cè)到船體到達(dá)最后一個(gè)目標(biāo)點(diǎn),即完成巡航任務(wù),程序恢復(fù)等待狀態(tài),等待下一次巡航命令。
3.3.2 坐標(biāo)數(shù)據(jù)計(jì)算過(guò)程的重要理論依據(jù)
在以上過(guò)程中,運(yùn)用到了利用GPS坐標(biāo)計(jì)算方向角和距離的公式,可以近似將地球看作球體計(jì)算[4],如圖7所示。
參數(shù)說(shuō)明。地球上任意兩點(diǎn)A和B的經(jīng)緯度坐標(biāo)分別為A(Aj,Aw)和B(Bj,Bw),A和B之間的方位角就是Lab的切線與地球緯線之間的夾角[5]。且A和B兩點(diǎn)間球面距離為L(zhǎng)ab,地球半徑為R,O為地球球心,C為北極點(diǎn)。
角A即點(diǎn)A與B連線的方位角。
4 無(wú)人船系統(tǒng)測(cè)試
在系統(tǒng)搭建完成后進(jìn)行功能測(cè)試,選取了學(xué)校一個(gè)人工湖作為測(cè)試水域,測(cè)試持續(xù)兩周。
4.1 基于GPS的自定義繪制坐標(biāo)路徑巡航系統(tǒng)的測(cè)試
在網(wǎng)頁(yè)客戶端地圖上找到學(xué)校的人工湖,依次用手點(diǎn)擊希望巡航經(jīng)過(guò)的坐標(biāo)點(diǎn),坐標(biāo)點(diǎn)依次根據(jù)點(diǎn)擊順序連接成設(shè)定好的巡航路徑。之后點(diǎn)擊發(fā)送按鈕,將開(kāi)始巡航的指令和坐標(biāo)數(shù)據(jù)發(fā)送至樹(shù)莓派服務(wù)器并開(kāi)始執(zhí)行巡航程序。如圖8、圖9所示,分別為路徑繪制網(wǎng)頁(yè)頁(yè)面和無(wú)人船測(cè)試實(shí)拍圖片。
4.2 基于物聯(lián)網(wǎng)平臺(tái)和微信小程序的數(shù)據(jù)監(jiān)測(cè)系統(tǒng)的測(cè)試
當(dāng)無(wú)人船在按照繪制的路徑巡航的時(shí)候,打開(kāi)微信小程序當(dāng)無(wú)人船按照繪制的路徑巡航時(shí),打開(kāi)微信小程序,進(jìn)入到無(wú)人船檢測(cè)控制主頁(yè)面,如圖10所示,帶年紀(jì)實(shí)時(shí)數(shù)據(jù)查詢,查詢濁度傳感器的數(shù)據(jù),點(diǎn)擊重新獲取網(wǎng)絡(luò)數(shù)據(jù),刷新最新的濁度傳感器數(shù)據(jù)。此時(shí)數(shù)據(jù)為625,根據(jù)后臺(tái)設(shè)定的閾值對(duì)比超標(biāo)顯示報(bào)警,如圖11所示。之后,可以返回主頁(yè)面到水質(zhì)改善方案頁(yè)面中尋找解決方案,如圖12、圖13所示。
5 結(jié)語(yǔ)
文章介紹了當(dāng)前湖泊環(huán)境污染問(wèn)題,并針對(duì)湖泊水質(zhì)檢測(cè)技術(shù)的現(xiàn)存問(wèn)題提出了一種多模塊的基于物聯(lián)網(wǎng)技術(shù)的水質(zhì)檢測(cè)無(wú)人船系統(tǒng),以實(shí)現(xiàn)水質(zhì)監(jiān)測(cè)、實(shí)時(shí)數(shù)據(jù)上傳、自主巡航、遠(yuǎn)程控制等任務(wù)。通過(guò)對(duì)系統(tǒng)的測(cè)試,水質(zhì)檢測(cè)智能無(wú)人船可以按照用戶繪制的路徑進(jìn)行定點(diǎn)自主巡航,實(shí)現(xiàn)水質(zhì)檢測(cè)及實(shí)時(shí)預(yù)警等功能。此外,無(wú)人船系統(tǒng)仍存在改進(jìn)空間,由于GPS誤差較大,可采用GPS差分技術(shù)提高精度,建立更加精確的無(wú)人船巡航系統(tǒng)。
參考文獻(xiàn)
[1] 譚飛帆,王海云,肖偉華,等.淺議我國(guó)湖泊現(xiàn)狀和存在的問(wèn)題及其對(duì)策思考[J].水利科技與經(jīng)濟(jì),2012,18(4):57-60.
[2] 吳陳.基于Nginx的服務(wù)器集群負(fù)載均衡策略的研究與改進(jìn)[D].廣州:華南理工大學(xué),2020.
[3] 夏軍.基于百度地圖API的快速制圖系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].測(cè)繪工程,2019,28(4):42-48.
[4] 劉力榮,李菡.GPS坐標(biāo)與方向、距離相互轉(zhuǎn)換的計(jì)算公式推導(dǎo)[J].南方農(nóng)機(jī),2018,49(14):106.
[5] 周建鄭.GPS定位原理與技術(shù)[M].鄭州:黃河水利出版社,2005.