4
  1. 磁気センサーの値を使って金属を検出したい。x=30.00 、y=-20.00 、z=-13.00 のような値を連続的に取得しています

  2. 今、私は金属を検出するためにこれらの値を使用する方法を知りたいです(数学計算、式)

コードは

sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
// get compass sensor (ie magnetic field)
myCompassSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

float azimuth = Math.round(event.values[0]);
float pitch = Math.round(event.values[1]);
float roll = Math.round(event.values[2]);
4

2 に答える 2

7

金属を検出するには、磁場の強度、つまり磁場ベクトルの大きさを確認する必要があります。

float mag = Math.sqrt(x^2 + y^2 + z^2);

次に、この値を地球上の場所での磁場の期待値と比較する必要があります。幸いなことに、Android にはそのための関数が用意されています。を見てGeomagneticField、リファレンスはこちらhttps://developer.android.com/reference/android/hardware/GeomagneticField.html

次に、センサーから読み取っている値が期待値からかなり離れている場合は、センサーの近くで地球の磁場を乱している「何か」(ご想像のとおり、金属) があります。たとえば、実装できるテストは次のとおりです。

if (mag > 1.4*expectedMag || mag < 0.6*expectedMag) {
    //there is a high probability that some metal is close to the sensor
} else {
    //everything is normal
}

アプリケーションに適合するように、1.4との値を少し試してください。0.6スマートフォンの磁気センサーは非常に安価で扱いにくいため、これが常に 100% 機能するわけではないことに注意してください。

于 2013-05-04T09:12:19.000 に答える