当前位置:首页 > 黑客技术 > 正文内容

初学者怎么能看懂代码(看代码技巧)

hacker1年前 (2023-05-12)黑客技术115

当微控制器Wio Terminal遇上图形化编程平台Codecraft会擦出什么奇妙的火花呢?在社区小伙伴郭进强的“魔法加持”下,一台能够听懂指令的声控机器小汽车就诞生啦~

展开全文

创作不易,开源即爱!点赞、转发、在看、留言支持创作者哟,超详细教程附上:

作|者|介|绍

郭进强Vincent Kok

SeeedStudio国际社区活跃用户,对技术充满热情,STEAM AI机器人倡导者。

应用Wio Terminal的内置麦克风和嵌入式机器学习,实现语音识别功能,从而让小车听懂行驶 (Go)、停止(Stop)两个指令,并识别背景噪音(Bacgkround Noise)。

在这个项目教程中,我将使用由矽递科技Seeed Studio研发的Wio Terminal的内置麦克风和支持嵌入式机器学习的图形化编程平台Codecraft制作了一个声控机器小汽车,从而实现小车能语音 识别行驶 (Go)、停止(Stop)两个指令,并识别背景噪音 Bacgkround Noise).

项目所使用的元器件与工具

• 矽递科技Wio Terminal

• 优必选uKit Explore Kit

• 矽递科技图形化编程软件平台Codecraft

• Edge Impulse Studio

• Arduino IDE

我们先一起看看这个项目的演示视频:

视频1:最终项目演示视频

图片1:用优必选uKit Explore Kit搭建的机器小车

Wio Terminal上的麦克风只能检测声音的强度(请下载或查看下方图纸,了解更多细节),因此要让它识别到不同的词是很有挑战的。但我想到了一些有创意的方法来捕捉声音来源,然后用Edge Impulse训练它们,看看它是否能够做简单的语音识别。稍后我们将看到结果。

图片2: Wio Terminal的麦克风示意图

好奇我怎么做到的吗?那接下来就一起跟着我的项目教程步骤,你也可以动手做出这个项目哟。

在这个项目教程里面,将会涵盖以下内容:

• 什么是UART串行通讯?

• 如何实现Wio Terminal和uKit Explore小车之间的UART串行通讯

• 第一步:使用Codecraft训练一个嵌入式机器学习的模型

• 第二步:Arduino文本编程优化

• 第三步:对uKit Explore小车(这个小车的主控是基于Arduino Mega 2560)进行编程

• 第四步:项目成果

什么是UART串行通讯?

UART英文全称Universal Asynchronous Receiver/Transmitter,翻译为中文是:通用异步收发传输器,是最通用的设备与设备间通讯的一种协议。这篇教程将与大家分享如何通过以下步骤将UART作为一个硬件通讯协议。

正确配置后,UART可以使用多种不同类型的串行协议,包括发送和接收串行数据。在串行通信中,数据是通过单根线实现字符的逐位传输。

通俗地说,UART可以让Arduino等嵌入式设备通过 TX(发送)和 RX(接收)线,将数据发送到另一个嵌入式设备上。具体传输图示,见下图参考:

图片3: UART技术原理图

图片来源:

https://learn.sparkfun.com/tutorials/serial-communication/all

我经常使用 UART 作为嵌入式设备之间的通信协议。让我再给大家分享一个案例。Arduino UNO本身没有内置WiFi,因此无法用它直接做跟物联网相关的项目。但随着我对基本 UART 串行通信的了解,我就开始用ESP8266/ESP32 作为 Arduino UNO 的协处理器,这样的话,Arduino UNO自带的传感器收集的数据就可以通过 ESP8266/ESP32发送到云平台,如 Web 服务器、Blynk 或 FAVORIOT。

在两个嵌入式设备(例如 Arduino UNO 和 ESP8266/ESP32)之间实现了传输数据之后,做项目的创意可能性就完全没有极限了!比如参考下方的例子,我试图在 TTGO T形显示屏(Serial2 线)和 uKit Explore(串行线)之间建立简单的串行通信。

图片4: TTGO T形显示屏与uKit Explore之间的串行通信图

接下来,我还会再详细介绍如何在这个声音控制小车项目中,实现这样的数据传输。

实现UART串行通讯

在Wio Terminal和uKit Explore小车之间实现UART串行通讯

根据Wio Terminal的官方文档显示,Wio Terminal的第8和10个引脚即为TX发送/ RX接收引脚。

图片5:Wio Terminal引脚信息图

