2016-06-24 6 views
2

Ich mache eine Android-App, die die Vibration misst, wenn das Telefon auf den Boden gestellt wird. Wie verwende ich den Beschleunigungssensor (für 0-50Hz) und das Mikrofon (für 50-500Hz), um die Vibration zu messen? Ich bin neu in der Android-Entwicklung, aber das ist ein Projekt für mich. Ich weiß, dass es viele Apps im Appstore gibt, aber ich habe keine Ahnung, wie das gemacht wird. Ich suchte nach Tutorials, aber ich fand nur ein Tutorial über Shake-Gesten.Verwenden des Beschleunigungsmessers und Mikrofons des Telefons zum Messen von Vibrationen

Antwort

0

Zuerst wird ein Listener für Accelerometer implementieren:

class SENSOR_EVENT_LISTENER implements SensorEventListener { 
    float[] accelerometer_data = new float[3]; 
    float[] gravity = new float[3]; 

    public void onSensorChanged(SensorEvent event) { 
     switch (event.sensor.getType()) { 

      case Sensor.TYPE_ACCELEROMETER: 
       final float alpha = 0.8f; 

       // Isolate the force of gravity with the low-pass filter. 
       gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0]; 
       gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1]; 
       gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2]; 

       accelerometer_data[0] = event.values[0] - gravity[0]; 
       accelerometer_data[1] = event.values[1] - gravity[1]; 
       accelerometer_data[2] = event.values[2] - gravity[2]; 
       break; 

      default: 
       return; 
     } 
    } 

    @Override 
    public void onAccuracyChanged(Sensor sensor, int accuracy) { 

    } 
} 

Dann wird Ihr Empfänger registrieren:

final SensorManager sensor_manager = (SensorManager) m_context.getSystemService(Context.SENSOR_SERVICE); 
listener = new SENSOR_EVENT_LISTENER(); 

final List<Sensor> sensors = sensor_manager.getSensorList(Sensor.TYPE_ACCELEROMETER); 

if(sensors.size() > 0) { 
    sensor = sensor_manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
    sensor_manager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_FASTEST); 
} 

Werte überprüfen vor Vibrationen und während der Vibration. Sie werden sehen, dass sich die Werte während der Vibration merklich ändern.

Ich bin mir nicht sicher über Mikrofon, aber zuhören Akzelerometer allein reicht aus, um Vibrationen zu messen. Ich kann meinen Code aktualisieren, wenn Sie Hilfe mit Mikrofon benötigen.

Hoffe, das hilft.

+0

Können Sie auch ein Mikrofon hinzufügen? Wie kann ich die Beschleunigungsmesserdaten (x, y, z) verwenden, um die Vibrationsfrequenz zu finden? Benutze ich Fast Fourier Transform oder was? – Zik

+0

Auf einer stabilen Oberfläche, wenn das Gerät still steht, ändern sich Beschleunigungsmesserwerte in einem kleineren Intervall und haben kleinere Spitzen. Während das Gerät vibriert, werden Sie feststellen, dass die absoluten Spitzenwerte viel höher sind. So können Sie Vibrationen erkennen. Für den Mic-Code braucht es Zeit, ihn zu implementieren. –

+0

Ich habe geforscht und kann die Konzepte über Beschleunigungsmesser, Frequenzen und Geräuschpegel (dB) nicht wirklich verstehen. Ja, ich brauche dB und Hz. Ich muss einen Graphen machen, Y-Achse für dB und X-Achse für Hz. – Zik

Verwandte Themen