在本文中,我將在 Wio 終端上制作一個(gè)帶有內(nèi)置麥克風(fēng)的聲控機(jī)器人車,以通過 TinyML 識別行駛、停止和背景噪音。
使用由 Edge Impulse 提供支持的 Codecraft 訓(xùn)練了一個(gè)喚醒詞識別模型!
在這篇詳細(xì)的博客文章中,我將介紹以下內(nèi)容:
Wio終端和uKit之間的UART串行通信探索
1.0 使用 Codecraft 訓(xùn)練嵌入式機(jī)器學(xué)習(xí)模型
2.0 Arduino文本代碼修改
3.0 對機(jī)器人汽車進(jìn)行編程(uKit 探索 - 基于 Arduino Mega 2560)
4.0 預(yù)期結(jié)果
什么是 UART 串??行通信?
通俗地說,UART 允許嵌入式設(shè)備(例如 Arduino)通過 TX(發(fā)送)和 RX(接收)線將數(shù)據(jù)發(fā)送到另一個(gè) Arduino,如下所示。
舉一個(gè)具體的例子:
Arduino UNO 沒有內(nèi)置的 WiFi,因此不可能做 IOT 相關(guān)的項(xiàng)目。通過了解基本的 UART 串??行通信,我能夠利用ESP8266/ESP32作為 Arduino UNO 的協(xié)處理器,以便從連接到 Arduino UNO 的傳感器收集的數(shù)據(jù)將發(fā)送到 ESP8266/ESP32 發(fā)送轉(zhuǎn)移到云平臺(tái),例如 Web 服務(wù)器、Blynk 或 FAVORIOT。
Wio終端和uKit之間的UART串行通信探索
Wio 終端的 TX 和 RX 引腳在引腳 8和10上可用。
TXD - 引腳 8
RXD - 引腳 10
而對于 uKit Explore,引腳 D0 和 D1 上也有可用的 TX/RX 引腳。您可以在此處查看完整的 uKit 探索引腳排列
RX0 - D0
TX0 - D1
對于硬件連接,基本上,您只需要如下連接:
Wio 終端(引腳 8)到 uKit 探索(引腳 0) - TXD 到 RXD
Wio 終端(引腳 10)到 uKit 探索(引腳 1) - RXD 到 TXD
我將詳細(xì)解釋軟件編程如何在 3.0 Program the Robot Car(uKit Explore - Arduino Mega 2560 based)上完成。
第 1 步:使用 Codecraft 訓(xùn)練嵌入式機(jī)器學(xué)習(xí)模型
在第一部分中,我們的目標(biāo)是使用 Codecraft 平臺(tái)創(chuàng)建一個(gè)嵌入式機(jī)器學(xué)習(xí)模型(語音識別)。
使用 Codecraft 訓(xùn)練嵌入式機(jī)器學(xué)習(xí)模型涉及 4 個(gè)步驟。
1.創(chuàng)建“喚醒詞識別(內(nèi)置麥克風(fēng))”模型
2.數(shù)據(jù)采集(車載)
3.培訓(xùn)和部署
4.編程與模型使用
創(chuàng)建“喚醒詞識別(內(nèi)置麥克風(fēng))”模型轉(zhuǎn)到https://ide.tinkergen.com/。選擇“(對于 TinyML)Wio 終端”。
點(diǎn)擊左中嵌入式機(jī)器學(xué)習(xí)框上的“模型創(chuàng)建”。然后選擇“Wake-Up Words Recognition(內(nèi)置麥克風(fēng))”,如下圖。根據(jù)需求輸入模型名稱。
點(diǎn)擊確定,窗口會(huì)自動(dòng)切換到“數(shù)據(jù)采集”界面。
第 2 步:數(shù)據(jù)采集(車載)
系統(tǒng)會(huì)自動(dòng)為您創(chuàng)建 3 個(gè)默認(rèn)標(biāo)簽(hi wio、background 和其他詞)。
除非您想為標(biāo)簽使用不同的名稱,否則您可以不加任何更改地使用它。就我而言,我更改了兩個(gè)默認(rèn)標(biāo)簽,如下所示:
hi wio 刪掉
其他詞改成停止
重要提示:現(xiàn)在,您必須記住更改默認(rèn)數(shù)據(jù)采集程序上的標(biāo)簽以反映正確的修改標(biāo)簽
連接 Wio 終端和上傳數(shù)據(jù)采集程序。
注意:您需要下載“ Codecraft Assistant ”才能在Codecraft在線IDE上連接和上傳代碼。
數(shù)據(jù)采集??:在右上角的超鏈接中,您將找到數(shù)據(jù)采集的分步介紹。按照說明根據(jù)修改后的標(biāo)簽收集數(shù)據(jù)。
第 3 步:培訓(xùn)和部署
點(diǎn)擊“Training & Deployment”,您將看到如下圖所示的模型訓(xùn)練界面。
選擇神經(jīng)網(wǎng)絡(luò)和參數(shù)。選擇合適的神經(jīng)網(wǎng)絡(luò)大?。盒 ⒅?、大
設(shè)置參數(shù):
訓(xùn)練周期數(shù)(正整數(shù)),
學(xué)習(xí)率(從 0 到 1 的數(shù)字)
最小置信度(從 0 到 1 的數(shù)字)
接口提供了50個(gè)訓(xùn)練周期的默認(rèn)參數(shù)值,但是準(zhǔn)確度不是很好。因此,我將訓(xùn)練周期更改為 100。
點(diǎn)擊“開始訓(xùn)練”。單擊“開始訓(xùn)練”時(shí),窗口將顯示“正在加載?!?!等待訓(xùn)練完成!
觀察模型性能以選擇理想模型。在“模型訓(xùn)練報(bào)告”窗口中,您可以觀察訓(xùn)練結(jié)果,包括模型的準(zhǔn)確率、損失和性能。
在“模型訓(xùn)練報(bào)告”窗口中,點(diǎn)擊“模型部署”。部署完成后,單擊“確定”進(jìn)入“編程”窗口,這是我們將模型部署到 Wio 終端之前的最后一步。
第 4 步:編程和模型使用
好的,現(xiàn)在我們完成了使用 UART通信協(xié)議將人工智能(在本例中為機(jī)器學(xué)習(xí))與機(jī)器人(機(jī)器人汽車)集成的模型和有趣的部分。
這是從塊編程接口創(chuàng)建的示例程序:
我們使用 if-else 條件語句來評估標(biāo)簽的置信度。
如果“go”的置信度大于0.8(80%),我會(huì)在串口終端打印“1”。
如果“停止”的置信度大于 0.8(80%),我會(huì)在串口終端上打印“2”。
否則,如果“背景”的置信度大于0.8(80%),我會(huì)在串口終端上打印“0”。
好的,所以現(xiàn)在,只需記住 3 個(gè)不同的條件:
“go” 》 0.8,命令為 ‘1’
“停止”》 0.8,命令為“2”
“背景”。命令是‘0’
2.0 Wio終端Arduino文本代碼修改
好的,所以請注意以下兩個(gè)重要發(fā)現(xiàn),因?yàn)檫@將是我們項(xiàng)目的關(guān)鍵部分!
您可以從 Wio Temrinal 的 40 針接頭訪問的串行線是 Serial1,而不是通常的 Serial,后者基本上通過串行終端顯示輸出。
我們在引腳 8 和 10 上提供了 TX/RX 引腳,可用于連接到另一塊電路板(本例中為 uKit 探索)。
如果我們查看相應(yīng)塊代碼的文本編碼,您會(huì)注意到 Serial.print 沒有使用 Serial1 行。因此,這導(dǎo)致我們進(jìn)入第二步,即繼續(xù)在 Arduino IDE 上進(jìn)行編碼以進(jìn)行定制。
切換到文本代碼區(qū)域并復(fù)制文本代碼
在文本代碼區(qū)域,按 CTRL + A 復(fù)制所有代碼以選擇所有代碼。
打開 Arduino IDE,創(chuàng)建一個(gè)新文件,按 CTRL+V 將代碼粘貼到空草圖中。繼續(xù)以所需名稱保存草圖。
復(fù)制 Edge Impulse TinyML Arduino 庫
導(dǎo)航到 C:\Users\《User_Name》\AppData\Local\Programs\cc-assistant\resources\compilers\Arduino\contents\libraries
找到與 Arduino 文本代碼頂部的 Edge Impulse 頭文件具有相同編號的文件夾名稱(在我的情況下為 47606)。
復(fù)制整個(gè) ei-project_47606 文件夾并將其粘貼到 C:\Users\《User_Name》\Documents\Arduino\libraries\
修改 Serial.println 函數(shù)
改為將 Serial.println 函數(shù)修改為 Serial1.println。
上傳代碼
確保您已安裝 Wio 端子板支持包。如果沒有,請參閱Seeed Wiki 上的“ Wio 終端入門”指南。
在將代碼上傳到 Wio 終端之前,請確保選擇了正確的板和 COM 端口。
第 4 步:對機(jī)器人汽車進(jìn)行編程(uKit 探索 - 基于 Arduino Mega 2560)
我們將對基于 uKit Explore 的 Robot Car 進(jìn)行編程。
uKit 簡介探索
讓我讓您了解一下這個(gè) uKit Explore 的內(nèi)容。
uKit Explore 是 UBTECH Robotics 制造的機(jī)器人套件,它基于 Arduino 生態(tài)系統(tǒng)(芯片組為 Arduino 2560)。
“uKit Explore 有一個(gè)主控箱,配備 Arduino 開源平臺(tái),提供來自全球用戶貢獻(xiàn)的大量電子和編程學(xué)習(xí)資源?!?/p>
編程 uKit Explore 以讀取 UART 數(shù)據(jù)
現(xiàn)在,我們需要對 Robo Car 進(jìn)行編程,使其在收到來自 Wio Terminal 的命令“1”、“2”和“0”時(shí)根據(jù)不同的條件采取行動(dòng)。
這里的關(guān)鍵概念是,如果它包含任何數(shù)據(jù),我們將需要讓 uKit Explore繼續(xù)偵聽串行線。如果它確實(shí)包含串行數(shù)據(jù),則串行讀取數(shù)據(jù)并將其分配給一個(gè)變量。最后一步是我們將比較變量并執(zhí)行不同的操作。
對于我們的案例,當(dāng) uKit 探索
收到命令“1”(go),RoboCar 將向前移動(dòng);
收到命令‘2’(停止),它將停止;
收到命令‘0’(背景),它也會(huì)停止。
上傳代碼
最后,我們將代碼上傳到板上。與往常一樣,請確保在上傳之前選擇了正確的板和 COM 端口。
最后,Robo Car 可以通過語音“go,go,go”激活,并通過“stopppps.。。。”或“background”停止。達(dá)到我們想要的目標(biāo)!
-
嵌入式
+關(guān)注
關(guān)注
5087文章
19150瀏覽量
306356 -
語音識別
+關(guān)注
關(guān)注
38文章
1742瀏覽量
112737 -
uart
+關(guān)注
關(guān)注
22文章
1242瀏覽量
101526
發(fā)布評論請先 登錄
相關(guān)推薦
評論