路天天,葉宇程,劉 巖,趙壯壯,阮治綱,高 爽
(河南科技大學(xué)信息工程學(xué)院,河南 洛陽 471023)
根據(jù)《2017中國環(huán)境狀況公報(bào)》顯示:截止2017年年底,全國廢水排放總量達(dá)735.3億噸,相當(dāng)于一個(gè)青海湖。鑒于當(dāng)前的水環(huán)境所面臨的問題,治理已經(jīng)勢在必行了。目前,小型水域水面漂浮物的清理辦法主要是采用手持式網(wǎng)兜等傳統(tǒng)工具進(jìn)行清除,存在清理不干凈、耗時(shí)長、效率低、勞動強(qiáng)度大等弊端,非常不適合于小型景觀水域、養(yǎng)殖水域和私人水域的使用。鑒于上述情況,本文敘述一種全自動水上垃圾清理系統(tǒng),用來解放勞動力,取代手持式網(wǎng)兜,自動清除水上垃圾。本系統(tǒng)實(shí)現(xiàn)的主要功能是:水上垃圾清理船自動規(guī)劃路徑清理水上垃圾,并把其位置信息上傳到服務(wù)器,手機(jī)APP向服務(wù)器請求船的位置信息并畫出船的行駛路徑。
全自動水上垃圾清理系統(tǒng)包括船體、服務(wù)器和手機(jī)APP三部分。船體部分的主要功能是:在湖中自動收集垃圾并把自己的位置信息、電量信息傳到服務(wù)器中,此外,當(dāng)垃圾箱被裝滿時(shí),船體還可以向管理員報(bào)警。服務(wù)器部分的主要功能是:接收船體發(fā)來的信息并存儲起來,等待手機(jī)APP取出。手機(jī)APP的主要功能是:從服務(wù)器中取出船體的位置信息和電量,然后經(jīng)過運(yùn)算顯示出船體在湖中走過的路徑和船的電量,此外,APP還可以作為遙控器控制船體前后左右移動,便于回收船體。
圖1 全自動水上垃圾清理系統(tǒng)總體設(shè)計(jì)框圖
船體設(shè)計(jì)包括機(jī)械設(shè)計(jì)、硬件電路設(shè)計(jì)和軟件設(shè)計(jì)三部分。
圖2 船體機(jī)械設(shè)計(jì)
船體由左船艙、右船艙、垃圾箱、傳送帶、螺旋槳組成。左船艙和右船艙尾部分別有一個(gè)螺旋槳,可用于驅(qū)動船體前進(jìn)和左右移動;左右船體中間有一條傳送帶,傳送帶一端浸入水中,用來把垃圾傳送到傳送帶另一端的垃圾箱里。
船體硬件電路主要包括STM32F103C8T6單片機(jī)[1]、LM2596穩(wěn)壓電路、超聲波模塊、GPS傳感器、電壓檢測電路、GSM模塊和光電開關(guān)。
STM32F103C8T6微控制器作為主控制器,它用來接收GPS傳感器采集到的位置信息和電壓檢測電路檢測到的船體電源的電量信息,然后通過GSM模塊把這些信息上傳到服務(wù)器;此外,用一個(gè)光電開關(guān)固定到垃圾箱的頂部,當(dāng)垃圾箱被裝滿時(shí),微控制器通過GSM模塊向管理員報(bào)警。
兩個(gè)超聲波模塊分別安裝在左右船艙的頭部,用來檢測前方是否有障礙物。
LM2596穩(wěn)壓電路用來把24V電源降到3.3V給單片機(jī)供電。
電壓檢測電路由一個(gè)分壓電路組成,分壓電路把電源電壓的范圍轉(zhuǎn)換到0-3.3V的范圍內(nèi)便于數(shù)模轉(zhuǎn)換模塊測量電源電量。
圖3 分壓電路
圖4 船體軟件流程圖
船體軟件流程圖如圖4所示。程序初始化之后,執(zhí)行傳感器信息采集程序,接收各個(gè)傳感器采集到的信息,然后把傳感器信息打包,打包格式為:“經(jīng)度 緯度 電量信息 ”;然后執(zhí)行與服務(wù)器交互程序把打包好的信息發(fā)送到服務(wù)器端,然后檢測服務(wù)器是否發(fā)來指令;如果發(fā)來指令,就執(zhí)行手動控制程序,通過手機(jī)APP控制船體前后左右移動;如果沒有發(fā)來指令,就執(zhí)行自動控制程序,船體通過傳感器得到的信息判斷怎么移動。
傳感器信息采集程序先通過串口通信接收GPS模塊的信息,通過單片機(jī)的ADDA采集電壓檢測電路的電量信息,通過中斷函數(shù)接收超聲波模塊的測距信息,用單片機(jī)的普通IO口檢測光電開關(guān)輸出端的高低電平信息,然后把這些信息存儲下來并打包。
與服務(wù)器交互程序主要通過串口通信向GSM模塊發(fā)送AT指令來實(shí)現(xiàn)向服務(wù)器發(fā)送和接收信息。單片機(jī)通過AT指令把打包好的數(shù)據(jù)發(fā)給服務(wù)器,然后通過串口中斷函數(shù)檢測服務(wù)器是否發(fā)來指令。
接收到服務(wù)器的指令后,手動控制程序根據(jù)指令控制單片機(jī)輸出相應(yīng)的PWM波形控制兩個(gè)螺旋槳的轉(zhuǎn)速達(dá)到船體前后左右移動的目的。
如果沒有接收到服務(wù)器的指令,自動控制程序根據(jù)超聲波的距離信息判斷前方是否有障礙物(通過設(shè)定閾值實(shí)現(xiàn),當(dāng)距離信息大于閾值時(shí),前方無障礙物;否則前方有障礙物),如果沒有障礙物,就控制單片機(jī)輸出相應(yīng)的PWM前進(jìn);如果有障礙物,根據(jù)上次的轉(zhuǎn)向信息這次做出相反的轉(zhuǎn)向操作并記錄轉(zhuǎn)向信息(如果上次向左轉(zhuǎn),這次就向右轉(zhuǎn),這樣就不會原地轉(zhuǎn)圈了)。
本系統(tǒng)服務(wù)器架構(gòu)如圖5所示,船體和APP可以通過TCP/IP協(xié)議[2]與服務(wù)器建立連接并通信。
當(dāng)船體與服務(wù)器建立連接后,服務(wù)器執(zhí)行與船體交互程序,首先檢測船體是否發(fā)來消息,如果有消息,就通過JAVA中的JDBC庫[3]把消息存儲到MYSQL服務(wù)器[4]中;否則就檢測與APP交互程序是否發(fā)來控制船體的指令,如果有指令,就把指令通過TCP/IP協(xié)議發(fā)送給船體;如果沒有,就繼續(xù)執(zhí)行上述操作直到船體斷開連接;與船體斷開連接后該程序被終止,等待下次船體發(fā)來連接重新創(chuàng)建該程序。
當(dāng)APP與服務(wù)器建立連接后,服務(wù)器執(zhí)行與APP交互程序,此時(shí),服務(wù)器就通過JDBC庫把數(shù)據(jù)庫中的數(shù)據(jù)全部提取出來,然后打包發(fā)給手機(jī)APP。打包格式和單片機(jī)數(shù)據(jù)打包格式相同;然后檢測APP是否發(fā)來指令,如果收到指令,就把指令轉(zhuǎn)發(fā)給與船體交互程序;否則,就繼續(xù)執(zhí)行上述操作。直到APP斷開連接,連接斷開后此程序也被殺死,直到下次APP發(fā)來連接重新創(chuàng)建該程序。上述兩個(gè)程序都是以進(jìn)程的形式運(yùn)行在linux系統(tǒng)之下,進(jìn)程的終止與創(chuàng)建都是linux系統(tǒng)執(zhí)行的。
圖5 服務(wù)器架構(gòu)
APP設(shè)計(jì)主要包括界面和數(shù)據(jù)處理兩部分[5]。
界面主要顯示地圖和船走過的路徑(主要通過百度地圖API實(shí)現(xiàn)),然后在界面的右上角顯示船體的電量。界面的右下角有虛擬遙桿,用來控制船體移動。
數(shù)據(jù)處理包括網(wǎng)絡(luò)編程、船體路徑顯示程序、船體電量顯示程序和遙控船體程序。
網(wǎng)絡(luò)編程通過TCP/IP協(xié)議和服務(wù)器建立連接,然后接收服務(wù)器的消息存儲到手機(jī)內(nèi)存中,再把遙控船體程序輸出的指令發(fā)送給服務(wù)器。
船體路徑顯示程序把存儲到手機(jī)內(nèi)存中的經(jīng)緯度信息取出來然后用百度地圖API把定位點(diǎn)顯示到地圖界面,如果經(jīng)緯度信息更新了繼續(xù)取出來,然后顯示到地圖界面,并把所有的經(jīng)緯度坐標(biāo)用android庫中的畫線函數(shù)連接起來,這就實(shí)現(xiàn)了顯示船體走過的路徑的功能。
船體電量顯示程序直接把手機(jī)內(nèi)存中的船體電量信息取出來顯示到界面的右上角,電量信息更新后就把最新的電量信息顯示到界面右上角。
遙控船體程序把虛擬搖桿的信息作為遙控船體的指令輸出給網(wǎng)絡(luò)編程程序。
本文闡述的全自動水上垃圾清理系統(tǒng)實(shí)現(xiàn)了自動避障,自動清理垃圾,并在手機(jī)APP上實(shí)時(shí)顯示船體電量和坐標(biāo)的功能,還實(shí)現(xiàn)了通過手機(jī)手動控制船體功能;并且有實(shí)現(xiàn)原理簡單,制作成本低廉,可批量生產(chǎn)的特點(diǎn)。本系統(tǒng)可取代傳統(tǒng)的人工清理水上垃圾方法,解放了勞動力。