当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]随着技术的发展,基于手势的交互方式正变得越来越普及。这种操作方式直观、简单易用,能让与设备及周围事物的互动显得更加未来感和炫酷!为了紧跟潮流,我们将利用之前黑客项目中制作的手表,引入一些机器学习技术,尝试识别我们正在执行的特定手势。也许在接下来的教程中,我们可以利用这些手势来实现一些非常酷炫的项目。

随着技术的发展,基于手势的交互方式正变得越来越普及。这种操作方式直观、简单易用,能让与设备及周围事物的互动显得更加未来感和炫酷!为了紧跟潮流,我们将利用之前黑客项目中制作的手表,引入一些机器学习技术,尝试识别我们正在执行的特定手势。也许在接下来的教程中,我们可以利用这些手势来实现一些非常酷炫的项目。

所需材料:

以下是能帮助你轻松完成该项目的物品清单(附带推广链接):

•ESP12E

•OLED显示屏

•MPU6050

•触觉(精确型号)

•触觉电机(替代型号)

•3.3V稳压器

•105mAh电池

•标题别针

•倾斜式标题别针

•电线

•FTDI

•公头USB

•PCB

•焊接枪

•焊接引脚

•泡沫板

1:故事时间!

我在Instagram上发了一篇帖子,介绍了这个版本手表将要加入的所有新功能,但当时漏掉了“充电用微型USB接口”、“按住以开启或关闭电路”以及“心率监测”这些功能。由于我之前犯了不小的错误,但我深知自己内心非常善良,因此很抱歉未能实现这些硬件功能,让读者们失望了。所以,我决定在软件方面加倍努力。

于是我想给项目加入一些机器学习(ML)功能,相比电子部分应该会简单得多,毕竟我们只需要从Stack Overflow复制粘贴一堆代码。至少我是这么认为的。结果我却直接跳进了实现基于ML的手势识别这一块。哎呀,我完全错了……

这简直太糟糕了,我真的很讨厌它。不是因为它复杂,而是收集数据和训练模型的过程实在太令人沮丧了,就像教一只小狗不要在床铺上排泄一样。

如果你想深入了解如何在嵌入式系统中实现机器学习,可以查看这两个链接:TinyML 和手势识别。一个讲解了如何使用 TinyML 的 TensorFlow 与 Arduino 配合,另一个则介绍了在 Arduino 上应用基础机器学习算法的方法。我主要参考了后一个链接,因为它非常易于理解,而且适用于 Arduino NANO 和 UNO 等内存资源极为有限的微控制器。

需要将这个项目做成电路板吗?

将电子项目投入实际生产可能令人望而生畏。为了帮助你顺利进入量产阶段,我们为PCB爱好者和业余开发者开发了一个平台(PCB CUPID),用于提出并解答有关PCB设计、制造和组装的问题。

除了问答功能外,该网站还提供了大量博客文章和实用资源,帮助你学习印刷电路板的开发与制造。无论你是初学者,想快速掌握PCB基础知识,还是经验丰富的设计师,寻找技巧与灵感,都能在这里找到有价值的内容。

欢迎访问我们的网站,别忘了参与问答社区,获取帮助并分享你的知识。谢谢!

2:PCB组装

这次的组装必须非常简单快捷,因为使用的是印刷电路板。为此,我感谢PCBWay为本项目赞助了这款精美的黑色PCB。

我先收集了项目所需的全部SMD元件,然后将它们排列在易于取用且方便操作的位置。剩下的工作就是焊接了!

只需按照电路图,将元件正确地焊接到PCB上即可。为了便于焊接,我从先焊较小的SMD元件(如电阻、电容、稳压器)开始,再逐步过渡到较大的通孔元件(如MPU6050、OLED)。焊接过程中,我还用3M胶带将锂电池固定在电路板与OLED显示屏之间。

过去我在寻找适合项目使用的稳压器时常常遇到困难,因此之前的视频中一直使用AMS1117,因为它价格便宜且容易获取。但为了让本次项目比之前的设计更加高效,我在PCB上提供了两种选择:MCP1700或LSD3985。我的实际选择是LSD3985,并舍弃了MCP1700。你可以根据实际可获得的元件选择其中任意一种。

3:手表编程

为了简化编程流程,我牺牲了PCB上的一些空间,你可以直接插入FTDI模块开始编程。要对板子进行编程,首先需要将ESP8266置于刷写模式,因此连接到PC时,请按住与ESP12E的GPIO-0相连的按钮。

要测试板子是否正常工作,只需上传我之前教程中的代码,检查NTP时间、自动唤醒以及屏幕切换等功能是否正常运行。如果一切正常,硬件部分就完成了。

4:机器学习[第一部分]

机器学习听起来很高级又复杂,但请相信我,机器学习中的某些算法比其他非机器学习的算法更容易理解。如果你想了解更多,请查看这个链接。

对于大多数算法来说,当需要回答某个问题时,我们必须告诉算法要执行一系列步骤才能得到最终结果。一个简单的例子就是乘法。

如果你要计算乘法问题的答案,比如2乘以5,我们只需告诉计算机进行多次加法运算来得出结果。你可以看到,我们正在告诉计算机如何操作才能得到答案。

5:机器学习[第二部分]

机器学习的工作方式略有不同,我们只是给计算机提供一组问题和对应的答案,然后让计算机自己找出相应的规律或过程,从而在不需要我们手动编程的情况下,能够回答任何新问题。

