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