用語音控制家電,手把手教大家學習使用LD3320語音識別模塊

大家好,我是阿樂,今天給大家講解一下LD3320語音識別模塊。

先來看看模塊實物,它是長這個樣子的:

用語音控制家電,手把手教大家學習使用LD3320語音識別模塊

LD3320語音識別模塊實物


我現在用來給大家做講解的這個模塊是已經集成了單片機在上面,這樣子開發起來就更簡單一些,不用移植程序,直接在例程裡改關鍵詞,然後編譯上傳就可以了。

在模塊背後黑色大大那塊就是單片機啦,它是STC11的單片機:

用語音控制家電,手把手教大家學習使用LD3320語音識別模塊

模塊背面的STC單片機


在模塊正面,有個小小的很多腳的那個就是LD3320芯片了,就是圖中紅色圈圈中的那個:

用語音控制家電,手把手教大家學習使用LD3320語音識別模塊


看看單芯片的樣子:

用語音控制家電,手把手教大家學習使用LD3320語音識別模塊


LD3320是一顆基於非特定人語音識別(SI-ASR:Speaker-Independent Automatic Speech Recognition)技術的語音識別芯片,或者說是語音聲控芯片。

在這裡給大家講講什麼是非特定人語音識別。通俗點講就是不用針對指定發音人的識別技術,這種語音識別技術不分年齡、性別,只要發音人說的是相同的語言就可以識別。再說得簡單點,就是說只要是拼音可以拼出的發音,都是可以輸入芯片進行識別的。

這個語音識別模塊它不是智能的,不是說我們問它什麼它就可以回答什麼,它不像我們手機上的語音助手比如小愛或者Siri那樣,能跟我們對答如流。這個模塊能識別的內容,是需要我們提前設定好的,我們把要識別的關鍵詞語列好,然後把這些關鍵詞語以字符的形式傳送到 LD3320 內部,這樣才可以對用戶說出的關鍵詞語進行識別,而且在同一時刻,它最多是在50條關鍵詞語中進行識別。

這個模塊雖然不是智能的,但是它開發起來簡單呀,價格也不算貴,而且它可以在識別到關鍵詞後直接從IO口輸出高低電平,或者從串口打印出數據。這就很好玩啦,我們可以用它來控制各種家電,控制小車,用來傳輸命令等,還是非常有意思的。

用語音控制家電,手把手教大家學習使用LD3320語音識別模塊


這個模塊有三個工作模式:1、普通模式;2、口令模式;3、按鍵觸發模式。不同的工作模式可以通過程序編程來實現。

普通模式就是模塊工作時,我們直接說話,模塊直接識別。

口令模式就是模塊工作時,我們先要說出一個一級口令,比如“芝麻開門”,模塊在識別到正確的一級口令後才進行下一級的識別。

按鍵觸發模式就是模塊工作時,我們在進行語音識別之前,需要先按一下按鍵,接下來才能進行下一步的識別。

這三個模式我覺得口令模式比較實用,接下來講講用口令模式去控制IO口高低電平的變化,進而去控制一個繼電器的閉合與斷開。

看到下圖中這個語音識別模塊的圖片,紅色框框中的引腳就是我們可以用的IO,豎著那一排由下而上標著P10~P17有八個,橫著那一排從左往右是P34、P33,P23~P27,P41,也有8個,這樣我們可以用的IO口就有16個啦,這16個IO口可以用來控制繼電器,LED,或者接單片機的IO口。

用語音控制家電,手把手教大家學習使用LD3320語音識別模塊


上圖中,最左邊由下而上標著5V,GND,TX,RX的四個引腳就是用來給模塊下載程序的地方,串口就在這裡了。我們通過串口給其它模塊或者單片機發數據也是從這裡接。

好,接下來我們就直接用這個P10引腳來控制繼電器吧,這個模塊輸出的是3.3V的TTL電平,就算是用5V的繼電器也不能直接控制,我們就給它加個三極管,然後再通過三極管來控制繼電器。

畫出這個電路圖如下圖:

用語音控制家電,手把手教大家學習使用LD3320語音識別模塊


電路中,語音識別模塊的P10引腳出來直接接一個200Ω的電阻,電阻的另一頭接到9013NPN三極管的基極,9013三極管發射極接地,接電源負極,集電極接1N4148二極管的正極和繼電器的一個控制引腳,繼電器的另一個控制引腳接到+5V電源。這樣子當P10端口輸出高電平時,三極管導通,繼電器吸合;當P10端口輸出低電平時,三極管截止,繼電器斷開。我們就可以通過繼電器去控制各種家電了。在電路圖中,我是讓繼電器控制一盞220V的燈。電路圖中1N4148二極管和繼電器並接,而且是將二極管的負極接到電源正極,二極管在這裡起到續流的作用,可以保護三極管。

如下圖是我根據這個電路圖焊好的繼電器模塊,順便給這個語音識別模塊做了個底座,只要把語音識別模塊安到底座上,就可以通過底座給語音模塊供電,也把P10口和繼電器電路的控制端口接在一起了。

