Как остановить магнитный датчик от обнаружения металлов?

Я разрабатываю приложение на основе датчика, основная цель которого - обнаружение магнитного поля в электрическом кабеле. Если в кабеле течет ток, он должен показать какое-то сообщение, а когда нет тока, значит, он также должен уведомить об этом. следующий код: он обнаруживает ток, но проблема в том, что он также обнаруживает металлическое поле. Если кто-то знает решение, дайте мне знать.

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;
    }
    }
}

person Spring Breaker    schedule 17.04.2013    source источник
comment
Металлическое поле. Что это тогда? Я думаю, вы имеете в виду магнитное поле, создаваемое черными металлами, которое будет выглядеть так же, как магнитное поле, окружающее кабель под напряжением, идущий к датчику в вашем телефоне. Вам нужны гораздо более сложные датчики, чтобы различать их. Так что нет.   -  person Simon    schedule 17.04.2013
comment
@Simon: Спасибо за ответ. Я не знаю о полях, которые создают магнитное поле. Металлы также создают магнитное поле?   -  person Spring Breaker    schedule 17.04.2013
comment
Нет, только черные металлы.   -  person Simon    schedule 17.04.2013


Ответы (2)


Если вы обнаруживаете переменный ток / сигнал (переменного тока), то даже в течение очень короткого времени вы должны увидеть сигнал, который различается по амплитуде и полярности. Вы можете отследить и сохранить ряд показаний и обнаружить, что это происходит. В случае постоянного магнитного поля показания также должны быть устойчивыми. Вы должны уметь разработать алгоритм для разделения этих разных случаев.

Если вы обнаруживаете установившийся постоянный ток, это может не помочь.

person Kevin Fegan    schedule 17.04.2013

В зависимости от оборудования частота обновления телефона может составлять всего 50 мс или 20 Гц. Если мы предположим, что измерения представляют собой средние значения «выборка и удержание», а частота переменного тока составляет 60 Гц (зависит от того, где вы живете), у вас будет ровно три периода на выборку, исключающую отсутствие сигнала. Если вместо этого время выборки составляет 58 мс, у вас будет 3,5 периода, которые будут давать сигнал. Следовательно - есть хороший шанс, что вы сможете сделать вывод о переменном магнитном поле, посмотрев на выбранные вами данные.

Один из способов сделать это - просто вычислить дисперсию ваших данных. В противном случае вы можете применить цифровой фильтр верхних частот, чтобы игнорировать медленно изменяющиеся поля.

person Paamand    schedule 01.02.2014