陸國,白忠臣,秦水介,徐天文
(1 貴州大學(xué) 大數(shù)據(jù)與信息工程學(xué)院,貴陽 550025;2 貴州大學(xué) 貴州省光電子技術(shù)及應(yīng)用重點(diǎn)實驗室,貴陽 550025;3 貴州大學(xué) 醫(yī)學(xué)院,貴陽 550025)
人機(jī)交互[1]是語音控制普遍采用的技術(shù),具備靈活、便捷等特點(diǎn)。隨著微電子技術(shù)的飛速發(fā)展,嵌入式系統(tǒng)的研究工作也取得了顯著成效。現(xiàn)如今,將嵌入式系統(tǒng)的控制功能與語音識別技術(shù)結(jié)合,已然廣泛應(yīng)用在聲控智能小車領(lǐng)域中。目前,大多數(shù)聲控智能小車使用51 單片機(jī)、且以純硬件開發(fā)為主,51 單片機(jī)開發(fā)時往往要考慮到外圍電路等,開發(fā)速度較慢,而使用Arduino 開發(fā)只需要使用C 語言即可直接對程序進(jìn)行編寫[2]。本文以Arduino 為控制系統(tǒng),通過Android 手機(jī)終端App 對阿里云平臺[3]的實時語音數(shù)據(jù)交互,由此實現(xiàn)與智能小車的人機(jī)交互。
系統(tǒng)的整體架構(gòu)主要分為6 個部分:阿里云平臺、Android Studio、手機(jī)終端、ESP8266 WiFi 模塊、Arduino 模塊、L298N 直流電機(jī)驅(qū)動模塊。電源(2 節(jié)18650 電池),串聯(lián)分壓5 V 供應(yīng)Arduino UNO R3 開發(fā)板,整體架構(gòu)如圖1 所示。圖1中,阿里云平臺創(chuàng)建實時語音交互項目、Android Studio 代碼編寫生成與阿里云實時語音數(shù)據(jù)交互的手機(jī)終端App、ESP8266 WiFi 具備通信功能、Arduino IDE 程序驅(qū)動L298N 直流電機(jī)驅(qū)動模塊和ESP8266 WiFi 模塊配網(wǎng)、L298N 直流電機(jī)驅(qū)動模塊控制電機(jī)的轉(zhuǎn)動速度和方向、指令負(fù)責(zé)傳遞控制信息。整個系統(tǒng)的主要運(yùn)行過程是手機(jī)終端App 發(fā)送指令到阿里云平臺,同時阿里云服務(wù)器將識別數(shù)據(jù)傳遞回手機(jī)終端,手機(jī)終端App 又將識別命令傳遞給ESP8266 WiFi 模塊,通過Arduino IDE 程序控制L298N 直流電機(jī)驅(qū)動模塊來調(diào)節(jié)直流電機(jī)模塊轉(zhuǎn)動速度和方向。
圖1 Arduino 和阿里云平臺的語音控制小車整體架構(gòu)圖Fig.1 General block diagram of voice-control cars for Arduino and Ali cloud platform
Arduino 是一款便捷靈活、方便上手的開源電子原型平臺。由Banzi 等人開發(fā)于2005 年。
本設(shè)計控制器采用Arduino UNO R3 開發(fā)板和軟件(Arduino IDE),Arduino IDE 使用C 語言開發(fā)。其中,Arduino UNO R3 開發(fā)板是一款基于ATmega328P 的微控制器板。表1 為Arduino Uno R3 開發(fā)板主要配置。
表1 Arduino UNO R3 開發(fā)板主要配置Tab.1 The main configuration of the Arduino UNO R3 development board
阿里云平臺的實時語音識別技術(shù)是由ASR 實時語音識別(可將語音轉(zhuǎn)換為文字的技術(shù))服務(wù)[4]、NLU 自然語言理解(機(jī)器理解的模型)處理,當(dāng)手機(jī)終端App 與阿里云平臺實時語音交互時,通過WebSocket 協(xié)議與ASR 服務(wù)進(jìn)行實時語音數(shù)據(jù)交互。
手機(jī)終端App 與阿里云平臺的語音交互實現(xiàn)過程如下:
(1)首先進(jìn)入阿里云平臺實時語音識別中進(jìn)行項目配置,待配置完成語音識別生成項目Appkey后,就可獲取AccessToken。
(2)通過AccessToken 鑒權(quán)后,手機(jī)終端App 可與阿里云平臺的ASR 服務(wù)通過WebSocket 協(xié)議進(jìn)行連接。其中,AccessToken 具有時效性,若失效、則可至阿里云平臺重新進(jìn)行配置。
Android Studio 是谷歌在2013 年推出的一個Android 集成開發(fā)工具,使用Java 語言進(jìn)行App 編寫[5]。編寫完成后,運(yùn)行得到的手機(jī)終端App 使用界面如圖2 所示。
圖2 App 使用界面Fig.2 App usage interface
接下來,對開發(fā)流程可做闡釋分述如下:
(1)阿里云平臺云語音識別技術(shù)的Android SDK 調(diào)用:阿里云平臺Android SDK 是為智能移動終端所提供的開發(fā)端口,提供實時語音、語音合成等服務(wù)。通過Android Studio 導(dǎo)入阿里云平臺的jar包,能夠設(shè)置運(yùn)行權(quán)限,并對云語音進(jìn)行功能調(diào)用。
(2)手機(jī)終端創(chuàng)建NlsClient實例通過WebSocket 協(xié)議去連接阿里云平臺的服務(wù)器,進(jìn)行實時語音數(shù)據(jù)交互,部分代碼如下:
(3)通過URI 地址與智能小車ESP8266 WiFi模塊配置進(jìn)行數(shù)據(jù)傳輸,ESP8266 WiFi 模塊的具體連接見2.4,部分代碼如下:
(4)開始進(jìn)行錄音識別時,調(diào)用Android 系統(tǒng)android.media.AudioRecord類以及相關(guān)API 進(jìn)行語音采集,創(chuàng)建識別請求并設(shè)置參數(shù),同時建立回調(diào),在參數(shù)設(shè)置時注意對應(yīng)導(dǎo)入在阿里云平臺所生成的Appkey 和 AccessToken。識別 Appkey以及AccessToken后,使用標(biāo)點(diǎn)處理以及ITN 處理以防止不同語音任務(wù)存在干擾運(yùn)行的沖突。
(5)停止錄音時,通過前文論述的各個步驟所建立的語音識別回調(diào)類,在App 中將語音壓縮打包至阿里云平臺的ASR 服務(wù)并返回處理結(jié)果(由SpeechTranscriberWithRecorderCallback實現(xiàn)數(shù)據(jù)返回),通過識別中間結(jié)果可得到完整的文本句子,此后在手機(jī)終端App 界面進(jìn)行更新識別。得到的研發(fā)界面如圖3 所示。
圖3 更新在終端的界面識別Fig.3 Update interface recognition at the terminal
(6)語音控制部分代碼的編寫,包括前進(jìn)、后退等。部分代碼如下:
ESP8266 WiFi 通信模塊[6]作為手機(jī)終端App和Arduino UNO R3 開發(fā)板通信模塊。當(dāng)Android Studio 設(shè)計出手機(jī)終端App后,配置ESP8266 WiFi通信模塊的IP 地址與手機(jī)終端App 進(jìn)行連接,兩者便建立起通信聯(lián)系,實現(xiàn)數(shù)據(jù)的傳輸。
通過Arduino 配網(wǎng)時需要進(jìn)行以下配置:
(1)ESP8266 WiFi 模塊的GPIO 5 引腳連接到Arduino UNO R3 開發(fā)板D1引腳。
(2)選擇Serial 串口通信協(xié)議進(jìn)行Arduino 與ESP8266 WiFi 模塊間的數(shù)據(jù)傳輸。
(3)通過Arduino IDE 程序驅(qū)動ESP8266 WiFi模塊進(jìn)行配網(wǎng)連接,實現(xiàn)手機(jī)終端App 同ESP8266 WiFi 模塊的數(shù)據(jù)交換。這個過程是由路由器通過UDP 協(xié)議進(jìn)行數(shù)據(jù)傳輸,并在配對后再由路由器根據(jù)自身內(nèi)置的DHCP 服務(wù)器對手機(jī)終端App 和ESP8266 WiFi 模塊具體分配各自的IP 地址以及MAC 地址,從而實現(xiàn)數(shù)據(jù)傳輸。其中,配網(wǎng)部分的程序代碼可表述如下。
L298N 模塊是雙路H 橋電機(jī)驅(qū)動,供電范圍為+5~+35 V。聲控小車前進(jìn)、后退等功能都是由L298N 直流電機(jī)驅(qū)動模塊實現(xiàn)[7],通過Arduino IDE編程改變Arduino 輸出高、低電平控制直流電機(jī)的轉(zhuǎn)停、轉(zhuǎn)速,從而實現(xiàn)聲控小車前進(jìn)/后退,加速/減速等功能。L298N 的控制邏輯功能見表2。
表2 L298N(單端)控制邏輯功能表Tab.2 L298N(single end)control logic function table
其中,1 號和15 號兩個管腳下的晶體管分別獨(dú)自引出用以連接采樣電阻,構(gòu)成電路傳輸?shù)男盘?;OUT1、OUT2 為一組、連接直流電機(jī),OUT3、OUT4 為一組、連接直流電機(jī),控制A 使能端和控制B 使能端,從而通過改變電機(jī)的工作方式來控制聲控小車啟停、加減速功能。L298N 直流電機(jī)驅(qū)動模塊原理如圖4 所示。
圖4 L298N 原理圖Fig.4 Schematic diagram of L298N
由圖4 可知,L298N 直流電機(jī)驅(qū)動模塊的IN1、IN2、IN3、IN4 同Arduino UNO R3 開發(fā)板D4~D7進(jìn)行連接,通過改變電平的方式實現(xiàn)對智能聲控小車啟停、方向的控制。2 個使能端與D9和D10相連接,通過改變占空比的方式實現(xiàn)對電動小車加減速的控制。部分代碼的設(shè)計描述具體如下。
系統(tǒng)調(diào)試過程為:首先對阿里云平臺服務(wù)器的項目進(jìn)行配置。然后,通過Android Studio 編寫手機(jī)終端App,再對ESP8266 WiFi 模塊進(jìn)行網(wǎng)絡(luò)配置。最后,通過Arduino 程序來控制L298N 模塊直流驅(qū)動電機(jī),這樣就實現(xiàn)了語音交互的初始化。
通過整機(jī)測試,當(dāng)手機(jī)終端App 接收到指令時,將數(shù)據(jù)打包至阿里云平臺ASR 服務(wù)中進(jìn)行識別并回傳識別數(shù)據(jù),手機(jī)終端App 均可識別并顯示出相應(yīng)指令。手機(jī)終端App 和ESP8266 WiFi 模塊進(jìn)行數(shù)據(jù)交互,并將數(shù)據(jù)發(fā)送到Arduino 程序驅(qū)動L298N 模塊,控制直流電機(jī)執(zhí)行接收的指令。經(jīng)過測試,能夠識別所發(fā)出的前進(jìn)、后退等指令,且可使聲控智能小車完成相應(yīng)動作。
本設(shè)計以Arduino 模塊和Android 平臺為基礎(chǔ),實現(xiàn)對非特定語音控制電動小車前進(jìn)、后退、加速、轉(zhuǎn)彎等。通過使用阿里云平臺和手機(jī)終端App 的語音交互的研究可知,對物聯(lián)網(wǎng)開發(fā)仍然有待更進(jìn)一步的深入探究。在未來,以國內(nèi)十幾億手機(jī)終端龐大的用戶為基礎(chǔ),擬結(jié)合阿里云平臺繼續(xù)研發(fā)先進(jìn)的智能設(shè)備,例如進(jìn)行無障礙語音交流、語音用戶界面、AI 機(jī)器人等開發(fā)。本次設(shè)計只是做了簡單的物聯(lián)網(wǎng)開發(fā),但相較于傳統(tǒng)硬件開發(fā)來說,仍具有一定的靈活性和較低的開發(fā)成本等優(yōu)勢;對于物聯(lián)網(wǎng)的開發(fā)而言,也有著重要的研究意義和社會價值。