而对于 uKit Explore小车来说,它具有与 Arduino UNO 引脚分配类似的接头,因此引脚 D0 和 D1即为TX/RX 引脚。你可以根据下图查看uKit Explore完整的引脚分配:https://ubtechedu.gitbook.io/ukit-explore/v/english/ukit-explore-quick-start/pinout

图片6:uKit Explore引脚信息图

因为这两个设备都有UART (TX/RX) 引脚,所以在它们之间实现UART串行通讯就不难了。

只要你按照下方的接线指示进行两个设备的连接,就可以实现了。

Wio Terminal第8引脚接 uKit Explore的0引脚(TXD接RXD)

Wio Terminal第10引脚接 uKit Explore的1引脚(RXD接TXD)

我会在第三步小车编程中, 详细解释软件编程如何实现。

初学者怎么能看懂代码(看代码技巧)

第一步:使用Codecraft训练一个嵌入式机器学习的模型

在这个步骤,我们的目标是应用图形化编程平台Codecraft创建一个语音识别的嵌入式机器学习的模型。

1.1.0 创建和选择模型

请通过https://ide.tinkergen.com/(或文末点击“阅读原文”跳转).这个链接访问Codecraft在线编程平台。然后在“选择硬件进行编程”这个版块选择“支持嵌入式机器学习的Wio Terminal”

图片7:选择“支持嵌入式机器学习的Wio Terminal”

1.1.1 创建“内置麦克风识别唤醒词”模型

在左侧中部的标题栏中,点击“创建模型”按钮。然后选择右边“为嵌入式机器学习创建新模型”版块中的“内置麦克风识别唤醒词”选项。如下图,根据要求输入模型的名称。

图片8: 输入模型名称

1.2.0数据采集

点击“确认”按钮后,窗口会自动跳转到“数据采集”界面。

图片9:数据采集界面

1.2.1 默认标签

系统提供了3个默认标签:hi wio、background背景音和其他词。

图片10: 系统默认标签

如果你想使用其他标签,你可以直接修改。但你也可以直接使用这些标签。在这个项目中,我对其中两个默认标签进行了修改,如下所示:

• 将hi wio改成go“行驶”

• 将其他词改成stop“停止”

1.2.2 修改标签后进行数据采集和数据采集程序修改

点击"hi wio”标签,系统将提示你更改标签名称。我将标签重新命名为go“行驶”,然后单击“确定”

图片11: 重新命名标签

用同样的操作处理“other words”标签。现在你就可以看到,这个项目所使用的三个标签如下:

图片12: 重新命名后的标签

重要提示:你也一定要相应修改“默认数据采集代码”中的标签名称:

图片13: 在默认数据采集代码中修改标签1

图片14: 在默认数据采集代码中修改标签2

1.2.3 连接Wio Terminal并上传数据采集代码

使用 USB-C 线将 Wio Terminal连接到笔记本电脑。单击“上传”按钮,这样将上传默认的数据采集代码。通常,上传大约需要 10 秒钟。上传成功后,页面将出现一个弹出窗口,提示“上传成功”。

点击“好的”按钮关闭窗口,并返回到数据采集界面。

注意:

1)你需要下载“Codecraft助手”才能将Codecraft在线 IDE上连接Wio Terminal和上传代码。

2)对于网页版的 Codecraft,如果你没有安装或运行设备助手,你应该会收到下图中的提示消息,表示你尚未打开设备助手。在这种情况下,你可以查看点击下方这个链接来下载、安装“设备帮助”并了解其使用。

图片15: 如未安装设备助手,系统提示信息

1.2.4 数据采集

在上文中,你可以找到数据采集的详细步骤介绍。

你可以按照步骤介绍,并根据你前面修改的标签来进行数据采集。

可以特别注意以下事项:

• Wio Terminal的按键 (A, B, C)所在位置

• 动图 gif已被自动加速,实际变换可以稍微放慢。

• 请注意标红的提醒信息

• 将鼠标指向描述文档就可以获得更详细的信息

在给 3 个标签收集了样本数据后,数据采集这个步骤就完成了。在这个项目中,我为3个标签分别收集了 15 秒数据。

图片16: 数据采集完成时,编程界面

1.3模型训练与部署

点击“训练与部署”按钮,你就可以看到如下图所示的模型训练界面。

图片17: 点击左下角的“训练与部署”按钮

go、background 和 stop3个标签内采集的原始数据的波形如下图所示,你可以从“样本数据”这个选项卡中查看。

go

如果你观察go标签里面的数据波形,我的声音输入是“go, go, go!”在 5 秒的窗口中,我录制了两次,两次中间有大约 1 秒停顿。

