在本文中,我将在 Wio 终端上制作一个带有内置麦克风的声控机器人车,以通过 TinyML 识别行驶、停止和背景噪音。
使用由 Edge Impulse 提供支持的 Codecraft 训练了一个唤醒词识别模型!
在这篇详细的博客文章中,我将介绍以下内容:
什么是 UART 串行通信?
Wio终端和uKit之间的UART串行通信探索
1.0 使用 Codecraft 训练嵌入式机器学习模型
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”停止。达到我们想要的目标!
全部0条评论
快来发表一下你的评论吧 !