使用手机的加速度计和麦克风测量振动

时间:2016-06-24 02:56:24

标签: android accelerometer microphone measure vibration

我正在制作一个Android应用程序,用于测量手机放在地板上时的振动。如何使用加速度计(0-50Hz)和麦克风(50-500Hz)测量振动?我是Android开发的新手,但这是给我的一个项目。我知道在appstore中有很多与此相关的应用程序,但我不知道它是如何制作的。我搜索了教程,但我只找到了关于摇动手势的教程。

1 个答案:

答案 0 :(得分:1)

首先为Accelerometer实现一个监听器:

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) {

    }
}

然后注册你的接收者:

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

在振动前和振动期间检查值。您将看到振动期间的值发生了显着变化。

我不确定麦克风,但单独听取加速度计就足以测量振动。如果您需要有关麦克风的帮助,我可以更新我的代码。

希望这有帮助。