图片18: go标签里面的数据波形

background

在标签“background背景音”中,我只需将 Wio Terminal拿在手上即可捕捉周围的噪声数据。因此,您可以看到声音输入电平不是 0,因为周围有一些噪音,例如风扇旋转声。

图片19: “background背景音”标签里面的数据波形

stop

对于标签“stop”,为了与“go”标签中数据的区分,我尝试将我的发音在最后的字母延长为“stoppppp…………”整体大约持续 3 秒钟。

图片20: 标签“stop”的数据波形

1.3.1选择神经网络和参数

选择合适的神经网络大小:有“小、中、大”3种可选,并设置以下参数

• 训练循环数(正整数)

• 学习频率(介于0到1之间)

• 最低置信度(介于0到1之间)

这个界面默认提供50个训练周期作为参数值,但准确度不是很好。因此,我将训练周期更改为 100。

图片21: 修改训练周期

1.3.2 开始训练模型

点击“开始训练”。当你单击“开始训练”时,窗口将显示“正在加载..”!这个时候,耐心等待训练完成即可!

“正在加载..”的持续时间取决于所选神经网络的大小(小、中、大)和训练周期数。神经网络规模越大,训练周期越多,需要的时间就越长。

你也可以通过查看“日志”来推断所需时间。在下图中,“Epoch: 68/500”表示训练总轮数为 500 轮,目前进行到第 68轮。

图片22:训练日志详情

加载完成后,你可以在“日志”中看到这个提示“训练模型完成”,界面上也会出现“模型训练报告”的选项卡。

图片23:日志中的“训练模型完成”提示

1.3.3 观察模型性能,选择最理想的模型

在“模型训练报告”窗口中,你可以观察到模型训练结果,包括模型的准确率、损失情况和性能。

如果训练效果不理想,你可以通过选择另一个大小的神经网络或调整参数后再重新训练,直到你得到一个令人满意的模型为止。如果更改参数后不起作用,你就可能需要返回到再前一个步骤,再次收集数据。

初学者怎么能看懂代码(看代码技巧)

图片24:模型训练报告

我在训练过程中,因为我把训练周期设置为 100,所以我能够达到 100% 的模型准确率。

1.3.4 部署理想模型

在“模型训练报告”窗口确认完模型性能后,点击“模型部署”按钮

图片25:模型部署按钮

部署完成后,单击“确定”进入“编程”窗口,这是我们将模型部署到 Wio Terminal的最后一步。

图片26:模型部署后的确定按钮

1.4.编程和模型使用

好的,现在我们完成了模型的训练,以及使用 UART 通信协议将人工智能(在这个项目中特指机器学习)与机器小车(Robo Car)进行集成的有趣部分。

以下是Codecraft图形化编程平台上自带的示例代码:

图片27: Codecraft图形化编程平台的示例代码

我给大家解释一下这段代码具体的功能。为了便于理解,我将其分解为以下几点:

• 如前所述,我们使用 if-else 条件语句来评估每个标签数据的置信度。

• 如果“go”标签的置信度大于0.8(80%),我会在串口终端打印“1”。

• 如果“stop”标签的置信度大于0.8(80%),我会在串口终端打印“2”。

• 否则,如果“background”标签的置信度大于 0.8(80%),我将在串行终端上打印“0”。

简言之,先记住下面 3 个不同的条件即可:

“go" > 0.8,命令为'1'

“stop”> 0.8,命令为“2”

“background”。命令为“0”

在对 Wio Terminal的 TX/RX 引脚排列进行了一些研究后,我发现了以下规律:

• Wio Terminal的第8和第10引脚 分别为 TX/RX 引脚,可用于连接到另一设备(在我这个项目中就是uKit Explore小车)。

图片28:Wio Terminal引脚信息图

• 你从 40 针接头访问的串行线是 Serial1 而不是通常的 Serial,它基本上通过串行终端显示输出。

请一定要注意上面的 2 个重要发现,因为这将是我们项目的关键部分。

如果我们查看图形化编程代码相应的文本代码,你会发现Serial.print 并没有使用 Serial1 线。因此,我们就需要进行第二个大步骤,继续在 Arduino IDE 上进行编程,从而进行自定义。

图片29: 点击右上角查看文本代码

图片30: Serial.print 细节代码

2.0 Wio Terminal 代码在Arduino IDE上进行修改

在这个步骤中,我们首要目标是对 Arduino文本代码进行修改,让程序调用Serial1.println 而不是 Serial.println,这样数据就可以通过Wio Terminal的第8 和 10引脚上的 TX/RX 引脚进行传输。