用語音控制家電,手把手教大家學習使用LD3320語音識別模塊


用語音控制家電,手把手教大家學習使用LD3320語音識別模塊


好,接下來就是程序編程了,示例程序很多看起來很複雜,如果只是做簡單的開發,我們沒必要把每個細節全部弄懂,我們只要知道修改識別關鍵詞的地方在哪就得了。

如下圖,在左邊工程欄裡找到“LDChip.C”這個文件,雙擊打開:

用語音控制家電,手把手教大家學習使用LD3320語音識別模塊


在 LDChip.C (下圖中紅色圈圈1)文件中下滑找到274行“uint8 LD_AsrAddFixed() ”這個函數,函數中,278,279這兩行有兩個數組,DATE_A 和DATE_B,後面跟著數字,這個DATE_A後面的數字表示的是關鍵詞的個數,而DATE_B後面的數字表示的是這些關鍵詞中最長一句的長度。我們將要添加三個關鍵詞命令:“芝麻開門”,“打開繼電器”,“關閉繼電器”,所以DATE_A 後面跟著個3;而這三個命令的拼音中,包含空格,長度最長的是“guan bi ji dian qi”,有18個,所以DATE_B後面跟著18,如圖中的紅色圈圈2。

再看到280~284行,這裡邊就是添加關鍵詞拼音的地方啦,我們要在這裡輸入要識別的命令的拼音,比如一級口令是:“芝麻開門”,二級口令是:“打開繼電器”,“關閉繼電器” ,如圖中的紅色圈圈3。

用語音控制家電,手把手教大家學習使用LD3320語音識別模塊


285~289的這個數組是識別碼數組(上圖中的紅色圈圈4),所添加的識別碼為預先定義好的宏定義常量值,同時必須和關鍵詞一一對應。圖中取每個關鍵詞命令的拼音首字母大寫,格式是“CODE_拼音首字母大寫”。如“芝麻開門”就是“CODE_ZMKM”。

好,接下來去定義識別碼,這些東西我們要先定義才能使用,如下圖,在左邊工程欄(圖中紅色圈圈1)找到並雙擊打開LDChip.h 這個文件,下滑找到第40行,看到#define這一堆這裡(圖中紅色圈圈2),這裡就是添加和修改識別碼的地方,我們可以根據自己的需要和喜好任意定義識別碼和宏名,但必須和剛才前面所使用的識別碼配對,否則會提示未定義錯誤。識別碼後面的數字字母不用理它,如果增加識別的關鍵詞的個數,按順序往下增大就可以,如“0x03,0x04”等。

用語音控制家電,手把手教大家學習使用LD3320語音識別模塊


好,最後們要修改處理函數,就是說當模塊識別到我們的命令了,需要做什麼,是從哪個IO口輸出高電平還是低電平,這就是在處理函數這裡實現了。如下圖,在左邊工程欄(圖中紅色圈圈1)找到並雙擊打開main.c函數,然後下滑找到 202行“void User_handle(uint8 dat)”這個函數(圖中紅色圈圈2),在這個函數中可以根據自己的使用情況在相對應的識別碼後添加識別成功後的操作。

用語音控制家電,手把手教大家學習使用LD3320語音識別模塊


上圖中,紅色方框3中框起來的就是當模塊識別到“打開繼電器”這個命令後執行的程序,令“PA1=1”,也就是讓PA1輸出一個高電平,而PA1在主程序前邊已經定義好,PA1=P10,所以就是讓P10引腳輸出一個高電平,這時候三極管導通,繼電器就會吸合。

同理,紅色方框4中框起來的就是當模塊識別到“關閉繼電器”這個命令後執行的程序,令“PA1=0”,也就是讓PA1輸出一個低電平,而PA1在主程序前邊已經定義好,PA1=P10,所以就是讓P10引腳輸出一個低電平,這時候三極管截止,繼電器就會斷開。

下圖就是在主程序前邊定義的PA1,“sbit PA1=P1^0”就是令P1^0=PA1,這樣子PA1代表的就是P1^0端口。紅色框框中的都是定義好的端口,我們後面用到這些時可以直接用,無需再去定義。

用語音控制家電,手把手教大家學習使用LD3320語音識別模塊


好,到這一步為止,就完成了整個程序的修改,接下來重建工程完成編譯,生成HEX文件,再通過USB下載器把HEX文件下載到模塊上就可以了。

最後的效果演示大家看下面的視頻吧,看視頻比較直觀。在視頻中有整個製作過程的詳細教程,大家可以根據視頻教程來學習、製作。開發製作這個作品要求大家有一定的單片機編程基礎,起碼懂得安裝編程軟件,懂得軟件的基本操作,懂得修改代碼,懂得給51單片機下程序,就這幾樣,如果會這幾樣,做起來也不難。

哈哈,最後祝大家制作成功,玩得愉快,更多精彩內容歡迎關注頭條號:創客e工坊,下期見,拜拜~


分享到:


相關文章: