1. 좌표 시스템
센서는 x, y, z 의 좌표에 대해서 각각에 해당하는 값을 배열로 받아와서 처리할 수 있다.
좌표축
x 축 : 화면에 수평축(portrait 모드에서 짧은 가로, landscape 모드에서 긴 가로). 오른쪽을 가리킨다.
y 축 : 화면에 수직축. 화면 위쪽을 가리킨다. (원점은 기존 그래프에서 0,0 상상하면 됨)
z 축 : 단말기가 테이블에 올려 있다고 가정할 때, 천장을 가리킨다.
2. Orientation
SENSOR_ORIENTATION (방향 센서) : 각 배열의 값은 각도를 나타냄.
단말기 화면이 하늘을 향한 상태로 테이블 위에 수평으로 놓여있는 상태를 기준으로 각 축을 중심으로 회전시키는 것을 생각하면된다.
values[0] : Z 축을 중심으로 회전 (0 <= azimuth < 360)
0 = 북, 90 = 동, 180 = 남, 270 = 서
values[1] : X축을 중심으로 회전 (-180 <= pitch <= 180)
Z축이 Y축 방향으로 향하면 0보다 큰값
화면이 하늘을 향하고 테이블위에 수평으로 놓여있는 상태 0, 화면이 아래를 향하면 -180 or 180,
똑바로 세우면 -90, 거꾸로 세우면 +90
values[2] : Y축을 중심으로 회전 (-90 <= roll <= 90)
Z축이 X축 방향으로 향하면 0보다 큰값
3. Accelerometer
SENSOR_ACCELOROMETER (가속도 센서)
각 배열의 값은 (m/s2) 단위로 되어있으며, 접촉힘(Contact Force)을 측정합니다.
values[0] : X축에 적용되는 힘
values[1] : Y축에 적용되는 힘
values[2] : Z축에 적용되는 힘
예를 들어
단말의 왼쪽 측면을 오른쪽 방향으로 눌렀을때 X 가속도 값은 음수를 나타냅니다. 단말에 테이블위에 평평하게 놓여있을때 -STANDARD_GRAVITY 값, 즉 -9.8 (m/s2) 을 가집니다. 단말이 테이블에서 중력에 대한 반작용으로 적용되는 힘을 나타냅니다.
4. Mgnetic field
SENSOR_MAGNETIC_FIELD (자기장 센서)
모든 값은 micro-Tesla (uT) 단위로 되어있으며, X, Y, -Z 축 주변 자기장을 측정합니다.
* Z축의 값이 바뀐 것 주의
5. 그 밖의 참여를 유발하는 센서
SENSOR_LIGHT – 주위 영역의 밝기를 알려줌
SENSOR_ORIENTATION_RAW – SENSOR_ORIENTATION 에서 필터링이 빠진 것
SENSOR_PROXIMITY – 센서와 객체 사이의 거리를 알려줌
SENSOR_TEMPERATURE – 주위의 온도를 측정함
SENSOR_TRICORDER – 장치를 영화 스타트렉의 트라이코더와 같이 만듦
6. 예제 src code
· onAccuracyChanged()의 accuracy 값
o SensorManager.SENSOR_STATUS_ACCURACY_HIGH; 센서가 가장 높은 정확도
o SensorManager.SENSOR_STATUS_ACCURACY_LOW; 센서가 가장 낮은 정확도로 보고, 조정이 필요,
o SensorManager.SENSOR_STATUS_ACCURACY_MEDIUM; 센서가 평균 정확도, 조정으로 측정이 향상 가능
o SensorManager.SENSOR_STATUS_UNRELIABLE; 센서 데이터를 신뢰할 수 없음. 조정필요, 측정 불가능
· sensor 상수
o SensorManager.SENSOR_ACCELEROMETER : 가속도센서, 현재 가속도를 xyz 축을 따라 제곱초당 미터(m/s^2) 로 제공.
o SensorManager.SENSOR_ORIENTATION: 방향센서, xyz축의 현재 방향을 degree 로 제공
o SensorManager.SENSOR_LIGHT: 광센서(ambient-light), 주변 조도를 lux 로 제공.
o SensorManager.SENSOR_MAGNETIC_FIELD : xyz축의 자기장을 마이크로테슬라(uT)로 제공
o SensorManager.SENSOR_PROXIMITY: 장치와 대상 물체간의 거리를 m로 제공
o SensorManager.SENSOR_TEMPERATURE: 온도 센서,
SensorManager.SENSOR_TRICORDER ? 뭐임?
특정 센서를 모티너링 하려면, 리스너와 해당 센서를 등록한다.
1. sensorManager.registerListener(mySensorListener, SensorManager.SENSOR_TRICORDER, SensorManager.SENSOR_DELAY_FASTEST);
· 등록 두번째 인수는 센서관리자가 센서의 적합한 업데이트 속도를 찾게 한다. 센서 관리자는 지정한 속도보다 빠른 것을 리턴하는 경향이 있다.
o SensorManager.SENSOR_DELAY_FASTEST: 가장 빠른 센서 업데이트 속도
o SensorManager.SENSOR_DELAY_GAME: 게임 제어에 적합한 업데이트 속도
o SensorManager.SENSOR_DELAY_NORMAL : 기본 업데이트 속도
o SensorManager.SENSOR_DELAY_UI : UI 기능에 적합한 업데이트 속도
7.가속도 센서와 나침반 이용하기
· 하드웨어의 현재 방향 측정
· 방향 변화 모니터
· 사용자가 향하고 있는 방향 식별
· 위-아래, 좌-우, 앞-뒤 방향 가속도 모니터
응용
· 도난방지: 도서관 같은곳에서 폰이 진동, 움직임이 있으면 경고 - sms, 소리 등등...
· 맵에 움직이는 위치 표시, 폰의 가로-세로 움직임, 제스처 인터페이스
8. 가속도 accelerometer 센서
단위시간당 속도의 변화 검출. 즉, 센서가 직접 속도를 측정하지 않고 시간에 대한 가속도의 변화를 측정해야 한다.
기계식/반도체식. 검출감도(V/g): 가속도당 전압변화, 클수록 우수.
· 가속도 센서는 움직임에 의한 가속도와 중력에 의한 가속도를 구분하지 못한다. 즉 Z축에 대한 정지상태의 값응 -0.98m/s^2 으로
SensorManager.STANDARD_GRAVITY 이다.
중력가속도 기준 물체의 기울기는 수직(90도) 1G, 즉 중력가속도는 sin(기울어진 각도) 관계. 0.5G 중력가속도=30도. 즉 x축 방향이 0G(누워있고), y축 방향이 1G(서있고). x축 방향으로 40도 경사를 갖게 됨변 1G x sin45 로 0.707G가 검지. 따라서 기울어진 상태, 지면방향 감지.
가속도 변화 감지
수직(z 축): + 값은 장치가 위쪽 / 세로(Longitudinal): 앞족-뒤쪽 방향, +값은 앞 - 장치 화면이 위로 향하고 몸체가 세로로 움직임
가로(Lateral): 왼쪽-오른쪽, +값은 오른쪽으로 움직임.
SensorManager 참조를 가지고 가속도 센서를 등록해서 사용.
속도계 표현
가속도센서는 주어진 방향의 속도 변화를 측정하기 때문에, 각각 가속도 값이 얼마나 오래 적용되었나 측정하여 현재 속도를 확립할 수 있다.
예) 1m/sec^2 고정 속도로 가속한다면 10초 뒤 속도는 10m/sec(or 36km/h) 가 될 것이다.
예제: com.example.android.apis.os.Sensors, com.example.android.apis.graphics.SensorTest
방향 측정
방향(Orientation) 센서: yaw(머리)를 제공하는 나침반, pitch 및 roll 을 측정하는 가속도 센서의 조합이다. SensorManager는 장치가 평평한 곳에 놓였을 때를 헤딩/피치/롤이 0으로 간주.
· heading 혹은 yaw, bearing: z축 0도 북, 90도 동, 180도 남, 270도 서쪽 방향
· pitch : y축 방향 장치의 각도, 평평한 곳 0도, 바로 서있을 때 -90도, 거꾸로 서있을 때 90도, 뒤집혀 있을 때 180/-180도
· roll: x축 방향 장치의 측면 각도. 평평한 곳 0도,
values[]의 값은 SensorManager.DATA_X,Y,Z으로 찾고, 필터/간략화되지 않은 값은 RAW_DATA_X,Y,Z 을 사용한다.
'Fundamental Notes > Android' 카테고리의 다른 글
Android : 이클립스 설치 오류(JVM terminated. Exit code=-1) (0) | 2010.04.30 |
---|---|
Android : 가속도 센서를 이용하기 위해 사용할 물리 기본 공식들. (0) | 2010.04.05 |
Android : Screen rotation Issue (0) | 2010.03.26 |
Android : 애니메이트 (0) | 2010.03.24 |
Android : 안드로이드에서 SQLite DB 사용하기 (0) | 2010.03.05 |