周宇輝, 何志琴, 胡 娟, 楊 瑩
(貴州大學(xué) 電氣工程學(xué)院, 貴陽550000)
隨著生活質(zhì)量的提到,科技高速發(fā)展,環(huán)境問題也會逐漸的加劇,有相關(guān)數(shù)據(jù)表明垃圾的產(chǎn)量與GDP 是嚴(yán)密相關(guān)的,隨著GDP 的增加,垃圾產(chǎn)量也在進(jìn)一步加大[1]。 尤其是我國人口數(shù)量基數(shù)大,平均的垃圾產(chǎn)量是很龐大的,城市的環(huán)境問題成為巨大的問題,所以國家開始提出垃圾分類,以便于更好的對垃圾進(jìn)行合理的處置。
生活中,并不是所有的垃圾都是完全沒有利用價值的,裝飲料的易拉罐收集后,可以重新熔煉出鋁,做出鋁制用品。 如何高效的對這些垃圾進(jìn)行分類處理是當(dāng)前整治城市環(huán)境問題的重中之重[2]。所以對垃圾做分類處理,誕生出了利用不同垃圾桶進(jìn)行垃圾分類,在大街上擺放不同的垃圾桶收集不同的垃圾,現(xiàn)在街上主流垃圾桶分為“可回收垃圾”桶和“不可回收垃圾”垃圾桶。 現(xiàn)在是高科技智能時代,將人工智能用于垃圾分類,當(dāng)不知道垃圾的具體分類時,垃圾桶會自動幫助選擇。
本設(shè)計對智能垃圾桶進(jìn)行了探討, 基于OpenMV 對垃圾進(jìn)行顏色處理,串口通信將信息傳給Arduino 單片機(jī),進(jìn)過單片機(jī)的處理以后,控制舵機(jī)旋轉(zhuǎn),打開對應(yīng)的垃圾桶,實現(xiàn)自動分類垃圾。 同時Arduino 和Labview 的通信可以實時的觀察垃圾桶目前的狀態(tài),及時更換垃圾袋。
本系統(tǒng)主要依靠幾個模塊之間進(jìn)行串口通信而實現(xiàn)目標(biāo),利用OpenMV 對圖像信息采集,發(fā)送給Arduino 單片機(jī)處理相應(yīng)數(shù)據(jù),進(jìn)而控制舵機(jī)選擇對應(yīng)垃圾槽。 系統(tǒng)總體設(shè)計如圖1 所示。
本文的硬件結(jié)構(gòu)主要由OpenMV 采集模塊、分類模塊、微處理器、通信模塊、舵機(jī)和電源模塊組成。其中OpenMV 對垃圾的顏色進(jìn)行采集,提取顏色信息,通過串口通信傳給Arduino 單片機(jī),單片機(jī)與舵機(jī)相連,控制垃圾桶的旋轉(zhuǎn),電源模塊為系統(tǒng)進(jìn)行供電。 系統(tǒng)硬件結(jié)構(gòu)如圖2 所示。
圖1 系統(tǒng)總體框圖Fig. 1 Overall system block diagram
圖2 系統(tǒng)硬件結(jié)構(gòu)設(shè)計圖Fig. 2 Design drawing of system hardware structure
本文設(shè)計的圖像采集模塊主要是由OpenMV 攝像頭,通過串口通信連接Arduino 單片機(jī),傳輸采集顏色的對應(yīng)參數(shù),以便Arduino 能夠控制舵機(jī)轉(zhuǎn)動,打開對應(yīng)的分類垃圾槽[3]。 圖3 是圖像采集模塊OpenMV 和Arduino 的通信結(jié)構(gòu)。
OpenMV4 H7 是本文選用的攝像頭模塊,它集成了一塊STM32H743,主頻400M,內(nèi)存2M,運行速度快,而且相比OpenMV3,可選擇的鏡頭更多,而且便于更換。
圖3 OpenMV 與Arduino 串口通信Fig. 3 OpenMV communicates with Arduino serial port
系統(tǒng)中,選用WiFi 模塊ESP8266,該模塊硬件接口豐富,可以滿足本設(shè)計所需要的數(shù)據(jù)傳輸要求。能從串口接收數(shù)據(jù),WiFi 輸出數(shù)據(jù),實時顯示當(dāng)前垃圾桶的具體狀態(tài)。
ESP8266 有三種模式,分別是STA、AP 和STA+AP 模式。 在Arduino IDE 環(huán)境中,能夠輕易的添加ESP8266 庫模塊,如圖4 所示。
圖4 Arduino IDE 添加ESP8266 庫Fig. 4 Add the ESP8266 library to the Arduino IDE
添加庫后,使用Arduino 與ESP8266 引腳連接實心串口通信,數(shù)據(jù)無線傳輸,達(dá)到實時存儲、監(jiān)控垃圾桶內(nèi)情況的目的。 Wifi 模組如圖5 所示。
圖5 wifi 模組Fig. 5 Wifi module
舵機(jī)通過PWM 波來控制電機(jī)的旋轉(zhuǎn),用Arduino 來控制旋轉(zhuǎn)角度。 舵機(jī)力矩大,符合系統(tǒng)的設(shè)計要求,且Arduino 很容易對舵機(jī)進(jìn)行控制,編程簡單,可操作性強(qiáng)。 舵機(jī)還包含了伺服電機(jī)的完整系統(tǒng)(電機(jī)、傳感器和控制器),價格便宜,節(jié)約智能垃圾桶的成本。 圖6 為舵機(jī)模塊圖。
圖6 舵機(jī)模塊Fig. 6 Steering gear module
為了更好的進(jìn)行分類,設(shè)計選用圓形旋轉(zhuǎn)垃圾桶,將垃圾桶內(nèi)分為3 個槽,每一個槽套上不同的垃圾袋。 當(dāng)垃圾經(jīng)過入口處OpenMV 攝像頭檢測時,處理顏色信息,再把處理后的信息發(fā)送給Arduino單片機(jī),Arduino 單片機(jī)接收數(shù)據(jù),控制驅(qū)動舵機(jī)旋轉(zhuǎn)對應(yīng)的角度,使得槽到達(dá)垃圾桶的入口處,從而回收垃圾;按照生活規(guī)律還可以劃分不同大小的垃圾區(qū)域,使得空間更為適用,不造成空間浪費。 圖7 為垃圾桶結(jié)構(gòu)設(shè)計圖。
圖7 垃圾桶結(jié)構(gòu)設(shè)計Fig. 7 Structural design of dustbin
圖像識別系統(tǒng)分為三個部分,第一部分是圖像的采集和獲取,在本系統(tǒng)中,擔(dān)任這個任務(wù)的主要是OpenMV 搭載的攝像頭,能對垃圾圖像進(jìn)行獲取;第二部分是對信息的加工和預(yù)處理,是圖像處理的核心。 這一部分也由OpenMV 處理,將信息傳給Arduino,為后續(xù)垃圾桶工作提供基礎(chǔ),是圖像處理的核心[4];第三部分是識別分類的過程,把上一步的信號轉(zhuǎn)換成垃圾桶所能識別的信號。 圖像識別框圖如圖8 所示。
圖8 圖像識別框圖Fig. 8 Block diagram of image recognition
BP 神經(jīng)網(wǎng)絡(luò)是目前應(yīng)用最為廣泛的人工神經(jīng)網(wǎng)絡(luò),由輸入層、隱含層和輸出層組成,各層之間的聯(lián)系用權(quán)值表示。 BP 網(wǎng)絡(luò)需要解決的主要問題是算法,傳統(tǒng)的BP 學(xué)習(xí)算法為最小二乘法[5]。 如圖9為典型BP 神經(jīng)網(wǎng)絡(luò)模型。
設(shè)計需要做灰度像素識別,通常從BP 神經(jīng)網(wǎng)絡(luò)模型的輸入層,隱藏層和輸出層開始。
輸入層設(shè)計:BP 神經(jīng)網(wǎng)絡(luò)輸入層中的節(jié)點數(shù)通常由解決問題的影響因素決定。 對于圖像識別,影響系數(shù)是圖像識別特性。 因此,設(shè)計網(wǎng)絡(luò)中輸入節(jié)點的數(shù)量等于所使用的圖像識別功能的數(shù)量。
圖9 BP 神經(jīng)網(wǎng)絡(luò)模型Fig. 9 BP neural network model
輸出層設(shè)計:輸出層的節(jié)點數(shù)由輸出值表達(dá)方式?jīng)Q定,本文要確定輸出層的神經(jīng)元,必須設(shè)置目標(biāo)的類別。
隱藏層設(shè)計:當(dāng)每個節(jié)點都采用S 型函數(shù)時,如果它是一個隱藏層,則足以實現(xiàn)決策分類問題。 增加屏蔽層的數(shù)量可以進(jìn)一步減少錯誤,提高準(zhǔn)確性,但會使網(wǎng)絡(luò)變得更加復(fù)雜,并且增加訓(xùn)練網(wǎng)絡(luò)權(quán)重所需的時間。 因此,在不做具體要求的情況下,本文選用單隱層[6]。
在OpenMV 軟件中,能通過搭載的攝像頭識別出圖像的色塊,通過多次訓(xùn)練,將色塊記錄下來,通過串口將數(shù)據(jù)傳輸給Arduino 單片機(jī)實現(xiàn)后續(xù)處理,OpenMV IDE 中有許多例程能尋找色塊,本文以單色塊尋找為例。
在設(shè)計中主要運用到的函數(shù)是find_blobs 函數(shù),通過find_blobs 函數(shù)可以找到色塊。 設(shè)置顏色的閾值,可以定義多個顏色列表或者單個顏色,根據(jù)情況選擇對應(yīng)的閾值。 假設(shè)填入的是紅色色塊閾值,程序運行后,可以看到所追蹤的紅色色塊已經(jīng)被識別出來,紅色區(qū)域全部被框出,如圖10 所示。
圖10 色塊顯示Fig. 10 Color piece shows
如果還想尋找其他色塊,但是不知道顏色閾值,可以通過IDE 自帶的顏色閾值工具來算出閾值,填入thresholds 函數(shù)中。 例如:需要觀察紅色旁邊的綠色色塊,只需要進(jìn)入閾值工具,拖動滑塊將除綠色外其他顏色全部變成黑色,最下面的LAB 閾值則是需要填入的參數(shù)。 具體色塊閾值條節(jié)如圖11 所示。
圖11 閾值調(diào)節(jié)Fig. 11 Threshold adjustment
參數(shù)填寫后,再次運行程序,就可以查找需要的色塊,綠色部分已經(jīng)被選中。 如圖12 所示。
圖12 綠色色塊顯示Fig. 12 The green block appears
經(jīng)過多次訓(xùn)練以后,可以得到多個色塊代表的垃圾閾值,統(tǒng)計這些顏色閾值,通過串口發(fā)送給Arduino 單片機(jī)。 Arduino 單片機(jī)接收到閾值信息后,可以繼續(xù)通過串口通信使舵機(jī)轉(zhuǎn)動,打開不同的分類垃圾桶。
Arduino 的編程與C 語言類似,以舵機(jī)運行程序為例,圖13 為串口通信控制舵機(jī)轉(zhuǎn)動的程序。 當(dāng)串口接收到數(shù)據(jù),會控制舵機(jī)轉(zhuǎn)動一定的角度,打開對應(yīng)的垃圾桶。
OpenMV 與Arduino 通信簡單,通過串口3 方式即可。 當(dāng)OpenMV 觀察到色塊信息時,通過發(fā)送色塊中間坐標(biāo),Arduino 接收信息傳給電腦并進(jìn)行結(jié)果顯示。 所以,在ArduinoMega 的邏輯是:讀softSerial的數(shù)據(jù)(json),解析成數(shù)組,發(fā)送給Serial(電腦)。
圖13 舵機(jī)運行程序Fig. 13 Steering gear running program
例如:要尋找黃色色塊,發(fā)送中心坐標(biāo)給Arduino進(jìn)行數(shù)組處理和顯示。 如圖14 所示,在threshold 函數(shù)中填入黃色色塊閾值,可以完成串口通信。
圖14 尋找黃色色塊Fig. 14 Look for yellow patches
當(dāng)Arduino 接收的數(shù)據(jù)等于設(shè)置閾值時,會控制舵機(jī)旋轉(zhuǎn)相應(yīng)的度數(shù),打開不同垃圾桶。 COM 口顯示發(fā)送過來的數(shù)值。 如圖15 為色塊閾值顯示。
通過esp8266WiFi 模塊,可以遠(yuǎn)程監(jiān)控垃圾桶當(dāng)前狀態(tài)。 通過設(shè)置標(biāo)志位,當(dāng)垃圾桶裝滿或者發(fā)生故障時,故障燈會亮,同時將信息傳給APP。 因為Arduino 的串口需要接入Labview 上位機(jī)顯示,所以選用軟串口來連接WiFi 模塊,如圖16 所示。
圖15 舵機(jī)轉(zhuǎn)角Fig. 15 Steering Angle
圖16 WiFi 模塊例程Fig. 16 WiFi module routine
通過VISA 串口,連接到單片機(jī)得到數(shù)據(jù)顯示,接收的數(shù)據(jù)來自O(shè)penMV 追蹤的圖像信息,圖17 是通過Labview 上位機(jī)顯示的數(shù)據(jù),,可以遠(yuǎn)程監(jiān)控垃圾桶的運行情況和狀態(tài)。 通過Labview 觀察OpenMV 串口當(dāng)前傳送數(shù)據(jù)的情況。
圖17 上位機(jī)顯示與調(diào)節(jié)Fig. 17 Upper computer display and adjustment
本文設(shè)計基于OpenMV 垃圾分類的智能垃圾桶系統(tǒng),利用BP 神經(jīng)網(wǎng)絡(luò)構(gòu)建垃圾分類模型,OpenMV 實現(xiàn)神經(jīng)網(wǎng)絡(luò)訓(xùn)練,再通過Labview 顯示和調(diào)節(jié),實現(xiàn)利用智能垃圾桶分類垃圾。
本文對垃圾分類進(jìn)行了研究,對智能垃圾桶目前的現(xiàn)狀進(jìn)行了討論;搭建出一種基于OpenMV 的垃圾分類垃圾桶,對垃圾桶的內(nèi)部結(jié)構(gòu)進(jìn)行改造,設(shè)計硬件控制電路,通過OpenMV 實現(xiàn)了圖像的處理,完成了垃圾特征的提取,通過BP 神經(jīng)網(wǎng)絡(luò)算法輸入樣本,完成BP 神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。 最后,利用串口通信方式將系統(tǒng)串聯(lián),實現(xiàn)了智能分類垃圾桶的設(shè)計。
設(shè)計的結(jié)果對于真正的應(yīng)用有著一定的幫助,但還在具有局限性,用于分類的垃圾樣品少,在擴(kuò)大樣本后,有待于后續(xù)研究。