学生休息室

分享学生如何在日常项目中使用MATLAB和Simulink的技术和现实例子#studentsuccess万博1manbetx

用MATLAB和Arduino破解你自己的私人健身教练

今天加入我们的是 安东尼Sharonov , Anthony最近获得了MATLAB的最佳使用奖 Hack3 世界上最大的高中生黑客马拉松!往下读,了解安东尼的方法可以帮助你改善你的锻炼形式!交给你了,安东尼……
headshot.JPG
大家好!我是安东尼Sharonov我的父母移民到美国后,我出生在费城。从那里我们搬到了康涅狄格州,在那里我第一次对工程学产生了兴趣。我的中学有一门课,让我可以探索自己的兴趣,我们为科学展览做项目。现在,我每天的大部分时间要么是摆弄电子产品,要么是打网球和网络游戏,要么就是和朋友们出去玩。我也是一个摇滚迷,更确切地说,我是枪花乐队、电光乐团、奥兹·奥斯本和史蒂夫·米勒乐队的粉丝。

灵感

看电影长大的2001太空漫游千钧一发,黑镜子我想创造一些我能在这些电影中看到的东西。当然,我不能创造一个飞行的机器或其他东西,我想做一些你可以在过场动画中找到的东西。这些电影中的过场动画通常涉及主角的训练或锻炼。从那时起,我开始思考未来我将在健身房看到的东西。

分解问题

随着疫情的蔓延,许多人不得不开始在家工作。这导致了在家锻炼的热潮,因为这些人不舒服/无法进入公共健身房。这导致了许多新手和没有经验的人拿着哑铃。我就是其中之一,我养成了一个不正确的姿势的坏习惯,只有在回到公共健身房的时候我才会改正。所以,我决定创建BreakBE来帮助解决这个常见的问题。这可以在科幻电影中看到,未来的设备帮助人们锻炼。

我是如何实现它的?

BreakBE是一款使用Arduino UNO和加速计(MPU6050)来跟踪哑铃在二头肌弯曲时的加速度的设备。然后将原始数据发送到MATLAB脚本中进行清理和绘制。加速度计只能检测到x和y方向上的相对位置(参见“我遇到的挑战”)。当一个人做了正确的二头肌卷曲时,x和y方向的加速度都很小,因此位置不会有太大的变化。然而,糟糕的姿势是一个人用动量举起重物。为了产生这个动量,这个人必须在y方向大力加速。因此,MATLAB脚本从加速度计绘制(x,y),并在y方向的位置超过阈值时停止记录。
hardwareTogether.jpg
安装在MPU6050上的哑铃连接Arduino Uno
schematic.jpg
硬件连接示意图
首先,需要收集MPU6050的数据。我用了电子猫图书馆示例,它允许我从传感器收集原始数据,并通过串行监视器提交它,正如在mpu中看到的。ino (Arduino)文件(完整的程序可以在我的github库):
并同时gx);并同时“t \”);
并同时”、“);
并同时(gy);以“t \”);
一旦设备向串行监视器提交数据,我们在MATLAB脚本中收集数据:
S = serialport(“COM7”, 115200);
fopen (s);
A = fscanf(s);
b = convertCharsToStrings(a);
B = regexprep(B,“\ s +”);%删除空格
x = extractBefore(b,”、“);%在逗号前创建字符串x数据,因为原始数据的格式是(x,y)
y = extractAfter(b,”、“);%在逗号后面创建y数据字符串,因为原始数据的格式是(x,y)
X = str2double(X);
Y = str2double(Y);
之后,我们将数据绘制为散点图,并用一条水平线表示阈值
散射(datax datay);
线(datax datay);
yline (5“r”);%恒定水平线显示阈值
%停止并显示错误格式的文本时,y超过5(如下)
如果Yinters > 0
文本((max (datax) -100), (max (datay) -0.5),“坏形式! !”);
返回
结束
检测到%阈值
如果Y > 5
Yinters = datay(datay==y);
Xinters = datax(datay==y);
disp (yinters);
结束

结果

Goodform-GIF.gif
良好的形式——数据点反弹,但仍然低于虚线表示的y = 5阈值
Badform-GIF.gif
糟糕的形式——数据点四处反弹,然后在虚线表示的y = 5阈值以上飙升

为什么我要用MATLAB?

我第一次使用MATLAB是在两年前的一个研究项目中。我发现MATLAB在模拟那个项目的物理结构方面非常出色,可以轻松地操作数组和矩阵。在线版本让我可以轻松地在不同的电脑上工作,而不用麻烦地移动文件。代码本身非常紧凑,这是我个人非常喜欢的。对于这个项目,我想利用MATLAB的良好的绘图软件。如果我知道我想让我的情节看起来像什么,我就能实现它。与其他语言相比,该文档非常易读,因此绘图甚至更容易!

我遇到的主要收获和挑战:

问题1-我原本完全没有理解MPU6050是如何工作的。最初,我认为它能够记录位置,就像如果我把设备放在一个点上,它就可以不断地给出设备相对于起点的位置。然而,这是行不通的。来自设备的(x,y)数据给出了相对于加速度的位置。如果我保持它不动,然后移动它,它会从起始点得到(x,y)但一旦它再次变为静止,数据就回到(0,0)。所以,我必须随机应变,当加速度在y方向上变得太大时,我要检测。
问题2-我原本想用ESP32无线数据传输到电脑,这样我就不受电线距离的限制了。然而,我的ESP32坏了,输出的电压只有0.8V,不能为MPU6050供电。
总的来说,这个项目对于周末的黑客马拉松来说是很有趣的。很多方面都可以改进,比如让它无线化。此外,最好开发一个公式来确定用户判断不良形式的阈值。通过反复测试,我得到y = 5,但肯定有一种方法可以根据身高/臂长来确定。最后,如果有更好的用户界面和更多的锻炼,而不仅仅是二头肌卷曲,那就太好了。

|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。