C#Arduino头饰MPU6050

时间:2016-04-22 16:27:09

标签: c# math arduino fft

我正在开发一个可以帮助残障人士使用计算机的应用程序。该应用程序从Arduino + MPU6050(位于头部上方)读取值,并将其转换为位置。串口的值类似于" x,y",此值的比例从-16000到+16000。

我在computemethod中处理这个值(我在这篇文章的底部报告)。一切正常,但我有一个问题。如果使用此软件/硬件的人员有某种类型的肌肉垃圾或抽搐,则该软件过于精确并会移动鼠标。我想消除这种慢性运动......我怎么能这样做?

这是computePosition的代码..

public void computePosition()
        {
            data = connection.readSeriaLine();
            words = data.Split(',');
            yaw = words[0];
            pitch = words[1];
            Int32.TryParse(pitch, out posiY);
            Int32.TryParse(yaw, out posiX);
            posiX = posiX / headSensitivity; 
            posiX = posiX - globalPosiX;
            posiY = posiY / headSensitivity;
            posiY = posiY - globalPosiY;
            int signX = Math.Sign(posiX);
            int signY = Math.Sign(posiY);
            int positionX = Cursor.Position.X;
            int positionY = Cursor.Position.Y;
            Cursor.Position = new Point(positionX + (signX * movementSensitivity), positionY + (signY * movementSensitivity));
     }       

非常感谢

1 个答案:

答案 0 :(得分:1)

我建议您在固件中使用运动伪像的数据处理。像帕金森症这样的疾病在1-20赫兹的频率下会发生震颤。您可以使用编程滤波器来适应确定的频率。

计算频率使用傅立叶变换加速度计和陀螺仪原始数据。

所以,一般来说你应该:

  • 将传感器的原始数据存储在相应的数组中
  • 做FFT
  • 阵列的过程过滤(从FFT切断主频)
  • 将数据发送到动作处理,然后发送到PC

您可以尝试在winform app中的X,Y坐标上执行相同的操作。您将使用什么方式取决于您在每种特定情况下遇到的人工制品。您甚至可能需要不同的过滤器设置,以便为每位患者提供有意义的疾病或自学算法。

P.S。如果使用“math”(或类似)标记标记问题,您可能会收到更多答案。因为它不在C#或Arduino字段中。

更新

在编程之前,我建议你做一些研究工作。首先,你需要从一个有特定疾病的男人身上传感器上收集数据。您需要至少30-60秒的包含刻度线运动伪影的数据。将数据写入3列:

以ms为单位的时间| x位置|位置

然后转到labchart reader download page,下载并安装它。打开带有数据的文件并在X和Y上执行“频谱”命令/视图。这将为您提供有关存在的频率的信息(包括伪像和“良好”移动)。我认为运动伪影频率具有更大的幅度。记住那些频率。

然后做“数字滤波器” - > “带阻”命令。并切断上一步的频率。我希望在这个过程之后你会看到没有人工制品的好图表。

然后你可以做编程。实现FFT和数字滤波并不是很难。对于FFT,您可以使用Aforge.Math库。