如何使用加速度计检测1G以上的振动?

时间:2011-05-05 00:59:31

标签: java android accelerometer

我正在做Android应用程序,就像汽车黑匣子一样记录了汽车的行驶过程。

但是现在我面临的问题是如何集成一个能够检测到轻微移动(可能> 1G)的加速度计,当发生事故时它可以触发视频录制停止并将其保存到归档文件,因此不会因事故而丢失文件。任何人都知道如何进行上述任务以监控任何形式的振动?

我是android / java的新手,有人可以帮我指导吗?提前谢谢......

这是视频录制部分的一部分,但现在我如何将加速计纳入“自动存档”目的?

1 个答案:

答案 0 :(得分:1)

您需要使用接口onSensorChanged(SensorEvent event)

SensorEventListener回调

在此处获取SensorEvent课程的详细信息:http://developer.android.com/reference/android/hardware/SensorEvent.html

IBM的developerWorks页面上有一个例子:http://www.ibm.com/developerworks/opensource/library/os-android-sensor/index.html


来自Android参考页面:

  

public final float []

     

值自:API   3级

     

值的长度和内容   数组取决于哪种传感器类型   被监控(另见SensorEvent   用于坐标的定义   使用的系统)。   Sensor.TYPE_ACCELEROMETER:所有值   以SI单位(m / s ^ 2)

     

values[0]:加速度减去x轴上的Gx

     

values[1]:加速度减去y轴上的Gy

     

values[2]:加速度减去z轴上的Gz

     

这种类型的传感器测量   应用于设备的加速度   (广告)。从概念上讲,它是这样做的   测量施加在传感器上的力   本身(Fs)使用关系:Ad = -   ΣFs/ mass

     

特别是,重力是   总是影响测量   加速度:Ad = -g - ΣF/质量

     

因此,当设备是   坐在桌子上(显然不是   加速度计,加速计读数   幅度g = 9.81 m / s ^ 2

     

同样,当设备进入时   自由落体,因此是危险的   在9.81加速逼近地面   m / s ^ 2,其加速度计读数为a   幅度为0 m / s ^ 2.

     

显然,为了   测量真实的加速度   装置,力量的贡献   必须消除重力。这个   可以通过应用a来实现   高通滤波器。相反,a   低通滤波器可用于隔离   引力。

 public void onSensorChanged(SensorEvent event)
 {
      // alpha is calculated as t / (t + dT)
      // with t, the low-pass filter's time-constant
      // and dT, the event delivery rate

      final float alpha = 0.8;

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

      linear_acceleration[0] = event.values[0] - gravity[0];
      linear_acceleration[1] = event.values[1] - gravity[1];
      linear_acceleration[2] = event.values[2] - gravity[2];
 }