Hardware | vibration sensor 를 사용해 보자

|

1. 원리


왠만한 센서들을 시험해 봐서, 점점 arduino 와 놀아 볼 sensor 들이 적어짐을 요즘 느끼고 있습니다.

여러 사이트를 돌아다니다가 Vibration Sensor 가 있음을 알게 됩니다.


오호이, 바로 구입하여 시험해 봤습니다. (물론 AliExpress 이고, 이번 배송은 한달...)



원리는, 코일로 감겨있는 전선이 흔들리면서 중앙에 있는 심지에 닿아, 전기적으로 short 되는 정도를 가지고 측정하는 것입니다.


또한 모델별 제품의 특성으로는,

센서 원통이 길수로 예민하게 반응하고, 모델명에 "P" 가 들어가 있으면 막혀있는 구조라고 합니다.



* 제품 설명 PDF : usr_attachment_Vibration_Sensor_SW180.PDF





2. 구입


AliExpress 에서 검색하면 여러 종류가 나오지만, 그들 중에서 외형이 깔끔한 제품을 선택합니다.

Order 갯수가 3개밖에 없어서 좀 불안하기는 합니다만, 주문해 봅니다.


* KY-002 Vibration Switch Module Vibration Sensor SW-18015P For

https://www.aliexpress.com/item/KY-002-Vibration-Switch-Module-Vibration-Sensor-SW-18015P-For-Arduino/32274071530.html



도착은 했지만, 일반적인 봉투에 그냥 보내서 90도가 꺾인 모습으로 배송되었습니다.

그러면서 단선도 되었네요.



Refund 요청 넣고, 정신줄을 바로잡은 다음, 다시 제품을 검색합니다.


* 3pin KY-002 SW-18015P Shock Vibration Switch Sensor Module for arduino Diy Kit 1PCS

https://www.aliexpress.com/item/3pin-KY-002-SW-18015P-Shock-Vibration-Switch-Sensor-Module-for-arduino-Diy-Kit-1PCS/32843226927.html



이놈은 아예 꺾여있고, terminal 두께가 더 두껍습니다.

원래 한쪽 터미널은 얇게 표현된 사양서와 달라 보입니다만, 우선 기본 동작을 확인하는게 먼저니 이것을 구입합니다.



음? 그런데 새로 도착한 센서 번호가 SW-18015P 가 아니라, SW-520D 라고 표기되어 있네요?

사양을 확인해 보니, SW-18015P 의 스프링 형태가 아니라 굴러다니는 공이 안에 들어있는 구조 입니다.



SW-520D.pdf


원리가 다르다 보니 센싱에 있어서도 차이가 있어 보입니다.

이 Tilt Sensor는 다음 포스트에서 따로 다루었습니다.


* Hardware | tilt sensor 를 사용해 보자

https://chocoball.tistory.com/entry/Hardware-tilt-sensor





3. 센서 /wo breakout board


음... 다시 정신을 차리고, SW-18010P 센서 구입하기 위해 AliExpress 를 뒤집니다.


* 10pcs/lot SW-18010P SW18010P Snap Switch Shock Sensor High Sensitive Vibration Switches ROHS High Quality

https://www.aliexpress.com/item/10pcs-lot-SW-18010P-SW18010P-Snap-Switch-Shock-Sensor-High-Sensitive-Vibration-Switches-ROHS-High-Quality/32864605129.html



이렇게 breakout 보드 없이 센서만 따로 파네요.



센서만 따로 구입했습니다.



이번에는 틀림 없는 "SW-18010P" 입니다.



우여곡절 끝에 기존 고장난 센서와의 스와핑이 끝났습니다.


처음 구입했던, 고장나서 배송되어 온 센서를 가위로 잘라 봤습니다.



사양서 대로 중간에 두꺼운 봉이 있고, 그 주위를 스프링이 접촉없이 둘러 쌓인 구조 입니다.



스프링이 촘촘해서 요로코롬 늘어나요.

진동이 오면 스프링이 어떻게 흔들리나 동영상도 찍어 봤습니다.






4. Layout


연결은 GND 에 5V 를 인가하는 모양으로 연결하였습니다.


SW-18010P | Arduino Nano -------------------------- S | A0 GND | 5V Vcc | --------------------------


Vcc 에 왜 전원이 인가되지 않고, GND 에 인가되었냐고 생각할 수 있습니다.

