결과 화면
- 수평일 경우 위아래 모두 초록색화면이 되고, 기울어지면 빨간색으로 변한다.
- 기기를 세울경우, 위쪽에 위치하는 부분이 빨간색으로 변한다.
- 핸드폰을 정상방향으로 세우면 y값이
-1~0
값이 되고, 거꾸로 세우면0~1
값이 된다.
가속도 센서
가속도센서란 지구의 중력가속도를 기준으로 사물이 얼마만큼의 힘을 받고 있는지를 측정하는 센서이다.
가만히 있을 때 센서에 작용하는 중력 가속도를 X, Y, Z 축 벡터 3개로 나누어 크기를 측정한다.
시간이 지나도 오차에 강하고, 가속도센서의 값들은 정지상태에도 특정한 값을 갖으므로 기울어진 정도를 파악하거나 진동을 파악하는데 많이 사용된다.
자이로스코프 센서
Gyro : 회전하는 것
자이로 센서는 물체의 회전속도인 각속도의 값을 이용하는 센서이기 때문에 ‘각속도 센서’ 라고도 불린다.
각속도는 어떤 물체가 회전 운동할 때 생기는 코리올리 힘(Coriolis Force)을 전기적 신호로 변환하여 계산할 수 있다.
코리올리 힘이란 운동하는 물체의 속도에 비례하며 운동방향에 수직인 힘을 의미한다.
자이로 센서는 회전하는 물체의 회전각과 기울기 등을 알 수 있기 때문에 물체의 가속도나 충격의 세기를 측정하는 ‘가속도 센서’와 함께 사용되어 동작 인식을 효과적으로 하는 역할을 한다.
react-native-sensors
핸드폰의 sensor들을 사용하기 위해 react-native-sensors라이브러리를 사용한다.
npm install react-native-sensors --save
로 설치 후, ios폴더에서도 pod install
을 해준다.
import {accelerometer} from 'react-native-sensors';
필요한 센서를 import한 후 사용한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
useEffect(() => {
const subscription = accelerometer.subscribe(({x, y, z}) => {
accelerometerValue.value = {x, y, z};
setValue({x, y, z});
});
return () => subscription.unsubscribe();
}, [accelerometerValue]);
const leftBackground = useAnimatedStyle(() => {
return {
backgroundColor: interpolateColor(
accelerometerValue.value.y,
[-1, 0],
['red', 'green'],
),
};
});
const rightBackground = useAnimatedStyle(() => {
return {
backgroundColor: interpolateColor(
accelerometerValue.value.y,
[0, 1],
['green', 'red'],
),
};
});
...
<View
style={\{
flex: 1,
}\}>
<Animated.View style={[{flex: 1}, leftBackground]} />
<Animated.View style={[{flex: 1}, rightBackground]} />
</View>
실행 에러
기기의 센서를 사용해야하므로 아이폰을 직접 연결해서 실행했는데 다음과 같은 에러가 발생했다.
1
Failed to register bundle identifier.
→ Bundle Identifier를 변경하고 try again버튼을 누르니 해결되었다.
아이폰에서 앱 설치후 실행 시 ‘신뢰하지 않는 개발자’라는 경고창이 떴다.
→ ‘설정 - 일반 - VPN 및 기기관리’에서 신뢰버튼 클릭하면 해결된다.