加速度传感器开发分析
来源:互联网 发布:知乎 日本穷游 编辑:程序博客网 时间:2024/05/02 04:56
自從任天堂的 Wii 跟蘋果的 iPhone 出現以後, 動作感應器 (or 微機電 MEMS 系統) 感覺一下子變成顯學. 這幾年也看到越來越多的應用出現在 iPhone 或其他的 Device 上, 最常見的還是拿來當樂器或是其他控制器使用. 例如:
< type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/Mfhji2oQdLQ&hl=" fs="1" allowfullscreen="true" allowscriptaccess="always">
不過這個 air guitar 跟 Accelerometer 可能沒什麼直接關係 ;) 只是提神用!!!
Freerunner 有 2 個 ST LIS320DL 的三軸動作感應器, 一個位在機器的左上方靠近 Aux 鍵的位置, 一個在主板的右下方靠近麥克風的位置. 一般的手機只需用到 1 顆, 就可以偵測目前手機的機身狀態 (朝哪個方向傾斜/加速度). ST LIS320DL 規格是偵測區間可調 +- 2g 或 +-8g, 丟資料的頻率可設成 100 Hz 或 400 Hz. 它還有可以設定的 interrupt 腳位. 可以在特定狀況下(自由落體, 靜止突然移動), 才發出 interrupt. 這兩個 motion sensor 一個有接到可把 CPU 從 suspend 喚醒的腳位上. 詳細的 datasheet 可參考下面的網址: http://www.st.com/stonline/products/literature/ds/12726/lis302dl.htm
這兩個三軸動作感應器可以同時使用. 但是在大部分狀況下, 1 顆就已經足夠. 2 顆 motion sensor 組合起來是可以做比較複雜跟精準動作偵測 (偵測角加速度, 而不是只是單純 3 軸), 或是進一步作 gyro sensor, 生物動作特徵辨認等 or something you could dream of ;-)
簡單來說, 有一點像是原先的 Wii Remote + MotionPlus
< type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/fTCbgHS13X8&hl=" fs="1" allowfullscreen="true" allowscriptaccess="always">
* 設定 Accelerometer
設定 Accelerometer 可以透過 /sys 下面完成, 不過因為 kernel 版本關係, 2.6.28 版之後, 相關的 sysfs 設定會出現在
/sys/class/i2c-adapter/i2c-0/0-0073/lis302dl.{12}
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 資料的方法, 請參考:
http://wiki.openmoko.org/wiki/Accelerometer_data_retrieval
最簡單的存取方式 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 來做動作捕捉的範例.
< type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/K2S2rQUETwc&hl=" fs="1" allowfullscreen="true" allowscriptaccess="always">
Source code 及可安裝的 ipk 在此, 還意外的看到了 bb 檔 ;)
http://code.google.com/p/accelges/source/browse/#svn/trunk
論文位址如下:
http://dev.borza.ro/demo/Motion-based%20Gesture%20Recognition%20with%20an%20Accelerometer/Paper.pdf
另一個有關把 motion sensor 專案當成遙控器的專案是 ReMoko, 程式分為 target 端及 server 端:
http://wiki.openmoko.org/wiki/ReMoko
Source 在:
http://code.google.com/p/remoko/
呵, 突然發覺還是有 tube 有真相.
本文来自CSDN博客:http://blog.csdn.net/hongjiujing/archive/2009/04/22/4099669.aspx
- 加速度传感器开发分析
- android 传感器使用与开发----加速度传感器
- 传感器开发之TYPE_ACCELEROMETER加速度传感器.
- 加速度传感器
- 加速度传感器
- 加速度传感器
- 加速度传感器
- Windows Phone开发之Accelerometer-加速度传感器
- Android开发传感器应用---获取加速度
- Android_开发 Android传感器(加速度传感器,磁场传感器,光线传感器,方向传感器)
- 光传感器加速度传感器
- STM32控制三轴加速度传感器实现分析(1)
- STM32控制三轴加速度传感器实现分析(2)
- Freescale mma845x三轴加速度传感器驱动分析
- Freescale mma845x三轴加速度传感器驱动分析
- Android应用开发实战GPS与加速度传感器
- Android游戏开发中加速度传感器的实现
- Cocos2D-X开发学习笔记1:加速度传感器
- WinCE6.0安装
- VS2005 断点失效解决办法
- 还原数据库备份文件为数据库
- Keycode对照表
- 如何实现无刷新的DropdownList联动效果[转]
- 加速度传感器开发分析
- VB为自己的程序设定消息(可接收处理)
- 如何显示在线人数和所在位置[转]
- 请问怎么样让spring在启动的时候调用启动当前服务器下的"rmiregistry.exe"程序
- #pragma once与 #ifndef的区别
- 在ASP.NET WEB控件中应用样式(Style)[转]
- OpenGL中的Alpha测试,深度测试,模板测试,裁减测试
- 在ASP.NET中跟踪和恢复大文件下载[转]
- 设置eclipse启动参数解决内存不足问题