[아두이노] 진동센서(Vibration Sensor) 제어

IOT/아두이노|2019. 8. 13. 09:00

[아두이노] 진동센서(Vibration Sensor) 제어



지난시간에 다룬 진동모터는 진동을 외부로 출력하는 부품인데 반대로 진동을 감지하여 내부로 입력을 받는 진동센서 부품이 있습니다. 진동에 대한 전기 신호를 만들어 내는데 디지털 신호와 아날로그 신호로 만들어 냅니다. 아무튼 진동을 감지 할수 있는 이 센서는 참 재밌는 부품입니다. 만약에 이 진동센서를 특정위치에 부착하면 그 대상물에 진동이 발생했을 때 진동센서로 진동을 감지하여 전기 신호로 만들어 낼 수 있습니다. 가령 대상물에 누가 건들거나 또는 대상물 주변에 진동이 발생하는 상황에서 아두이노에서 그에 대한 특정한 명령을 내릴 수 있습니다. 즉, 진동 감지 원리를 이용하여 도난방지나 침입 방지를 위한 경보기와 같은 곳에서 응용할 수 있습니다. 예를 들면은 차량에 누가 터지하거나 충격을 주게 되면 차량에서 경보음이이 울리는 것으 많이 보셨을 꺼에요. 그런 것들을 연상하시면 될 듯 싶네요.

이제 진동센서를 알아봅시다.

1. 진동센서(Vibration Sensor)


진동센서는 진동을 감지하는 센서로 진동에 대해 디지털 신호 or 아날로그 신호를 만들어 냅니다. 진동센서는 3핀으로 VCC, GND, D0핀으로 구성된 모듈이 있는가 하면 아래 그림처럼 VCC, GND, D0, A0핀으로 구성된 모듈이 있습니다. 아래 그림을 보시면 진동에 대한 값을 십자모양의 가변저항으로 조절 할 수 있습니다.


진동센서는 2가지 형태로 출력 신호를 만들어 냅니다. 첫번째로 디지털 출력으로 0 or 1의 값을 만들어 내는데 진동센서에 대해 조사하니 초기상태값이 HIGH 상태이고 진동이 발생하면 LOW 상태가 된다고 나와 있습니다. 즉, 진동이 발생하면 진동센서는 LOW가 되고 아두이노우노에서 진동(LOW)에 대한 처리 동작을 설계하면 됩니다. 두가지 상태만 존재하기 때문에 스위치 역할을 수행하는 주제에 알맞습니다. 두번째로 아날로그 출력으로 0~1023의 값을 만들어 내겠죠. 디지털 출력는 진동에 대한 두가지 상태만 존재하기 때문이 때문에 두가지 상황만 만들어 낼 수 있지만 아날로그 출력은 진동의 강도값으로 진동의 신호를 만들어 내기 때문에 이 신호의 범위값을 나누면 여러 상황을 만들어 낼 수 있고 처리동작도 여러개의 형태로 처리동작을 만들어 낼 수 있습니다. 두가지 방식 중 여러분들이 설계하는 목적에 맞게 디지털로 읽을지 아날로그를 읽을지만 잘 정하고 알맞게 사용하시면 도비니다.

진동센서의 값을 읽는 방법은 다음과 같습니다.

  • 디지털 입력 : digitalRead(D0)
  • 아날로그 입력 : analogRead(A0)

위 함수를 통해서 읽은 값에 대한 처리 동작만 간단히 코딩하면 되기 때문에 진동센서는 어려운 부품이 아닙니다.

2. 진동센서 회로도


준비물 : 진동센서, LED 1개, 저항 220옴 1개, 아두이노우노
내용 : 진동센서의 D0핀을 7번에 연결하고 LED 핀은 12번에 연결하시오.



위 그림은 진동의 상태를 LED로 출력하기 위한 회로도 입니다.

3. 코딩


설계 : 진동이 발생하면 LED에 불이 들어오게 한다.

if(진동감지) LED 켜기;
else LED 끄기;

딱 두줄이면 됩니다. 실험에서는 디지털 입력을 받기 때문에 아래와 같습니다.

if(digitalRead(디지털핀)==LOW) digitalWrite(LED핀, HIGH);
else digitalWrite(LED핀, LOW);

종합해 보면,

const byte StatePin = 12;
const byte VibrationPin = 7;

