智慧家庭是近年來(lái)物聯(lián)網(wǎng)市場(chǎng)重點(diǎn)發(fā)展的一個(gè)題目,隨著應(yīng)用產(chǎn)品與功能越來(lái)越多元化,讓云端運(yùn)算工作量不斷擴(kuò)充同時(shí)也占用網(wǎng)路流量,也因此邊緣運(yùn)算在近期不斷被強(qiáng)調(diào)其重要性,希望可以分擔(dān)云端工作量。東芝也在MCU產(chǎn)品上也推出了語(yǔ)音辨識(shí)與播放的算法,可以在低階版本的ARM M4核心中獨(dú)立完成中、英、日文的語(yǔ)音關(guān)鍵字辨識(shí)并撥放對(duì)應(yīng)需求的語(yǔ)音,此功能與云端語(yǔ)音辨識(shí)比較展現(xiàn)了四大優(yōu)點(diǎn)
- 低延遲響應(yīng)
- 高度保密性
- 更佳的抗噪能力
- 極小的硬體資源
細(xì)部說(shuō)明如下,東芝語(yǔ)音識(shí)別因?yàn)橥耆蒑4核心算法計(jì)算,不需要依靠云端資源除了系統(tǒng)簡(jiǎn)單外響應(yīng)時(shí)間在200msec以內(nèi)針對(duì)需要即時(shí)控制的產(chǎn)品有高度可靠性;東芝語(yǔ)音辨識(shí)算法是經(jīng)過(guò)深度學(xué)習(xí)調(diào)適,除了辨識(shí)率高同時(shí)也有更佳的抗噪能力,若有特別場(chǎng)合的背景噪音也可以重新調(diào)適算法作辨識(shí)字典增加辨識(shí)率;硬體資源部分英文與日文僅僅需要150KB Flash Code size,中文則需要350KB Flash Code size,RAM的需求則在140KB以內(nèi),并使用SPI界面接收MEMS麥克風(fēng)I2S音訊再以兩組PWM界面驅(qū)動(dòng)完成ADX語(yǔ)音播報(bào)的功能,以相當(dāng)?shù)碗A的一般消費(fèi)型MCU硬體資源即可完成了語(yǔ)音辨識(shí)與播放功能的設(shè)計(jì)。
本次方案我們使用東芝TMPM4G6F10FG MCU產(chǎn)品搭配語(yǔ)音辨識(shí)與播放功能的算法導(dǎo)入語(yǔ)音控制智慧窗簾應(yīng)用,以TMPM4G6F10FG自動(dòng)辨識(shí)語(yǔ)音指令后控制東芝TB67S279FTG馬達(dá)驅(qū)動(dòng)IC致使窗簾動(dòng)作。TB67S279FTG為步進(jìn)馬達(dá)控制IC,產(chǎn)品特色如下
- AGC(主動(dòng)增益控制)技術(shù):解決防止步進(jìn)馬達(dá)失步從而產(chǎn)生大量熱量問(wèn)題
- ACDS(高級(jí)電流檢測(cè)系統(tǒng))技術(shù): 東芝原創(chuàng)技術(shù)實(shí)現(xiàn)了高精度恒定電流的電機(jī)驅(qū)動(dòng),且無(wú)需使用外部電流靈敏電阻器也有助于縮小板尺寸和物料清單(BOM)成本
- 微步驅(qū)動(dòng)技術(shù): 微步驅(qū)動(dòng)器可以通過(guò)逐步改變兩個(gè)繞組的電流比率,以相比于基本步進(jìn)角度更精細(xì)的步進(jìn)角度旋轉(zhuǎn)馬達(dá)
- 異常檢測(cè)技術(shù): 熱關(guān)斷(TSD),過(guò)電流保護(hù)(ISD),上電重置(POR),電機(jī)負(fù)載開(kāi)路(OPD)
設(shè)計(jì)說(shuō)明:
- 語(yǔ)音控制命令:
規(guī)劃指令定義與動(dòng)作如下:語(yǔ)音命令 動(dòng)作設(shè)計(jì) 控制啟動(dòng) 播放"待命中",啟動(dòng)馬達(dá)控制,20秒無(wú)任何動(dòng)作回到休息模式 關(guān)閉窗簾 播放"窗簾關(guān)閉中"->控制馬達(dá)正轉(zhuǎn)至線性滑軌終點(diǎn)->播放"窗簾已關(guān)閉" 全部打開(kāi) 播放"窗簾打開(kāi)中"->控制馬達(dá)反轉(zhuǎn)至線性滑軌起點(diǎn)->播放"窗簾已打開(kāi)" 光線太亮 播放"等等"->控制馬達(dá)正轉(zhuǎn)線性滑軌1/10位置->播放"是否還太亮" 有點(diǎn)太暗 播放"遵命"->控制馬達(dá)反轉(zhuǎn)線性滑軌1/10位置->播放"亮度足夠嗎" - 語(yǔ)音辨識(shí)觸發(fā)關(guān)鍵字建立與程式設(shè)計(jì):
使用東芝Voice Trigger GUI工具(TMW_VT_TMG.exe)編輯關(guān)鍵字字典,如下圖點(diǎn)選紅框處執(zhí)行程式,綠框處輸入關(guān)鍵字的漢語(yǔ)拼音
將設(shè)計(jì)好的語(yǔ)音辨識(shí)關(guān)鍵字資料用下拉式功能表的”Generate”產(chǎn)生middleware所需的字典檔案
對(duì)應(yīng)程式設(shè)計(jì)如下
首先針對(duì)設(shè)計(jì)好的關(guān)鍵字設(shè)定threshold參數(shù)(數(shù)值0~1000)如下圖,參數(shù)越大表示越容易通過(guò)但也增加誤判率,參數(shù)可以依照環(huán)境與關(guān)鍵字互相間的相似性作調(diào)整設(shè)計(jì)
使用middleware算法函式可以取出語(yǔ)音辨識(shí)的資訊,將語(yǔ)音辨識(shí)資訊的ID(detect.keywordID)傳入窗簾馬達(dá)控制的函式已進(jìn)行對(duì)應(yīng)程式設(shè)計(jì)動(dòng)作
- 窗簾控制動(dòng)作設(shè)計(jì)
如第二步設(shè)計(jì),設(shè)計(jì)好窗簾所對(duì)應(yīng)語(yǔ)音指令所需要的動(dòng)作函式將語(yǔ)音辨識(shí)ID傳入就可以對(duì)應(yīng)執(zhí)行,窗簾啟動(dòng)后會(huì)紀(jì)錄位置,開(kāi)關(guān)窗簾由馬達(dá)正反轉(zhuǎn)(MOTOR_DIR)決定,gMotor_Target_Pos參數(shù)則是計(jì)算馬達(dá)本次動(dòng)作需要到達(dá)的位置,程式碼如下:
驅(qū)動(dòng)窗簾移動(dòng)的線性滑軌實(shí)際測(cè)試后的極限位置設(shè)定如下參數(shù),未來(lái)若更換不同線性滑軌都很容易修改,而窗簾部分開(kāi)關(guān)的參數(shù)也可以調(diào)整
- 語(yǔ)音播放功能程式設(shè)計(jì)
語(yǔ)音播放部分必須先將播放語(yǔ)音錄制后轉(zhuǎn)出成C語(yǔ)言陣列提供函式定址做輸出播放成語(yǔ)音,這邊介紹兩款工具,首先先使用CRI Atom Encoder將錄制的語(yǔ)音檔案轉(zhuǎn)成ADX格式音訊檔案,如下圖將錄制wav檔設(shè)定為24KHz sampling rate(如綠框),在執(zhí)行紅框選項(xiàng)作轉(zhuǎn)檔
轉(zhuǎn)檔完成后再使用bin2txt轉(zhuǎn)成C語(yǔ)言陣列格式提供程式使用,指令如下圖
轉(zhuǎn)檔完成的C file(如下圖紅框處)必須將檔案include到程式中,同時(shí)要宣告array的記憶體(開(kāi)啟C file的綠框處)
對(duì)應(yīng)到程式碼中如下圖做include與記憶體宣告動(dòng)作
完成后就可以使用criAtomPlayer_SetData函式在需要播放語(yǔ)音的地方撰寫(xiě)程式即可執(zhí)行。 - 窗簾動(dòng)作:
當(dāng)語(yǔ)音辨識(shí)、語(yǔ)音撥放與馬達(dá)動(dòng)作參數(shù)都設(shè)計(jì)好后,語(yǔ)音控制智慧窗簾偵測(cè)到對(duì)應(yīng)關(guān)鍵字語(yǔ)音就會(huì)自動(dòng)完成動(dòng)作,程式設(shè)計(jì)成motor_run函式如下:
以上就完成語(yǔ)音控制智慧窗簾所需要的動(dòng)作設(shè)計(jì),詳細(xì)程式碼可以參考附檔
實(shí)際完成結(jié)果的控制動(dòng)作也可以參考錄制的影片,網(wǎng)址連結(jié)為 https://youtu.be/eQARgyGNSjs