本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于 Seeed XIAO BLE Sense 的运动识别系统

发布时间:2022-05-18
分享到:

基于 Seeed XIAO BLE Sense 的运动识别系统

发布时间:2022-05-18
分享到:

我们将向您展示如何利用 XIAO BLE Sense 上的加速度计结合 Edge Impulse 来启用运动识别。

软件
下面列出了所需的库:

  • Seeed_Arduino_LSM6DS3-master
  • U8g2

开始使用

首先,我们需要运行一些演示来检查电路板是否运行良好。如果你的项目同样没问题,那么就可以继续下一条指令。

检查光导塑料光纤的位置

按照本教程运行 Bink 演示。如果您看到前孔中的红灯,则表示成功。

检查电路连接
打开 Arduino IDE,导航到 Sketch -> Include Library -> Manage Libraries... 并U8g2 library在 Library Manager 中搜索并安装。

安装完成后,复制以下代码运行即可。

#include <Arduino.h>
#include <U8x8lib.h>
// U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);
U8X8_SSD1306_64X48_ER_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);
// U8X8_SSD1306_64X32_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE);
// U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);   // OLEDs without Reset of the Display
void setup(void) {
u8x8.begin();
//u8x8.setFlipMode(2);   // set number from 1 to 3, the screen word will rotary 180
}
void loop(void) {
u8x8.setFont(u8x8_font_amstrad_cpc_extended_r);
u8x8.drawString(0,0,"idle");
u8x8.drawString(0,1,"left");
u8x8.drawString(0,2,"right");
u8x8.drawString(0,3,"up&down");
}

上传代码并拔下XIAO BLE后,如果看到相同的结果,则表示成功。

检查加速度计
通过 Arduino IDE 将以下代码上传到 XIAO BLE:

#include "LSM6DS3.h"
#include "Wire.h"
//Create a instance of class LSM6DS3
LSM6DS3 myIMU(I2C_MODE, 0x6A);    //I2C device address 0x6A
#define CONVERT_G_TO_MS2    9.80665f
#define FREQUENCY_HZ        50
#define INTERVAL_MS         (1000 / (FREQUENCY_HZ + 1))
static unsigned long last_interval_ms = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
while (!Serial);
//Call .begin() to configure the IMUs
if (myIMU.begin() != 0) {
Serial.println("Device error");
} else {
Serial.println("Device OK!");
}
}
void loop() {
if (millis() > last_interval_ms + INTERVAL_MS) {
last_interval_ms = millis();
Serial.print(myIMU.readFloatGyroX() * CONVERT_G_TO_MS2,4);
Serial.print('\t');
Serial.print(myIMU.readFloatGyroY() * CONVERT_G_TO_MS2,4);
Serial.print('\t');
Serial.println(myIMU.readFloatGyroZ() * CONVERT_G_TO_MS2,4);
}
}

打开串口监视器检查输出:

如果一切正常,我们可以继续将 XIAO BLE 连接到 Edge Impulse。

XIAO BLE 上的运动识别与 Edge Impulse 连接

  • 步骤 1.在Edge Impulse中创建一个新项目

  • 步骤 2.选择“Accelerometer data”,点击“Let's get started!”

  • 步骤 3.在您的计算机中安装Edge Impulse CLI 。
  • 步骤 4.在您​​的or中运行命令或启动它:

edge-impulse-data-forwarder

  • 步骤 5.我们需要使用 CLI 将 XIAO BLE Sense 与 Edge Impulse 连接。首先,登录您的帐户并选择您的项目

命名加速度计和设备

回到Edge Impulse“数据采集”页面,如果连接成功,结果应该是这样的。您可以在页面右侧找到“XIAO BLE Sense”的设备。

  • 步骤 6.选择传感器为“3 轴”。将您的标签命名为upand down,将 Sample length (ms.) 修改为 20000,然后单击 start sampling。

  • 步骤 7.上下摆动 XIAO BLE Sense 并保持运动 20 秒。您会发现采集显示如下:

  • 步骤 8.通过单击右上角的原始数据并选择“拆分样本”来拆分数据。单击 +添加细分,然后单击图表。重复 20 次以上以添加片段。单击拆分,您将看到每个样本数据 1 秒。

  • 步骤 9.重复步骤 7.和步骤 8.并用不同的名称标记数据以单击不同的运动数据,如left和right、clockwise等anticlockwise。提供的例子是上下、左右、圆形的分类。

注意:第8步中的分段时间是1秒,这意味着您在第7步中至少在一秒钟内进行一次上下摆动。否则,结果将不准确。同时,您可以根据自己的运动速度调整分段时间。

  • 步骤 10.重新平衡数据集,点击Dashboard和下拉页面找到Perform train / test split

单击执行训练/测试拆分并选择是并确认

  • 步骤11.创建脉冲

单击创建脉冲-> 添加处理块 -> 选择光谱分析-> 添加学习块 -> 选择分类 (Keras) -> 保存脉冲

  • 步骤 12.光谱特征

单击并设置

点击光谱特征-> 下拉页面点击保存参数 -> 点击生成特征

输出页面应该是这样的:

  • 步骤13 :训练你的模型

点击 NN Classifier -> 点击 Start training -> 选择 Unoptimized (float32)

  • 步骤 14.模型测试

单击模型测试 -> 单击全部分类

注意:如果你的准确率低,你可以通过增加训练集和延长采样时间来检查你的数据集

  • 步骤 15.构建 Arduino 库

点击部署->点击Arduino库->点击构建->下载.ZIP文件

  • 步骤 16. ZIP 文件的名称非常重要,默认设置为您的 Edge Impulse 项目的名称。像这里的项目名称是“XIAO-BLE-gestures_inferencing”。选择文件为“”将“.ZIP 文件”添加到您的 Arduino 库中

  • 步骤 17:在此处下载代码。将你的头文件的名称更改为你自己的名称并上传它。

  • 步骤 18.移动或按住 XIAO Sense 并检查结果:

单击 Arduino 右上角的监视器。

左右移动 XIAO Sense 时:

监视器将输出如下内容:

输出显示如下:

恭喜!你完成了项目。

如果您对此项目有任何想法、意见或问题,请在下方留言。

以上内容翻译自网络,原作者:Seeed R&D Team,如涉及侵权,可联系删除。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论