前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Arduino 机器学习实战入门(下)

Arduino 机器学习实战入门(下)

作者头像
AiTechYun
发布2019-11-07 14:54:22
3K0
发布2019-11-07 14:54:22
举报
文章被收录于专栏:ATYUN订阅号ATYUN订阅号

编辑 | sunlei

前文回顾:Arduino 机器学习实战入门(上)

设置Arduino IDE

按照以下步骤设置Arduino IDE应用程序,该应用程序用于将推理模型上载到您的电路板,并在下一节中从电路板下载培训数据。因为我们需要在Arduino IDE中下载和安装特定的板和库,所以比使用Arduino Create web editor要多几个步骤。

  • 从https://arduino.cc/downloads下载并安装Arduino IDE
  • 打开刚刚安装的Arduino应用程序
  • 在Arduino IDE菜单中选择工具>板>板管理器…
  • 搜索“Nano BLE”并按下安装按钮
  • 安装需要几分钟时间
  • 完成后,关闭Boards Manager窗口
  • 现在转到库管理工具>管理库…
  • 搜索并安装Arduino_TensorFlowLite库
  • 接下来搜索并安装Arduino_LSM9DS1库:
  • 最后,将micro USB插入主板和计算机
  • 选择板工具>板> Arduino Nano 33 BLE
  • 选择端口工具>端口> COM5 (Arduino Nano 33 BLE)
  • 注意,您计算机上的实际端口名可能不同

如果需要帮助,Arduino网站上有更详细的入门和故障排除指南。

从Arduino板上传输传感器数据

首先,我们需要获取一些训练数据。你可以通过USB数据线从Arduino板上获取传感器数据日志,你可以用笔记本电脑或个人电脑给板编程。

Arduino板运行小应用程序(也称为示意图),这些程序是由.ino格式的Arduino源代码编译而成,并使用Arduino IDE或Arduino Create在板上编程。

我们将使用一个预先制作好的草图IMU_Capture.ino,它执行以下操作:

  • 监控电路板的加速度计和陀螺仪
  • 触发检测电路板显著线性加速度的采样窗口
  • 以119Hz采样1秒,通过USB输出CSV格式数据
  • 回循环并监视下一个手势

我们选择从板上读取的传感器、采样率、触发阈值,以及我们是否将数据输出为CSV、JSON、二进制或其他格式,这些都可以在Arduino上运行的示意图中定制。在将数据输出到日志之前,还可以在设备上执行信号预处理和过滤——这一点我们可以在另一个博客中讨论。现在,您只需要上传草图并开始采样。

要在Arduino IDE中使用此草图对电路板进行编程:

  • 下载ino并在Arduino IDE中打开它
  • 用Sketch > Upload编译并上传到板上

从Arduino板上可视化实时传感器数据日志

完成这些之后,我们现在就可以看到黑板上的数据了。我们还没有捕获数据-这只是让你感觉一下传感器数据捕获是如何触发的,以及一个样本窗口有多长。这将有助于收集训练样本。

在Arduino IDE中,打开串口绘图仪工具>串口绘图仪

如果出现主板不可用的错误,请重新选择端口:

工具>端口>端口名(Arduino Nano 33 BLE)

拿起板子,练习你的击打和弯曲动作

您将只看到一秒钟窗口的示例,然后等待下一个动作

您应该会看到传感器数据捕获的实时图(参见下面的GIF)。

Arduino IDE串行绘图仪将显示从板输出的CSV数据的实时图形

当你完成时,一定要关闭串行绘图仪窗口——这很重要,否则下一步将无法工作。

获取手势训练数据

要将数据捕获为CSV日志以上载到TensorFlow,可以使用Arduino IDE>Tools>Serial Monitor查看数据并将其导出到计算机桌面:

  • 按下面板顶部的白色小按钮来重置面板
  • 一手拿起板子(以后拿起板子会触发采样)
  • 在Arduino IDE中,打开串口监控工具>串口监控
  • 如果出现主板不可用的错误,请重新选择端口:
  • 工具>端口>端口名(Arduino Nano 33 BLE)
  • 用手拿着板做一个出拳的手势(做的时候要小心!)
  • 以足够快的速度向外击打以触发捕捉
  • 缓慢回到空档位置,以免再次触发捕捉
  • 重复手势捕捉步骤10次或更多次以收集更多数据
  • 将数据从串行控制台复制并粘贴到名为csv的新文本文件中
  • 清除控制台窗口输出并重复上面的所有步骤,这次是在一个名为csv的文件中使用flex手势
  • 使向内弯曲足够快,以触发捕获,每次缓慢返回

注意,两个csv文件的第一行应该包含字段aX、aY、aZ、gX、gY、gZ

Linux提示:如果愿意,可以将传感器日志输出从Arduino直接重定向到命令行上的.csv文件。串行绘图仪/串行监视器窗口关闭后使用:

代码语言:javascript
复制
$ cat /dev/cu.usbmodem[nnnnn] > sensorlog.csv

训练TensorFlow

我们将使用谷歌Colab来训练我们的机器学习模型,该模型使用的是我们在前一节中从Arduino板上收集的数据。Colab提供了一个Jupyter notebook,允许我们在web浏览器中运行我们的TensorFlow训练。

Colab将指导您完成以下步骤:

  • 设置Python环境
  • 上传csv和flex.csv数据
  • 解析和准备数据
  • 建立和训练模型
  • 将训练后的模型转换为TensorFlow Lite
  • 将模型编码到Arduino头文件中

colab的最后一步是生成要下载的model.h文件,并将其包含在下一节的Arduino IDE手势分类器项目中:

让我们打开Colab中的笔记本,运行单元中的步骤:

arduino_tinyml_workshop.ipynb

IMU数据分类

接下来我们将在Arduino IDE项目中使用之前章节中我们刚刚训练并从Colab下载的model.h文件:

1.在Arduino IDE中打开imu_classifier.ino。

2.在IDE中创建一个新选项卡命名为model.h。

3.打开model.h选项卡并粘贴您从Colab下载的版本

4.上传草图:草图>上传

5.打开串口监视器:工具>串口监视器

6.做一些手势

7.将每个手势的置信度打印到串行监视器(0 =低置信度,1 =高置信度)

祝贺您,您刚刚为Arduino培训了第一个ML应用程序!

为了增加乐趣,emoji_button.ino示例演示了如何在Linux和MacOS中创建打印emoji字符的USB键盘。尝试将emoji_button.ino示例与imu_classifier.ino草图结合起来,创建一个手势控制的emoji键盘。

结论

这是一个激动人心的时刻,有很多东西可以在Tiny ML中学习和探索。我们希望这篇文章能让你了解它的潜力,并成为开始在你自己的项目中应用它的起点。

原文链接:

https://medium.com/tensorflow/how-to-get-started-with-machine-learning-on-arduino-7daf95b4157

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ATYUN订阅号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档