
将肌电传感器与手头的m5stick-c组合起来,做成一个运动计数器。用来统计手臂挥手动作的次数。
这是肌电传感器收集到的肌电波形图,阈值使用40000。可以看见当有手臂挥动时,会有很多波被收集到,而手臂轻微运动时,波形为0.

// 动作收集任务
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
}
}这里再添加一个低通滤波器,让低频波通过,并将无波形的部分去除掉,获得新的波形如图。

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

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

工程源码:m5plus.zip
我要赚赏金