2.1 Codecraft切换到文本代码编程界面并复制文本代码

图片31: Codecraft从图形代码切换到文本代码

在Codecraft的文本代码编程界面,按 CTRL + A 全选所有代码并复制所有代码。

打开 Arduino IDE,创建一个新文件,通过 CTRL+V 将代码粘贴到文件中。输入你想要的文件名称后,保存代码文件。

图片32: 将文本代码复制到Arduino IDE

2.2 复制 Edge Impulse TinyML Arduino 库

这个步骤的问题在于:要如何将在Codecraft 平台上包括训练好的模型数据在内的所有文件复制到Arduino IDE 上?

其实很简单,通过下面的步骤即可:

• 请通过以下路径访问这个文件夹:C:\Users\<User_Name>\AppData\Local\Programs\cc-assistant\resources\compilers\Arduino\contents\libraries

• 在里面找到与 Arduino 文本代码顶部的 Edge Impulse 头文件编号相同的文件夹名称(在我这个项目中,它的编号是 47606)

图片33: 文件夹截图

• 复制整个 ei-project_47606 文件夹并将其粘贴到C:\Users\<User_Name>\Documents\Arduino\libraries\

图片34: 复制后文件夹截图

2.3 对Serial.println函数进行修改

最后,我们可以在Arduino IDE中简单回顾一下代码,鼠标向下滚动到 void loop 部分并将 Serial.println 函数修改为 Serial1.println。

图片35:代码修改

2.4 代码烧录

到这,我们就可以把代码烧录到 Wio Terminal了。

