久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6296|回復: 4
打印 上一主題 下一主題
收起左側

STM32F1+LD3320的語音助手源程序+原理圖

[復制鏈接]
跳轉到指定樓層
樓主
STM32的語音助手
功能:播放音樂,講故事,簡單對話,和控制家用電器
主要使用了LD3320這款非特定語音識別芯片,他可以通過拼音設置要識別的語音,因此大 大減低了開發的困難度。 具體工作過程為LD3320識別出語音后,通過中斷引腳通知STM32,而后主 函數循環,讀取寄存器的值,得到最優的識別結果。而后移植FAT32文件系統,將MP3文件放到sd卡 中交由STM32讀取。將讀取的數據填充到LD3320語音播放的FIFO中進行語音播放。因此人機對話只 能是預先設計的對話內容。

具體視頻如下,復制網址粘貼到瀏覽器即可觀看  https://v.qq.com/x/page/a0957xwa ... e=0&share_from=copy



電路原理圖如下:


單片機源程序如下:
  1. #include "main.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "sd.h"
  5. #include "ff.h"   
  6. #include "ld3320.h"
  7. #include "mp3.h"
  8. #include "led.h"
  9. #include "asr.h"
  10. #include "timer3.h"
  11. #include "stm32f10x_tim.h"
  12. #include "stm32f10x.h"
  13. #include "sys.h"
  14. #include "SG90.h"

  15. u8 trigger_flag=0;    //0 表示沒有識別觸發口令  1 表示識別了觸發口令

  16. FATFS fs[_VOLUMES];     //邏輯磁盤工作區.文件系統默認支持3個磁盤,我們只用了一個 SD編號0

  17. int main(void)
  18. {                                          
  19.         u8 nAsrRes=0;                      //記錄識別碼
  20.         
  21.         delay_init();                               //延時初始化
  22.         RCC_Configuration();       //系統時鐘初始化
  23.         SG90_Init();              //SG90舵機初始化
  24.         SG90_angle(0);           //舵機初步為0(最小值)
  25.         Usart1_init(115200);                   //串口初始化波特率為115200
  26.         LED_Init();                            //LED初始化
  27.         
  28.         
  29.         while(SD_Init())                   //SD卡初始化
  30.                 TIM3_Init();
  31.         {
  32.                 printf("SD卡初始化錯誤\r\n");  //串口提示SD卡初始化錯誤
  33.                 delay_ms(2000);                //延時2s
  34.         }
  35.         f_mount(&fs[0],"0:",1);                //掛載SD卡        
  36.         LD3320_Init();                           //初始化LD3320
  37.         
  38.         printf(" 觸發口令:小布\r\n ");
  39.         printf(" 口令1:重啟系統\r\n ");
  40.         printf(" 口令2:講個笑話\r\n ");
  41.         printf(" 口令3:打開臥室燈\r\n ");
  42.         printf(" 口令4:關閉臥室燈\r\n ");
  43.         printf(" 口令5:我想聽音樂\r\n ");
  44.         printf(" 口令6:打開風扇\r\n ");
  45.         printf(" 口令7:關閉風扇\r\n ");
  46.         printf(" 口令8:打開廚房燈\r\n ");
  47.         printf(" 口令9:關閉廚房燈\r\n ");
  48.         printf(" 口令10:關閉所有用電器\r\n ");
  49.         printf(" 口令11:換個笑話\r\n ");
  50.         printf(" 口令12:打開窗戶\r\n ");
  51.         printf(" 口令13:關閉窗戶\r\n ");
  52.         printf(" 口令14:離家模式\r\n ");
  53.         printf(" 口令15:我回來了\r\n ");
  54.         printf(" 口令16:打開客廳燈\r\n ");
  55.         printf(" 口令17:關閉客廳燈\r\n ");
  56.         printf(" 口令18:你叫什么名字\r\n ");
  57.         printf(" 口令19:你多大了\r\n ");
  58.         printf(" 口令20:我餓了\r\n ");
  59.         printf(" 口令221:你會唱歌嗎\r\n ");
  60.         
  61.         nAsrStatus = LD_ASR_NONE;                     //初始狀態:沒有在作ASR
  62.         
  63.         PlayDemoSound_mp3("系統準備.mp3");   //播放文件

  64.         while(1)
  65.         {
  66.              switch(nAsrStatus)
  67.                 {
  68.                         case LD_ASR_RUNING:            
  69.                                                                                         break;
  70.                         
  71.                         case LD_ASR_ERROR:                        
  72.                                                                                         break;
  73.                         
  74.                         case LD_ASR_NONE:                                nAsrStatus=LD_ASR_RUNING;              //啟動一次ASR識別流程:ASR初始化,ASR添加關鍵詞語,啟動ASR運算
  75.                                                                                         if (RunASR()==0)                  
  76.                                                                                         {                        
  77.                                                                                                 printf("ASR_ERROR\r\n");
  78.                                                                                                 nAsrStatus = LD_ASR_ERROR;
  79.                                                                                         }
  80.                                                                                         break;

  81.                         case LD_ASR_FOUNDOK:                        nAsrRes = LD_ReadReg(0xc5);                    //一次ASR識別成功結束,取ASR識別結果                                                                                                                                                                                                
  82.                                                                                         switch(nAsrRes)                  
  83.                                                                                         {
  84.                                                                                                 case CODE_CF:   printf("識別到觸發口令,可以發送普通口令\r\n");
  85.                                                                                                          PlayDemoSound_mp3("我在.mp3");   //播放文件
  86.                                                                                                                                 trigger_flag=1;                        //trigger_flag=1,表示識別了觸發口令,接下來要識別普通口令
  87.                                                                                                                                 TIM_SetCounter(TIM3, 0);               //清零定時器3計數器
  88.                                                                                                                                 TIM_Cmd(TIM3, ENABLE);                 //開啟定時器3                                
  89.                                                                                                                                 break;
  90.                                                                                                 case CODE_CQXT: printf("接收到口令:重啟系統\r\n");
  91.                                                                                                                                 PlayDemoSound_mp3("重啟.mp3");   //播放文件
  92.                                                                                                                                 NVIC_SystemReset();              //重啟
  93.                                                                                                                                 break;
  94.                                                                                                 case CODE_JGXH:        printf("接收到口令:講個笑話\r\n");
  95.                                                                                                                                 PlayDemoSound_mp3("笑話.mp3");   //播放文件
  96.                                                                                                                                 trigger_flag=0;
  97.                                                                                                         break;        
  98.                                                                                                         case CODE_HGXH:        printf("接收到口令:換個笑話\r\n");
  99.                                                                                                                                 PlayDemoSound_mp3("笑話1.mp3");   //播放文件
  100.                                                                                                                                 break;        
  101.                                                                                                 case CODE_DK:        //if(trigger_flag)
  102.                                                                                                               printf("接收到口令:打開臥室燈\r\n");
  103.                                                                                                               PlayDemoSound_mp3("開臥室燈.mp3");       //播放文件
  104.                                                                                                                         //        delay_ms(100);                      //語音中提示是0.1s延時后,打開LED_D4
  105.                                                                                                                                 LED_D4=0;
  106.                                                                                                               trigger_flag=0;
  107.                                                                                                                                 break;        
  108.                                                                                                 case CODE_GB://if(trigger_flag)
  109.                                                                                                         printf("接收到口令:關閉臥室燈\r\n");
  110.                                                                                                                                 PlayDemoSound_mp3("關臥室燈.mp3");       //播放文件
  111.                                                                                                                                 delay_ms(100);                      //語音中提示是0.1s延時后,關閉LED_D4
  112.                                                                                                                                 LED_D4=1;
  113.                                                                                                                                 break;        
  114.                                                                                                 case CODE_CDK://if(trigger_flag)
  115.                                                                                                         printf("接收到口令:打開廚房燈\r\n");
  116.                                                                                                               PlayDemoSound_mp3("開廚房燈.mp3");       //播放文件
  117.                                                                                                                                 delay_ms(100);                      //語音中提示是0.1s延時后,打開LED_D3
  118.                                                                                                                                 LED_D3=0;
  119.                                                                                                         trigger_flag=0;
  120.                                                                                                                                 break;        
  121.                                                                                                 case CODE_CGB://if(trigger_flag)
  122.                                                                                                         printf("接收到口令:關閉廚房燈\r\n");
  123.                                                                                                                                 PlayDemoSound_mp3("關廚房燈.mp3");       //播放文件
  124.                                                                                                                                 delay_ms(100);                      //語音中提示是0.1s延時后,關閉LED_D3
  125.                                                                                                                                 LED_D3=1;
  126.                                                                                                         trigger_flag=0;
  127.                                                                                                                                 break;
  128.                                                                                                 case CODE_KKTD:        //if(trigger_flag)
  129.                                                                                                               printf("接收到口令:打開客廳燈\r\n");
  130.                                                                                                               PlayDemoSound_mp3("開客廳燈.mp3");       //播放文件
  131.                                                                                                                         //        delay_ms(100);                      //語音中提示是0.1s延時后,打開LED_D4
  132.                                                                                                                                 LED_D5=0;
  133.                                                                                                               trigger_flag=0;
  134.                                                                                                                                 break;        
  135.                                                                                                 case CODE_GKTD:        //if(trigger_flag)
  136.                                                                                                               printf("接收到口令:關閉客廳燈\r\n");
  137.                                                                                                               PlayDemoSound_mp3("關客廳燈.mp3");       //播放文件
  138.                                                                                                                         //        delay_ms(100);                      //語音中提示是0.1s延時后,打開LED_D4
  139.                                                                                                                                 LED_D5=1;
  140.                                                                                                               trigger_flag=0;
  141.                                                                                                                                 break;        
  142.                          case CODE_KFS:        printf("接收到口令:打開風扇\r\n");
  143.                                                                                                                                 PlayDemoSound_mp3("開風扇.mp3");       //播放文件
  144.                                                                                                                                 delay_ms(100);                      //語音中提示是0.1s延時后,打開風扇
  145.                                                                                                                                 FS=0;
  146.                                                                                                        trigger_flag=0;
  147.                                                                                                                                 break;        
  148.                                                                                                         case CODE_GFS:        printf("接收到口令:關閉風扇\r\n");
  149.                                                                                                                                 PlayDemoSound_mp3("關風扇.mp3");       //播放文件
  150.                                                                                                                                 delay_ms(100);                      //語音中提示是0.1s延時后,關閉風扇
  151.                                                                                                                           FS=1;
  152.                                                                                                                                 break;               
  153.                           case CODE_KC:        printf("接收到口令:打開窗戶\r\n");
  154.                                                                                                                                 PlayDemoSound_mp3("開窗.mp3");       //播放文件
  155.                                                                                                                         //        delay_ms(100);                      //語音中提示是0.1s延時后,關閉風扇
  156.                                                                                                                           SG90_angle(90);
  157.                                                                                                                         //        delay_ms(100);  
  158.                                                                                                                                 break;                                                        
  159.                           case CODE_GC:        printf("接收到口令:關閉窗戶\r\n");
  160.                                                                                                                                 PlayDemoSound_mp3("關窗.mp3");       //播放文件
  161.                                                                                                                 //                delay_ms(100);                      //語音中提示是0.1s延時后,關閉風扇
  162.                                                                                                                           SG90_angle(0);
  163.                                                                                                         case CODE_LJ:        printf("接收到口令:離家模式\r\n");
  164.                                                                                                                                 PlayDemoSound_mp3("檢查.mp3");       //播放文件
  165.                                                                                                                           delay_ms(100);                      //語音中提示是0.1s延時后,關閉風扇
  166.                                                                                                                           SG90_angle(0);
  167.                                                                                                                                 FS=1;
  168.                                                                                                                                 LED_D3=1;
  169.                                                                                                                                 LED_D4=1;
  170.                                                                                                                                 LED_D5=1;
  171.                                                                                                                                 PlayDemoSound_mp3("離家.mp3");       //播放文件
  172.                                                                                                                                 break;                                                                                                
  173.                           case CODE_HJ:        printf("接收到口令:回家模式\r\n");
  174.                                                                                                                                 PlayDemoSound_mp3("回家.mp3");       //播放文件
  175.                                                                                                                           delay_ms(100);                      //語音中提示是0.1s延時后,關閉風扇
  176.                                                                                                                           LED_D5=0;
  177.                                                                                                 //        trigger_flag=0;        
  178.                                  break;                                                                                                                                
  179.                                                                                                         case CODE_GBSY:        printf("接收到口令:關閉所有用電器\r\n");
  180.                                                                                                                                 PlayDemoSound_mp3("用電器.mp3");       //播放文件
  181.                                                                                                                                 delay_ms(100);                      //語音中提示是1s延時后,關閉所有設備
  182.                                                                                                                           FS=1;
  183.                                                                                                                                 LED_D3=1;
  184.                                                                                                                                 LED_D4=1;
  185.                                                                                                                                 LED_D5=1;
  186.                                                                                                                                 break;                                                                                                                                                
  187.                                                                                                 case CODE_YY:        printf("接收到口令:聽音樂\r\n");
  188.                                                                                                                                 PlayDemoSound_mp3("音樂1.mp3");   //播放文件        
  189.                                trigger_flag=0;
  190.                                                                                                                          break;                                                                        
  191.                         case CODE_ZWJS:        printf("接收到口令:自我介紹\r\n");
  192.                                                                                                                                 PlayDemoSound_mp3("自我介紹.mp3");   //播放文件        
  193.                                trigger_flag=0;
  194.                                                                                                                          break;                        
  195.                         case CODE_NL:        printf("接收到口令:年齡\r\n");
  196.                                                                                                                                 PlayDemoSound_mp3("年齡.mp3");   //播放文件        
  197.                                trigger_flag=0;
  198.                                                                                                                          break;               
  199.                         case CODE_EL:        printf("接收到口令:我餓了\r\n");
  200.                                                                                                                                 PlayDemoSound_mp3("餓了.mp3");   //播放文件        
  201.                                trigger_flag=0;
  202.                                                                                                                          break;                                                        
  203.                         case CODE_CG:        printf("接收到口令:唱歌\r\n");
  204.                                                                                                                                 PlayDemoSound_mp3("我不會.mp3");   //播放文件
  205.                                 PlayDemoSound_mp3("音樂2.mp3");   //播放文件  
  206.                                PlayDemoSound_mp3("怎么樣.mp3");   //播放文件                                                                                                                                 
  207.                                trigger_flag=0;
  208.                                                                                                                          break;                                                                                                                                 
  209.                                                                                                 default:        printf("不在口令集之內\r\n");
  210.                                                                                                                                 
  211.                                                                                         }        
  212.                                                                                         nAsrStatus = LD_ASR_NONE;
  213.                                                                                         break;
  214.                                                                                        
  215.                         case LD_ASR_FOUNDZERO:          printf("未知口令\r\n");
  216.                                                                                         nAsrStatus = LD_ASR_NONE;
  217.                                                                                         break;
  218.                                                                                        
  219.                         default:                                                nAsrStatus = LD_ASR_NONE;
  220.                                                                                         break;
  221.                         }
  222.         }               
  223. }
