使用陀螺仪/加速度计与Arduino

5
我尝试了arduino.cc提供的这个示例。(我有一个MPU6050 GY-521 breakout板。)
我认为它工作得很好。它给出一组奇怪的数字,我无法理解其含义。它说这些是原始值。
我如何将它们转换为有意义的值?
输出如下。即使整个物体静止不动,它也会给出变化的值!这是有意义的吗?那么它应该如何理解?
(我唯一知道的是温度值是有意义的:D)
June 2012
WHO_AM_I : 68, error = 0
PWR_MGMT_2 : 0, error = 0

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 260, 120, 15572
temperature: 31.047 degrees Celsius
gyro x,y,z : -24, -234, -240,

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 304, 12, 15608
temperature: 31.000 degrees Celsius
gyro x,y,z : -7, -234, -232,

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 160, 100, 15716
temperature: 31.000 degrees Celsius
gyro x,y,z : -8, -241, -248,

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 192, 56, 15712
temperature: 31.000 degrees Celsius
gyro x,y,z : -36, -212, -222,

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 212, 100, 15440
temperature: 30.906 degrees Celsius
gyro x,y,z : -32, -253, -240,

1
它们已经有意义了。它们可能会给你相对于重力(约为9.8m/s²)在X、Y和Z方向上的加速度。 - user529758
@H2CO3 我已经编辑了帖子(因为你所说的)。请参见已编辑的帖子。有任何想法吗? - Anubis
2
@Anibis 加速度计就是这样的 - 即使保持稳定,也会有小的误差信号。而大的Z值是由于重力引起的(垂直于Z轴,即与竖直方向平行)。 - user529758
2个回答

11
你需要查看数据表来将原始值翻译为有意义的值。寻找类似这个陀螺仪表格的表格:

gyro table

如果你使用了默认值,FS_SEL 将会是 0。这是灵敏度设置。因此,要将原始陀螺仪值转换为每秒度数,需要将它们除以 131。你可以看到你的数字大约在每秒 2 度左右,这是一个合理的误差范围。
对于默认的加速度计灵敏度,你需要除以 16,384 来得到 g 中的值(地球施加的力)。你会得到大约 0.01g 的 x 和 y 轴,以及 0.95g 的 z 轴,这是芯片保持静止并将 z 轴指向地球的合理误差范围内。

3
非常感谢你,卡尔!我购买了这个模块,因为在建造四轴飞行器时会用得到(我打算建造一个)。但除此之外,我对使用它们一无所知。我只测试了给出的示例代码(那个代码很大,我一个字也看不懂:()。我知道有这个库,很多人都说它非常有用。如果你能帮我写一个简单易懂的程序,我将不胜感激。_(我发现 这个页面 很有帮助。)_ - Anubis

0
 mpu.setFullScaleGyroRange(0); //0 = +/- 250 degrees/sec | 1 = +/- 500 degrees/sec | 2 = +/- 1000 degrees/sec | 3 =  +/- 2000 degrees/sec
  mpu.setFullScaleAccelRange(0);  //0 = +/- 2g | 1 = +/- 4g | 2 = +/- 8g | 3 =  +/- 16g 

2
请在您的答案中添加解释以帮助未来的用户。 - Nikolay Mihaylov
虽然这段代码可能回答了问题,但是提供关于为什么和/或如何回答问题的额外上下文可以提高其长期价值。仅限代码的答案是不被鼓励的。 - Ajean

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接