2022. 8. 3. 16:07ㆍProgram/JavaScript
242_자바스크립트에서 자이로(Gyro) 센서와 가속도 센서 사용하기
[적용]
- 기울기를 확인하고 싶을 때
- 방향을 확인하고 싶을 때
- 가속도를 확인하고 싶을 때
[문법 1]
속성 | 의미 | 타입 |
event.beta | X 축 기울기 | 숫자 |
event.gamma | Y 축 기울기 | 숫자 |
event.alpha | Z 축 기울기 | 숫자 |
[문법 2]
속성 | 의미 | 타입 |
event.acceleration.x | X 축 가속도 | 숫자 |
event.acceleration.y | Y 축 가속도 | 숫자 |
event.acceleration.z | Z 축 가속도 | 숫자 |
[내용]
자이로 센서(기울기)
자이로 센서는 기울기(회전)을 검출하는 센서다.
스마트폰을 가로 혹은 세로로 움직이면 센서가 인지하여
디스플레이를 가로 화면 혹은 세로 화면으로 전환하는 작업 등에 사용한다.
엑세스는 DeviceOrientation 이벤트로 가능하며, X, Y, Z 축의 값을 가져오기 위해서는 다음과 같이
window 객체의 deviceorientation 이벤트를 감시한다.
JavaScript
// DeviceOrientation 이벤트
window.addEventListener('deviceorientation', deviceorientationHandler);
// 자이로 센서 값 변화
function deviceorientationHandler(event) {
// X축
const beta = event.beta;
// Y축
const gamma = event.gamma;
// Z축
const alpha = event.alpha;
}
실행결과
X : 28.47654324575
Y : -10.557321454355
Z : -130.0675432245
자이로 센서(방향)
자이로 센서로 방향의 확인도 가능하다.
나침반 샘플을 확인해 보자.
사파리(Safari) 에서는 event.WebkitCompassHeading을 사용해 방향을 확인할 수 있지만,
다른 스마트폰에서는 해당 기능을 사용할 수 없다.
다른 스마트폰 환경에서 방향을 확인하려면 자이로 센서의 기울기 값을 이용해 방향을 산출하는 방식을 사용한다.
해당 로직은 W3C의 'DeviceOrientation Event Specification
(https://w3c.gitbub.io/deviceorientation/)'에 공개되어 있다.
다음 소스 코드에서 0~360까지의 각도를 숫자 값으로 가져오며,
0도는 북, 90도는 동, 180도는 남, 270도는 서쪽을 의미한다.
JavaScript
function getCompassHeading(alpha, beta, gamma) {
const degtorad = Math.PI / 100;
const _x = beta ? beta * degtorad : 0;
const _y = gamma ? gamma * degtorad : 0;
const _z = alpha ? alpha * degtorad : 0;
const cY = Math.cos(_y);
const cZ = Math.cos(_z);
const sX = Math.sin(_x);
const sY = Math.sin(_y);
const sZ = Math.sin(_z);
const Vx = -cZ * sY - sZ * sX * cY;
const Vy = -sZ * sY + cZ * sX * cY;
let compassHeading = Math.atan(Vx / Vy);
if (Vy < 0) {
compassHeading += Math.PI;
} else if (Vx < 0) {
compassHeading += 2 * Math.PI;
}
return compassHeading * (180 / Math.PI);
}
자이로 센서(관성)
가속도 센서는 일정 시간 내 속도의 방향과 변화를 검출하는 센서로
스마트폰은 XYZ의 세 방향을 검출할 수 있는 3축 가속도 센서를 주로 사용한다.
스파트폰이 떨어져서 물체에 부딪히는 것 등을 인식하는데 사용하며, 액세스는 DeviceMotion 이벤트를 사용한다.
다음은 스마트폰을 위, 아래, 좌, 우로 흔드는 방향에 따라 화살표가 해당 방향을 가리키는 샘플이다.
X, Y, Z 축의 값을 가져오기 위해서는 window 객체의devicemotion 이벤트를 감시한다.
JavaScript
// DeviceMotion 이벤트
window.addEventListener('devicemotion', devicemotionHandler);
// 가속도 변화
function devicemotionHandler(event) {
// 가속도
// X축
const x = event.acceleration.x;
// Y축
const y = event.acceleration.y;
// Z축
const z = event.acceleration.z;
}
참조 :
실무에 바로 적용하는 자바스크립트 코드레시피 278
아케다 야스노부, 카노 타케시 지음 / 이춘혁 옮김
'Program > JavaScript' 카테고리의 다른 글
[JavaScript] 자바스크립트에서 정보/에러/경고 출력하기 (0) | 2022.08.03 |
---|---|
[JavaScript] 자바스크립트에서 진동 모터 사용하기 (0) | 2022.08.03 |
[JavaScript] 자바스크립트에서 위치 정보 읽어오기 (0) | 2022.08.03 |
[JavaScript] 자바스크립트에서 쿠키 데이터 읽어오기 (0) | 2022.08.03 |
[JavaScript] 자바스크립트에서 쿠키로 로컬 데이터 사용하기 (0) | 2022.08.03 |