云天 发表于 2023-8-19 16:24:34

智能哑铃

本帖最后由 云天 于 2023-8-20 10:28 编辑

【项目背景】
    闺女开学就要升入高中了,据说衡水中学的军训很累,还有远足活动。所以这几天每天早起陪闺女晨跑,孩儿她妈还给买了哑铃,哑铃是每个5KG,孩子觉得锻炼起来还可以,但她妈觉得有些重,不适合闺女。又买了更小的3KG,大的就给我了。我微微一笑,“造”起来。

【项目设计】
设计原则:不能太影响哑铃原有重量,不影响活动过程,不影响存放。
设计原理:使用哑铃锻炼过程中,哑铃上升下降,运动速度会有快慢变化即产生加速度变化,可由加速度传感器测得。
硬件选择:主板使用Micro:bit,Micro:bit板载加速度传感器。
【设计亮点】

1.使用X轴、Y轴向量和的模来判断运动状态
2.使用指数移动平均(EMA)滤波算法
3.使用二进制点阵进行计数
【制作过程】

1、方案一,将Micro:bit固定在正面。

编写程序,获取三轴加速度值

在Excel中处理,并使用图表进行分析

可发现,运动过程中,Z轴加速度有明显变化。通过程序分析Z轴加速度值,可得运行状态。但同时,也发现,这样放置主控板,不利于存放(有可能放下时朝下压坏)。
2.方案二,将Micro:bit固定在侧面。

经数据分析发现,主控板如上图朝向运动时,Y轴加速度值变化明显。



经数据分析发现,主控板如上图朝向运动时,X轴加速度值变化明显。

3.矢量和的模

当主控板安装在侧面时,运动时,只有Z轴加速度值变化不明显。当主控板在侧面朝向不同时,运动时,xy两轴的数据是不确定的,但是二者矢量和的模却是有规律的(其实真正的加速度被正交分解了)。





4.(EMA)滤波
记第i个时间单位获取到的加速度的二个矢量和的模大小为xi,为了使数据更加平滑,分别使用两次的指数滤波(EMA)。



其中a i 是拟合曲线,b i均值,因此Δ h = a i − b i 即波峰波谷的高度差,得到Δ h后再跟设置好的阈值比较。
Δ h>highLimit 往高
Δ h<lowLimit 往低
p1=0.5
p2=0.002
highLimit=300
lowLimit=-300




上图是带入这些参数得到的曲线,我们可以看到经过p1参数的滤波得到的曲线(红色),已经大致拟合原数据(蓝色),而经过p2 参数得到的曲线(绿色)大致为均值
5.记录个数



通过上图与实际运动情况对比分析,两个大波峰这间的小波峰是运动到最上时平行回拉的过程,此波峰可通过设定的阈值忽略掉。此时,只需要判断一个上升接一个下降,就可将计数器加1。具体程序如下:




6.使用二进制点阵显示计数
使用Micro:bit点阵屏最中间一行,使用二进制方式亮灯显示计数。因只有五位,所以最大可显示计数31。如要显示更大的计数,可将其它点阵灯利用上。


(显示计数9)
【演示视频】

https://www.bilibili.com/video/BV1A44y1F7b9/?share_source=copy_web&vd_source=98855d5b99ff76982639c5ca6ff6f528

三春牛-创客 发表于 2023-8-22 14:04:24

厉害厉害

三春牛-创客 发表于 2023-8-22 14:06:02

赞赞赞!大神更新了!

三春牛-创客 发表于 2023-8-22 14:08:55

不过这样有点不方便,还要连上数据线。如果能加个物联网模块,上传到MQTT上面就更好了!另外,我有点怕哑铃不小心掉了,就砸碎micro:bit。。。

Amos Young 发表于 2023-8-22 15:27:16

厉害,膜拜大神!

花生编程 发表于 2023-8-25 10:06:22

厉害厉害

花生编程 发表于 2023-8-25 10:07:23

赞赞赞赞赞!!!{:6_215:}{:6_209:}

aYYSW8AepLLd 发表于 2023-12-17 10:41:06

厉害厉害
页: [1]
查看完整版本: 智能哑铃