加速度计的值是否像倾斜仪一样?

时间:2011-05-20 12:41:59

标签: android accelerometer

我在下面的accelxyz获得的值与预期不符。

它似乎是作为倾斜传感器而不是加速度计。

当我将手机放到空中并抓住它时,accel值的变化不会超过10%左右。相比之下,当我随机旋转手机时,我会得到50-100%的更大变化!

有什么可以解释这个?我只想检测手机何时处于自由落体状态(和/或影响某些东西)。

SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);
Sensor sensor = sm.getDefaultSensor(SensorManager.SENSOR_ACCELEROMETER);
    sm.registerListener(
        sel = new SensorEventListener(){
            @Override public void onAccuracyChanged(Sensor arg0, int arg1) {}
            @Override public void onSensorChanged(SensorEvent arg0) {
                        double x = se.values[0];
                        double y = se.values[1];
                        double z = se.values[2];
                        double accel = Math.sqrt(
                                            Math.pow(x, 2) +    
                                            Math.pow(y, 2) + 
                                            Math.pow(z, 2));
            }
        }, 
        sensor, 
        SensorManager.SENSOR_DELAY_NORMAL
   );

(作为一个侧面问题,x,y和z的值似乎远高于它们应该是的值,accel平均值在50-80左右,当静止不动时?不应该是9.8左右? )

x,y和z值似乎对手机方向的变化非常敏感,但完全不代表加速度。我错过了什么吗?

手机静止的示例值,躺在后面: Accel = 85.36,x = 6.8,y = 45.25 z = 30.125

3 个答案:

答案 0 :(得分:2)

我不得不替换

Sensor sensor = sm.getDefaultSensor(SensorManager.SENSOR_ACCELEROMETER);

Sensor sensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

答案 1 :(得分:0)

可能是因为当您扔掉手机时,它几乎是相同的平面或角度,并且在低速时,当您转动手机时,它会快速改变其路线和方向,从而为结果提供更高的值。加速度计可能是多功能设备的误称,可能有一个选择参数用于您真正想要获得结果的功能。

答案 2 :(得分:0)

手机背面放置时,X和Y传感器应接近零,Z传感器接近9.8。 9.8当然是由于引力。

我的第一个问题是电话有问题,建议在另一部手机上尝试相同的代码。

然而,我注意到数学中存在一些问题,但是还没有找到答案。

x,y,z的值与你提到的结果(平方和的平方根)相差54.78而不是你在帖子中提到的85.36。

我对Java很陌生,因此我无法轻易发现可能出现的问题,并且还没有机会在我的手机上尝试这段代码,但我认为数学很简单,我可以确定结果是错的。 (或者至少我希望如此)。

要检查的另一件事(假设你弄清楚数学问题)是当你把手机扔到空中时的微小变化可能只是由于响应时间慢。加速度计输出可能只是变化太慢,所以到手机着陆时输出不会发生太大变化。使用SENSOR_DELAY_GAME或SENSOR_DELAY_FASTEST而不是正常情况可以改善响应。

顺便说一下,不应该是arg0.values []而不是se.values []? se来自哪里?传感器值进入onSensorChanged的参数(在本例中为arg0),因此我无法弄清楚它们应该如何结束。 (但是Java中有许多东西我仍然不明白)

相关问题