Fundamental Notes/Android

Android : Sensor base

콩콩댕 2010. 3. 31. 11:24
반응형

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가 검지. 따라서 기울어진 상태, 지면방향 감지.

  출처: http://makiable.egloos.com/3456635

 

가속도 변화 감지

 

출처: http://www.societyofrobots.com/sensors_accelerometer.shtml

수직(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 을 사용한다.