当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]在新冠疫情之前,人们在日常生活中不得不主动或被动地进行一些体力活动,例如通勤去学校、办公室或工作场所。然而,疫情期间,许多人的生活方式发生了改变。大多数人开始居家远程办公,身体活动受限。此外,在学校或办公室中,人们需要保持正确的坐姿,但在家中工作时,可以随意选择任何舒适的坐姿或躺姿,甚至因懒惰而放松。长期缺乏活动和不良坐姿将引发严重的健康问题,其中最主要的问题是由于办公椅坐姿不良导致的脊柱疼痛。本项目旨在开发一款用于监测活动与姿势并及时提醒的可穿戴设备,帮助用户识别自身是否久坐不动或懈怠,并适时提醒其起身活动或调整坐姿。如果有人希望重现该项目,我将尽可能提供详细的分步操作说明。

在新冠疫情之前,人们在日常生活中不得不主动或被动地进行一些体力活动,例如通勤去学校、办公室或工作场所。然而,疫情期间,许多人的生活方式发生了改变。大多数人开始居家远程办公,身体活动受限。此外,在学校或办公室中,人们需要保持正确的坐姿,但在家中工作时,可以随意选择任何舒适的坐姿或躺姿,甚至因懒惰而放松。长期缺乏活动和不良坐姿将引发严重的健康问题,其中最主要的问题是由于办公椅坐姿不良导致的脊柱疼痛。本项目旨在开发一款用于监测活动与姿势并及时提醒的可穿戴设备,帮助用户识别自身是否久坐不动或懈怠,并适时提醒其起身活动或调整坐姿。如果有人希望重现该项目,我将尽可能提供详细的分步操作说明。

环境搭建与开发

我正在使用 macOS 进行开发。nRF Connect for Desktop 是一款跨平台工具,可用于 nRF5340 的测试与开发。请按照上方链接中的安装指南进行操作。安装完成后,打开应用程序并点击“Toolchain Manager”以安装 nRF Connect SDK。

默认情况下,该 SDK 在 macOS 中安装在 /opt/nordic/ncs 目录下。由于我们将使用 Adafruit 显示屏扩展板配合 nRF5340 DK,Zephyr 当前版本的 nrf5340 板文件并未完全支持 Adafruit 显示屏扩展板所需的 Arduino 定义。为解决此问题,我们需要应用一个补丁。请按照以下命令操作以应用该补丁。

此外,我们将在 Adafruit 扩展板中使用内置的 microSD 卡,并且需要将 boards/shields/adafruit_2_8_tft_touch_v2/adafruit_2_8_tft_touch_v2.overlay 文件中 arduino_header 引脚定义从 12 改为 11,具体如下所示。

完成环境配置后,需执行以下命令来激活它。

硬件设置

带有显示屏扩展板的 nRF5340 DK 用作 BLE 中心设备,而连接到 ADXL345 加速度计的 nRF52840 路由器则作为 BLE 周边设备。连接图示例可在“原理图”部分找到。实际物理连接如图所示。

我们需要在BLE外设应用中为ADXL345加速度计添加一个叠加文件,该文件用于定义加速度计的I2C引脚定义和从设备地址。

应用程序

为此概念验证,创建了3个项目:

•nrf52840_dongle_ble_peripheral_acc(作为数据节点)

•nrf5340_dk_ble_central_acc(用于数据采集)

•nrf5340_dk_ble_central_inf(用于模型推理)

数据收集

训练数据收集了4个类别:

•跑步

•步行

•坐姿良好

•坐姿不良

BLE外设(nRF52840转接头)以25Hz的采样频率采集三轴加速度计数据。每秒向连接的中央设备发送一次包含150字节(25(Hz)×3(轴)×2(16位))有效载荷的数据包。通过显示屏扩展板设计了一个易于使用的图形用户界面(GUI),可选择训练标签并存储数据。BLE中央设备从外设接收加速度计数据,并将其保存到SD卡中(SD卡内置于显示屏扩展板内)。三轴加速度计数据以CSV文件格式保存,文件名由标签与自增整数拼接而成。示例如下:

为 nRF5340 DK 构建并刷入数据采集固件

使用 USB 数据线将 nRF5340 DK 连接到电脑,然后运行以下命令:

为 nRF52840 Dongle 构建并刷入固件

将 nRF52840 dongle 连接到电脑,然后运行以下命令:

我们无法使用 west 工具来刷入 nRF52840 的固件。我们将使用 nRF Connect > Programmer。首先按压 dongle 上的复位按钮,从左上角下拉菜单中选择设备,点击“添加 Hex 文件”按钮,浏览并选择 AdvancedWearables/nrf52840_dongle_ble_peripheral_acc/build/zephyr/zephyr.hex 文件,然后点击“写入”按钮。

将数据上传至 Edge Impulse Studio

