Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Arduino 机器学习实战入门(下)

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

作者头像
AiTechYun
发布于 2019-11-07 06:54:22
发布于 2019-11-07 06:54:22
3.3K00
代码可运行
举报
文章被收录于专栏:ATYUN订阅号ATYUN订阅号
运行总次数:0
代码可运行

编辑 | 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
代码运行次数:0
运行
AI代码解释
复制
$ 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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ES6基础-ES6的扩展
编辑器(VS Code, Atom,Sublime)或者IDE(Webstorm)
达达前端
2019/11/26
5450
「ES6基础」你需要知道的Array数组新方法(上)
在日常工作中我们经常会与数组打交道,因此需要熟练掌握数组操作的相关方法,ES6中关于数组的操作,又给我们带来了哪些惊喜呢,Array数组操作又添加了哪些新方法?
前端达人
2019/07/17
7580
「ES6基础」你需要知道的Array数组新方法(上)
ES6的语法
世间万物皆对象
2024/03/20
1840
ES6中数组做了哪些新扩展?
ES6通过扩展元素符...,好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列
用户6256742
2024/07/15
990
【ES6基础】Array数组的新方法(上)
在日常工作中我们经常会与数组打交道,因此需要熟练掌握数组操作的相关方法,ES6中关于数组的操作,又给我们带来了哪些惊喜呢,Array数组操作又添加了哪些新方法?
前端达人
2019/07/13
9030
【ES6基础】Array数组的新方法(上)
ES6学习笔记(一)
ES6的标准发布很久了,ES7和ES8已经出来了,直到现在才开始学习,已经有点晚了,希望可以赶得上吧。
CherishTheYouth
2019/07/30
5780
ES6学习笔记(一)
ES6、ES7、ES8学习指南
ES全称ECMAScript,ECMAScript是ECMA制定的标准化脚本语言。目前JavaScript使用的ECMAScript版本为ECMAScript-262。
CrazyCodeBoy
2018/10/09
1.7K0
JavaScript 又出新特性了?来看看这篇就明白了
https://juejin.im/post/5ca2e1935188254416288eb2
崔庆才
2019/05/06
1.6K0
ES6/ES7/ES8/ES9/ES10常用特性和新特性
变量的改变,添加了块级作用域的概念 let声明变量(块级作用域),let是更完美的var,它声明的全局变量不是全局属性widow的变量,这便解决了for循环中变量覆盖的问题 const声明常量(会计作用域)
公众号---人生代码
2020/06/28
1.5K0
ES6新特性
ES6的常用新特性简介,全部特性可参阅 Ecma-International MDN ES6入门 ES6 教程
WindRunnerMax
2020/08/27
7900
ECMAScript 6 笔记(二)
  用两个双字节的形式表达字符时,如果直接在\u后面跟上超过0xFFFF的数值(比如\u20BB7),JavaScript会理解成\u20BB+7。由于\u20BB是一个不可打印字符,所以只会显示一个空格,后面跟着一个7。
超然
2018/08/03
8140
ES6技术
JavaScript之前是LiveScript,具体的资料,大家自己查一下百度。网景公司的语言,这个公司为了把自己的公司语言,走出美国,迈向世界。把自己的语言提交给了ECMA。
张哥编程
2024/12/19
1070
ES6技术
ES6中数组新增扩展盘点
ES6通过扩展元素符...,好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列
@超人
2021/07/05
5730
ES6中数组新增扩展盘点
ES6总结
书到用时方恨少啊 于是2022年的规划又多了一项:多看书 不积跬步无以至千里 不积小流无以成江海
小吕
2022/09/26
6030
Javascript数组方法(ES5-ES6)
join(speparator):将数组的元素组起一个字符串,spearator为分隔符,省略的话则用默认用逗号为分隔符,该方法只接收一个参数,即分隔符。
用户9298250
2021/12/29
1.1K0
常见的数组基本用法
ES5方法:pop push shift unshift reverse sort splice
前端迷
2021/04/09
9450
JavaScript——ES6新增语法特性
ES的全称是ECMAScript,它是由ECMA国际标准化组织制定的一项脚本语言的标准化规范
岳泽以
2022/10/26
4330
JavaScript——ES6新增语法特性
ES6 数组方法归纳整理
Array.from() 可接收三个参数,第一个参数为类数组对象,第二个参数为映射函数,如果使用了映射函数,可以传第三个参数表示映射函数的this值。
全栈程序员站长
2022/06/27
6000
ES7、ES8、ES9、ES10、ES11、ES12新特性大全!
如果fromIndex为负值,使用数组长度 + fromIndex计算出的索引作为新的fromIndex,如果新的fromIndex为负值,则搜索整个数组。
zz_jesse
2024/07/04
3150
ES7、ES8、ES9、ES10、ES11、ES12新特性大全!
从零开始学 Web 之 ES6(六)ES6基础语法四
在这里我会从 Web 前端零基础开始,一步步学习 Web 相关的知识点,期间也会分享一些好玩的项目。现在就让我们一起进入 Web 前端学习的冒险之旅吧!
Daotin
2018/09/30
4670
相关推荐
ES6基础-ES6的扩展
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验