如何将mpu6050的原始数据转换为控制鼠标光标?



我有一个项目要完成,这是关于"使用传感器控制PC鼠标光标",其中我必须使用Java,Arduino和MPU-6050作为传感器。

我计划使用以下代码进行鼠标光标移动

public void moveRight() throws AWTException {
PointerInfo a = MouseInfo.getPointerInfo();
Point b = a.getLocation();
int x = (int) b.getX();
int y = (int) b.getY();
Robot r = new Robot();
r.mouseMove(x+10, y );}

我计划创建 moveRight(),moveLeft()moveUP(),moveDown() 函数用于鼠标光标移动。 此功能将在MPU-6050传感器移动的基础上调用。

但我不知道如何将 MPU-6050 的原始数据转换为光标移动的可用数据。

MPU6050有一个加速度计和一个陀螺仪(也是一个温度传感器)。您需要的是设备的方向,为此,您可以计算Euler角度。
MPU6050抛出原始加速度计和陀螺仪值,您必须将其转换为Euler angles,这些值可以通过任何串行总线发送到您的 PC。其余的Java代码将负责。

如何开始
1. 使用 arduino 库在这里和这里获取原始读数
(这是一个著名且写得很好的库)
2.使用互补滤波器(使用Madgwick的,你只需要acc和陀螺仪)来"传感器保险丝"(谷歌:传感器融合)两个读数来计算偏航,俯仰,横滚(欧拉角)。这些是您在 3D 平面中的方向。
3. 将这些计算传递给 PC,您可以在其中根据方向分配鼠标行为。就像鼠标指针的移动速度更高,如果我们有更高的倾斜度。

为什么会有这么多麻烦?
您的应用程序需要通过假设您如何移动手来控制鼠标。我们本可以使用加速度计读数来计算倾斜角度,但您的手不是静止的物体,并且会影响传感器的加速度超过"重力加速度"。
因此,建议您使用补充滤波器(或扩展卡尔曼滤波器,这是一个很好的阅读,但对您的应用程序来说可能有点矫枉过正)来计算角度。

我链接的每个存储库都有示例代码和资源来帮助你入门。祝你好运!

最新更新