3

この質問はいくつかの方法で尋ねられましたが、決定的な答えはありませんでした。

Androidフォンの加速度計の最大範囲を見つけようとしています。いくつかのフォーラムでは、+-2G といくつかの +-3.5G が主張されています。

加速度計ハードウェア (s4 に搭載されている LSM330 の) は、最大 16G のより高い範囲を持っています。 http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00059856.pdf

この範囲を実際に見つけるアプリケーションを作成し、S4 にロードしました。次の図は、読み取り値を示しています。明らかに、各方向の最大範囲は 2G です。

アプリケーションリーディング

  1. この範囲を拡大する方法はありますか?
  2. 他の Android フォンで、より大きなデフォルト範囲を見つけた人はいますか?

興味のある方のために、ここに私のコードの nb 部分があります:

public class MainActivity extends Activity implements SensorEventListener{

Sensor accelerometer;
SensorManager sm;

TextView maxValue;
TextView realTimeValues;
TextView realTimeResultant;
TextView maxValues;
TextView maxResultant;

float x = 0;
float y = 0;
float z = 0;
float res = 0;
float xMax = 0;
float yMax = 0;
float zMax = 0;
float resMax = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    sm = (SensorManager)getSystemService(SENSOR_SERVICE);
    accelerometer = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

    sm.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_FASTEST);

    maxValue = (TextView)findViewById(R.id.MaxValue);
    realTimeValues = (TextView)findViewById(R.id.RealTimeValues);
    realTimeResultant = (TextView)findViewById(R.id.RealTimeResultant);
    maxValues = (TextView)findViewById(R.id.maxValues);
    maxResultant = (TextView)findViewById(R.id.maxResultant);


    float max = accelerometer.getMaximumRange();
    maxValue.setText("Max range: "+ max);           
}

@Override
public void onSensorChanged(SensorEvent event) {

    if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER)
        return;

    x = event.values[0];
    y = event.values[1];
    z = event.values[2];
    res = (float) Math.sqrt( x*x + y*y + z*z);

    realTimeValues.setText("X: " + x + "\nY: " + y + "\nZ: " + z);
    realTimeResultant.setText(res + " m/s^2");

    if (Math.abs(x) > Math.abs(xMax))
        xMax = x;
    if (Math.abs(y) > Math.abs(yMax))
        yMax = y;
    if (Math.abs(z) > Math.abs(zMax))
        zMax = z;
    if (res > resMax)
        resMax = res;

    maxValues.setText("X: " + xMax + "\nY: " + yMax + "\nZ: " + zMax);
    maxResultant.setText(resMax + " m/s^2");    
}
}
4

1 に答える 1