举个例子,从照片中识别出一个苹果,对人类来说非常容易,但对我们程序员而言,要让计算机理解苹果的各种特征却相当困难。虽然这并非不可能,但过程极其繁琐且费力。相反,如果我们能编写一个算法,仅通过看成千上万张苹果图片就能自行学习,那岂不是太棒了?此外,使用机器学习算法还有一个好处:它们甚至可能提出一种我们从未想到的、全新的识别照片中苹果的方法。因此,机器学习是一个非常值得探索的有趣领域。

注意!我并不是解释机器学习和人工智能的最佳人选,我只是把学到的知识写下来。但如果你读到这段文字已经看了这么久,建议你去看看我的YouTube频道,如果你还没有订阅,现在就订阅吧!相信我,绝对值得!至少对我来说是这样 :)

6:分类

在机器学习中,解决一个问题的方法和技巧有很多,而我们这次要做的手势识别,将采用其中一种叫做“分类”的技术。

为什么要用分类?

请看上面的图片,这是串口绘图器中加速度计和陀螺仪的数据。如果动作重复一段时间后,人眼看起来这些数据似乎是可以预测的。现在,即使我把同样的动作从屏幕外执行,你仍然可以通过观察图表来猜出这是哪种动作。更棒的是,你甚至可以对其他手势和动作也这样做。这是因为我们的大脑会为不同的模式赋予不同的名称。

同样地,如果我们能多次向机器学习算法展示这种数据模式,它就会尝试理解这些数据,并将它们分到不同的组别中。换句话说,算法会将数据样本分类到不同的类别中。因此,下次当它在数据中看到类似模式时,就能判断出这是哪种动作或手势。这就是为什么我们需要进行分类的原因。

我选择了随机森林算法来解决这个分类问题。

7:采集传感器数据进行训练

既然我们已经对机器学习有了基本了解,接下来就可以开始收集用于训练机器学习算法的数据了。我之前参考的教程采用了一种非常笨拙的方式采集数据,通过串口监视器进行,这对我来说很难实现,因为手势过程中需要将设备戴在手腕上。为了解决这个问题,我实现了无线数据采集功能。我利用了ESP8266的片上闪存,并为了方便,通过OLED显示屏显示数据采集和保存的状态。如果你想做同样的事情,请编译并上传Data_collection.ino文件到你的手表上。

上传代码后,测试时请保持手部静止,设备启动后会先对加速度计和陀螺仪进行校准。校准完成后,即可开始采集数据!只需按下连接在GPIO-0上的按钮,设备就会创建一个新功能,然后开始移动手部以记录动作。实现无线数据采集的努力绝对值得!无需担心,可以轻松地连续采集约25到30次的动作(样本数量越多,算法表现越好)。

8:数据处理

现在,您可以将收集到的数据导出到串口监视器中。只需关闭电路,连接FTDI设备,并在电脑上打开串口监视器时再次按下程序按钮,即可将所有数据导出至串口监视器。然后将这些数据复制粘贴到一个txt文件中。每个动作都会以“New feature”为分隔词进行划分,这样您就能清楚地知道哪些数据对应哪个动作。

接着,使用Excel将txt文件拆分为三个csv文件,分别对应向左滑动、向右滑动和猛击手势。至此,数据采集部分完成。

这些数据不应直接使用;需要先进行处理以去除噪声,以便算法能更准确地预测。但为了简化整个项目,我决定跳过这些步骤,直接进入训练阶段。

9:模型训练

这是教您的机器学习算法识别手势的部分。

我使用Python来训练模型,并将其转换为C语言文件,以便在Arduino IDE中使用。你可以从我的 GitHub 仓库获取这个文件,然后打开“Python training code”文件夹中的“Classifier.py”文件。这段代码会读取 CSV 文件,并训练模型以学习我们之前记录的手势。如果你的文件名不同,只需修改名为 fileName 的 Python 列表,以便模型能使用你收集的数据进行训练。

运行此代码后,将会生成一个名为“model.h”的文件。该文件包含已训练好的模型,用于识别我们捕捉到的三种手势。如果你想仅测试模型,只需将“model.h”文件复制到“Testing gesture detection”文件夹中,然后打开该文件夹内的 Arduino 文件。接着编译并上传代码到你的手表上即可。

10:模型推理

一旦代码上传到微控制器,我们的机器学习算法就不再继续学习,而是直接使用我们之前创建的预训练模型,这被称为模型推理。

成功上传代码后,当你做出任何手势时,OLED 显示屏应该会显示你正在执行的手势。在我的实验中,模型的准确率达到了 95%,只是有时在识别正确的滑动手势时会出现一些问题。也许我收集的数据存在噪声,或者在采集数据时动作不够准确。

无论如何,95%的准确率对我来说已经很好了,用这个手势识别技术我们能实现很多功能!

11:最后总结!

如果你想把这个技术应用到产品或更高层次的项目中,还有很多可以改进的地方,比如提高数据采集时的采样率、增加采集样本数量、采集后对数据进行清理、使用信号处理去除噪声等等。但对于初学者爱好者来说,在微控制器上实现一个机器学习模型仍然是一项不小的挑战!因此,在接下来的教程中,我们将利用这个手势识别功能来控制家用电器的开关,甚至像之前那个教程一样发送电子邮件。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