首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何阻止磁性传感器检测金属?

如何阻止磁性传感器检测金属?
EN

Stack Overflow用户
提问于 2013-04-17 14:09:20
回答 2查看 1.1K关注 0票数 2

我正在开发一个基于传感器的应用程序,它的主要目的是检测一个电子cable.If的磁场有电流在电缆中流动,然后它应该显示一些信息,当没有电流意味着它应该通知also.Using以下代码,它检测电流,但问题是它还检测金属field.If任何人知道解决方案,请让我知道。

代码语言:javascript
复制
public class MainActivity extends Activity implements SensorEventListener {
      SensorManager sensorManager;
     // static final int sensor = SensorManager.SENSOR_ORIENTATION;

      private Sensor myCompassSensor;
      private TextView outView,tesla1,voltage;
      ImageView light1;
      Vibrator v;
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        outView = (TextView) findViewById(R.id.output);
        tesla1=(TextView)findViewById(R.id.tesla);
        light1=(ImageView)findViewById(R.id.light);
        voltage=(TextView)findViewById(R.id.voltage);
        v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
        // get sensor manager
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        // get compass sensor (ie magnetic field)
        myCompassSensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
      }

      // register to listen to sensors
      @Override
      public void onResume() {
        super.onResume();
        sensorManager.registerListener(this, myCompassSensor, SensorManager.SENSOR_DELAY_NORMAL);
      }

      // unregister
      @Override
      public void onPause() {
        super.onPause();
        sensorManager.unregisterListener(this,myCompassSensor);
      }

      // Ignore for now
      public void onAccuracyChanged(Sensor sensor, int accuracy) {
          // TODO Auto-generated method stub
      }


    @Override
    public void onSensorChanged(SensorEvent event) {
        // TODO Auto-generated method stub
         // this check is unnecessary with only one registered sensor
          // but it's useful to know in case you need to add more sensors
         synchronized (this)
         {
          if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
             // int orientation = (int) event.values[0];
              float azimuth = Math.round(event.values[0]);
                float pitch = Math.round(event.values[1]);
                float roll = Math.round(event.values[2]);
                double tesla= Math.sqrt((azimuth*azimuth)+(pitch*pitch)+(roll*roll));

                String out = String.format("X: %.2f\nY: %.2f\nZ: %.2f",
                    azimuth, pitch, roll);
                String a=String.format("%2f", tesla);
                Log.d("MAGENTIC---", out);
               // outView.setText(out);
                tesla1.setText(a);
                if(tesla>=80)
                {
                    v.vibrate(200);
                    light1.setBackgroundResource(R.drawable.voltage_on);
                    voltage.setText("Voltage Detected !");
                }
                else
                {
                light1.setBackgroundResource(R.drawable.voltage_off);
                voltage.setText("No Voltage Found");
                }
    }
          else
              return;
    }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2013-04-17 14:23:24

如果您正在检测(AC)交流电/信号,那么即使在很短的时间内,您也应该看到幅度和极性变化的信号。您可以对大量读数进行采样和存储,并检测到正在发生的情况。在磁场稳定的情况下,读数也应该是稳定的。您应该能够开发一种算法来区分这些不同的情况。

如果您检测到的是稳定状态的直流电流,这可能没有帮助。

票数 3
EN

Stack Overflow用户

发布于 2014-02-01 09:21:37

根据硬件的不同,手机的更新率可能低至50ms,或20 or。如果我们假设测量值是“采样并保持”平均值,而交流频率为60 no (取决于您居住的地方),则每个样本恰好有三个周期,抵消到没有信号。如果你的采样时间是58ms,那么你将有3.5个周期,这将产生一个信号。因此,有一个很好的机会,你可以通过观察你的采样数据来推断磁场是否交替。

这样做的一种方法是简单地计算数据的方差。否则,您可以应用数字高通滤波器来忽略变化较慢的字段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16052775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档