黃 鵬,徐 燕
(北京物資學(xué)院 信息學(xué)院,北京 101149)
垃圾分類對(duì)資源回收再利用和社會(huì)可持續(xù)發(fā)展具有重要意義[1]。2017 年3 月,中國(guó)國(guó)家住建部和國(guó)家發(fā)改委下發(fā)了 《生活垃圾分類制度實(shí)施方案》,2019 年7月1 日上海開始施行《上海市生活垃圾管理?xiàng)l例》,2020 年5 月1 日北京開始施行《北京市生活垃圾管理?xiàng)l例》[2-3]。
但近年來垃圾分類實(shí)施效果并不盡如人意[4],其中的一個(gè)主要原因是居民要做的事情太繁瑣以及需要學(xué)習(xí)的垃圾分類相關(guān)知識(shí)較多,導(dǎo)致居民垃圾分類的積極性不高[5]。因此亟需科技手段更好協(xié)助居民進(jìn)行垃圾分類,提高居民垃圾分類積極性,增強(qiáng)垃圾分類實(shí)施效果。
目前,智能化垃圾處理設(shè)備的研究集中在調(diào)動(dòng)人們對(duì)于垃圾分類的積極性、傳統(tǒng)垃圾桶的智能改造以及將深度學(xué)習(xí)技術(shù)應(yīng)用在垃圾分類中。余漢生等提出以“制約”和“獎(jiǎng)勵(lì)”為理念、以設(shè)計(jì)為手段的城市生活垃圾分類回收系統(tǒng)[6];尤肖肖等利用半自動(dòng)鏈接原理以及對(duì)內(nèi)部結(jié)構(gòu)的改進(jìn)等方式解決了現(xiàn)有技術(shù)中垃圾桶功能單一、無(wú)法自動(dòng)分類的缺陷[7];呂程熙比較了深度神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò),認(rèn)為深度神經(jīng)網(wǎng)絡(luò)在不同分類任務(wù)中具有更高的準(zhǔn)確度[8];吳碧程等將卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用在自動(dòng)識(shí)別和分類垃圾過程中[9]。
為了同時(shí)解決垃圾分類以及向居民有效宣導(dǎo)垃圾正確分類知識(shí)的雙重問題,本文設(shè)計(jì)基于Arduino 和語(yǔ)音識(shí)別的智能垃圾分類系統(tǒng)。通過該系統(tǒng),居民只需說出垃圾名稱,就可實(shí)現(xiàn)自動(dòng)將該垃圾對(duì)應(yīng)分類的垃圾桶蓋打開,從而減輕居民垃圾分類的難度,提高垃圾分類實(shí)施效果。
系統(tǒng)由Android 移動(dòng)端APP、HC-05 藍(lán)牙模塊、下位機(jī)控制模塊組成。下位機(jī)控制模塊又包括Arduino 開發(fā)板、舵機(jī)、供電電源和垃圾桶。系統(tǒng)總體結(jié)構(gòu)如圖1 所示。
圖1 系統(tǒng)總體結(jié)構(gòu)圖
居民通過打開Android 移動(dòng)端APP,說出垃圾名稱,Android 移動(dòng)端APP 會(huì)對(duì)輸入的語(yǔ)音進(jìn)行解析,得出該垃圾對(duì)應(yīng)的分類,并通過HC-05 藍(lán)牙模塊將分類結(jié)果發(fā)送到Arduino 開發(fā)板,Arduino 開發(fā)板根據(jù)分類結(jié)果控制相應(yīng)舵機(jī)動(dòng)作,從而帶動(dòng)對(duì)應(yīng)分類的垃圾桶蓋打開,實(shí)現(xiàn)垃圾分類。
移動(dòng)端APP的開發(fā)環(huán)境為MIT APP Inventor 平臺(tái),只需要通過拖拽基于塊的接口,就能快速構(gòu)建Android程序[10]。首先通過MIT APP Inventor 中的語(yǔ)音識(shí)別器實(shí)現(xiàn)對(duì)用戶語(yǔ)音輸入的識(shí)別,將語(yǔ)音信息轉(zhuǎn)換為文本信息;然后調(diào)用天行數(shù)據(jù)提供的垃圾分類接口,將文本信息轉(zhuǎn)化為垃圾類別信息;最后通過手機(jī)藍(lán)牙與HC-05 藍(lán)牙模塊進(jìn)行藍(lán)牙連接,將垃圾類別信息發(fā)送出去。
HC-05 藍(lán)牙模塊與Android 移動(dòng)端APP 進(jìn)行配對(duì)連接,連接成功后,接收垃圾類別信息,并通過串口將該垃圾類別信息傳送給Arduino 開發(fā)板。
下位機(jī)控制模塊包括Arduino 開發(fā)板、舵機(jī)、供電電源和垃圾桶。舵機(jī)共有4 個(gè),分別為舵機(jī)0、舵機(jī)1、舵機(jī)2、舵機(jī)3。這4 個(gè)舵機(jī)分別控制“可回收垃圾”垃圾桶、“有害垃圾”垃圾桶、“其他垃圾”垃圾桶和“廚余垃圾”垃圾桶的桶蓋開閉。
Arduino 開發(fā)板通過串口接收從HC-05 藍(lán)牙模塊傳來的垃圾類別信息,控制對(duì)應(yīng)的舵機(jī)進(jìn)行正轉(zhuǎn),頂起桶蓋,并開始計(jì)時(shí),在一定時(shí)間后對(duì)應(yīng)舵機(jī)反轉(zhuǎn),桶蓋閉合。從而解決了桶蓋的開合問題,實(shí)現(xiàn)了垃圾的智能分類。
Arduino 開發(fā)板型號(hào)為Arduino Uno R3。Arduino Uno是Arduino系列中一款基于ATmega328 微控制器板,具有32 KB Flash 內(nèi)存、1 KB EEPRROM內(nèi)存、14 路數(shù)字 輸入/輸出口(其中6 路可作為PWM 輸出)、6 路模擬輸入、1 個(gè)16 MHz 晶體振蕩器、1 個(gè)USB 口、1 個(gè)電源插 座、1 個(gè)ICSP 標(biāo)頭和1 個(gè)重置按鈕。Arduino Uno 預(yù)置了bootloader 程序,能夠通過USB 直接下載程序,而不需經(jīng)過其他外部燒寫器[11]。
Arduino系統(tǒng)是基于單片機(jī)開發(fā)的,并且大量應(yīng)用通用和標(biāo)準(zhǔn)的電子元器件,包括硬件和軟件在內(nèi)的整個(gè)設(shè)計(jì),代碼均采用開源方式發(fā)布,因此采購(gòu)的成本較低,在各種電子制作競(jìng)賽、電子藝術(shù)品創(chuàng)意設(shè)計(jì)等場(chǎng)景越來越多地使用Arduino 作為開發(fā)平臺(tái)[12]。
HC-05 藍(lán)牙模塊是基于Bluetooth Specification V2.0帶EDR 藍(lán)牙協(xié)議的數(shù)傳模塊。其工作電壓為3.0~3.6 V,無(wú)線工作頻段為2.4 GHz ISM,調(diào)制方式是GFSK。模塊最大發(fā)射功率為4 dBm,接收靈敏度為-85 dBm,空中速率達(dá)2 Mb/s,板載PCB 天線,可實(shí)現(xiàn)10 m 距離通信。模塊支持AT 指令,用戶可根據(jù)需要更改角色(主、從模式)以及串口波特率、設(shè)備名稱等參數(shù),使用靈活[13-14]。
圖2 為本系統(tǒng)HC-05 藍(lán)牙模塊與Arduino 開發(fā)板通信電路原理圖。HC-05 藍(lán)牙模塊與Arduino 進(jìn)行串口通信,HC-05的RXD 與Arduino的TXD 連接,HC-05的TXD與Arduino的RXD 連接。
圖2 HC-05 藍(lán)牙模塊與Arduino 開發(fā)板通信電路原理圖
舵機(jī)型號(hào)為SG90,舵機(jī)SG90 主要包括外殼、齒輪、無(wú)核心馬達(dá)、電路板和位置檢測(cè)器等部分,是一種使用脈寬調(diào)制信號(hào)(PWM)進(jìn)行控制的驅(qū)動(dòng)器,其內(nèi)部的比較器將外加信號(hào)與基準(zhǔn)電路產(chǎn)生的基準(zhǔn)信號(hào)進(jìn)行比較,判斷出轉(zhuǎn)動(dòng)的方向和大小,以此驅(qū)動(dòng)無(wú)核心馬達(dá)轉(zhuǎn)動(dòng),并由位置檢測(cè)器回送信號(hào)以判斷是否已經(jīng)轉(zhuǎn)動(dòng)到位。舵機(jī)SG90 通常使用的控制信號(hào)周期為20 ms,寬度為0.5 ms~2.5 ms,舵盤的轉(zhuǎn)動(dòng)角度為0~180°[15]。
圖3 為本系統(tǒng)舵機(jī)控制電路原理圖。其中,Arduino開發(fā)板數(shù)字引腳11、9、6、4設(shè)為輸出模式,分別控制舵機(jī)0、1、2、3。而舵機(jī)0、1、2、3的轉(zhuǎn)動(dòng)又分別控制“可回收垃圾”桶、“有害垃圾”桶、“其他垃圾”桶、“廚余垃圾”桶。
圖3 舵機(jī)控制電路原理
系統(tǒng)軟件設(shè)計(jì)可分為上位機(jī)軟件設(shè)計(jì)和下位機(jī)軟件設(shè)計(jì),上位機(jī)軟件設(shè)計(jì)包括語(yǔ)音識(shí)別程序設(shè)計(jì)和界面設(shè)計(jì),下位機(jī)軟件設(shè)計(jì)即下位機(jī)主控板程序設(shè)計(jì)。
語(yǔ)音識(shí)別程序設(shè)計(jì)流程如圖4 所示。啟動(dòng)語(yǔ)音識(shí)別程序后,先檢查藍(lán)牙是否連接。若未連接,進(jìn)行語(yǔ)音提示并結(jié)束語(yǔ)音識(shí)別程序;若已連接,語(yǔ)音識(shí)別組件開始語(yǔ)音識(shí)別,待用戶語(yǔ)音輸入后,將語(yǔ)音信息轉(zhuǎn)換為文字信息,并向垃圾分類接口發(fā)送GET的HTTP 請(qǐng)求。若得到返回的垃圾類別信息,則調(diào)用藍(lán)牙API 將垃圾類別信息下發(fā),待下位機(jī)主控板進(jìn)行下一階段的程序;若未得到,則通過語(yǔ)音提示識(shí)別失敗,語(yǔ)音識(shí)別程序結(jié)束。
圖4 語(yǔ)音識(shí)別程序設(shè)計(jì)流程
整個(gè)界面使用MIT APP Inventor 平臺(tái)進(jìn)行設(shè)計(jì)開發(fā),無(wú)須學(xué)習(xí)較為晦澀的Java 語(yǔ)法,只通過拼圖模式來組合程序,就可以完成Android 應(yīng)用的程序,使得應(yīng)用程序的開發(fā)簡(jiǎn)單便利。
下位機(jī)主控板程序設(shè)計(jì)在Arduino的集成開發(fā)環(huán)境下開發(fā)完成,其流程如圖5 所示。setup 函數(shù)在程序開始的時(shí)候會(huì)調(diào)用,用來初始化變量、定義引腳模式等,在Arduino 板每次上電或復(fù)位后僅運(yùn)行一次。在執(zhí)行完setup 函數(shù)后會(huì)執(zhí)行l(wèi)oop()函數(shù),該函數(shù)作為一個(gè)無(wú)限循環(huán)的過程連續(xù)執(zhí)行。
圖5 下位機(jī)主控板程序設(shè)計(jì)流程
本系統(tǒng)在setup 函數(shù)中完成舵機(jī)Servo的定義及初始化,loop 函數(shù)通過串口等待垃圾分類信息,一旦獲取指定信息,控制指定舵機(jī)轉(zhuǎn)動(dòng),使對(duì)應(yīng)垃圾桶蓋打開,并于15 s 后恢復(fù),即垃圾桶蓋閉合。
Arduino 通過USB 與電腦連接,4 個(gè)垃圾桶中有4 個(gè)舵機(jī)分別連接到Arduino的對(duì)應(yīng)引腳上;藍(lán)牙啟動(dòng),等待操作;上位機(jī)軟件安裝,待語(yǔ)音輸入。
4.2.1 系統(tǒng)測(cè)試方法
根據(jù)《北京市社會(huì)單位生活垃圾分類投放指南》,分別對(duì)廚余垃圾、可回收垃圾、有害垃圾、其他垃圾類別中的各項(xiàng)垃圾進(jìn)行語(yǔ)音測(cè)試。當(dāng)識(shí)別失敗時(shí),移動(dòng)端會(huì)進(jìn)行語(yǔ)音提示,要求重新進(jìn)行語(yǔ)音輸入;當(dāng)識(shí)別成功,會(huì)遠(yuǎn)程控制與該垃圾分類相對(duì)應(yīng)的垃圾桶桶蓋打開,15 s 后垃圾桶桶蓋自動(dòng)關(guān)閉。
4.2.2 系統(tǒng)測(cè)試步驟
系統(tǒng)測(cè)試步驟如下:
(1)打開Android 移動(dòng)端APP;
(2)在主界面點(diǎn)擊“連接藍(lán)牙”按鈕;
(3)選擇要連接的藍(lán)牙設(shè)備,建立連接;
(4)語(yǔ)音說出要識(shí)別的垃圾具體名稱,如“膠帶”;
(5)“膠帶”對(duì)應(yīng)的垃圾桶(即“其他垃圾”桶)的桶蓋開啟,15 s 后垃圾桶蓋自動(dòng)關(guān)閉;
(6)本次垃圾投放結(jié)束。
4.2.3 系統(tǒng)測(cè)試結(jié)果與分析
系統(tǒng)測(cè)試結(jié)果如表1 所示,對(duì)于廚余垃圾,未能識(shí)別豆類,其他均正確識(shí)別,識(shí)別率為88.89%;對(duì)于可回收垃圾,均正確識(shí)別,識(shí)別率為100%;對(duì)于有害垃圾,均正確識(shí)別,識(shí)別率為100%;對(duì)于其他垃圾,該系統(tǒng)未能識(shí)別飲料杯,其他均正確識(shí)別,識(shí)別率為92.31%。
表1 系統(tǒng)測(cè)試結(jié)果圖
對(duì)于豆類、飲料杯,該系統(tǒng)未能識(shí)別的原因?yàn)樘煨袛?shù)據(jù)提供的垃圾分類接口中并沒有對(duì)于豆類、飲料杯這些垃圾類別的數(shù)據(jù),因此識(shí)別失敗。而后本系統(tǒng)再對(duì)具體的豆類信息(如黃豆、綠豆)、飲料瓶進(jìn)行完善后發(fā)現(xiàn)均能正確識(shí)別。系統(tǒng)測(cè)試結(jié)果表明,該系統(tǒng)識(shí)別準(zhǔn)確率高,具有較高的實(shí)用價(jià)值。
本文設(shè)計(jì)了一種基于Arduino 和語(yǔ)音識(shí)別的智能垃圾分類系統(tǒng)。通過打開Android 移動(dòng)端APP,語(yǔ)音輸入垃圾名稱,即可無(wú)線控制打開該垃圾對(duì)應(yīng)分類的垃圾桶。實(shí)驗(yàn)結(jié)果表明,系統(tǒng)能夠依據(jù)《北京市社會(huì)單位生活垃圾分類投放指南》,對(duì)廚余垃圾、可回收垃圾、有害垃圾、其他垃圾進(jìn)行正確識(shí)別并控制對(duì)應(yīng)分類的垃圾桶蓋開閉,該系統(tǒng)能夠幫助居民進(jìn)行垃圾分類,提高居民垃圾分類效率,具有應(yīng)用推廣價(jià)值。