void setup(){
 pinMode(StatePin, OUTPUT);
 pinMode(VibrationPin, INPUT); 
}

void loop(){
 if(digitalRead(VibrationPin)==LOW) digitalWrite(state, HIGH);
 else digitalWrite(state, LOW);
}

진동감지에 대한 간단히 코딩입니다. 실제 부품이 없어서 결과는 알 수 없지만 유사한 실험을 한다면 기울기센서로 대신 가상시뮬레이터에서 실험하시면 됩니다.



기울기 센서에서 기울기가 발생하면 LED에 불이 들어오는 실험이 있으닊나 진동센서를 기울기 센서로 감안하여 대신 실험을 할 수 있습니다.

4. 경보기 응용


진동센서와 피에조부저 같은 사운드 출력 센서를 이용하면 진동이 발생하면 소리로 결과를 출력 할 수 있습니다. 경보장치로 활용하면 좋습니다. 보안이 필요한 대상에 대해서 진동이 발생하면 경보음이 울리게 설정 할 수 있습니다.

1) 진동센서 경보기 회로도


준비물 : 진동센서, LED 1개, 저항 220옴 1개, 아두이노우노
내용 : 진동센서의 D0핀을 7번에 연결하고 LED 핀은 12번에 연결하시오.



피에조부저만 6번에 추가로 연결하시면 됩니다.

2) 코딩


위 진동센서 회로도에서 피에조부저만 추가로 부착되었기 때문에 소리에 대한 부분만 표현하시면 됩니다.

  • 피에조부저 : tone(핀번호, 주파수, 출력시간), noTone(핀번호), delay(시간값)

간단히 한음의 소리를 울리게 표현을 하면 아래와 같습니다.

   tone(SoundPin,523,1000/8);     // 도음으로 8분음표(음길이)
   delay(1000/4*1.30);             
   noTone(SoundPin);         

이 코딩을 어디에 넣어야 할까요? 바로 진동이 발생하는 시점에 경보음이 울리게 하면 됩니다.

종합해보면,

const byte StatePin = 12;
const byte VibrationPin = 7;
const byte SoundPin = 6;

void setup(){
 pinMode(StatePin, OUTPUT);
 pinMode(VibrationPin, INPUT); 
}

void loop(){
 if(digitalRead(VibrationPin)==LOW) {
   digitalWrite(state, HIGH);
   tone(SoundPin,523,1000/8);     // 도음으로 8분음표(음길이)
   delay(1000/4*1.30);             
   noTone(SoundPin);         
 }
 else digitalWrite(state, LOW);
}

유사한 예제로는 아래 거리경보장치 실험을 참조하시면 됩니다. 초음파센서로 거리값으로 경보음이 울리는 예제인데 여기서 진동센서의 역할을 초음파센서가 대신한 걸로 상상하시면 됩니다.



마무리


진동센서에 대해서 간단히 살펴보고 응용 예제로 진동센서로 경보장치를 상상해 보았습니다. 이것 말고도 다양한 것을 상상 할 수 있습니다. 위에서는 디지털 입력을 다뤘지만 진동에 대한 아날로그 입력을 받을 수 있다면 진동의 강도에 따라서 다양한 명령을 내릴 수 있습니다. 디지털 입력의 경우는 진동 하냐/안하냐 두가지 상태지만 아날로그는 진동의 범위에 따라 내리는 명령을 다양하게 내릴 수 있어 진동의 강도에 따른 섬세한 제어가 가능하다는 걸 알아 두세요.

아두이노는 재밌는 부품이 많습니다. 진동을 발생하는 진동모터가 있는가 하면 진동을 감지하는 진동센서가 있습니다. 여러분들도 특정 부품에 대해 조사하고 실험을 할 때 어떤 A동작을 수행하는 부품이 있다면 반대의 B동작의 부품이 없는지 같이 찾아서 공부하시면 아두이노 공부에 많은 도움이 됩니다. 공부하실 때 같은 동작을 하는 부품을 찾거나 반대 동작하는 부품을 같이 찾아서 공부를 꼭 해주세요. 못찾으면 어쩔 수 없지만 찾으시면 따블로 공부 효과를 얻을 수 있기 때문에 꼭 제가 말한 방식으로 아두이노를 공부해 주세요. 그래야 나중에 뭔가를 표현하고 싶을 때 도움이 많이 됩니다.

댓글()