Edge Impulse Studio 为 nRF5340 DK 创建的固件非常方便,它能自动将通过 USB UART 连接传来的数据上传到 DK。但我希望开发一个可穿戴设备,既可用于现场数据采集,也可用于模型推理。在行走或跑步时携带笔记本电脑进行数据采集十分不便,而且现场可能没有网络连接。因此,我设计了一个完全独立的设备,通过 BLE 从外设捕获数据,并将其保存到 microSD 卡中。捕获的数据会被复制到电脑上。我编写了一个脚本(如下所示),用于将原始加速度计数据转换为Edge Impulse Studio训练所需的数据采集JSON格式。

首先,将microSD卡中的所有原始数据复制到电脑的raw_data目录中。你需要在Edge Impulse注册一个账户,并创建新项目以上传数据。

此外,你的Edge Impulse Studio项目需要一个HMAC密钥,用于生成数据采集格式的签名。你可以从仪表板 > 密钥[选项卡]中复制HMAC密钥,如下图所示。

创建一个config.ini文件,内容如下,并使用你自己的HMAC密钥:

执行以下命令:

转换后的数据如下所示。采样率为25 Hz,因此interval_ms为40ms,如果传感器采样率不同,可在脚本中进行相应修改。

数据通过Edge Impulse CLI上传。使用以下命令上传所有JSON文件,系统会自动将其拆分为训练集和测试集。

我们可以在“数据采集”页面查看已上传的数据。

培训

转到 Impulse Design > 创建 Impulse 页面,点击“添加处理模块”,选择“频谱分析”模块,该模块非常适合用于分析加速度计的重复性数据。它能够提取信号在时间上的频率和功率特征。在同一页面中,点击“添加学习模块”,选择“神经网络(Keras)”,该模块可从数据中学习模式,并将这些模式应用于新数据,非常适合对运动数据进行分类。由于坐姿识别需要较长的持续时间,因此我为时间序列数据模块选择了2000毫秒的窗口大小和100毫秒的窗口递增步长。然后点击“保存 Impulse”按钮。

接下来,转到 Impulse Design > 频谱特征页面,点击“保存参数”按钮。我保留了默认值,这在我看来效果良好。

点击“保存参数”按钮后,会跳转到另一个页面,此时应点击“生成特征”按钮。特征生成通常需要几分钟完成。我们可以在特征探索器中看到生成的特征的3D可视化结果。可以看出,行走和跑步的数据有明显的区分,但坐姿的数据则相对接近。神经网络的工作就是训练和学习模式,从而在不同类别之间实现更好的分离。

现在前往 Impulse Design > NN Classifier 页面,定义神经网络架构。我创建了一个包含 4 个密集层(全连接)的模型,非常适合用于频谱分析数字信号处理模块的输出。训练周期设置为 50 次。

然后点击“开始训练”按钮,等待几分钟直到训练完成。我们可以在下方看到训练结果。该模型的准确率为 86.8%,对于如此小规模的数据集来说表现不错,但仍有机会进一步提升。此外,混淆矩阵清楚地显示了 Sitting_Good 和 Sitting_Bad 类别存在误报情况,可以通过收集更多这两个类别的数据来改善。在本概念验证项目中,我们将使用这个模型。

部署

Edge Impulse Studio 支持 nRF5340 DK 部署固件二进制文件,但本项目中我们使用了其他功能,例如连接外设以获取数据,并在 Adafruit 显示板上显示结果。因此,在部署页面中,我们将选择“创建库”>“C++ 库”选项。对于优化选项,我们选择启用 EON 编译器,以降低模型的内存占用。此外,我们选择非优化(Float32)模型,因为其精度优于量化(Int8)模型。现在点击“构建”按钮,几秒钟后,库包将下载到本地计算机。

为了进行推理,我创建了一个新的 nRF5340 DK 项目,该项目借鉴了数据采集项目中的大部分 BLE 和显示代码。由于推理库主要基于 C++ 代码,我们需要在项目设置中进行一些更改:

- 将数据采集项目中复制到 src 目录下的所有 *.c 文件重命名为 *.cpp

- 在部分头文件中使用 extern "C"

- 在 prj.conf 中添加 C++ 配置

接下来,解压并把以下文件移动到项目根目录:

•CMakeLists.txt

•edge-impulse-sdk

•model-parameters

•tflite-model

为 nRF5340 DK 构建并刷入推理固件

使用 USB 数据线将 nRF5340 DK 连接到计算机,并运行以下命令:

推理演示

BLE 中心设备(nRF5340)从 BLE 周边设备采集 2000 毫秒的加速度数据后进行推理。推理日志(如下所示)显示,DSP 处理时间为 8 毫秒,分类时间为 1 毫秒,速度极快。由于推理速度快,因此不会累积到每次推理周期中因外围设备数据积累而产生的总延迟 2 秒。

结论

这个项目最初是为测试nRF5340 DK在机器学习可穿戴设备项目中的能力而启动的。起初看起来是一项艰巨的任务,但经过一段时间的学习和掌握SDK后,过程变得轻松且令人满意。结果发现,nRF5340 DK是一款性能出色的硬件设备,非常适合TinyML应用。此外,Edge Impulse Studio是一款易于使用的在线工具,可用于训练和部署机器学习模型,实现快速原型开发。我要感谢Nordic Semiconductor提供本次竞赛的免费硬件,这促使我重新温习了生锈的C/C++技能。

本文编译自hackster.io

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