Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 伊人网综合在线,精品一区二区三区影片,亚洲一区二区久久

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          開源的硬件和軟件平臺(tái)-Arduino

          開源的硬件和軟件平臺(tái)-Arduino

          rduino是一種開源的硬件和軟件平臺(tái),用于制作各種創(chuàng)意和交互式項(xiàng)目。Arduino的核心是一塊帶有微控制器的電路板,可以通過編程來控制各種傳感器和執(zhí)行器,實(shí)現(xiàn)各種功能。Arduino還提供了一個(gè)集成開發(fā)環(huán)境(IDE),可以用來編寫和上傳代碼到電路板上。

          Arduino的特點(diǎn)有以下幾個(gè):

          -易于使用:Arduino的電路板和軟件都設(shè)計(jì)得非常簡(jiǎn)單易用,適合初學(xué)者和專家。Arduino的電路板可以通過USB或者電池來供電,不需要其他復(fù)雜的外設(shè)。Arduino的軟件可以在Windows、Mac OS X和Linux等操作系統(tǒng)上運(yùn)行,提供了豐富的庫(kù)和示例代碼,方便用戶快速入門和開發(fā)。

          - 開源:Arduino的硬件和軟件都是開源的,用戶可以自由地修改和定制。Arduino的硬件設(shè)計(jì)文件和軟件源代碼都可以在官網(wǎng)或者GitHub上下載,用戶可以根據(jù)自己的需要來改進(jìn)或者擴(kuò)展。

          - 多樣:Arduino有很多種不同的電路板,適應(yīng)不同的應(yīng)用場(chǎng)景和需求。例如,有些電路板體積小巧,適合便攜式項(xiàng)目;有些電路板功能強(qiáng)大,適合復(fù)雜項(xiàng)目;有些電路板支持無線通信,適合物聯(lián)網(wǎng)項(xiàng)目等等。Arduino還有很多種兼容或者衍生的電路板,由其他廠商或者社區(qū)提供12。

          - 靈活:Arduino可以與各種傳感器、執(zhí)行器、顯示器、模塊等外部設(shè)備相連,實(shí)現(xiàn)各種功能。Arduino還可以與其他平臺(tái)或者技術(shù)相結(jié)合,例如Python、JavaScript、MicroPython、人工智能等,實(shí)現(xiàn)更加智能化和創(chuàng)新的應(yīng)用12。

          Arduino的應(yīng)用領(lǐng)域非常廣泛:

          - 教育:Arduino可以用于教授編程、電子、機(jī)器人等方面的知識(shí)和技能,激發(fā)學(xué)生的興趣和創(chuàng)造力。Arduino還可以用于制作各種教育用的項(xiàng)目,例如科學(xué)實(shí)驗(yàn)、游戲、藝術(shù)等。

          - 藝術(shù):Arduino可以用于制作各種藝術(shù)作品,例如互動(dòng)裝置、燈光雕塑、音樂樂器等。Arduino還可以用于制作各種表演用的道具,例如服裝、面具、道具等。

          - 娛樂:Arduino可以用于制作各種娛樂用的項(xiàng)目,例如玩具、游戲機(jī)、無人機(jī)等。Arduino還可以用于制作各種個(gè)性化的項(xiàng)目,例如時(shí)鐘、燈具、首飾等。

          - 生活:Arduino可以用于制作各種生活用的項(xiàng)目,例如智能家居設(shè)備、安防系統(tǒng)、健康監(jiān)測(cè)設(shè)備等。Arduino還可以用于制作各種實(shí)用的項(xiàng)目,例如溫度計(jì)、濕度計(jì)、遙控器等。

          - 工業(yè):Arduino可以用于制作各種工業(yè)用的項(xiàng)目,例如工廠自動(dòng)化系統(tǒng)、倉(cāng)儲(chǔ)管理系統(tǒng)、物流管理系統(tǒng)等。Arduino還可以用于制作各種測(cè)試和測(cè)量用的項(xiàng)目,例如示波器、電源、數(shù)字萬(wàn)用表等。


          序一

          這里我們使用Arduino Ethernet建立一個(gè)簡(jiǎn)單網(wǎng)頁(yè)服務(wù)器,當(dāng)Arduino服務(wù)器接收到瀏覽器訪問請(qǐng)求時(shí),即會(huì)發(fā)送響應(yīng)消息,瀏覽器接收到響應(yīng)消息,會(huì)將其中包含的HTML文本轉(zhuǎn)換為網(wǎng)頁(yè)顯示出來。
          這樣就可以將傳感器獲取到的信息顯示到網(wǎng)頁(yè)上,每個(gè)在該網(wǎng)絡(luò)范圍內(nèi)的計(jì)算機(jī)或其他移動(dòng)設(shè)備,無論什么平臺(tái)都可以通過網(wǎng)頁(yè)瀏覽器了解到各傳感器的數(shù)據(jù)。

          /*
          OpenJumper WebServer Example
          建立一個(gè)顯示傳感器信息的Arduino服務(wù)器
          http://www.openjumper.com/]http://www.openjumper.com/
          http://x.openjumper.com/ethernet/]http://x.openjumper.com/ethernet/
          */
          #include <SPI.h>
          #include <Ethernet.h>
          // 設(shè)定MAC地址、IP地址
          // IP地址需要參考你的本地網(wǎng)絡(luò)設(shè)置
          byte mac[]={
          0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
          IPAddress ip(192,168,1,177);
          // 初始化Ethernet庫(kù)
          // HTTP默認(rèn)端口為80
          EthernetServer server(80);
          void setup() {
          // 初始化串口通信
          Serial.begin(9600);
          // 開始ethernet連接,并作為服務(wù)器初始化
          Ethernet.begin(mac, ip);
          server.begin();
          Serial.print("server is at ");
          Serial.println(Ethernet.localIP());
          }
          void loop() {
          // 監(jiān)聽客戶端傳來的數(shù)據(jù)
          EthernetClient client=server.available();
          if (client) {
          Serial.println("new client");
          // 一個(gè)Http請(qǐng)求結(jié)尾必須帶有回車換行
          boolean currentLineIsBlank=true;
          while (client.connected()) {
          if (client.available()) {
          char c=client.read();
          Serial.write(c);
          // 如果收到空白行,說明http請(qǐng)求結(jié)束,并發(fā)送響應(yīng)消息
          if (c=='\n' && currentLineIsBlank) {
          // 發(fā)送標(biāo)準(zhǔn)的HTTP響應(yīng)
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // 添加一個(gè)meta刷新標(biāo)簽, 瀏覽器會(huì)每5秒刷新一次
          // 如果此處刷新頻率設(shè)置過高,可能會(huì)出現(xiàn)網(wǎng)頁(yè)的卡死的狀況
          client.println("<meta http-equiv=\"refresh\" content=\"5\">");
          // 輸出每個(gè)模擬口讀到的值
          for (int analogChannel=0; analogChannel < 6; analogChannel++) {
          int sensorReading=analogRead(analogChannel);
          client.print("analog input ");
          client.print(analogChannel);
          client.print(" is ");
          client.print(sensorReading);
          client.println("<br />");
          }
          client.println("</html>");
          break;
          }
          if (c=='\n') {
          // 已經(jīng)開始一個(gè)新行
          currentLineIsBlank=true;
          }
          else if (c !='\r') {
          // 在當(dāng)前行已經(jīng)得到一個(gè)字符
          currentLineIsBlank=false;
          }
          }
          }
          // 等待瀏覽器接收數(shù)據(jù)
          delay(1);
          // 斷開連接
          client.stop();
          Serial.println("client disonnected");
          }
          }

          下載程序后,通過瀏覽器,訪問Arduino Ethernet所在的IP地址(如程序中設(shè)定的IP地址為192.168.1.177),即可看到網(wǎng)頁(yè)了。

          在網(wǎng)頁(yè)中顯示了A0至A5所讀出的模擬值,你也可以通過修改以上程序,顯示其他類型的數(shù)據(jù)。

          以上程序修改自Arduino IDE自帶的Web Server例程,它是通過不斷刷新網(wǎng)頁(yè)來獲取Arduino反饋來完成的。實(shí)際上,在當(dāng)今web開發(fā)上,我們幾乎都是通過ajax不刷新網(wǎng)頁(yè),來與服務(wù)器通信的。這里我寫了一個(gè)ajax+arduino web server的示例。

          程序二

          要制作這個(gè)項(xiàng)目,首先我們需要準(zhǔn)備一個(gè)網(wǎng)頁(yè)。


          該網(wǎng)頁(yè)HTML部分如下:

          <!--例程網(wǎng)頁(yè)控制Arduino -->
          <!--奈何col  2014.12.24 v3.0 -->
          <!--學(xué)了半小時(shí)js,求別吐槽 -->
          <html>
          <head>
          <meta charset="UTF-8">
          <title>OpenJumper!Arduino Web Server</title>
          <script type="text/javascript">
          function send2arduino(){
                  var xmlhttp;
                  if (window.XMLHttpRequest)
                  {// code for IE7+, Firefox, Chrome, Opera, Safari
                          xmlhttp=new XMLHttpRequest();
                  }
                  else
                  {// code for IE6, IE5
                          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                  }
            
                  element=document.getElementById("light");
                  if (element.innerHTML.match("Turn on"))
                    { 
                            element.innerHTML="Turn off"; 
                            xmlhttp.open("GET","?on",true);
                    }
                  else
                    { 
                            element.innerHTML="Turn on";
                            xmlhttp.open("GET","?off",true); 
                    }
                  xmlhttp.send();        
          }
          function getBrightness(){
                  var xmlhttp;
                  if (window.XMLHttpRequest)
                  {// code for IE7+, Firefox, Chrome, Opera, Safari
                          xmlhttp=new XMLHttpRequest();
                  }
                  else
                  {// code for IE6, IE5
                          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                  }
                  xmlhttp.onreadystatechange=function()
              {
                      if (xmlhttp.readyState==4 && xmlhttp.status==200)
                      {
                              document.getElementById("brightness").innerHTML=xmlhttp.responseText;
                      }
              }
                  xmlhttp.open("GET","?getBrightness",true); 
                  xmlhttp.send();        
          }
          window.setInterval(getBrightness,5000); 
          </script>
          </head>
          <body>
          <div align="center">
          <h1>Arduino Web Server</h1>
          <div>brightness:</div>
          <div id="brightness">??</div>
          <button id="light" type="button">Turn on</button>
          <button type="button">About</button>
          </div>
          </body>
          </html>

          在該網(wǎng)頁(yè)中,第一個(gè)id為light的button標(biāo)簽,用于控制開關(guān)燈。點(diǎn)擊后,會(huì)調(diào)用send2arduino()函數(shù),瀏覽器會(huì)以AJAX的方式向Arduino服務(wù)器發(fā)送含有”?on”或”?off”的GET請(qǐng)求。Arduino服務(wù)器通過判斷請(qǐng)求中的內(nèi)容,做出開關(guān)燈動(dòng)作。
          而getBrightness()函數(shù)通過一個(gè)定時(shí)操作,每秒鐘運(yùn)行一次,每次都以AJAX的方式向Arduino服務(wù)器發(fā)送含有”?getBrightness”的GET請(qǐng)求,Arduino接收到該請(qǐng)求后,就會(huì)讀取傳感器數(shù)據(jù)并返回給瀏覽器。同時(shí)getBrightness()函數(shù)會(huì)將id為brightness的div標(biāo)簽中的內(nèi)容更新為返回的數(shù)據(jù)。

          此外我們將A0引腳連接光敏模塊,用于采集室內(nèi)光線;D2引腳連接LED模塊。
          示例程序代碼如下:

          /*
          OpenJumper WebServer Example
          http://www.openjumper.com/ethernet/]http://www.openjumper.com/ethernet/
            
          顯示室內(nèi)照度+開關(guān)燈控制
          通過手機(jī)、平板、計(jì)算機(jī)等設(shè)備訪問
          Arduino Server,就看到當(dāng)前室內(nèi)光線照度
          在A0引腳連接光敏模塊,用于采集室內(nèi)光線;在2號(hào)引腳連接LED模塊。
            
          奈何col 2014.12.25
          */
            
          #include <SPI.h>
          #include <Ethernet.h>
            
          byte mac[]={ 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
          IPAddress ip(192,168,1,177);
          EthernetServer server(80);
          EthernetClient client;
          String readString=""; 
          int Light=2;
          int Sensor=A0;
            
          void setup() {
            Serial.begin(9600);
            //初始化Ethernet通信
            Ethernet.begin(mac, ip);
            server.begin();
            pinMode(Light,OUTPUT);
            Serial.print("Server is at ");
            Serial.println(Ethernet.localIP());
          }
            
          void loop() {
            // 監(jiān)聽連入的客戶端
            client=server.available();
            if (client) {
              Serial.println("new client");
              boolean currentLineIsBlank=false;
              while (client.connected()) {
                if (client.available()) {
                  char c=client.read();
                  readString +=c;
                  if (c=='\n') {
                    Serial.println(readString);
                    //檢查收到的信息中是否有”on”,有則開燈
                    if(readString.indexOf("?on") >0) {
                      digitalWrite(Light, HIGH);
                      Serial.println("Led On");
                      break;
                    }
                    //檢查收到的信息中是否有”off”,有則關(guān)燈
                    if(readString.indexOf("?off") >0) {
                      digitalWrite(Light, LOW);
                      Serial.println("Led Off");
                      break;
                    }
                    //檢查收到的信息中是否有”getBrightness”,有則讀取光敏模擬值,并返回給瀏覽器
                    if(readString.indexOf("?getBrightness") >0) {
                      client.println(analogRead(Sensor));
                      break;
                    }
                    //發(fā)送HTML文本
                    SendHTML();
                    break;
                  }        
                }
              }
              delay(1);
              client.stop();
              Serial.println("client disonnected");
              readString=""; 
            }
          }
            
          // 用于輸出HTML文本的函數(shù)
          void SendHTML()
          {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html");
            client.println("Connection: close");
            client.println();
            client.println("<!DOCTYPE HTML>");
            client.println("<html><head><meta charset=\"UTF-8\"><title>OpenJumper!Arduino Web Server</title><script type=\"text/javascript\">");
            client.println("function send2arduino(){var xmlhttp;if (window.XMLHttpRequest)xmlhttp=new XMLHttpRequest();else xmlhttp=new ActiveXObject(\"Microsoft.XMLHTTP\");element=document.getElementById(\"light\");if (element.innerHTML.match(\"Turn on\")){element.innerHTML=\"Turn off\"; xmlhttp.open(\"GET\",\"?on\",true);}else{ element.innerHTML=\"Turn on\";xmlhttp.open(\"GET\",\"?off\",true); }xmlhttp.send();}");
            client.println("function getBrightness(){var xmlhttp;if (window.XMLHttpRequest)xmlhttp=new XMLHttpRequest();else xmlhttp=new ActiveXObject(\"Microsoft.XMLHTTP\");xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4 && xmlhttp.status==200)document.getElementById(\"brightness\").innerHTML=xmlhttp.responseText;};xmlhttp.open(\"GET\",\"?getBrightness\",true); xmlhttp.send();}window.setInterval(getBrightness,1000);</script>");
            client.println("</head><body><div align=\"center\"><h1>Arduino Web Server</h1><div>brightness:</div><div id=\"brightness\">");  
            client.println(analogRead(Sensor));
            client.println("</div><button id=\"light\" type=\"button\" onclick=\"send2arduino()\">Turn on</button><button type=\"button\" onclick=\"alert('OpenJumper Web Server')\">About</button></div></body></html>");
          }

          下載程序,并將你的Arduino接入到局域網(wǎng)中。現(xiàn)在你就可以通過瀏覽器訪問你的Arduino了。頁(yè)面的中的亮度數(shù)據(jù),每秒回更新一次,還可以通過“Turn on”、“Turn off”按鈕控制LED的開關(guān)。

          需要注意的是Arduino本身的存儲(chǔ)空間有限,存放和輸出網(wǎng)頁(yè)信息會(huì)消耗掉很多空間,因此在以上示例程序中,盡量將client.println()輸出的文本行數(shù)減少,可以節(jié)省一定的存儲(chǔ)空間。
          在Arduino Ethernet控制器及擴(kuò)展板上通常都帶有SD卡槽,也可以嘗試將網(wǎng)頁(yè)數(shù)據(jù)放置在SD卡上,然后分段讀取,并通過Ethernet輸出,從而達(dá)到節(jié)省存儲(chǔ)空間的目的。

          : 通過對(duì)Arduino開發(fā)板的研究,將聲控技術(shù)引入到智能系統(tǒng)的設(shè)計(jì)當(dāng)中,實(shí)現(xiàn)了一套基于Arduino的語(yǔ)音控制系統(tǒng)。本文首先確定了各硬件模塊的選型,并在擬定了各模塊之間的通信接口后對(duì)Arduino引腳資源進(jìn)行整合、分配,搭建了系統(tǒng)的硬件平臺(tái)。在軟件設(shè)計(jì)部分,編寫了監(jiān)控程序、功能實(shí)現(xiàn)程序、中斷服務(wù)程序,最終實(shí)現(xiàn)了對(duì)機(jī)械手的語(yǔ)音控制以及語(yǔ)音播報(bào)的功能。此外,系統(tǒng)還增設(shè)了登錄口令驗(yàn)證和錯(cuò)誤識(shí)別吸收功能,從安全、效率兩個(gè)方面改進(jìn)系統(tǒng)的性能。實(shí)際應(yīng)用測(cè)試表明,在低噪或無噪條件下,該系統(tǒng)識(shí)別精度高,穩(wěn)定性好,達(dá)到了預(yù)期要求。

          0 引言

          隨著自動(dòng)化控制技術(shù)和智能化技術(shù)的飛速發(fā)展,人們開始追求輕松、有序、高效的智能化生活方式,智能家居也應(yīng)運(yùn)而生。然而,觸屏控制、鼠標(biāo)控制等傳統(tǒng)的控制方式,它們繁復(fù)的按鍵操作和菜單操作不符合智能化導(dǎo)向,并不適用于智能系統(tǒng)的設(shè)計(jì)。近年來,人們的焦點(diǎn)開始轉(zhuǎn)移到語(yǔ)音技術(shù)及其應(yīng)用上面,國(guó)內(nèi)外企業(yè)積極地拓展語(yǔ)音市場(chǎng)。智能語(yǔ)音產(chǎn)業(yè)是通過語(yǔ)音識(shí)別技術(shù)和語(yǔ)音合成技術(shù)為使用者提供各種服務(wù)的產(chǎn)業(yè)。語(yǔ)音合成技術(shù)和語(yǔ)音識(shí)別技術(shù)實(shí)現(xiàn)了簡(jiǎn)單易行的人機(jī)接口,代表了更好的用戶體驗(yàn)度,充分體現(xiàn)了人性化的產(chǎn)品設(shè)計(jì)理念[1]。本文主要采用意大利開源Arduino Uno開發(fā)板設(shè)計(jì)了一套聲控智能系統(tǒng),能完成針對(duì)非特定人、小詞匯量語(yǔ)音識(shí)別。聲控技術(shù)的引入擺脫了用雙手控制機(jī)械的模式,實(shí)現(xiàn)了真正意義上的智能,設(shè)計(jì)成果可應(yīng)用于智能家居系統(tǒng),這一研究可幫助和簡(jiǎn)化人們的生活,有助于開拓智能家居的新市場(chǎng)。

          1 語(yǔ)音識(shí)別工作原理

          語(yǔ)音識(shí)別技術(shù)是讓機(jī)器通過識(shí)別和理解過程,把人類的語(yǔ)音信號(hào)轉(zhuǎn)變?yōu)橄鄳?yīng)的文本或命令的技術(shù),屬于多維模式識(shí)別和智能計(jì)算機(jī)接口的范疇。模式匹配原理被目前大多數(shù)語(yǔ)音識(shí)別系統(tǒng)所采用,它將未知語(yǔ)音進(jìn)行特征提取并與參考模式庫(kù)中已知語(yǔ)音參考模式逐一地進(jìn)行模式匹配,其中最佳匹配的參考模式被選為識(shí)別結(jié)果[2-3]。

          當(dāng)前語(yǔ)音識(shí)別技術(shù)的主流算法,主要有基于動(dòng)態(tài)時(shí)間規(guī)整(DTW)方法、基于非參數(shù)模型矢量量化(VQ)方法、基于參數(shù)模型的隱馬爾可夫模型(HMM)方法和基于人工神經(jīng)網(wǎng)絡(luò)(ANN)等[4]。語(yǔ)音識(shí)別技術(shù)可以被劃分為特定人語(yǔ)音識(shí)別和非特定人語(yǔ)音識(shí)別,根據(jù)所針對(duì)的發(fā)音人的不同,特定人語(yǔ)音識(shí)別技術(shù)只能識(shí)別某幾個(gè)人的語(yǔ)音,后者則可用于任何人,技術(shù)實(shí)現(xiàn)相對(duì)復(fù)雜但更加符合實(shí)際需要。

          本系統(tǒng)設(shè)計(jì)選用了中文語(yǔ)音識(shí)別芯片LD3320,通過將待識(shí)別的內(nèi)容設(shè)置成關(guān)鍵詞列表,能實(shí)現(xiàn)不需要用戶事先錄音和訓(xùn)練的非特定人語(yǔ)音識(shí)別[5]。

          2 系統(tǒng)設(shè)計(jì)

          2.1 系統(tǒng)硬件平臺(tái)搭建

          本文設(shè)計(jì)的基于Arduino的語(yǔ)音識(shí)別及控制系統(tǒng),是一個(gè)建立在語(yǔ)音識(shí)別技術(shù)基礎(chǔ)上,并在Arduino核心處理器的控制下對(duì)輸入的語(yǔ)音命令做出特定輸出響應(yīng)的系統(tǒng)[6]。系統(tǒng)包括四個(gè)部分:MCU模塊、語(yǔ)音識(shí)別模塊、語(yǔ)音合成模塊、機(jī)械手模塊。語(yǔ)音識(shí)別模塊作為該系統(tǒng)的人機(jī)交互接口,用戶的語(yǔ)音命令由此輸入,其語(yǔ)音識(shí)別正確率決定了系統(tǒng)的運(yùn)行質(zhì)量;語(yǔ)音合成模塊和機(jī)械手模塊作為系統(tǒng)對(duì)外輸出部分,在MCU的控制下,做出對(duì)語(yǔ)音輸入的響應(yīng)[7-8]:語(yǔ)音合成模塊播報(bào)提示音提示系統(tǒng)當(dāng)前狀態(tài),提供了更好的用戶體驗(yàn)度,機(jī)械手模塊則進(jìn)行與命令對(duì)應(yīng)的二維抓取運(yùn)動(dòng)。圖1為系統(tǒng)硬件結(jié)構(gòu)框圖。

          2.1.1 Arduino開發(fā)板

          系統(tǒng)由源自意大利的開源、便捷靈活的開源電子原型平臺(tái)Arduino Uno作為主控系統(tǒng)。Arduino Uno提供了豐富的引腳資源,包括14個(gè)數(shù)字I/O(DIGITAL 0~13),其中6個(gè)數(shù)字口,可提供PWM輸出用于控制舵機(jī),6個(gè)模擬I/O口(ANALOG 0~5)。其簡(jiǎn)單的開發(fā)方式利于縮短開發(fā)的周期,適合用于交互產(chǎn)品開發(fā)[9-10]。

          2.1.2 語(yǔ)音識(shí)別模塊

          無線語(yǔ)音模塊選用開源硬件廠商DFRobot生產(chǎn)的中文語(yǔ)音識(shí)別板DFR0177。DFR0177與Arduino之間通過同步串行外設(shè)接口(Serial Peripheral Interface,SPI)進(jìn)行通信。模塊的核心是LD3320中文語(yǔ)音識(shí)別芯片,當(dāng)麥克風(fēng)采集到語(yǔ)音信號(hào)時(shí),LD3320發(fā)送低電平請(qǐng)求中斷,MCU執(zhí)行ASR識(shí)別流程序[11],其識(shí)別過程如圖2。

          2.1.3 語(yǔ)音合成模塊

          語(yǔ)音合成模塊使用SYN6288芯片實(shí)現(xiàn)提示音合成,芯片提供一組全雙工的異步串行通信(UART)接口實(shí)現(xiàn)與Arduino的數(shù)據(jù)傳輸。Arduino控制板將待合成語(yǔ)音的信息以命令幀的形式通過串口發(fā)送至SYN6288。芯片輸出信號(hào)經(jīng)過功率放大器和揚(yáng)聲器后完成語(yǔ)音合成[12]。

          2.1.4 機(jī)械手模塊

          機(jī)械手由兩個(gè)舵機(jī)和金屬夾持器組裝而成,每個(gè)舵機(jī)能控制機(jī)械手在一個(gè)維度上的運(yùn)動(dòng),Arduino通過綜合控制兩個(gè)舵的旋轉(zhuǎn)角度便能令機(jī)械手進(jìn)行二自由度的活動(dòng),舵機(jī)的控制由PWM信號(hào)驅(qū)動(dòng)實(shí)現(xiàn)[13-14]。由于舵機(jī)工作時(shí)可產(chǎn)生1~2 A電流,考慮到安全性和穩(wěn)定性,機(jī)械手模塊由外部5 V電源單獨(dú)供電。

          2.2 系統(tǒng)功能設(shè)計(jì)

          本文設(shè)計(jì)了一套小型智能家居系統(tǒng):基于Arduino的聲控機(jī)械手,用戶使用語(yǔ)音識(shí)別這一人機(jī)交互界面,對(duì)系統(tǒng)下達(dá)指令,機(jī)械手依據(jù)語(yǔ)音命令執(zhí)行不同的操作,同時(shí),系統(tǒng)能進(jìn)行人性化的語(yǔ)音提示,播報(bào)系統(tǒng)當(dāng)前運(yùn)行的相關(guān)信息。除了實(shí)現(xiàn)基本的聲控功能外,考慮到安全、識(shí)別正確率等因素,增加登錄口令和垃圾錯(cuò)誤吸收。

          2.2.1 登錄口令

          為了保障系統(tǒng)的安全,防止授權(quán)用戶以外人員的非法使用,須對(duì)系統(tǒng)設(shè)置相應(yīng)的使用權(quán)限,如設(shè)置一條登錄口令“芝麻開門”。任何使用者在進(jìn)入系統(tǒng)前,須對(duì)系統(tǒng)的麥克風(fēng)說出登錄口令作為觸發(fā)口令。若系統(tǒng)識(shí)別并確認(rèn)了口令的正確性,則播報(bào)歡迎使用的提示音,并等待識(shí)別用戶的操作命令;否則,則將該用戶判定為非授權(quán)用戶,進(jìn)行下一輪的登錄口令識(shí)別。

          2.2.2 吸收錯(cuò)誤識(shí)別

          語(yǔ)音識(shí)別芯片的工作原理是把關(guān)鍵詞列表中得分最高的關(guān)鍵詞作為識(shí)別結(jié)果輸出,如果用戶說的關(guān)鍵詞不在列表內(nèi)必然會(huì)引起誤識(shí)別,因此,可在設(shè)定好要識(shí)別的關(guān)鍵詞列表中再添加一些額外的詞匯用來吸收錯(cuò)誤識(shí)別,從而進(jìn)一步降低錯(cuò)誤識(shí)別率。把這些待吸收的關(guān)鍵詞語(yǔ)稱之為“垃圾關(guān)鍵詞語(yǔ)”,它的設(shè)置可以提高用戶的主觀使用體驗(yàn)。“垃圾關(guān)鍵詞語(yǔ)”最好選擇一些字?jǐn)?shù)與關(guān)鍵詞語(yǔ)相同的高頻口語(yǔ)詞,用來吸收可能發(fā)生的錯(cuò)誤識(shí)別,比如“啊”,“哦”等。

          2.3 系統(tǒng)軟件設(shè)計(jì)

          系統(tǒng)軟件設(shè)計(jì)基于Arduino IDE軟件開發(fā)環(huán)境,使用C/C++編程語(yǔ)言。Arduino有豐富的庫(kù)文件以供使用,利用庫(kù)文件簡(jiǎn)化了程序開發(fā)工作。軟件設(shè)計(jì)時(shí)把整個(gè)系統(tǒng)程序分為三個(gè)模塊:監(jiān)控主程序、中斷服務(wù)(ASR識(shí)別)子程序和功能實(shí)現(xiàn)子程序,對(duì)每個(gè)模塊分別進(jìn)行獨(dú)立設(shè)計(jì)、編程,最后將各模塊構(gòu)建一個(gè)完整的工程。

          2.3.1 主監(jiān)控程序

          監(jiān)控程序作為程序的核心,主要負(fù)責(zé)芯片的初始啟動(dòng)工作以及調(diào)度其他程序模塊,圖3為系統(tǒng)主程序流程圖。

          識(shí)別芯片在正式進(jìn)入識(shí)別流程前,必須先進(jìn)行初始化工作,包括完成軟復(fù)位、時(shí)鐘頻率設(shè)定、模式設(shè)定和激活內(nèi)部數(shù)據(jù)處理模塊,同時(shí)還須將關(guān)鍵字列表寫入LD3320芯片的內(nèi)部寄存器。這些工作均在監(jiān)控程序完成。

          若芯片啟動(dòng)失敗達(dá)到一定的次數(shù),提示啟動(dòng)失敗并無法進(jìn)行后續(xù)操作;若啟動(dòng)成功,系統(tǒng)將開始循環(huán)等待,期間如有用戶下達(dá)語(yǔ)音命令,則進(jìn)入中斷并執(zhí)行中斷服務(wù)程序。監(jiān)控程序依據(jù)中斷服務(wù)程序的執(zhí)行結(jié)果判斷是否調(diào)度功能實(shí)現(xiàn)程序。

          2.3.2 中斷服務(wù)程序

          中斷服務(wù)程序在麥克風(fēng)采集信號(hào)產(chǎn)生低電平中斷后執(zhí)行,主要實(shí)現(xiàn)一次ASR識(shí)別流,可調(diào)用LD3320庫(kù)文件實(shí)現(xiàn)相關(guān)寄存器操作。最后將該統(tǒng)計(jì)學(xué)意義上最優(yōu)的關(guān)鍵字作為最終識(shí)別結(jié)果輸出,中斷程序執(zhí)行完后,回到中斷點(diǎn),繼續(xù)執(zhí)行監(jiān)控程序[15]。

          2.3.3 功能實(shí)現(xiàn)程序

          功能實(shí)現(xiàn)程序用于完成一些實(shí)質(zhì)性的功能,即在語(yǔ)音識(shí)別成功后控制舵機(jī)轉(zhuǎn)動(dòng)和語(yǔ)音播報(bào)。在中斷服務(wù)程序得到正確的識(shí)別結(jié)果后,監(jiān)控程序?qū)?huì)調(diào)用功能實(shí)現(xiàn)程序。功能實(shí)現(xiàn)程序的主體是基于switch選擇語(yǔ)句,程序依據(jù)語(yǔ)音識(shí)別結(jié)果,執(zhí)行不同的程序段,如發(fā)送PWM信號(hào)控制舵機(jī)轉(zhuǎn)向以實(shí)現(xiàn)機(jī)械手左右轉(zhuǎn)、張開、夾持動(dòng)作,或向SYN6288發(fā)送帶合成文字的GB2312編碼。若識(shí)別的是垃圾關(guān)鍵詞,系統(tǒng)將執(zhí)行程序預(yù)設(shè)的default缺省操作。

          3 實(shí)驗(yàn)結(jié)果及分析

          搭建硬件平臺(tái)并將編寫的聲控程序編譯、燒寫至開發(fā)板。對(duì)系統(tǒng)進(jìn)行聲控測(cè)試:進(jìn)入系統(tǒng)前,若對(duì)系統(tǒng)的麥克風(fēng)正確說出預(yù)先設(shè)置的登錄口令,如“芝麻開門”,系統(tǒng)識(shí)別并確認(rèn)了口令后播報(bào)“歡迎使用智能聲控系統(tǒng)”的提示音,并等待識(shí)別用戶后續(xù)的操作命令;如果給出錯(cuò)誤的登錄口令,系統(tǒng)將繼續(xù)等待口令而不被觸發(fā)。進(jìn)入系統(tǒng)后,對(duì)系統(tǒng)分別使用“左轉(zhuǎn)”、“右轉(zhuǎn)”、“張開”、“夾持”、“復(fù)位”等語(yǔ)音命令進(jìn)行多次測(cè)試,系統(tǒng)的識(shí)別率接近90%,各硬件模塊在Arduino程序的控制下協(xié)同工作,其中機(jī)械手和語(yǔ)音合成模塊作為系統(tǒng)的輸出模塊,也做出了預(yù)期的響應(yīng),實(shí)現(xiàn)了對(duì)機(jī)械手的控制以及語(yǔ)音播報(bào)的功能。

          測(cè)試表明,該系統(tǒng)在無噪或低噪環(huán)境下運(yùn)行良好,識(shí)別精度較高,能實(shí)現(xiàn)智能聲控的要求。

          4 結(jié)論

          本文主要對(duì)基于Arduino的智能語(yǔ)音控制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)進(jìn)行闡述。系統(tǒng)的設(shè)計(jì)工作主要包括系統(tǒng)硬件平臺(tái)搭建以及依據(jù)功能對(duì)程序結(jié)構(gòu)進(jìn)行制定,編寫了監(jiān)控程序、中斷服務(wù)程序、功能實(shí)現(xiàn)程序。最后經(jīng)過測(cè)試,該系統(tǒng)運(yùn)行狀況良好。

          在本次設(shè)計(jì)中,除了實(shí)現(xiàn)基本的智能聲控功能外,還從安全、效率、器材選型三個(gè)方面做出創(chuàng)新,提高了系統(tǒng)的性能:(1)考慮到安全因素增設(shè)了觸發(fā)口令;(2)設(shè)計(jì)垃圾關(guān)鍵詞語(yǔ)達(dá)到降低誤識(shí)別率的目的;(3)設(shè)計(jì)選用了當(dāng)前熱門的Arduino開放源代碼平臺(tái)作為系統(tǒng)的核心,Arduino以其開放性、易用性、豐富的第三方資源等優(yōu)勢(shì)得到了廣泛注目。同時(shí),本聲控系統(tǒng)不需要用戶事先訓(xùn)練和錄音,屬于可被任何人使用的非特定人語(yǔ)音識(shí)別系統(tǒng),更加符合實(shí)際需要。

          本智能聲控系統(tǒng)具有體積小、功耗低和通用性好的特點(diǎn),可應(yīng)用于智能家居系統(tǒng)的設(shè)計(jì),引入聲控作為人機(jī)交互界面方便了用戶的使用,實(shí)現(xiàn)了真正意義上的智能,具有一定的實(shí)用價(jià)值。

          參考文獻(xiàn)

          [1] 劉露.智能語(yǔ)音時(shí)代來臨[J].課外語(yǔ)文,2014(5):11-12,17.

          [2] 詹新明,黃南山,楊燦.語(yǔ)音識(shí)別技術(shù)研究進(jìn)展[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),2008(9):43-45.

          [3] 王敏妲.語(yǔ)音識(shí)別技術(shù)的研究與發(fā)展[J].微型機(jī)與應(yīng)用,2009,28(23):1-2,6.

          [4] 馬志欣,王宏,李鑫.語(yǔ)音識(shí)別技術(shù)綜述[J].昌吉學(xué)院學(xué)報(bào),2006(3):93-97.

          [5] 洪家平.LD3320的嵌入式語(yǔ)音識(shí)別系統(tǒng)的應(yīng)用[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2012,12(2):47-53.

          [6] 楊繼志,郭敬.Arduino的互動(dòng)產(chǎn)品平臺(tái)創(chuàng)新設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2012,12(4):39-41.

          [7] 程晨.Arduino開發(fā)實(shí)戰(zhàn)指南[M].北京:機(jī)械工業(yè)出版社,2012.

          [8] 孫俊榮,吳明展,盧聰勇.Arduino一試就上手[M].北京:科學(xué)出版社,2012.

          [9] ICRouter.LD332x數(shù)據(jù)手冊(cè)[EB/OL].(2010-10-11)[2015-04-02]http://www.icroute.com/web_cn/DownLoad.html#LD332X-DataSheet.

          [10] 語(yǔ)音天下.SYN6288中文語(yǔ)音合成芯片數(shù)據(jù)手冊(cè)[EB/OL].(2011-09-06)[2015-04-27]http://www.tts168.com.cn/bao/SYN6288--Manual.pdf.

          [11] 蔡睿妍.基于Arduino的舵機(jī)控制系統(tǒng)設(shè)計(jì)[J].電腦知識(shí)與技術(shù),2012,8(15):3719-3721.

          [12] 孫兵.基于單片機(jī)的機(jī)械手聲控系統(tǒng)設(shè)計(jì)[J].機(jī)械工程與自動(dòng)化,2007(6):113-114,117.

          [13] ADRIANSYAH A, DANI A W. Design of small smart home system based on Arduino[J]. Electrical Power, Electronics, Communications, Controls and Informatics Seminar (EECCIS), 2014(10):121-125.

          [14] KANG B, LIU F, YUN Z, et al. Design of an Internet of Things-based smart home system[C]. Harbin: Lligent Control and Information Processing(ICICIP), 2011:921-924.

          [15] 金鑫,田犇,闕大順.基于LD3320的語(yǔ)音控制系統(tǒng)設(shè)計(jì)實(shí)現(xiàn)[J].電腦與信息技術(shù),2011,19(6):22-25.


          主站蜘蛛池模板: 一区二区三区国模大胆| 亚洲欧洲精品一区二区三区| 美女视频免费看一区二区| 成人欧美一区二区三区在线视频 | 亚欧成人中文字幕一区| 伊人激情AV一区二区三区| 亚洲AV日韩AV天堂一区二区三区| 人妻av无码一区二区三区| 亚洲熟女少妇一区二区| 国产一区二区精品久久| 无码国产精品一区二区免费式直播 | 午夜福利一区二区三区高清视频| 中文字幕精品一区影音先锋| 日本一区二三区好的精华液| 日本中文字幕在线视频一区| 国产精品毛片VA一区二区三区| 97人妻无码一区二区精品免费| 免费在线观看一区| 无码免费一区二区三区免费播放| 国产SUV精品一区二区88| 国产一区二区三区在线观看精品| 日韩精品视频一区二区三区 | 午夜精品一区二区三区在线视| 无码人妻精品一区二区三| 午夜在线视频一区二区三区| 日产亚洲一区二区三区| 在线精品日韩一区二区三区| 亚洲国产韩国一区二区| 狠狠爱无码一区二区三区| 无码国产精成人午夜视频一区二区| 国产成人一区二区三区高清| 久久精品一区二区免费看| 国产一区二区在线观看麻豆| 一区高清大胆人体| 国产伦一区二区三区高清| 色欲AV蜜桃一区二区三| 美女一区二区三区| 一区二区三区杨幂在线观看| 日韩一区二区三区射精| 久久一区二区明星换脸| 亚洲高清偷拍一区二区三区|