这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » Gravity:肌电传感器(OYMotion)——运动计数器

共1条 1/1 1 跳转至

Gravity:肌电传感器(OYMotion)——运动计数器

助工
2025-12-22 09:37:03     打赏



image.png

将肌电传感器与手头的m5stick-c组合起来,做成一个运动计数器。用来统计手臂挥手动作的次数。

这是肌电传感器收集到的肌电波形图,阈值使用40000。可以看见当有手臂挥动时,会有很多波被收集到,而手臂轻微运动时,波形为0.

image.png


//  动作收集任务
void action_task(void *pvParameters)
{
  int Value, DataAfterFilter, envlope;
  unsigned long timeStamp=0;
  low_pass_filter_t low_pass_filter = {0}; // 定义滤波器

  // 初始化滤波器 采样周期0.005s 截至频率5hz
  Init_lowPass_alpha(&low_pass_filter, 0.005f, 10);
  float dataSrc;  //  采样数据
  float dataDest; // dataSrc=...//更新采样数据
  myFilter.init(SAMPLE_FREQ_1000HZ, NOTCH_FREQ_50HZ, true, true, true);
  while (1)
  {
    Value = analogRead(SensorInputPin); // 采集ADC值
    // filter processing
    DataAfterFilter = myFilter.update(Value);
    envlope = sq(DataAfterFilter);
    // any value under throhold will be set to zero
    envlope = (envlope > Throhold) ? envlope : 0;
    if (envlope > 0)
    {
      dataDest = Low_pass_filter(&low_pass_filter, envlope); // 获取滤波数据
      if(millis()-timeStamp>500) action_num++;
      timeStamp=millis();
      Serial.println(dataDest);
    }
    vTaskDelay(1 / portTICK_PERIOD_MS); // 等待1us
  }
}

这里再添加一个低通滤波器,让低频波通过,并将无波形的部分去除掉,获得新的波形如图。

image.png

然后再按每次波形发生的时间进行过滤动作,当出现波形与上次时间差值超过0.5秒,即视为一次新动作。就计数。这样也成功过滤掉了,传感器脱落造成的杂波。m5stick-c自带电池,并且还有表带,可以很好地固定在手臂上,就是传感器的放大器模块,还没想好如何固定,还需要想办法固定一下。

92d2d3f216bc338669895ec42f7036be.jpg

测试下来,效果还不错,比较柔缓的运动都能很好滴过滤掉,挥臂动作能够很好滴被捕捉到。

bfa4881e71c2d1aec42b7678017d87c3.jpg

工程源码:m5plus.zip


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]