Openmoko gta02 三軸感應器分析

2021-04-27 00:50:33 字數 3947 閱讀 4924

自從任天堂的 wii 跟蘋果的 iphone 出現以後, 動作感應器 (or 微機電 mems 系統) 感覺一下子變成顯學. 這幾年也看到越來越多的應用出現在 iphone 或其他的 device 上, 最常見的還是拿來當樂器或是其他控制器使用. 例如:

不過這個 air guitar 跟 accelerometer 可能沒什麼直接關係 ;) 只是提神用!!!

freerunner 有 2 個 st lis320dl 的三軸動作感應器, 乙個位在機器的左上方靠近 aux 鍵的位置, 乙個在主機板的右下方靠近麥克風的位置. 一般的手機只需用到 1 顆, 就可以偵測目前手機的機身狀態 (朝哪個方向傾斜/加速度). st lis320dl 規格是偵測區間可調 +- 2g 或 +-8g, 丟資料的頻率可設成 100 hz 或 400 hz. 它還有可以設定的 interrupt 腳位. 可以在特定狀況下(自由落體, 靜止突然移動), 才發出 interrupt. 這兩個 motion sensor 乙個有接到可把 cpu 從 suspend 喚醒的腳位上. 詳細的 datasheet 可參考下面的網址:

這 兩個三軸動作感應器可以同時使用. 但是在大部分狀況下, 1 顆就已經足夠. 2 顆 motion sensor 組合起來是可以做比較複雜跟精準動作偵測 (偵測角加速度, 而不是只是單純 3 軸), 或是進一步作 gyro sensor, 生物動作特徵辨認等 or something you could dream of ;-)

簡單來說, 有一點像是原先的 wii remote + motionplus

* 設定 accelerometer

設定 accelerometer 可以透過 /sys 下面完成, 不過因為 kernel 版本關係, 2.6.28 版之後, 相關的 sysfs 設定會出現在

/sys/class/i2c-adapter/i2c-0/0-0073/lis302dl.

root@om-gta02:/sys/devices/platform/lis302dl.1# ls

driver duration modalias sample_rate threshold wakeup

dump full_scale power subsystem uevent

可 以設定包括 threshold (觸發臨界值), sample (取樣頻率) 以及其他的 accelerometer 引數. 可以直接透過 cat threshold 或是 echo 72 > threshold 的方式改變設定數值. 同時, 設定數值有時並不是以 1 為基數, 以 threshold 來說, 就是 18 的倍數.

* 讀取 accelerometer 數值

openmoko wiki 一樣有詳細如何讀取 motion sensor 資料的方法, 請參考:

最簡單的訪問方式 motion sensor 方式, 就是直接 cat accelerometer 的 event 輸出.

root@om-gta02:/# cat /dev/input/event2

root@om-gta02:/# cat /dev/input/event3

event2 及 event3 分別是第 1 顆及第 2 顆 accelerometer 的資料輸出.

accelerometer 輸出的資料格式如下:

root@om-gta02:/# cat /dev/input/event3 hexdump

0000000 3fec 3896 ebe5 0000 0002 0000 ffb8 ffff

0000010 3fec 3896 ebf2 0000 0002 0001 0036 0000

0000020 3fec 3896 ebf7 0000 0002 0002 0414 0000

0000030 3fec 3896 ebfd 0000 0000 0000 0000 0000

0000040 3fec 3896 ee80 0000 0002 0000 ffb8 ffff

0000050 3fec 3896 eea9 0000 0002 0001 0036 0000

0000060 3fec 3896 eeaf 0000 0002 0002 0132 0000

0000070 3fec 3896 eeb5 0000 0000 0000 0000 0000

以第一筆資料來說:

3fec 3896 ebe5 0000 是時間

0000 0002 是事件的種類

接下來的 0000 是 x 軸, 而 0001, 0002 分別是 y 軸及 z 軸

ffb8 ffff 是 accelerometer 的數值.

你可以參考

http://wiki.openmoko.org/wiki/accelerometer_data_retrieval 的內容, 用 perl/python, 或是 c 來讀取 accelerometer 數值. community 的 rui 也 donate 了乙個程式 rotate, 可以偵測手機機身的狀態. source code 可以從這取得:

http://t0ny.net/openmoko/samples/src/rotate/ 執行結果如下.

root@om-gta02:~# ./test

types: a(2), b(2), c(2)

codes: a(0), b(1), c(2)

value: a(-792), b(-252), c(522)

left

types: a(2), b(2), c(2)

codes: a(0), b(1), c(2)

value: a(-810), b(-252), c(558)

left

types: a(2), b(2), c(2)

codes: a(0), b(1), c(2)

value: a(-810), b(-270), c(540)

left

types: a(2), b(2), c(2)

codes: a(0), b(1), c(2)

value: a(-774), b(-270), c(504)

left

types: a(2), b(2), c(2)

codes: a(0), b(1), c(2)

value: a(-792), b(-270), c(522)

left

* 利用 accelerometer 作動作捕捉

基 本上像 wii sport 之類的遊戲, 都是透過比較複雜的動作捕捉方式來完成, 並不是單純的讀某乙個時間的 accelerometer 數值達成. 動作捕捉並不需要 2 顆 accelerometer (模擬 gryo sensor 才需要), 但是需要比較/紀錄不同 accelerometer 資料以及作加速度計算等. 在 gsoc (google summer of code) 上, 有乙個透過 freerunner 來做動作捕捉的範例.

source code 及可安裝的 ipk 在此, 還意外的看到了 bb 檔 ;)

論文位址如下:

另乙個有關把 motion sensor 專案當成遙控器的專案是 remoko, 程式分為 target 端及 server 端:

source 在:

呵, 突然發覺還是有 tube 有真相.

三軸加速度計 三軸陀螺儀 三軸磁力計

1.今天要做的事情 三軸加速度計 1.加速度計的原理 三軸加速度 輸出的速度是去掉重力後的整體加速度,因此,三軸加速度計可以測量物體的比力。即,去掉重力後的整體加速度,應用 測量角度 比力 通過彈簧壓縮長度來測量 在沒有外力的作用下,加速度能夠精準地測量俯仰角和滾轉角並且沒有累計誤差 mems 主要...

三菱系統四軸正反轉引數 三菱第四軸引數

機種cv 系列主題三菱 第四軸相關之資料編號 日期 2008 01 13 紀錄 kevin 3.第四軸引數之設定 3 1.m60 系列ha 第四軸引數之設定 驅動器旋鈕之設定x軸設 0,y軸設 1,z軸設 2,a軸設 3,主軸設 引數馬達型號 ha33 ncha40 ncha43 ncha80 nc...

三菱系統四軸正反轉引數 三菱第四軸引數

機種cv 系列主題三菱 第四軸相關之資料編號 日期 2008 01 13 紀錄 kevin 3.第四軸引數之設定 3 1.m60 系列ha 第四軸引數之設定 驅動器旋鈕之設定x軸設 0,y軸設1,z軸設 2,a軸設3,主軸設引數 馬達型號 ha33 ncha40 ncha43 ncha80 ncha...