Java 如何使用加速计检测1Gs以上的振动?
我正在做一个android应用程序,它类似于一个汽车黑匣子,记录汽车的行驶过程 但现在我面临的问题是如何集成一个加速计,该加速计能够在发生事故时检测轻微移动(可能大于1Gs),它可以触发视频录制停止并将其保存到存档文件中,从而不会因事故而丢失文件。。有人知道如何执行上述任务来监测任何形式的振动吗 我是android/java新手,有人能帮我指点一下吗?先谢谢你Java 如何使用加速计检测1Gs以上的振动?,java,android,accelerometer,Java,Android,Accelerometer,我正在做一个android应用程序,它类似于一个汽车黑匣子,记录汽车的行驶过程 但现在我面临的问题是如何集成一个加速计,该加速计能够在发生事故时检测轻微移动(可能大于1Gs),它可以触发视频录制停止并将其保存到存档文件中,从而不会因事故而丢失文件。。有人知道如何执行上述任务来监测任何形式的振动吗 我是android/java新手,有人能帮我指点一下吗?先谢谢你 这是视频录制部分的一部分,但现在我如何将加速计纳入“自动存档”目的?您需要使用onSensorChanged(SensorEvent事件
这是视频录制部分的一部分,但现在我如何将加速计纳入“自动存档”目的?您需要使用
onSensorChanged(SensorEvent事件)
接口的回调SensorEventListener
在此处获取SensorEvent
类的详细信息:
IBM的developerWorks页面上有一个示例:
来自android参考页面: 公开最终浮动[] 值自:API 三级 值的长度和内容 阵列取决于所使用的传感器类型 被监控(另请参见传感器事件 有关坐标的定义,请参见 系统(已使用)。 传感器类型\加速计:所有值 单位为国际单位制(m/s^2)
值[0]
:x轴上的加速度减去Gx
值[1]
:y轴上的加速度减去Gy
值[2]
:z轴上的加速度减去Gz
这种类型的传感器测量
施加在装置上的加速度
(广告)。从概念上讲,它是通过
测量施加在传感器上的力
使用关系的自身(Fs):Ad=-
∑Fs/质量
特别是,重力是
总是影响被测对象
加速度:Ad=-g-∑F/质量
因此,当设备
坐在桌子上(显然不是
加速度计读数
g=9.81 m/s^2的震级
类似地,当设备处于
自由落体,因此非常危险
以9点81分的速度向地面加速
m/s^2,其加速计读数为a
震级为0米/秒^2
显然,为了
测量发动机的实际加速度
装置,力的贡献
必须消除重力的影响。这
可以通过应用
高通滤波器。相反,a
低通滤波器可用于隔离
重力
第一个try块缺少
{
和acatch
block!谢谢你的回答。但不幸的是,我的物理不是很好……但是我如何将你上面的代码实现到我当前的活动类中,以感知任何大于1G的力的碰撞?@Vivian你读过上面的链接了吗?这里有一些关于如何实现liste的示例然后使用为onSensorChanged(…)发布的代码并按照数组“<代码>线性加速> <代码>做任何你想要的。在你的例子中,我认为你需要比1G大的加速度值来检测碰撞。虽然我不知道这些值,但是你必须研究什么是最好的阈值。最后一个提示:考虑加速度的绝对值。对不起,如果我是C。我不太理解你或你提供的文档,我对android编程的兴趣只有一个月左右,而我的讲师只给了我两周的时间来完成这项任务……:(因为我不太清楚我将如何编写SensorChanged(…)使用线性加速度值触发停止录制并将其归档到目录中?我知道我可能要求你太多了,因为这不是你的任务..但你能给我更多帮助吗?@Vivian,在onSensorChanged
方法中添加一个if块,然后调用startRecording()在你的加速度高于你的阈值的情况下,函数。你应该能够和你的讲师讨论实现细节。另外,我看到你有三个回答问题。请考虑把它们标记为被接受。记住这是一个要求特定问题的站点,而不是完整的代码块。可以告诉我。这两个答案中哪一个更好?-->
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];
}