引言
隨著計算機(jī)技術(shù)、模式識別和信號處理技術(shù)及聲學(xué)技術(shù)等的發(fā)展,使得能滿足各種需要的語音識別系統(tǒng)的實(shí)現(xiàn)成為可能[1]。近二三十年來,語音識別在計算機(jī)、信息處理、通信與電子系統(tǒng)、自動控制等領(lǐng)域中有著越來越廣泛的應(yīng)用[2]。
語音命令控制可廣泛用于家電語音遙控、玩具、智能儀器及移動電話等便攜設(shè)備中[3]。使用語音作為人機(jī)交互的途徑對于使用者來說是最自然的一種方式,同時設(shè)備的小型化也要求省略鍵盤以節(jié)省體積。
當(dāng)今,語音識別產(chǎn)品在人機(jī)交互應(yīng)用中已經(jīng)占到越來越大的比例。語音識別按說話人的講話方式可分為孤立詞識別、連接詞識別和連續(xù)語音識別。孤立詞識別是指說話人每次只說一個詞或短語,每個詞或短語在詞匯表中都算作一個詞條,一般用在語音電話撥號系統(tǒng)中。
連接詞語音識別支持一個小的語法網(wǎng)絡(luò),其內(nèi)部形成一個狀態(tài)機(jī),可以實(shí)現(xiàn)電話語音查詢、航空定票等系統(tǒng)。連續(xù)語音識別是指對說話人以日常自然的方式發(fā)音,通常特指用于語音錄入的聽寫機(jī)。從識別對象的類型來看,語音識別可以分為特定人語音識別和非特定人語音識別。特定人是指只針對一個用戶的語音識別,非特定人則可用于不同的用戶。
實(shí)際上,非特定人語音識別的初始識別率往往都比較低,一般都要求用戶花一定的時間對系統(tǒng)進(jìn)行訓(xùn)練,將系統(tǒng)的參數(shù)進(jìn)行一定的自適應(yīng)調(diào)整,才能使識別率達(dá)到滿意的程度。
本設(shè)計采用的識別類型是特定人孤立詞語音識別。本設(shè)計是語音識別在控制領(lǐng)域的一個很好實(shí)現(xiàn),它將原本需要手工操作的工作用語音來方便地完成。
本系統(tǒng)分主機(jī)和從機(jī)兩個方面,主機(jī)和從機(jī)都是采用單片機(jī)為主控核心,通過藍(lán)牙模塊來進(jìn)行數(shù)據(jù)互傳,從機(jī)采用的是電機(jī)驅(qū)動芯片來控制小車,進(jìn)行點(diǎn)擊的正反轉(zhuǎn)調(diào)速等控制。以此來達(dá)到了預(yù)期目標(biāo),實(shí)現(xiàn)了所期望的功能效果[4]。
- ? 系統(tǒng)概述
- 聲控產(chǎn)品前景和發(fā)展趨勢
隨著科技技術(shù)的發(fā)展,電子產(chǎn)品日新月異的發(fā)展,聲控產(chǎn)品使用率的提高,為人類的生活帶來了巨大的變化,隨著近幾年來信號處理技術(shù)的不斷發(fā)展與提升,語音辨識的應(yīng)用已真正走入人們的日常生活,聲控系統(tǒng)的應(yīng)用也不再遙不可及,家用電器的操作,不再需以遙控器的繁多按鍵為控制接口,取而代之是我們用平常說話的模式來驅(qū)使家電動作,諸如多種智能電器,人們在也不必為種類繁多操作復(fù)雜的遙控器而煩惱,人們可以很清松的操作各種各樣的電器產(chǎn)品,達(dá)到更符合人性化的操作接口設(shè)計。隨著語音技術(shù)的不斷發(fā)展進(jìn),人們不光可以用語音來控制家電,聲控產(chǎn)品也越來越受人們的歡迎,成為了21世紀(jì)發(fā)展的一大前景。
-
- 研究目的和意義
近幾年,人民生活水平穩(wěn)步提高,嵌入式電子產(chǎn)品的消費(fèi)者已經(jīng)不再滿足“能用夠使”的消費(fèi)目的,他們需要電子產(chǎn)品具有更多人性化和個性化的功能,技術(shù)上的特點(diǎn)客觀上給嵌入式語音識別應(yīng)用帶來了更大的市場需求[5]。本設(shè)計主要應(yīng)用語音識別技術(shù),來完成語音控制小車的目的,將語音識別技術(shù)應(yīng)用在實(shí)際設(shè)計當(dāng)中,為以后進(jìn)一步學(xué)習(xí)應(yīng)用語音技術(shù)打下基礎(chǔ),也可以為他人設(shè)計語音產(chǎn)品提供參考[6]。
-
- 本次設(shè)計內(nèi)容
如今隨著智能化的發(fā)展,智能化的控制技術(shù)變得尤為重要,本次設(shè)計是以單片機(jī)為核心設(shè)計一款語音控制的智能小車,研究內(nèi)容主要包含以下幾個方面:
- 語音識別技術(shù),下可以通過語音控制小車的左轉(zhuǎn)、右轉(zhuǎn)、前進(jìn)、后退、停止;
- 語音輸入終點(diǎn)信息,小車可以尋跡到達(dá)指定的地點(diǎn);
- 通過RC522射頻識別技術(shù)使小車定位地點(diǎn)更為精確;
- 藍(lán)牙通訊;
- 實(shí)現(xiàn)自動避障,遇到障礙物停止。
- ? 系統(tǒng)設(shè)計的整體方案
聲控小車的設(shè)計分為二部分,一部分是硬件設(shè)計,另一部分是軟件設(shè)計,在這里我們只闡述軟件的部分。首先要對設(shè)計的題目進(jìn)行分析,熟知其要求才能更加深刻的理解[7]。其次進(jìn)行思路的整理規(guī)劃好流程。從而梳理設(shè)計的方案。首先是硬件方面,本次設(shè)計包含有自動避障功能、藍(lán)牙通訊、循跡、語音識別以及定位的功能。軟件在硬件的基礎(chǔ)上進(jìn)行功能邏輯上的編譯。
-
- 主控芯片的方案論證
本次設(shè)計的語音小車采用是由單片機(jī)作為主控核心,按照本次設(shè)計的要求,從以下三個方案中選擇一款。
- EPSON系列單片機(jī):
EPSON系列的單片機(jī)是由精工愛普生(SEIKO EPSON)自主開發(fā)的CMOS32位RISCCPU為核心,加上不同的外圍電路制成多種型號的MCU,這些產(chǎn)品可以應(yīng)用于不同的領(lǐng)域:掌上電腦(PDA),移動信息終端,網(wǎng)絡(luò)設(shè)備,辦公室OA設(shè)備,PC接口設(shè)備,智能玩具,GPS應(yīng)用等,其中它的主要特點(diǎn)有強(qiáng)大的CPU內(nèi)核,采用RISC結(jié)構(gòu),三級流水線,105條16位長指令,其大多數(shù)指令在一個時鐘周期內(nèi)執(zhí)行,大大提高了指令的執(zhí)行效率。地址總線28條,線性尋址256MB,編程方便。當(dāng)S1C33工作在60MHz時,其性能可到60MIPS。在CPU架構(gòu)中,也采用了多種設(shè)計以提高CPU的性能;哈佛架構(gòu),內(nèi)部RAM為獨(dú)立總線,在操作內(nèi)部RAM時可起到高速緩存的作用,而且可實(shí)現(xiàn)同時存取內(nèi)外部存儲器,提高系統(tǒng)效率。有效的利用內(nèi)部RAM和Harvard結(jié)構(gòu)可大大提高指令執(zhí)行效率,使其可進(jìn)行復(fù)雜運(yùn)算。擁有豐富的周邊電路,較為良好的性價比和功能消耗較低的優(yōu)點(diǎn)[8]。
- AT89C51RC單片機(jī):
AT89C51RC單片機(jī)是Atmel公司生產(chǎn)的低功耗高性能CMOS 8位單片機(jī),其中它具有32k Bytes Flash只讀程序存儲器(ROM),512 Bytes內(nèi)部數(shù)據(jù)存儲器(RAM),該微處理器采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),引腳兼容80C51和80C52芯片,單片機(jī)內(nèi)的Flash存儲器可以象常規(guī)程序存儲器樣進(jìn)行燒寫,AT89C51RC片內(nèi)總共有512字節(jié)的用戶數(shù)據(jù)區(qū),而256字節(jié)的內(nèi)部擴(kuò)展數(shù)據(jù)區(qū)需通過清SFR(8EH)的位1并用MOVX指令訪問,片內(nèi)置通用8位中央處理器和Flash存儲單元,另一個256BytesRAM區(qū)與ATMEL之AT89系列8052兼容的單片機(jī)是一致的,AT89C51RC 結(jié)合通用的8位微處理器和Flash存儲技術(shù)構(gòu)成功能強(qiáng)大單片微處理器,可提供許多高性能低價位的系統(tǒng)控制應(yīng)用場合[9]。
AT89C51RC具有如下主要特點(diǎn):40個引腳,32kBytes的程序存儲器,32個外部雙向輸入/輸出(I/O)端口,同時內(nèi)含2個外中斷口,3個16位可編程定時計數(shù)器,2個全雙工串行通信口,內(nèi)置時鐘振蕩器,其Flash存儲器,可反復(fù)擦寫1000 次的Flash存儲器可有效地降低開發(fā)成本。軟件設(shè)置電源省電模式,睡眠其間,定時/計數(shù)器,串行口和中斷口均停止工作,RAM中的數(shù)據(jù)被“凍結(jié)”,直到下次被中斷激活或硬件復(fù)位方可恢復(fù)工作。
STC89C52是宏晶公司的增強(qiáng)型MCS-51單片機(jī),具有以下標(biāo)準(zhǔn)功能:8k字節(jié)Flash,512字節(jié)RAM,32位I/O口線,看門狗定時器,內(nèi)置4KBEEPROM,MAX810復(fù)位電路,三個16位定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口。其中的優(yōu)點(diǎn)有,支持STC的2線制下載方式,下載程序更方便。支持6T模式(在6T模式下,6個時鐘周期就是一個機(jī)器周期),片內(nèi)集成了4kB容量的EPROM;帶有P4口,具有更多的I/O。最主要的是其價格便宜,符合學(xué)生的預(yù)算[10]。
本次選擇STC89C52單片機(jī),因?yàn)樵搯纹瑱C(jī)能夠完成本次設(shè)計的全部功效之外,價格對比于其他兩個方案更為便宜,所以選擇該單片機(jī)作為本次設(shè)計的核心。
-
- 語音識別模塊的方案論證
在本次設(shè)計的語音小車中,語音識別是非常重要的一項,用戶需要通過主機(jī)來對從機(jī)下達(dá)指令,是通過語音來進(jìn)行的,所以選擇一款合適的語音識別模塊是非常重要的。
- ASR M08
ASR自動語音識別技術(shù)是一種將人的語音轉(zhuǎn)換為文本的技術(shù)。ASRM08-A語音識別模塊堅持著這樣一個原則,首先對接收到的語音信號進(jìn)行一系列的運(yùn)算處理,然后和關(guān)鍵詞列表中所有的關(guān)鍵詞進(jìn)行對比,對每一個關(guān)鍵詞的相似度打分,得分最高的那個關(guān)鍵詞就認(rèn)為是正確的,最后輸出。這樣,當(dāng)接收到相似度比較高的語音時我們可以通過設(shè)置“無用關(guān)鍵詞”把他過濾掉,這是一個非常有效的手段,設(shè)置“無用關(guān)鍵詞”越多,誤識別率越低,但是不可避免的要犧牲關(guān)鍵詞列表地址[11]。
- LD3320
LD3320提供的語音識別技術(shù),是基于關(guān)鍵詞語列表的識別技術(shù):ASR技術(shù)。語音識別芯片的工作流程是:對經(jīng)過MIC輸入的聲音實(shí)施頻譜分析一語音特征的提取一匹配關(guān)鍵詞語列表中的關(guān)鍵詞語一從此關(guān)鍵字列表中得分最高的關(guān)鍵詞語作為最終語音識別的結(jié)果輸出[12]。
LD3320模塊可以使用3.3v進(jìn)行供電。模塊與單片機(jī)系統(tǒng)可以使用并口通訊方式也可以使用SPI通訊方式,這大大真強(qiáng)了模塊的兼容性,通過其語音采集系統(tǒng)經(jīng)過放大處理后再進(jìn)行ad數(shù)據(jù)轉(zhuǎn)換給LD3320進(jìn)行識別,LD3320根據(jù)之前錄制的音頻內(nèi)容進(jìn)行對比判斷語音是否匹配,如果匹配會給串口發(fā)送設(shè)定好的數(shù)據(jù)??傮w識別較為準(zhǔn)確費(fèi)用適中,因此本設(shè)計采用LD3320語音識別模塊進(jìn)行語音識別[13]。
-
- 電機(jī)驅(qū)動方案選擇
- L298N
L298N 是一種雙H橋電機(jī)驅(qū)動芯片,其中每個H橋可以提供2A的電流,功率部分的供電電壓范圍是2.5-48v,邏輯部分5v供電,接受5vTTL電平。一般情況下,功率部分的電壓應(yīng)大于6V否則芯片可能不能正常工作[14]。
- ULN2003
ULN2003是大電流驅(qū)動陣列,多用于單片機(jī)、智能儀表、PLC、數(shù)字量輸出等控制電路中??芍苯域?qū)動繼電器等負(fù)載。輸入5VTTL電平,輸出可達(dá)500mA/50V。
ULN2003是高耐壓、大電流達(dá)林頓系列,由七個硅NPN管組成。
該電路的特點(diǎn)如下:ULN2003的每一對都串聯(lián)一個2.7K的基極電阻,在5V的工作電壓下它能與TTL和CMOS電路 直接相連,可以直接處理原先需要標(biāo)準(zhǔn)邏輯緩沖器來處理的數(shù)據(jù)。
ULN2003 是高壓大電流達(dá)林頓晶體管陣列系列產(chǎn)品,具有電流增益高、工作電壓高、溫度范圍寬、帶負(fù)載能力強(qiáng)等特點(diǎn),適應(yīng)于各類要求高速大功率驅(qū)動的系統(tǒng)[15]。
根據(jù)對以上兩種方案的分析,最終選擇L298N模塊作為本系統(tǒng)的電機(jī)驅(qū)動方案,可以有效的簡化系統(tǒng)的硬件結(jié)構(gòu),而且其模塊化的設(shè)計可以很好的鞏固系統(tǒng)的穩(wěn)定性。
-
- 本章小節(jié)
將本次設(shè)計的語音小車的關(guān)鍵硬件進(jìn)行了選擇方案的論證,通過選取不同的單片機(jī)來判斷此次適合的主控核心。在語音識別和電機(jī)驅(qū)動方面也通過方案選擇,選擇適合本次設(shè)計的語音識別模塊和電機(jī)驅(qū)動模塊。
- ? 系統(tǒng)硬件電路設(shè)計
本次設(shè)計的語音小車由語音識別模塊、藍(lán)牙模塊、光電模塊、RC522射頻識別模塊電機(jī)驅(qū)動模塊組合而成,主控核心是單片機(jī)。單片機(jī)接收到語音識別信號之后,發(fā)送指令控制電機(jī)驅(qū)動以此來控制小車行動。其中系統(tǒng)框圖如圖3-1所示。
圖3-1 系統(tǒng)框圖
-
- 單片機(jī)最小系統(tǒng)的電路設(shè)計
- STC89C52芯片模塊電路設(shè)計
- 單片機(jī)最小系統(tǒng)的電路設(shè)計
本次設(shè)計的語音小車的主控核心包含時鐘電路和復(fù)位電路,其中STC89C52單片機(jī)主電源引腳(2根)VCC(Pin40):電源輸入,接+5V電源GND(Pin20):接地線;外接晶振引腳(2根);XTAL1(Pin18):片內(nèi)振蕩電路的輸入端;XTAL2(Pin19):片內(nèi)振蕩電路的輸出端;控制引腳(4根);RST/VPP(Pin9):復(fù)位引腳,引腳上出現(xiàn)2個機(jī)器周期的高電平將使單片機(jī)復(fù)位。ALE/PROG(Pin30):地址鎖存允許信號;PSEN(Pin29):外部存儲器讀選通信號;EA/VPP(Pin31):程序存儲器的內(nèi)外部選通,接低電平從外部程序存儲器讀指令,如果接高電平則從內(nèi)部程序存儲器讀指令??删幊梯斎?輸出引腳(32根);STC89C52單片機(jī)有4組8位的可編程I/O口,分別位P0、P1、P2、P3口,每個口有8位(8根引腳),共32根。;PO口(Pin39~Pin32):8位雙向I/O口線,名稱為P0.0~P0.7 P1口(Pin1~Pin8):8位準(zhǔn)雙向I/O口線,名稱為P1.0~P1.7 P2口(Pin21~Pin28):8位準(zhǔn)雙向I/O口線,名稱為P2.0~P2.7 P3口(Pin10~Pin17):8位準(zhǔn)雙向I/O口線,名稱為P3.0~P3.7[15]。其中STC89C52單片機(jī)如圖3-2所示。
圖3-2 STC89C52單片機(jī)
-
-
- 系統(tǒng)時鐘電路設(shè)計
-
時鐘電路就是產(chǎn)生像時鐘一樣準(zhǔn)確運(yùn)動的振蕩電路。任何工作都按時間順序。用于產(chǎn)生這個時間的電路就是時鐘電路。時鐘電路一般由晶體振蕩器、晶振控制芯片和電容組成。以下為時鐘電路如圖3-3所示。
圖3-3 時鐘電路設(shè)計圖
-
-
- 復(fù)位電路設(shè)計
-
復(fù)位電路是一種用來使電路恢復(fù)到起始狀態(tài)的電路設(shè)備,它的操作原理與計算器有著異曲同工之妙,只是啟動原理和手段有所不同。復(fù)位電路,就是利用它把電路恢復(fù)到起始狀態(tài)。就像計算器的清零按鈕的作用一樣,以便回到原始狀態(tài),重新進(jìn)行計算。本次設(shè)計的復(fù)位電路是比較簡單的,是只有電阻和電容,三極管等組合就可以辦到了。其中復(fù)位電路設(shè)計如圖3-4所示。
圖3-4 復(fù)位電路設(shè)計
-
- 從機(jī)語音模塊電路設(shè)計
語音處理技術(shù)是一門新興的技術(shù),它不僅包括語音的錄制和播放,還涉及語音的壓縮編碼和解碼,語音的識別等各種處理技術(shù)。以往做這方面的設(shè)計,一般有兩個途徑:一種方案是單片機(jī)擴(kuò)展設(shè)計,另一種就是借助于專門的語音處理芯片。普通的單片機(jī)往往不能實(shí)現(xiàn)這么復(fù)雜的過程和算法,即使勉強(qiáng)實(shí)現(xiàn)也要加很多的外圍器件。專門的語音處理芯片也比較多,如ISD系列、PM50系列等,但是專門的語音處理芯片功能比較單想在語音之外的其他方面應(yīng)用基本是不可能的。所以本次選擇使用了LD3320模塊,該模塊采用了ASR技術(shù)。通過對經(jīng)過輸入的聲音實(shí)施頻譜分析,采取關(guān)鍵詞語作為最終
語音識別的結(jié)果輸出。語音識別模塊設(shè)計如圖3-5所示。
圖3-5語音識別模塊設(shè)計
資料包括:
部分程序:
#include <reg52.h>
#include "mfrc522.h"
#include "main.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <INTRINS.H>
//三個指示燈
sbit led = P0^1;
sbit led2 = P0^4;
sbit led3 = P0^7;
//電機(jī)驅(qū)動
sbit???? eleA?? =? P3 ^ 4;
sbit???? eleB?? =? P3 ^ 5;
sbit???? eleC?? =? P3 ^ 6;
sbit???? eleD?? =? P3 ^ 7;
sbit???? hwql?? =? P2 ^ 6;//紅外前左
sbit???? hwqr?? =? P2 ^ 2;//紅外前右
sbit???? hwhl?? =? P1 ^ 2;//紅外后左
sbit???? hwhr?? =? P1 ^ 3;//紅外后右
sbit???? bz?? =? P2 ^ 5;//避障
unsigned char R_flag=0;
unsigned char reg[35] = 0;
unsigned char number = 0;
unsigned char recSign = 0;//接收數(shù)據(jù)標(biāo)志
unsigned char recTemp = 0;//接收數(shù)據(jù)
bit rec_flag = 0; //接收參數(shù)
int i=0; //用于for循環(huán)
bit start = 0; //開始暫停
int count =0;
unsigned char state=0;// 0-空閑 1-忙
unsigned char mode=0;// 0-停止? 1-前? 2-后
unsigned char dire=0;// 0-停止? 1-前? 2-后? 3-前左 4-前右 5-后左? 6-后右
unsigned char cardId=0;
unsigned char curId=0;//當(dāng)前卡號
unsigned char targId=0;//目標(biāo)卡號
unsigned char curPoint=0;//當(dāng)前位置
unsigned char trace=0;//0-遙控模式??? 1-循跡模式
unsigned? int? timer=0;
unsigned? int? timeCount=0;
unsigned char data1[8] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
unsigned char g_ucTempbuf[20];
unsigned char status;
void Delay10ms(unsigned int c)?? //誤差 0us
{
unsigned char a, b;
//--c已經(jīng)在傳遞過來的時候已經(jīng)賦值了,所以在for語句第一句就不用賦值了--//
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
需要完整的資料可在我的資源里下載,也可以加入我的紛傳圈子,里面有資源壓縮包的百度網(wǎng)盤下載地址及提取碼。
紛傳點(diǎn)擊用微信打開即可,過程有點(diǎn)繁瑣請見諒。