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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2271|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于Arduino的智能家居語(yǔ)音識(shí)別系統(tǒng)設(shè)計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1026694 發(fā)表于 2022-5-16 00:12 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
Arduino智能家居初級(jí)套件
晚上回到家,家里黑漆漆一片,得找到開燈的按鈕才算完事,有時(shí)候在想,如果燈泡會(huì)聽話該多好啊,有了這個(gè)想法,智能家居就應(yīng)運(yùn)而生了,我們用Arduino打造這么一款智能家居套件并為它取了一個(gè)很搞的名字“小米渣”,需要開燈的時(shí)候,你只需叫小米渣開燈,小米渣就會(huì)立馬為你打開電燈并回答:“正在開燈”,小米渣的功能可不止這一個(gè)功能哦。下面我們一一道來(lái)。
套件清單:
1.UNO控制板一塊
2.DFRduino I/O Expansion V5.0 擴(kuò)展板一塊
3.中文語(yǔ)音識(shí)別模塊Voice Recognition V1.0 一塊
4.語(yǔ)音合成模塊 Speech Synthesizer bee 一塊
5.繼電器模塊一個(gè)
6.溫濕度傳感器DHT11一個(gè)
7.氣體傳感器一個(gè)(可檢測(cè)煙霧,煤氣,天然氣,甲烷等)
8.LED燈模塊一個(gè)(用于表示語(yǔ)音識(shí)別狀態(tài),燈亮?xí)r方可進(jìn)行識(shí)別)
9.環(huán)境光線傳感器一個(gè)
10.小喇叭一個(gè)
制作步驟:
步驟1
將語(yǔ)音識(shí)別模塊插到控制板上(語(yǔ)音識(shí)別模塊已占用數(shù)字口2,4,9,10,11,12,13);然后將擴(kuò)展板V5插到語(yǔ)音識(shí)別模塊之上;語(yǔ)音合成模塊插到傳感器擴(kuò)展板的xbee插座上(語(yǔ)音合成模塊占用數(shù)字口0和1,下載程序時(shí)需要拔掉語(yǔ)音合成模塊哦);LED模塊接到數(shù)字口7;繼電器模塊接到數(shù)字口8,溫濕度傳感器DHT11接到模擬口0;氣體傳感器接到模擬口1;環(huán)境光線傳感器接到模擬口2。
步驟2
通過(guò)USB數(shù)據(jù)線,將代碼下到控制器,代碼下載成功后再將語(yǔ)音合成模塊插到擴(kuò)展板的XBEE接口上(注意,因?yàn)檎Z(yǔ)音合成模塊會(huì)占用串口,所以必須下載程序時(shí)必須拔掉,否則程序無(wú)法下載成功)。
功能介紹:
1.識(shí)別開關(guān)燈命令,執(zhí)行開關(guān)燈操作,并語(yǔ)音播報(bào)當(dāng)前狀態(tài)。
2.識(shí)別溫濕度讀取命令,并語(yǔ)音播報(bào)當(dāng)前溫濕度情況。
3.實(shí)時(shí)監(jiān)測(cè)危險(xiǎn)氣體,一旦檢測(cè)到立即報(bào)警并語(yǔ)音播報(bào)危險(xiǎn)情況。
4.未有識(shí)別時(shí)不做操作,識(shí)別命令有誤時(shí)播報(bào)“請(qǐng)問(wèn)您在說(shuō)什么?”。
5.你也可以考考小米渣:“需要開燈嗎?”,系統(tǒng)就會(huì)對(duì)環(huán)境光線進(jìn)行檢測(cè),光線暗的情況下,小米渣會(huì)提醒你:“光線不足,正在開燈”然后開燈,如果光線明亮?xí)r,小米渣會(huì)說(shuō):“光線明亮,不需要開燈”保持燈在關(guān)的狀態(tài)(判斷光線強(qiáng)弱的閾值在程序中進(jìn)行設(shè)置,用戶可以自行修改)。
注:
為了最大程度的減少小米渣的誤操作,在程序中我們?cè)O(shè)定了一條口令觸發(fā)“小米渣”,即該套件只有在正確的識(shí)別到“小米渣”三個(gè)字之后,才能執(zhí)行其后關(guān)鍵字命令的操作,例如,如果要執(zhí)行開燈命令,您需先說(shuō):“小米渣”,之后小米渣會(huì)說(shuō):“您好”,然后你再說(shuō):“開燈”,之后小米渣才會(huì)執(zhí)行開燈命令。如果你不先叫小米渣的名字,它可不會(huì)理會(huì)你的吩咐喔。
語(yǔ)音控制命令:
1.“小米渣”——口令觸發(fā)命令。
2.“現(xiàn)在溫度怎么樣”——溫濕度檢測(cè)命令,播報(bào)相應(yīng)環(huán)境溫濕度。
3.“開燈”——開燈命令,需先執(zhí)行口令觸發(fā)命令才執(zhí)行改命令。
4.“關(guān)燈”——關(guān)燈命令,需先執(zhí)行口令觸發(fā)命令才執(zhí)行改命令。
5.“需要開燈嗎”——環(huán)境光線檢測(cè)命令,根據(jù)光線強(qiáng)弱,執(zhí)行開關(guān)燈命令。
6.“小米”、“小”、“米渣“——垃圾關(guān)鍵詞,目的是減小誤操作。
7.其他功能就要發(fā)揮您的聰明才智了哦。
程序代碼:
  1. /*
  2. 識(shí)別關(guān)鍵詞的個(gè)數(shù)為SUM;
  3. n為數(shù)組中對(duì)應(yīng)關(guān)鍵詞的序列號(hào),例如數(shù)組sRecog中的第一個(gè)關(guān)鍵詞為“kai deng”則對(duì)應(yīng)的序列號(hào)為0;
  4. Voice.Initialise();初始化設(shè)置輸入方式MIC/MONO。
  5. */
  6. #include <TimerOne.h>
  7. #include <avr/wdt.h>
  8. #include <Voice.h>
  9. #include <Syn6288.h>
  10. #include <dht11.h>
  11. dht11 DHT;
  12. Syn6288 syn;
  13. uint8  nAsrStatus=0;
  14. #define SUM 11

  15. #define DHT11_PIN A0
  16. #define light_sensor_pin A2
  17. #define light_threshold 200
  18. #define gas_sensor_pin A1
  19. #define gas_threshold 700
  20. #define relay 8
  21. #define state_led 7

  22. char sRecog[SUM][30] = {"xiao mi zha","xian zai wen du zen me yang","kai deng","guan deng","xu yao kai deng ma","xiao mi","xiao","mi zha","wen du","kai","guan"};
  23. //小米渣,現(xiàn)在溫度怎么樣,開燈,關(guān)燈,需要開燈嗎

  24. uint8_t text1[]={0xC1,0xE3,0xD2,0xBB,0xB6,0xFE,0xC8,0xFD,0xCB,0xC4,0xCE,0xE5,0xC1,0xF9,0xC6,0xDF,0xB0,0xCB,0xBE,0xC5,0xCA,0xAE};//零一二三四五六七八九十
  25. uint8_t text2[]={0xC4,0xFA,0xBA,0xC3};// 您好
  26. uint8_t text3[]={0xB5,0xB1,0xC7,0xB0,0xCE,0xC2,0xB6,0xC8,0xCE,0xAA};//當(dāng)前溫度為
  27. uint8_t text4[]={0xCA,0xAA,0xB6,0xC8,0xCE,0xAA,0xB0,0xD9,0xB7,0xD6,0xD6,0xAE};//濕度為百分之
  28. uint8_t text5[]={0xC9,0xE3,0xCA,0xCF,0xB6,0xC8};//攝氏度
  29. uint8_t text6[]="soundn";//報(bào)警音
  30. uint8_t text7[]={0xC7,0xEB,0xD7,0xA2,0xD2,0xE2,0xA3,0xAC,0xD3,0xD0,0xCE,0xA3,0xCF,0xD5,0xC6,0xF8,0xCC,0xE5,0xD0,0xB9,0xC2,0xA9};//請(qǐng)注意,有危險(xiǎn)氣體泄漏
  31. uint8_t text8[]={0xD5,0xFD,0xD4,0xDA,0xBF,0xAA,0xB5,0xC6};//正在開燈
  32. uint8_t text9[]={0xD5,0xFD,0xD4,0xDA,0xB9,0xD8,0xB5,0xC6};//正在關(guān)燈
  33. uint8_t text10[]={0xC7,0xEB,0xCE,0xCA,0xC4,0xE3,0xD4,0xDA,0xCB,0xB5,0xCA,0xB2,0xC3,0xB4,0xA3,0xBF};//請(qǐng)問(wèn)你在說(shuō)什么?
  34. uint8_t text11[]={0xB9,0xE2,0xCF,0xDF,0xB2,0xBB,0xD7,0xE3,0x20,0xA3,0xAC,0xD5,0xFD,0xD4,0xDA,0xBF,0xAA,0xB5,0xC6};//光線不足,正在開燈
  35. uint8_t text12[]={0xCF,0xD6,0xD4,0xDA,0xB9,0xE2,0xCF,0xDF,0xC3,0xF7,0xC1,0xC1,0xA3,0xAC,0xB2,0xBB,0xD0,0xE8,0xD2,0xAA,0xBF,0xAA,0xB5,0xC6};//光線明亮,不需要開燈

  36. uint8_t text[2];
  37. uint8_t flag;   //標(biāo)志位,收到小米渣口令后將置為1,動(dòng)作執(zhí)行完后清零

  38. void finally(uint8_t n) //n為sRecog數(shù)組中對(duì)應(yīng)關(guān)鍵詞的序列號(hào)
  39. {
  40.     switch(n)
  41.     {
  42.         case 0: syn.play(text2,sizeof(text2),0);flag=1;break;   // 您好
  43.         case 1:             //現(xiàn)在溫度怎么樣
  44.              if(flag==1)    //收到小米渣的出發(fā)命令后
  45.              {
  46.                     flag=0;
  47.                     DHT.read(DHT11_PIN);    //讀取溫度
  48.                     /*Serial.print("Temperature:");
  49.                     Serial.print(DHT.temperature);
  50.                     Serial.print("   humidity:");
  51.                     Serial.println(DHT.humidity);*/
  52.                     uint8_t pig1 = DHT.temperature/10;  //溫度數(shù)值十位
  53.                     uint8_t pig2 = DHT.temperature%10;  //溫度數(shù)值個(gè)位
  54.                     uint8_t pig3 = DHT.humidity/10;     //濕度數(shù)值十位
  55.                     uint8_t pig4 = DHT.humidity%10;     //濕度數(shù)值個(gè)位
  56.                     syn.play(text3,sizeof(text3),0);    //當(dāng)前溫度為      
  57.                     if(pig1>0){
  58.                     text[0]=text1[pig1*2];
  59.                     text[1]=text1[pig1*2+1];
  60.                     syn.play(text,sizeof(text),0);      //播放溫度數(shù)值十位
  61.                     text[0]=text1[20];
  62.                     text[1]=text1[21];
  63.                     syn.play(text,sizeof(text),0);      //播放語(yǔ)音十
  64.                     }
  65.                     if(pig2>0){
  66.                     text[0]=text1[pig2*2];
  67.                     text[1]=text1[pig2*2+1];
  68.                     syn.play(text,sizeof(text),0);      //播放溫度數(shù)值個(gè)位  
  69.                     }                  
  70.                     syn.play(text5,sizeof(text5),0);    //播放攝氏度
  71.                     syn.play(text4,sizeof(text4),0);    //播放濕度為百分之
  72.                     
  73.                     if(pig3>0){
  74.                     text[0]=text1[pig3*2];
  75.                     text[1]=text1[pig3*2+1];
  76.                     syn.play(text,sizeof(text),0);  //播放濕度數(shù)值十位
  77.                     text[0]=text1[20];
  78.                     text[1]=text1[21];
  79.                     syn.play(text,sizeof(text),0); //播放語(yǔ)音十
  80.                     }
  81.                     if(pig4>0){
  82.                     text[0]=text1[pig4*2];
  83.                     text[1]=text1[pig4*2+1];
  84.                     syn.play(text,sizeof(text),0);  //播放濕度數(shù)值個(gè)位  
  85.                     }                  
  86.              }
  87.             break;
  88.         case 2: //開燈
  89.              if(flag==1)
  90.              {
  91.                syn.play(text8,sizeof(text8),0); //播放正在開燈
  92.                digitalWrite(relay,HIGH);    //高電平驅(qū)動(dòng)
  93.                flag=0;  
  94.              }
  95.             break;  
  96.         case 3: //關(guān)燈
  97.            if(flag==1)
  98.            {
  99.                 syn.play(text9,sizeof(text9),0); //播放正在關(guān)燈
  100.                 digitalWrite(relay,LOW);
  101.                 flag=0;
  102.             }
  103.             break;
  104.         case 4: //需要開燈嗎?
  105.             if(flag==1)
  106.              {
  107.                 int shine=analogRead(light_sensor_pin); //讀取光照度模擬量
  108.                 //Serial.print("Light:");
  109.                 //Serial.println(shine);
  110.                 if(shine < light_threshold)  //小于光照度閥值時(shí)
  111.                 {
  112.                     syn.play(text11,sizeof(text11),0); //光線不足,正在開燈
  113.                     digitalWrite(relay,HIGH);
  114.                 }
  115.                 else
  116.                 {
  117.                     syn.play(text12,sizeof(text12),0); //光線明亮,不需要開燈
  118.                     digitalWrite(relay,LOW);
  119.                 }
  120.                 flag=0;
  121.              }
  122.             break;
  123.         default:syn.play(text10,sizeof(text10),0);break;  //非正常命令,請(qǐng)問(wèn)你在說(shuō)什么     
  124.     }
  125. }

  126. void ExtInt0Handler ()
  127. {
  128.   Voice.ProcessInt0();  //芯片送出中斷信號(hào)
  129.                
  130. }
  131. void timerIsr()
  132. {
  133.   wdt_reset();
  134. }
  135. void setup()
  136. {
  137.   Serial.begin(9600);
  138.   Voice.Initialise(MIC,VoiceRecognitionV1);//Initialise mode MIC or MONO,default is MIC
  139.                                            //VoiceRecognitionV1 is VoiceRecognitionV1.0 shield
  140.                                            //VoiceRecognitionV2 is VoiceRecognitionV2.1 module  
  141.   attachInterrupt(0,ExtInt0Handler,LOW);

  142.   pinMode(relay,OUTPUT);
  143.   digitalWrite(relay,LOW);
  144.   pinMode(state_led,OUTPUT);
  145.   digitalWrite(state_led,LOW);
  146.   Timer1.initialize(90000);
  147.   Timer1.attachInterrupt(timerIsr); // attach the service routine here
  148.   wdt_enable(WDTO_120MS);
  149. }
  150. void loop()
  151. {  
  152.     static uint8_t nAsrRes=0;
  153.     static unsigned long time = millis();
  154.     if(millis()-time>100)
  155.     {  
  156.        int gas=analogRead(gas_sensor_pin);
  157.        if(gas > gas_threshold)
  158.        {
  159.             syn.play(text6,sizeof(text6),0);
  160.             syn.play(text7,sizeof(text7),0);
  161.        }
  162.         switch(nAsrStatus)
  163.         {
  164.             case LD_ASR_RUNING:
  165.             case LD_ASR_ERROR:break;
  166.             case LD_ASR_NONE:
  167.             {
  168.                 nAsrStatus=LD_ASR_RUNING;
  169.                 if (Voice.RunASR(SUM,30,sRecog)==0) //識(shí)別不正確
  170.                 {
  171.                     nAsrStatus= LD_ASR_ERROR;
  172.                     Serial.println( "ASR_ERROR");
  173.                 }

  174.                 Serial.println( "ASR_RUNING.....");
  175.                 digitalWrite(state_led,HIGH);
  176.                 break;
  177.             }
  178.             case LD_ASR_FOUNDOK:
  179.             {
  180.                 digitalWrite(state_led,LOW);
  181.                 nAsrRes =Voice. LD_GetResult();//   一次ASR識(shí)別流程結(jié)束,去取ASR識(shí)別結(jié)果              
  182.                 finally(nAsrRes);
  183.                 nAsrStatus = LD_ASR_NONE;
  184.                 break;
  185.             }
  186.             case LD_ASR_FOUNDZERO:
  187.             default:
  188.             {   
  189.                 digitalWrite(state_led,LOW);
  190.                 nAsrStatus = LD_ASR_NONE;
  191.                 break;
  192.             }
  193.         }// switch

  194.     }//if
  195. }