烧录之前,确保你已安装 Wio Terminal支持包。如果你还没有安装,可以参考Seeed Wiki 上的“Wio Terminal入门”指南(https://wiki.seeedstudio.com/Wio-Terminal-Getting-Started/)。

此外,也一定要确保你选择了正确的板子和 COM 端口。

图片36: 代码烧录前,选择正确的板子和端口

好了,到此我们已经完成了所有文本代码所需要的修改!现在,以下3个条件所对应的命令“1”、“2”和“0”,就可以从Wio Terminal的第8和10引脚 上可用的 TX/RX 引脚发送出去了。

"go" > 0.8, 命令是 '1'

"stop" > 0.8, 命令是 '2'

"background". 命令是 '0'

3.0 对uKit Explore小车(这个小车的主控是基于Arduino Mega 2560)进行编程

在这个步骤中,我们将对我用uKit Explore搭好的机器小车进行编程。

3.1 uKit Explore 介绍

首先跟大家简单介绍下 uKit Explore。它是优必选开发的一个基于Arduino生态系统的机器人套件(核心芯片为Arduino 2560)。

“uKit Explore采用兼容Arduino的开源平台的主控制器,学习资源丰富”

图片37:uKit Explore 主板

在这个教程里面,我不会涉及到这个机器小车的结构搭建。如果对这部分内容感兴趣,你可以下载 uCode软件或前往 https://ide.ubtrobot.com/,在这里你可以找到我在这个项目中使用的机器小车的 3D构建说明。

图片38: uCode软件里面的机器小车结构搭建指南

3.2 对uKit Explore进行编程,读取UART数据

现在,我们需要对 小车进行编程,让它在接收到来自 Wio Terminal的命令“1”、“2”和“0”时,可以根据不同的条件采取相应的行动。

这里的关键概念是,如果串行线路包含任何数据,我们需要让 uKit Explore 持续监听串行线路。如果它确实包含串行数据,串行读取数据并将其分配给一个变量。最后一步是,我们让程序进行变量比较并执行不同的操作。

在这个项目中,当 uKit Explore 收到命令“1”(go)时,机器小车将向前移动;当 uKit Explore 收到命令 '2'(stop) 时,小车会停止;当 uKit Explore 接收到命令 '0'(background背景音)时,它也会停止。

图片39: 示例代码

3.3 上传代码

最后,我们将代码(请关注“柴火创客空间”公众号回复“代码”即可获得)上传到Wio Terminal。在啰嗦提醒一句:请确保你在上传前选择了正确的板卡和 COM 端口。

4.0项目成果

让我们快速看一下到目前为止我们取得的项目成果!

视频2:项目成果视频

如你所见,机器小车可以通过识别语音“'go, go, go'而往前行驶,并在识别到“stopppps....”或“background”后,自动停下。我们达到了一开始设定的目标!

小结

Codecraft(点击“阅读原文”跳转)是一个非常简单易上手并支持嵌入式机器学习的图形化编程工具,它可以训练一个简单的嵌入式机器学习模型,并将其与你的机器小车系统集成。如果你对这个教程感兴趣,那就赶快自己动手也做一个吧!

图片40:Codecraft软件

其他更多教程:请点击查看

?️?️?️

新一代信息技术赋能|人才升级|产业创新

硬件入门|物联网应用实战|低功耗物联网方案部署

提升技能 尽在?人才赋能课程

人才升级 推动双创事业合作

国际权威认证 技能加持合作

新基建 撬动产业数字化方案

柴火认证会员 享受诸多权益

----END----

Chaihuo x.factory|深圳,河北

在看和赞,都点这里

扫描二维码推送至手机访问。

版权声明:本文由黑客接单发布,如需转载请注明出处。

本文链接:http://therlest.com/141584.html

分享给朋友:

“初学者怎么能看懂代码(看代码技巧)” 的相关文章

美团暗语「美团暗语2021」

 昨天,很多网友问小编美团暗语最好的方法是什么?有关美团暗语2021最好的方法是哪种?最新美团暗语2020?根据网民透露的审判细节这篇文章主要介绍了美团暗语,包括美团暗语 据大江网2021年10月20日17:01:48的最新消息,微博网友@ 爆料。 平安夜来临之际,事件,在网上炒得沸沸扬扬,引发全...

接单的黑客_可以找黑客黑美团吗

有在网络安全范畴中,猜测网络违法和歹意软件发展趋势好像现已成为了各大网络安全公司的传统了。 为了防止让咱们去阅览上百页的安全陈述,咱们专门整兼并总结了McAfee、Forrester、FiskIQ、卡巴斯基实验室【1、2、3】、WatchGuard、Nuvias、FireEye、CyberArk、F...

糖尿病胰岛素多少钱一支_血糖高不高,看脚就知道

饮食和运动可以让你不怕糖尿病过好生活.也与运动太少有关。眼睛发痒一般是过敏.哪家医院对糖尿病的治疗上信誉. 血糖高是哪个部位.据统计,黎明现象,空腹和。 精神状态等各方面根本的健康因素并不重视,不过在这家医院现在可以实现跨省异地直接,之前就血糖高,口服药是可以降糖的!治疗导致的并发症,就换了别的药,...

二手退役62军用望远镜(二手60倍望远镜转让)

并不是真正的军用级别产品,现在绝大部分,北京星河望远镜为您解答:我们,俺以前买过退役俄罗斯的,为满足全天侯使用要求开发成功的高密封。 需要望远镜。早期的军用望远镜,长时间看不头晕.平常旅游观景、如今已经推出军队服役,不会存在,尽管现在的光学技术水平有了很大提高。 宽带增透绿膜镜头,62式8X30望远...

如何寻找黑客微信号(只有一个微信号,黑客可以查到对方吗)

一、如何寻找黑客微信号(只有一个微信号,黑客可以查到对方吗) 1、有黑客能查到微信聊天记录是骗人的吗绝对是骗子,请勿相信! 微信聊天信息保存在本地 一般聊天信息都是保存在本地的,除非开通会员可以将聊天信息存储。 黑客查找出来的微信聊天截图是真的吗在手机端启动微信,在微信主界面底部导航中点击“微信”...

生猪猪价近10年走势图 「全国生猪价格猪e网」

从供给来看,同比年下降8点全国2。2012年4,希望能对你有所帮助。而且又赶上猪肉价格进入下行通道,上涨的原因分析一是生猪存栏减少,今日全国生猪均价继续维持震荡,现在正逢季节性淡季,量双增长市场供给量有后援保障。比2月25价格日。 散养户积极补栏使得苗猪价格迅速上升,1、我就是专业研究这个的,最新全...

评论列表

晴枙双笙
1年前 (2023-05-12)

Wio Terminal的第8和10引脚 上可用的 TX/RX 引脚发送出去了。"go" > 0.8, 命令是 '1'"stop" > 0.8, 命令

颜于闻枯
1年前 (2023-05-12)

2'"background". 命令是 '0'3.0 对uKit Explore小车(这个小车的主控是基于Arduino Mega 2560)进行编程在这个步骤中,我们

断渊云胡
1年前 (2023-05-12)

自动加速,实际变换可以稍微放慢。• 请注意标红的提醒信息• 将鼠标指向描述文档就可以获得更详细的信息在给 3 个标签收集了样本数据后,数据采集这个步骤就完成了。在这个项目中,我为3个标签分别收集了 15 秒数据。图片16: 数据采集完成时,编程界面1.3模型训练

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。