tft每日頭條

 > 生活

 > 語音控制如何使用

語音控制如何使用

生活 更新时间:2024-11-19 20:23:14

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

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

語音控制如何使用(零基礎教你玩轉語音控制)1

LD3320語音識别模塊實物

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

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

語音控制如何使用(零基礎教你玩轉語音控制)2

模塊背面的STC單片機

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

語音控制如何使用(零基礎教你玩轉語音控制)3

看看單芯片的樣子:

語音控制如何使用(零基礎教你玩轉語音控制)4

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

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

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

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

語音控制如何使用(零基礎教你玩轉語音控制)5

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

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

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

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

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

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

語音控制如何使用(零基礎教你玩轉語音控制)6

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

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

畫出這個電路圖如下圖:

語音控制如何使用(零基礎教你玩轉語音控制)7

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

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

語音控制如何使用(零基礎教你玩轉語音控制)8

語音控制如何使用(零基礎教你玩轉語音控制)9

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

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

語音控制如何使用(零基礎教你玩轉語音控制)10

在 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。

語音控制如何使用(零基礎教你玩轉語音控制)11

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

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

語音控制如何使用(零基礎教你玩轉語音控制)12

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

語音控制如何使用(零基礎教你玩轉語音控制)13

上圖中,紅色方框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端口。紅色框框中的都是定義好的端口,我們後面用到這些時可以直接用,無需再去定義。

語音控制如何使用(零基礎教你玩轉語音控制)14

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

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

點擊這裡觀看詳細視頻教程

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

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved