胡振山 江振青 呂海燕
(臨沂大學,山東 臨沂 276000)
隨著城市的高速發展,生活水平和消費水平的提高,飲食行業的迅速發展,城市生活垃圾的產量不斷增加,同時垃圾的成分也越來越復雜。 垃圾產生的污染問題也日益嚴重。 垃圾在腐化過程中,產生氨、甲烷和硫化氫等有害氣體,形成惡臭,嚴重污染大氣。 所以, 垃圾的處理正日益成為困擾人們的嚴重問題。我們希望通過這個系統幫助人們正確地進行垃圾分類、可回收物的細分,可以提高可回收物的利用率。
語音技術發展到今天,其精度尤其是中小詞匯量非特定人聲語音識別的精度已達98%。 隨著大規模集成電路的發展,復雜的語音識別系統也完全可以制成專用芯片,大量生產。 可以預測近五年到十年內,語音識別的應用范圍將更加廣泛。 各種各樣的產品將出現在市場上[1]。
本文設計并制作了一個語音識別智能垃圾分類垃圾桶,可以根據用戶說出的垃圾名稱進行智能垃圾分類的系統。
本設計擬采用STM32 單片機作為主控芯片,結合LD3320 實現語音識別模塊智能識別垃圾種類。
采用STM32F013ZET6 芯片作為主控芯片, 該芯片屬于arm 內核的一個版本, 比傳統的51 單片機高級。 程序都是采用模塊化編程,接口相對簡單,自身帶很多功能,工作速度也快。 該芯片采用的CPU(中央處理器)是 ARM 的 32 位 Cortex-M3,擁有片上 128 k 的閃存,還有20 k 的RAM(隨機存取存儲器)。并支持各種外設,如定時器,ADC(模擬數字轉換器),SPI,USB,IIC 和 UART。 使得它在簡單的電路上就能執行信號采集和數據濾波。
采用LD3320 實現語音識別功能,LD3320 是非特定人(不用針對指定人)語音識別芯片,即語音聲控芯片。 最多可以識別50 條預先內置的指令。 LD3320 作為一款基于SI-ASR(非特定人語音識別)技術的語音識別/聲控芯片,集成了一系列與其功能相關的外部電路, 包括模擬數字轉換器 (ADC), 數字模擬轉換器(DAC)、麥克風剪口和聲音輸出接口等,使得LD3320能夠在沒有任何外接輔助FLASH (閃存)、RAM 芯片的情況下直線語音識別/聲控/人機對話等功能。 且LD3320 在工作時,無須進行預先的訓練和錄音,語音識別準確率達到了95 %,是一款優秀的非特定性語音識別芯片[2]。
整個系統設計思路為系統上電后,語音識別模塊開始識別模式,在接收到命令關鍵詞后通過串口通信將數據發送到主控系統(STM32),主控系統接收到數據后根據不同的數據打開對應的垃圾桶(舵機)。 系統整體流程圖如圖1 所示。

圖1 系統整體流程
2.2.1 Keil5 軟件的簡介
Keil 是美國Keil Software 公司出品的51 系列兼容單片機C 語言軟件開發系統。 Keil 提供了包括C 編譯器、宏匯編、鏈接器、庫管理和一個功能強大的仿真調試器等在內的完整開發方案,通過一個集成開發環境將這些部分組合到一起。 在開發大型軟件時更能體現高級語言的優勢。 與匯編相比,C 語言在功能上、 結構性、可讀性、可維護性上有明顯的優勢,因而易學易用。
2.2.2 數據通信
在本設計中,語音識別模塊通過STC11L08XE 單片機對LD3320 進行數據采集, 通過程序將識別的結果轉換成16 進制的數據, 通過串口將其發送到STM32,STM32 通過分析接收的數據做出相應的反應,具體表現為打開相應的垃圾桶(用舵機模擬)。 通信使用3 根線完成,分別是地線、發送、接收。 由于串口通信是異步的,端口能夠在一根線上發送數據同時在另一根線上接收數據。 其他線用于握手,但不是必需的。 串口通信最重要的參數是波特率、數據位、停止位和奇偶校驗。 對于兩個進行通信的端口,這些參數必須匹配。
2.2.3 語音識別模塊的實現
LD3320 語音識別芯片采用的就是自動語音識別技術(ASR)技術,通過麥克風將語音輸入LD3320 芯片,在芯片內部進行頻譜分析并提取特征,達到語音識別的功能,同時LD3320 還可以通過關鍵詞列表進行語音識別。 在此只需要把識別的關鍵詞語以字符串的形式傳送進芯片, 即可以在下次識別中立即生效。 在 MCU (本文中選用語音識別模塊的MCU 是STC10L08XE 單片機)的編程中,簡單地通過設置芯片的寄存器,把諸如“ni hao”這樣的識別關鍵詞語的內容動態地傳入芯片中, 芯片就可以識別所設定的關鍵詞語了。 每個關鍵詞語可以是單字、詞組、短句或者任何的中文發音的組合。 基于LD3320 的語音識別系統可以隨著使用流程,在運行時動態地更改關鍵詞語列表的內容,這樣可以用一個系統支持多種不同的場景,同時也不需要用戶做任何的錄音訓練。 整體流程如圖2 所示。

