学生休息室

分享学生如何在日常项目中使用MATLAB和Simulink的技术和现实例子#学生成功#金宝app

用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中所见的串行监视器提交。Arduino (Arduino)文件(完整程序可以在我的github库):
并同时gx);并同时“t \”);
并同时”、“);
并同时(gy);以“t \”);
一旦设备向串行监视器提交数据,我们就在MATLAB脚本中收集数据:
S =串口(“COM7”, 115200);
fopen (s);
A = fscanf(s);
b = convertCharsToStrings(a);
B = regexp (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계정에로그하거나계정을새로만드십시오。