지금껏 해오던 것처럼, GND / Vcc 에 마이너스 (-) 와 전원을 연결하면 제대로 동작하지 않더군요.


여러 조합을 시험해 본 결과, 센서와 Breakout 보드와 결합된 모양을 감안하여,

두꺼운 부분이 Vcc 와 연결되어 전압이 인가되어야 하고, 가느다란 선이 analog input 으로 가야 맞아 보입니다.


솔직하게 S / + / - 모두 연결해도 되나, 그렇게 되면 너무 둔감하게 반응합니다.

이는 아래 사진처럼 S / + 단자 사이에 저항을 끼어 놔서, 저항에 걸리는 전압과 센서에 걸리는 전압을 동일하게 가져가게 되고,

저항의 값이 센서의 감도를 좌우하게 됩므로 calibration 이 없으면 의미가 없어집니다.



아래는 최종 연결도 입니다.



아래는 실재 사진이구요.






5. Sketch


진동이 감지되면 LED가 켜지고 buzzer 가 울리는 코드 입니다.

그냥 진동 센서만 가지고 놀면 재미가 없으니, LED 와 Buzzer 도 함께 구성해 봤습니다.


또한, analogRead() 함수를 사용하여, 입력 신호를 1023개로 레벨링 하여 숫자로 표현해 줍니다.


마이너스(-) 단자에 5V 를 입력시켰으니, A0 에 max 1023 으로 값이 나올것 입니다.

관련해서는 아래 7. 참고 를 참조해 주세요.


센싱의 가장 적절한 값으로 1000 이상 되면 LED 와 Piezo 를 활성화 하게 했습니다.

그 밑의 값도 나옵니다만, 예민한 것도 있고, 진동 강도에 따라 살짝 안맞는 부분이 있어 보입니다.


int LED = 3; // define the LED Pin
int PIEZO = 2; // buzzer
int val; // define a numeric variable val 

void setup () {
  Serial.begin(9600); // Only for debugging
  pinMode (LED, OUTPUT); // LED pin as output
}

void loop () {
	val = analogRead(A0); // read the value from KY-002
	
	if (val > 1000 ) { // when sensor detects shock, LED flashes
		digitalWrite(LED, HIGH);
		Serial.print("Sensor Value: ");
		Serial.println(val);
		tone(PIEZO, 500);
	} else {
		digitalWrite(LED, LOW);
		Serial.print("Sensor Value: ");
		Serial.println(val);
		noTone(PIEZO);
	}
}


기준값 조정 - calibration - 이 되어야 정밀하게 사용할 수 있을 듯 한데요,

정밀하게 사용하려면, 아래 처럼 breakout 보드에서 입력값 조정하는 회로가 추가되어야 할 것입니다.



가능하면 위와 같은 breakout 보드를 사용할 것 그랬습니다.

(그놈의 돈이...)





6. 결과


Serial Monitor 로는 아래와 같이 아날로그 값이 감지됩니다.



손가락으로 가볍게 치거나 흔들면 1000 이상 되기 때문에, 이때에 LED 와 Piezo 가 반응하도록 했습니다.

아래는 그 동영상 입니다.






7. 참고


처음 arduino 를 접하면서 analog 값에 대한 정확한 사용을 몰랐는데,

이번에 1023 으로 자동 leveling 하는 것을 정확하게 알게 되었습니다.


아래는 아날로그 값을 입력받는 방법에 대한 내용을 arduino 사이트에서 캡춰해 봤습니다.


* Read Analog Voltage

https://www.arduino.cc/en/Tutorial/ReadAnalogVoltage


The microcontroller of the board has a circuit inside called an analog-to-digital converter or ADC that reads this changing voltage and converts it to a number between 0 and 1023. When the shaft is turned all the way in one direction, there are 0 volts going to the pin, and the input value is 0. When the shaft is turned all the way in the opposite direction, there are 5 volts going to the pin and the input value is 1023. In between, analogRead() returns a number between 0 and 1023 that is proportional to the amount of voltage being applied to the pin.





FIN


처음 시작이 고장난 센서였고, 센서만 따로 구매하여 스왑 하는 등, 깔끔하지는 못했으나,

GND 단자에 Vcc 를 연결하면서부터 어느정도 활용할 수 있는 정도로 되어서 기쁩니다.


다음에 vibration sensor 를 다시금 사용하게 된다면, 전용 breakout 보드에 붙은 센서를 구입해서 활용해 보겠습니다.


And