핑거스냅으로 LED를 켜보자 ?
안녕하세요 라이프온룸입니다. !
오늘은 소리 센서를 이용해서 박수 혹은 핑거 스냅으로 LED 를 켜볼게요
먼저 준비물 부터 보고 가죠
1. 준비물
소리센서의 경우에는 Output 이 디지털인 것 아날로그 인 것 이 있습니다. 보통 소리센서에 보면 칩이 있는데 거기에 lm393 이라고 적혀 있으면 Digital 입니다.
개인적으로 Digital, 과 Analog의 가격 차이가 얼마 나지 않기 때문에 아날로그를 사는 것이 범용성 면에서 좋을 것 같아요

2. 연결
연결은 아래처럼 하면 됩니다. 쉽죠잉 ~ ㅎㅎ 추가로 아날로그 소리센서를 사신분들도 디지털 핀에 입력을 해도 상관 없습니다.

3. 코드
일단 기본 코드를 보고 갈게요
int LED = 2; int soundSensor = 3; int val = 0; void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(LED, OUTPUT); pinMode(soundSensor, INPUT); } void loop() { // put your main code here, to run repeatedly: val = digitalRead(soundSensor); Serial.println(val); }
이렇게 입력하면 되는데요 스케치를 업로드 하고 툴 > 시리얼 플로터를 열어보세요

그리고 소리센서 옆에서 소리질러 !!! 보면 아래와 같이 나올 텐데요
박수나 핑거 스냅을 할 때 좀 이쁜 파형이 나오도록 가변 저항을 조절해 줍니다.

그리고 아래 코드를 입력해서 업로드 해주세요
#define LED 2 #define soundSensor 3 int soundValue; int state = 0; int currentSoundTime = 0; int stateOneTime = 0; int stateTwoTime = 0; int stateThreeTime = 0; int relayStatus=0; void setup() { pinMode(soundSensor, INPUT); pinMode(LED, OUTPUT); //Serial.begin(9600); } void loop() { soundValue = digitalRead(soundSensor); currentSoundTime = millis(); if (soundValue == 1) { if (state == 0) { state = 1; stateOneTime = millis(); //Serial.println("state 1 set "); } else if (state == 1) { stateTwoTime = millis(); if ((stateTwoTime > stateOneTime + 800) && (stateTwoTime < stateOneTime + 1200)) { state = 2; //Serial.println("state 2 set "); } } else if (state == 2) { stateThreeTime = millis(); if ((stateThreeTime > stateTwoTime + 200) && (stateThreeTime < stateTwoTime + 500)) { relayStatus = !relayStatus; digitalWrite(LED, relayStatus); initVal(currentSoundTime); //Serial.println("state 3 set "); } } } if ((state != 0) && (currentSoundTime > stateOneTime + 2000)) { //Serial.println("Time Out "); initVal(currentSoundTime); } } void initVal(int currentSoundTime) { state = 0; stateOneTime = currentSoundTime; stateTwoTime = currentSoundTime; stateThreeTime = currentSoundTime; }
이 코드를 간략하게 설명하자면 최초로 소리를 감지 하면 0.8초 ~ 1.2 초 사이에 또 소리가 감지되어야 하고 두번째 소리가 감지된 뒤 0.2초에서 0.5초 사이에 소리가 감지되면 LED가 켜지게 됩니다.
즉 박수를 세번 치는데
짝…….. 짝..짝
이런식으로 치는 거지요 ㅎㅎㅎ

이렇게 박수를 치거나 핑거 스냅을 하면 LED가 겨질 겁니다.
자 오늘은 소리 센서를 써봤는데요 ! 디지털 소리센서는 중요한 장치를 끄고 켤 스위치로는 쓰기 힘들 것 같습니다. 코드를 좀 루버스트 하지 않게 짜면 그냥 생활 소음으로 도 LED가 켜질 수도 있고 그렇지 않으면 LED가 잘 안켜지고 그렇네요 ㅎㅎ 여튼 좀더 연구를 해봐야 겠습니다.
오늘 포스팅은 여기서 마치도록 하죠 ㅎㅎ 감사합니다.
