2013-05-04 152 views
4
  1. 我想检测使用磁性传感器值的金属。我正在连续地获取值如x = 30.00,Y = -20.00,Z = -13.00如何在Android手机中使用磁性传感器检测金属?

  2. 现在我想知道如何使用这些值,用于检测任何金属(mathameticalcalu,公式)

代码是

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]); 

回答

5

要检测金属,你必须检查磁场的强度,即磁场矢量的大小。

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.40.6值,以便它适合你的应用程序。请注意,由于智能手机上的磁性传感器非常便宜且令人讨厌,因此这绝不会百分之百地工作。

+0

是否这样? '//计算字段值现在 浮子magHere =(浮点)Math.sqrt(Math.pow(X,2)+ Math.pow(Y,2)+ Math.pow(Z,2)); //计算预期值 float magExpected =(float)Math.sqrt(geoField.getX()+ geoField.getY()+ geoField.getZ());' – 2014-04-10 16:42:45

+0

链接到上面的代码,[Pastebin](http: //pastebin.com/pStMSpNd) – 2014-04-10 16:49:31

+0

你忘记方geoField – chopchop 2014-04-11 10:48:07

0

可以使用其是具有磁场也将被检测e.g铁机器人磁场传感器不metals.But金属检测磁场,镍etc.Because有色金属行为的方式作为带电的电缆相同。