기울어짐을 측정할 때 사용하는 Tilt sensor (혹은 tilt switch)입니다.

정교하고 복잡한 동작을 감지하기 위해서는 가속도+자이로 센서를 이용해서 복잡한 처리를 해줘야 합니다. 하지만 간단하게 특정 각도 이상 기울어졌는지만 판단하고 싶다면 굳이 가속도+자이로 센서를 이용할 필요가 없습니다. 간단하게 Tilt sensor 만으로도 가능합니다.

1. 연결방법

Tilt sensor는 기울어짐에 따라 on/off 되는 스위치로 보셔도 됩니다. 그래서 아두이노 없이 아래와 같이 테스트가 가능합니다. 일반 스위치처럼 눌러서 on/off 시키는 것이 아니라, 기울어짐에 따라 on/off 됩니다.

force___flex_tiltLEDlayout

(이미지: Adafruit)

Tilt switch가 on/off 되었는지 상태를 아두이노에서 알고 싶을 땐 아래와 같이 디지털 핀을 통해 값을 입력받도록 만들면 됩니다.

force___flex_tiltarduinolay

(이미지: 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 시켜줍니다.

참고자료 :