这个项目将为您介绍一款智能运动手环 GetFit,您的终极健康和锻炼伙伴。GetFit 是一款易于使用、可教的健身追踪器,能够检测到无穷无尽的各种锻炼。它由 Arduino Nano 33 BLE Sense 和 Edge Impulse 提供支持,是一个完全开源的项目。
特点如下:
Can Count 无限练习
完全开源
适用教学
可充电
估算每天和每周的卡路里燃烧
第 1 步:Arduino Nano 33 BLE Sense(项目大脑)
对于我们正在使用的这个项目,Arduino nano 33 BLE sense。这是一款支持 3.3V AI 的板,采用最小的可用外形尺寸。它带有一系列嵌入式传感器。
LSM9DS1(9轴IMU)
LPS22HB(气压计和温度传感器)
HTS221(相对湿度传感器)
APDS-9960(数字接近、环境光、RGB 和手势传感器)
MP34DT05(数字麦克风)
在这里,我们利用 LSM9DS1 传感器的 3 个加速通道来计算活动。
使用基于规则的编程来识别活动是一项非常艰巨的任务,因为人们不会每次都以相同的方式执行活动。但是机器学习可以轻松处理这些变化。要创建机器学习模型,您通常会在 Python 等高级语言之上使用 TensorFlow 或 Scikit-learn 等框架。仍然学习其中一些框架有很多好处,但在这里我们将使用一个名为 Edge Impulse 的工具,因为它只会让模型训练变得更加容易。幸运的是,Edge Impulse 完全支持 Arduino Nano 33 BLE Sense。
第 2 步:边缘脉冲
使用 Edge Impulse,您可以快速收集真实的传感器数据,在云端根据这些数据训练 ML 模型,然后将模型部署回您的 Arduino 设备。从那里您可以通过单个函数调用将模型集成到您的 Arduino 草图中。
本文档包含“如何开始使用 Edge Impulse 和 BLE Sense 板”?还有示例机器学习项目。如果您是该领域的初学者,请不要忘记尝试。
第 3 步:数据采集
数据是机器学习模型中不可避免的一部分,数据采集和模型生成请访问 edgeimpulse.com。
确保您的设备连接到边缘脉冲。
然后我们用几根扎线带和一块海绵将 Arduino 连接到我的手臂上,以使模型对每项活动都非常准确。然后我们开始采样。
我们收集了大约 17 分钟的数据。你拥有的数据越多,你的模型就越好。另外,尽量保持一个平衡的数据集。为模型提供平衡的数据集将产生更高的准确性。
在这里,我们还通过使它们在运动的不同开始和结束位置保持静止来采取空闲状态。我们还执行了拆分数据集来测试模型,这在分析模型时确实是一个很好的做法。训练数据用于训练您的模型,而测试数据用于在训练后测试您的模型的准确性。
第 4 步:特征提取
弄清楚从我们的数据中提取哪些特征以提交给我们的模型进行训练并最终进行推理,这是我们在机器学习中可以做的最重要的事情之一。边缘脉冲不是挑选一些原始样本,而是以各种方式组合样本以生成独特的特征,帮助描述特定运动中正在发生的事情。
我们应该首先创建一个脉冲,这是 Edge Impulse 对机器学习管道的说法,以便生成特征。您应该看到第一个块,它代表您的原始数据。这里我们使用窗口大小和窗口增加为 2000 毫秒,因为它非常适合我们的数据。处理块是指我们在边缘脉冲中的特征提取方法,边缘脉冲会为我们的运动数据推荐频谱分析块,这就是我们想要的。在学习槽中,我们添加了一个神经网络交叉块。尽管神经网络很棒,但它们有一个主要问题。在处理以前从未见过的数据(如新活动)时,它们毫无用处。因为神经网络只能访问训练数据,所以他们无法对此进行评估。即使你为它提供的东西与以前所见的完全不同,它仍然属于四个类别之一。因此,我们还添加了一个 Anamoly 检测块来查找运动中的异常情况。它们实际上会在输出中脱颖而出。在设计冲动之后,我们为这些数据生成了特征。
第 5 步:神经网络
神经网络是一系列算法,通过模拟人脑运作方式的过程,努力识别一组数据中的潜在关系。从这个意义上说,神经网络是指神经元系统,无论是有机的还是人工的。
神经网络可以适应不断变化的输入;因此网络可以生成最好的结果,而无需重新设计输出标准 现在是时候通过使用这些提取的特征来生成模型了。这些是我们用于生成模型的神经网络设置和架构。
如果您对此没有任何想法,请不要担心边缘冲动会自动为您建议最佳架构和设置。
通过使用这些设置,我们为模型实现了 93% 的准确度。这似乎非常棒。下图显示了我们模型的混淆矩阵。
第 6 步:异常检测
异常检测的主要目的是在锻炼期间识别异常,因此我们将忽略它们。我们已经计算了数据的特征重要性,因为它们在异常检测中非常重要。
边缘脉冲实际上使用 K-means 聚类来进行异常检测。此方法查看数据集中的数据点,并将相似的数据点分组到预定义的 K 个集群中。可以添加阈值来检测异常:如果数据点与其最近的质心之间的距离大于阈值,则为异常。
上图显示了异常浏览器窗口,当我们尝试对俯卧撑运动(测试数据)进行分类时。如您所见,数据包含在集群中。对于异常,数据点将在集群之外。
第 7 步:模型测试
是时候用测试数据验证我们的模型,看看它在新数据上的表现了。
它对测试数据进行了很好的分类,可以高达 87% 的准确率。
第 8 步:部署
现在我们有了 ML 模型,是时候将它与我们的边缘设备(Arduino Nano 33 BLE sense)一起部署了。您训练的 ML 已经针对嵌入式硬件(如微控制器)进行了优化。将 ML 模型部署到 Nano 33 BLE Sense 板上非常简单,只需导航到左侧菜单上的部署即可。
在 Create library 部分,单击 Arduino library,然后在底部单击 Build 按钮。这将启动一个过程,Edge Impulse 为您的 Arduino 板创建一个库,其中包含您训练的 ML 模型。构建过程完成后,您的浏览器应该开始下载生成的库。在边缘脉冲中,有用于为 NN 分类器选择优化的选项。通过选择合适的,我们将获得更好的设备性能。令人惊讶的事实是,Edge 冲动会为我们推荐最好的。通过启用编译器,我们将以更少的内存获得相同的精度。
第 9 步:数据流
为了将数据发送到云端,我们使用了 33 BLE sense 的蓝牙低功耗。设备实际上会通过蓝牙将数据发送到手机,然后手机将这些数据转发到 firebase,这就是我们在这个项目中的数据库。
低功耗蓝牙,简称BLE,是蓝牙的一种省电变体。BLE 的主要应用是少量数据的短距离传输(低带宽)。与始终开启的蓝牙不同,BLE 始终处于睡眠模式,除非在启动连接时。这使得它消耗非常低的功率,我们将获得更多的运行时间。
这就是我们使用 BLE 在手机和 Arduino nano 33 BLE 感应器之间进行通信的原因。在这种情况下,Arduino 将充当外围设备,而手机将充当中央设备。要使用 BLE 感知的 BLE 功能,我们正在使用 Arduino BLE 库。
Firebase 是一个移动和 Web 应用程序开发平台。Firebase 让开发人员可以专注于打造出色的用户体验。您不需要管理服务器。您不需要编写 API。Firebase 是您的服务器、您的 API 和您的数据存储,所有这些都编写得非常通用,您可以对其进行修改以满足大多数需求。在我们的项目中,我们使用 Firebase 的实时数据库来即时发布和检索数据,这样就没有时间延迟。
查找 Firebase 配置
转到 Firebase
然后转到设置》项目设置
在您的应用下 》 SDK 设置和配置 》 配置
第 10 步:用户界面
我们为该设备设计了一个神经形态伴侣网络应用程序。Neumorphism 或软 UI 是一种视觉风格,它结合了背景颜色、形状、渐变、高光和阴影,以确保图形强烈的按钮和开关。所有这些都可以实现柔软的挤压塑料外观和几乎 3D 造型。
在开始锻炼之前,您需要在个人选项卡中提交您的个人详细信息,例如姓名、年龄、性别、身高和体重。此信息用于分析锻炼。
你可以在这里找到完整的代码。
第11步:锂电池
锂聚合物电池的主要优点是它们的能量或密度大约是镍镉或镍氢电池的四倍。它们也非常轻巧且柔韧。这些优势让我们为设备选择锂聚合物电池。为了减小尺寸,我们在这里使用了 160 毫安时的电池,这可以为设备提供最佳运行时间。LiPo的最大电压为4.2v,标称电压为3.7V。电压从最大值 4.2 开始,在电池寿命的大部分时间里迅速下降到 3.7V 左右。一旦你达到 3.4V,电池就会没电,在 3.0V 时,截止电路会断开电池。
第 12 步:直流电压升压器
实际上,有两个选项可以为 Arduino 供电,要么给标准 3.3V 到 3.3V 引脚,要么给 Vin 提供 (5-21) 伏特。在这两种情况下,我们都应该非常小心。
VIN(和 USB)进入 3.3V 开关稳压器。这具有 4.5V 的最小输入电压。当我们将 3.3V 从电源直接馈入电路板时。我们应该通过切断那个链接来将该调节器的输出与电路的其余部分隔离(参见上图)。
注意:如果您提供超过 3.3V 的电压,您可能会损坏电路板。
所以在这里我们应该给 Arduino 的 Vin 提供 5V 电压,但锂电池在充满电后最多只能提供 4.2V 电压。
为了解决这个问题,我们使用了升压转换器模块,该模块可在 1.5V 至 5V 的各种输入范围内提供 5V DC 稳定电压输出。
这是升压转换器模块,可在 1.5V 至 5V 的各种输入范围内提供 5V DC 稳定电压输出。这个小型微型电路可提升电压电平并提供放大的稳定 5V 输出。对于不同的输入范围,它消耗不同的电流量来产生平衡的输出。
使用该模块时,必须符合以下条件1。输入电压不能大于标称电压,否则会烧坏模块2。输入功率必须大于输出功率,否则输出电压会低于标称电压。 3.输出负载不能大于标称负载,否则输出电压会小于标称电压。
启动电压0.8V,输出电流7mA
输入1-1.5V,输出5V 40-100mA
输入1.5-2V,输出5V 100-150mA
输入2-3V,输出5V 150-380mA
输入3V以上,输出5V 380-480mA;
DC-DC升压转换器模块工作频率为150KHZ,典型转换效率为85%
第 13 步:TP4056 锂离子电池充电器模块
TP4056模块是一个线性充电器锂离子电池。该模块使用 TP4056 锂离子充电控制器 IC 和单独的保护 IC。它们可以为由单节电池组成的电池充电。最重要的是,它支持恒流恒压充电模式。用户可以选择这两种模式。该模块提供 1 安培的充电电流。
但是我们的电池只需要170毫安的电流。该模块的有趣之处在于它有一个 RPROG 电流设置电阻器 (R3)。因此,我们可以通过更改该电阻轻松调整输出电流。上图显示了 R3 及其当前值。
TP4056 充电器模块采用 0805 SMD 封装,用于电阻。我们把 1.2K 的电阻换成了 10K。现在它可以为电池提供130毫安的电流。所以我们的设备可以通过这个模块轻松充电。
注意:您也可以为电池提供 1 安培的电流,但不会持续很长时间。
第 14 步:4mm SPDT 1P2T 滑动开关
4mm SPDT 1P2T 滑动开关与 TP4056 充电器模块一起使用,用于调节充电控制器和升压器之间的电流。上述模式显示了 SPDT 开关中的电流。
第 15 步:用于案例的 Fusion 360
为了制作外壳,我们使用了 Fusion 360,外壳实际上由主体和盖子两部分组成。主体和盖子通过摩擦配合连接。为了连接 TP4056 充电器模块,我们实际上设计了一个可以插入内部的支架。支架实际上是一个单独的文件,没有与正文合并。
在商店里找不到便宜的带扣,这也是我们设计它的原因。这些是我们设计的 3D 打印部件。蓝色和白色的颜色组合使它更具吸引力。我们总共有 4 个文件。点击下方名称可以直接下载:
knuckle.step
LId.step
Main_File.step
Stand.step
第 16 步:手环带子
这种设计实际上是为手臂设计的,作为臂章。钩环机构与这个 1/2 英寸的松紧带一起用作紧固件。所以任何人都可以通过轻松调整表带来佩戴这款表带。
第 17 步:组装硬件
连接表带后,我们开始按照上面给出的示意图组装硬件。使用上图作为参考,我们的 Get-Fit 现在可以用了。
全部0条评论
快来发表一下你的评论吧 !