復制代碼

所有資料51hei提供下載:
語音助手源碼.7z (1.65 MB, 下載次數: 136)
語音合成軟件.zip (3.98 MB, 下載次數: 93)
語音助手原理圖.pdf (222.86 KB, 下載次數: 82)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:897789 發表于 2021-5-1 20:18 | 只看該作者
LD3320自己就能實現語音播報嗎?不用加喇叭或其他語音播報模塊嗎?看原理圖里沒有呀。
回復

使用道具 舉報

板凳
ID:897789 發表于 2021-5-1 21:10 | 只看該作者
LD3320自己就能實現語音播報嗎?不用加喇叭或其他語音播報模塊嗎?看原理圖里沒有呀。
回復

使用道具 舉報

地板
ID:23303 發表于 2021-6-7 16:10 | 只看該作者
謝謝樓主分享!下載學習一下
回復

使用道具 舉報

5#
ID:969092 發表于 2023-2-14 11:17 | 只看該作者
你好,你的語音模塊的連接能否發一個
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产视频中文字幕 | 91高清视频在线观看 | 精品国产乱码久久久久久丨区2区 | 免费能直接在线观看黄的视频 | 日韩视频国产 | 成人精品免费视频 | 激情国产视频 | 免费一级黄| 久久久99国产精品免费 | 怡红院免费的全部视频 | 老司机久久 | 国产精品一区二区日韩 | 亚洲成av人影片在线观看 | 伊人春色成人网 | 亚洲精久| 久久久久久99 | 在线免费观看a级片 | 久久国产精品一区二区三区 | 激情影院久久 | 97久久久久久久久 | av毛片 | 在线免费观看黄a | 国产激情视频在线 | 午夜丰满少妇一级毛片 | 国产剧情一区二区三区 | 日本视频免费观看 | 免费a国产| 国产精品久久久久久久久免费相片 | 国产视频精品在线 | 亚洲视频一区在线观看 | 成人av一区二区三区 | 综合二区| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲成人av在线播放 | 中文字幕蜜臀av | 久久亚洲视频 | 成人精品一区二区 | 国产一区二区三区四区区 | 一二区成人影院电影网 | 久久在线看| 一级毛片色一级 |