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