圖2 語音識別的實現流程
2.2.4 程序開發
首先,確定輸入輸出端口(I/O 口)地址的分配,根據系統的輸入輸出的要求,分配I/O 地址,這里包括串口的I/O 口, 控制舵機所用的定時器為脈沖寬度調制(PWM)輸出口。
其次,確定程序結構,程序采用模塊化編程的設計方法,整個程序包括 main,usart,tim,LDChip 四個對象塊。 通過HAL 庫函數開發,相對于寄存器的開發方式更加簡便,使程序大大簡化,降低了開發的難度。 整體程序運行流程框圖如圖3 所示。

圖3 系統運行流程
應用模塊化編程的方法,使程序更加清晰,方便修改或者移植,在本設計中,需要對以下四個部分進行設置:
(1)采用串口通信將主控STM32 和語音識別模塊進行數據通信。 對于STM32 單片機的串口使用,首先進行初始化,將STM32 和STC10L08XE 單片機的串口波特率都設置成9600,字長設置為8 位,設置一位停止位,不設置奇偶校驗位,將其進行函數封裝,波特率可根據實際要求進行修改。在本設計中,采用USART3和語音識別部分進行數據通信,USART1 通過printf函數進行輸出打印以方便監控程序的運行情況。
(2)tim 定時器具有輸出 PWM 信號的功能, 采用舵機來模擬垃圾桶的開關,舵機轉動的角度需要固定占空比的PWM 信號,高電平脈沖的時間0.5 ms,舵機轉到 0°,1ms 對應 45°,1.5 ms 對 應 90°,2 ms 對 應135°,2.5 ms 對應 180°,只能在 0.5~2.5 ms 調節,轉動0°到180 °任意角度,只要控制PWM 波的高電平占空比就要可以達到自己想要的轉動角度。
控制垃圾桶打開只需將舵機轉動90°, 所以需要脈沖寬度為1.5 ms 的信號。 在此要對定時器的PWM功能進行一個初始化,包括對分頻系數,計數模式,自動裝載值,比較值,輸出比較極性進行配置。 通用定時器可以同時產生多達4 路的PWM 輸出, 滿足同時驅動4 路舵機的要求, 所以需要使能相應定時器時鐘,PWM 的輸出信號頻率是由自動重裝寄存器(ARR)的值決定,占空比由比較寄存器(CCR)的值決定。 由于PWM 輸出通道是對應著STM32F1 芯片的I/O 口,所以也需要使能對應的端口時鐘, 并將對應I/O 口配置為復用輸出功能。
(3)LDChip 里的函數負責封裝語音識別的相關函數,語音識別用初始化(包括通用初始化)→寫入識別列表→開始識別,并準備好中斷響應函數,打開中斷允許位。 列表的規則是,每個識別條目對應一個特定的編號(1 個字節),不同的識別條目的編號可以相同,而且不用連續。 本芯片最多支持50 個識別條目,每個識別條目是標準普通話的漢語拼音(小寫),每 2 個字(漢語拼音) 之間用一個空格間隔。 開發時配置讀取0xB2 寄存器的函數, 如果在以后的自動語音識別技術(ASR)命令函數前不能夠讀取到正確 Idle 狀態,說明芯片內部可能出錯了。 經拷機測試,當使用的電源電壓/電流出現不穩定有較大波動時,有小概率會出現這種情況。 出現這種情況時,復位LD3320 芯片,重新啟動設置芯片即可。
(4)main 函數作為本設計中的主程序, 在本函數中將串口,定時器PWM 部分進行初始化,通過while函數使串口始終保持等待接收狀態,同時對接收的數據進行處理, 根據不同的數據對定時器各路PWM 信號的占空比進行設置,達到打開對應舵機的效果。
系統程序的驗證,ST-LINK 仿真器的作用是用以實現硬件仿真的硬件。 仿真器可以實現替代單片機對程序的運行進行控制,例如單步,全速,查看資源斷點等。 程序完成后,通過硬件對整個程序分步驗證,可以發現程序中錯誤的地方以及不完善的地方, 加以改進。 通過語音識別模塊的程序可知,由于要把垃圾分類分四類,所以根據設置的發送數據可知,當說出的垃圾為有害垃圾時,STM32 接收的數據為0x01, 會打開1 號垃圾桶,當說出其他垃圾名稱時,也會發送不同的數據,打開對應的垃圾桶,見表1。 后通過串口監控發現,功能正常,如圖4 所示。

表1 不同類型垃圾所發送的數據

圖4 串口監控
本系統設計了一款通過語音識別進行垃圾分類的輔助性垃圾桶,可以幫助人們更方便地進行垃圾分類,更好地進行垃圾回收處理。 通過本設計可以看出,語音識別技術的確可以更加方便地進行垃圾分類處理,在今后的生活中必將發揮越來越大的功能,語音識別技術就是讓機器通過識別和理解過程把語音信號轉變為相應的文本或命令的技術。 通過語音識別進行垃圾分類,將大大提高普通居民垃圾分類的效率,提高居民的積極性,大大促進國家垃圾分類政策的落實。