Tilt Sensor: 기울기 센서
기울어짐을 측정할 때 사용하는 Tilt sensor (혹은 tilt switch)입니다.
정교하고 복잡한 동작을 감지하기 위해서는 가속도+자이로 센서를 이용해서 복잡한 처리를 해줘야 합니다. 하지만 간단하게 특정 각도 이상 기울어졌는지만 판단하고 싶다면 굳이 가속도+자이로 센서를 이용할 필요가 없습니다. 간단하게 Tilt sensor 만으로도 가능합니다.
1. 연결방법
Tilt sensor는 기울어짐에 따라 on/off 되는 스위치로 보셔도 됩니다. 그래서 아두이노 없이 아래와 같이 테스트가 가능합니다. 일반 스위치처럼 눌러서 on/off 시키는 것이 아니라, 기울어짐에 따라 on/off 됩니다.
(이미지: Adafruit)
Tilt switch가 on/off 되었는지 상태를 아두이노에서 알고 싶을 땐 아래와 같이 디지털 핀을 통해 값을 입력받도록 만들면 됩니다.
(이미지: Adafruit)
5V 핀에 연결된 저항(10K)을 통해 D2 핀에 연결되어 있습니다. 그리고 tilt sensor를 통해 GND로 연결됩니다. tilt sensor 가 off 상태일 때 D2 핀은 풀업저항을 통해 5V에 연결되어 있으므로 on(=5V, HIGH) 값을 읽게 됩니다.
Tilt sensor 가 기울어져 on 상태로 바뀌면 off(=0V, LOW) 값을 읽게 됩니다.
아래 예제에서는 tilt sensor를 통해 읽은 값에 따라 아두이노 내부에 포함된 LED (13번 핀)를 on/off 시키는 예제입니다.
- 풀업저항에 대해 자세히 보기
- 저항없이 스위치를 사용하고 싶을 때 : 아두이노 내부 풀업저항 사용하기
2. 소스코드 (스케치)
/* Better Debouncer * * This debouncing circuit is more rugged, and will work with tilt switches! * * http://www.ladyada.net/learn/sensor/tilt.html */ int inPin = 2; // the number of the input pin int outPin = 13; // the number of the output pin int LEDstate = HIGH; // the current state of the output pin int reading; // the current reading from the input pin int previous = LOW; // the previous reading from the input pin // the follow variables are long's because the time, measured in miliseconds, // will quickly become a bigger number than can be stored in an int. long time = 0; // the last time the output pin was toggled long debounce = 50; // the debounce time, increase if the output flickers void setup() { pinMode(inPin, INPUT); digitalWrite(inPin, HIGH); // turn on the built in pull-up resistor pinMode(outPin, OUTPUT); } void loop() { int switchstate; reading = digitalRead(inPin); // If the switch changed, due to bounce or pressing... if (reading != previous) { // reset the debouncing timer time = millis(); } if ((millis() - time) > debounce) { // whatever the switch is at, its been there for a long time // so lets settle on it! switchstate = reading; // Now invert the output on the pin13 LED if (switchstate == HIGH) LEDstate = LOW; else LEDstate = HIGH; } digitalWrite(outPin, LEDstate); // Save the last reading so we keep a running tally previous = reading; }
Tilt sensor 의 on/off 값에 따라 아두이노에 포함된 LED를 on/off 시켜줍니다.
참고자료 :