말 그대로 기울기를 감지하는 센서이다. 내부는 전도성 구 혹은 액체 수은으로 구성되어 있다. 아두이노 키트에서 흔히 볼 수 있는 SW-520D
는 전도성 구가 들어 있어서 흔들어 보면 구슬 소리를 들을 수 있다.
기울기에 따라 전류가 흐르거나 흐르지 않기 때문에 디지털 신호를 주고, 푸시버튼과 같이 연결되지 않았을 때의 기준 값이 필요하다. 따라서 pull-up
혹은 pull-down
저항이 필요하다.
내부 pull-up
저항을 이용해 구현해보았다. 참고로 극이 없는 모듈이라 방향에 상관없이 연결하면 된다.
pull-up
저항에 연결했을 경우 스위치가 켜지지 않았을 때 HIGH 신호를 준다. 따라서 HIGH 일 때 기울어진 상태, LOW 일 때가 기울어지지 않은 상태이다.
bool is_tilted = digitalRead(TILT);
간단하게 기울어졌을 때 LED가 켜지는 회로를 구상해보았다.
시뮬레이터에 있는 기울기 센서는 SW-200D
로 SW-520D
와는 구조가 반대다. 센서 자체가 가로이기 때문에 SW-520D
보다 작은 기울임에도 신호가 바뀔 수 있다. 반면 D520
의 경우 완전히 기울어지기 전까지는 내부의 전류가 흐르다가 완전히 눕혀진 이후부터 전류가 끊기기 때문에 장치의 특성에 따라 센서 종류를 선택해야 할 것 같다. 아무튼 SW-200D
는 기울어질 경우 내부에서 전류가 통하기 때문에 LOW
신호를 주니까 코드를 반대로 해야 한다.
bool is_tilted = !digitalRead(TILT);
/*
* created at 2022-11-29
* LED with arduino tilt sensor(SW-520D)
*/
// pin map
#define LED 13
#define TILT 12
bool is_tilted;
void setup() {
pinMode(LED, OUTPUT);
pinMode(TILT, INPUT_PULLUP);
}
void loop() {
is_tilted = digitalRead(TILT); // 입력신호가 HIGH라면, 내부 pullup 저항과 연결된 것 -> 기울기 센서 내부에서 연결이 끊김 -> 기울어짐
if (is_tilted){
digitalWrite(LED, HIGH);
} else {
digitalWrite(LED, LOW);
}
}