2011-05-05 64 views
3

我正在做Android應用程序,就像汽車黑匣子,它記錄汽車的旅行過程。如何使用加速度計檢測1Gs以上的virbration?

但是現在我面臨着如何整合一個能夠檢測到輕微運動(可能> 1Gs)的加速度計,當發生事故時它可能會觸發視頻錄製停止並將其保存到檔案文件,因此不會因爲事故而丟失文件。任何人都知道如何執行上述任務來監視任何形式的振動?

我是新來的android/java可以有人幫助指導我?在此先感謝...

這是視頻錄製部分的一部分,但現在我將如何結合加速度計「自動歸檔」的目的?

+0

第一個try塊缺少一個'{'和一個'catch'塊! – bacchus 2011-05-05 01:16:38

回答

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參考網頁:

公共最終浮動[]

值時間:值 陣列取決於哪個傳感器類型是 被監視的API 等級3

的長度和內容(也參見SensorEvent 用於定義座標 使用的系統)。 Sensor.TYPE_ACCELEROMETER:所有值 是SI單位(米/秒^ 2)

values[0]:加速度減去的Gx在x軸

values[1]:在Y軸加速度減去戈瑞

values[2]:在z軸

的施加到器件 (AD)的 加速度這類措施的一個傳感器加速度減去GZ。從概念上講,它通過 測量力這樣做應用於使用的關係的傳感器 本身(FS):AD = - ΣFs/質譜

特別地,在重力的作用是 總是影響所測量的加速度 :廣告= -g - ΣF/質譜

出於這個原因,當該裝置是 坐在一個表(和顯然不是加速 ),加速計讀取 克= 9的大小。81米/秒^ 2

類似地,當該裝置處於 自由下落,因此危險 加速朝向在9.81 米/秒^ 2接地,其加速計讀取 大小0米/秒^ 2。

很明顯,爲了測量裝置的實際加速度,必須消除重力的貢獻。這個 可以通過應用 高通濾波器來實現。相反,可以使用低通濾波器來隔離重力。

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]; 
} 
+0

嗨,謝謝你的回答。但不幸的是,我在物理學方面並不擅長......但是我如何將上面的代碼實現到我當前的活動課程中來感知任何類型的大於1G的碰撞? – Vivian 2011-05-05 07:17:34

+0

@Vivian你讀過上面的鏈接了嗎?在那裏你有如何實現監聽器的例子。然後使用發佈給'onSensorChanged(...)'的代碼,並對數組'linear_acceleration'做任何你想做的事情。就你而言,我認爲你需要比1G大得多的加速度值來檢測碰撞。我不知道價值,但你必須研究什麼是最好的門檻。最後一個提示:考慮加速度的**絕對值**。 – Aleadam 2011-05-05 15:46:55

+0

對不起,如果我不能很好地理解你或你提供的文件,我真的是一個業餘愛好者,當談到編程的安卓只有一個月左右,這項任務只給了我兩個星期,以完成我的講師...... :(因爲我不完全明白我該如何編碼onSensorChanged(...)與linear_acceleration的值來觸發記錄的停止並將其歸檔到目錄中?我知道我可能是請問你太多了,這不是你的任務..但你能給我更多的幫助嗎? – Vivian 2011-05-06 02:48:28