復(fù)制代碼


基于Arduino的智能家居語(yǔ)音識(shí)別系統(tǒng)設(shè)計(jì).docx

687.28 KB, 下載次數(shù): 33, 下載積分: 黑幣 -5

Voice RecognitionV1.0使用手冊(cè).zip

353.76 KB, 下載次數(shù): 18, 下載積分: 黑幣 -5

SYN6288模塊資料.zip

521.3 KB, 下載次數(shù): 18, 下載積分: 黑幣 -5

Smart_home(源代碼).zip

10.23 KB, 下載次數(shù): 18, 下載積分: 黑幣 -5

Arduino智能家居初級(jí)套件使用說(shuō)明.doc

175 KB, 下載次數(shù): 20, 下載積分: 黑幣 -5

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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产91在线 | 欧美 | 91在线免费观看网站 | 国产欧美精品一区二区 | 国产精品美女久久久久aⅴ国产馆 | 精品国产欧美一区二区三区成人 | 精品久久久久久亚洲精品 | 欧美亚洲在线视频 | 亚洲毛片在线 | 免费大黄视频 | 亚洲欧美日韩在线 | 国产一区二区三区色淫影院 | 激情欧美日韩一区二区 | 91社区在线高清 | 中文字幕亚洲专区 | 黄色一级大片在线免费看产 | 成人免费视频一区 | 久久亚洲精品国产精品紫薇 | 日日日干干干 | 视频一区二区中文字幕 | 成人三级视频在线观看 | 欧美激情久久久 | 99久久免费精品国产男女高不卡 | 皇色视频在线 | 国产精品久久久久久亚洲调教 | 亚洲精品免费视频 | 亚洲精品久久久久avwww潮水 | 欧美成人在线网站 | 999国产视频 | 99热国产在线播放 | 日韩欧美在线免费观看 | 久久久久国产精品一区二区 | 日韩久久久久久 | 亚洲免费一区二区 | 久久综合久| 国产精品久久久久无码av | 国产在线97 | 美女久久久久 | 国产精品毛片 | 久久久亚洲 | 国产在线第一页 | 欧美日韩综合视频 |