아두이노 소리센서 값 - adu-ino solisenseo gabs

안녕하세요. 오늘은 소리 센서를 사용하는 방법을 알아보고자 합니다.

소리 센서는 말 그대로 소리를 탐지하는 센서입니다.
여기에서 소리를 탐지한다는 것은 소리의 크기만 탐지하는 것이지, 음의 높낮이 등의 정보는 얻을 수 없음에 유의하시기 바랍니다.

아두이노 소리센서 값 - adu-ino solisenseo gabs

[그림 1 : 소리 센서]

이번 실험에서는 소리 센서로 입력받은 값을 시리얼 모니터로 출력합니다.
시리얼 모니터의 사용법을 잘 모르시는 분들은 시리얼 모니터와 가변저항 포스팅을 참고하시기 바랍니다.

1. 회로 연결

이번에는 회로도 없이 바로 연결된 사진을 보시겠습니다.


[그림 2 : 아두이노에 소리 센서 연결]

아두이노 보드 핀소리 센서
아날로그 0번 핀 A0
GND(그라운드) GND
VCC(5V) VCC

[표 1 : 아두이노 - 소리 센서 핀 연결]

표1에 나와있는 것처럼 각 핀들을 연결해주면 됩니다.
소리 센서 뿐만 아니라, 보통 센서들은 전원과 그라운드를 연결해줘야 하고, 추가적으로 입력을 받기 위한 핀이 한개 이상 존재합니다.
소리 센서는 단 하나의 입력 핀이 있네요. 이 핀(A0)을 아두이노 보드의 A0에 연결해주면 되겠습니다.

2. 스케치

이번에는 스케치도 정말 간단합니다.

const int SOUND_SENSOR_PIN = A0;
int sensorValue;

void setup() {
  Serial.begin(9600);
}

void loop() {
  sensorValue = analogRead(SOUND_SENSOR_PIN);
  Serial.println(sensorValue);
  delay(20);
}
  • 1 줄 : 입력 핀 A0를 상수로 정의합니다.
  • 5 줄 : 9600 baud rate로 Serial 통신을 시작합니다. 이는 소리 센서가 받아오는 입력 값을 보기 위한 용도로 시리얼 모니터를 쓰기 위함입니다.
  • 9 줄 : analogRead()함수를 이용해서 A0 핀으로부터 아날로그 입력을 받습니다. 값의 범위는 0~1023 사이 입니다.
  • 10 줄 : 소리 센서의 값을 시리얼 모니터에 출력합니다.
  • 11 줄 : 20ms 동안 대기합니다.

3. 결과


[그림 3 : 소리 크기 측정 결과]

그림 3에서 보시는 바와 같이 시리얼 모니터를 통해 소리의 크기를 확인할 수 있습니다.
저는 현재 제 주변에서의 기본적인 소리의 크기가 17정도인 것 같고, 박수를 가볍게 치면 20정도의 값이 나오네요.

[아두이노 부품] 고감도 사운드 센서 알아보기

아두이노 소리센서 값 - adu-ino solisenseo gabs

고감도 사운드 센서

안녕하세요. 아토플래닛의 가현쌤입니다. 오늘 대설 특보가 갑자기 떴더라구요! 요즘 날씨는 정말 예측하기가 어려운 것 같아요.. 이제 따뜻해지는 것 같아서 패딩을 잠시 넣어놓았었는데, 다시 패딩을 입게 되었네요! 갑작스러운 날씨 변화 때문에 감기 걸리실 수 있으시니까 조심하세요! ㅜㅜ 자! 아무리 추워도 아두이노 공부를 안 할 수는 없겠죠?!>3< 공부하러 출발하러 가볼까요?
!GO GO!

아두이노 소리센서 값 - adu-ino solisenseo gabs

1. 고감도 사운드 센서 알아보기

오늘은 고감도 사운드 센서에 대해서 알아보려고 합니다. 고감도 사운드 센서는 소리를 감지하는 센서인데요, 고감도 사운드 센서 말고도 마이크로폰 사운드 감지 센서도 소리를 감지하는 센서랍니다. 

아두이노 소리센서 값 - adu-ino solisenseo gabs

고감도 사운드 센서는 총 4개의 핀이 달려있습니다. 'A0핀, GND핀, +핀, D0핀'은 아두이노 보드의 '아날로그 입력핀, GND핀, 5V핀, 디지털 핀'에 연결해주시면 된답니다. 만약 아날로그 입력핀만 사용할 경우, D0핀은 아두이노 보드에 연결하지 않으셔도 되며, 디지털 핀만 사용할 경우 A0핀은 아두이노 보드에 연결하지 않으셔도 된답니다.

아두이노 소리센서 값 - adu-ino solisenseo gabs

이와 같이 고감도 사운드 센서는 아날로그 값과 디지털 값으로 모두 소리를 감지할 수 있는데요, 아날로그 값의 경우 소리의 미세한 값을 숫자로 나타낼 수 있습니다. 디지털 값의 경우 소리의 여부를 'HIGH, LOW'로 나타낸답니다.

먼저 아날로그 입력값이 소리에 따라 어떻게 나타나는지 시리얼 모니터를 통해 확인해보도록 하겠습니다. 먼저 코드를 살펴볼까요?

아두이노 소리센서 값 - adu-ino solisenseo gabs

1~2번 줄의 코드는 변수를 설정한 코드인데요, 먼저 1번 줄의 'int sensor = A0;'은 고감도 사운드 센서가 연결된 A0(아날로그 입력핀)을 sensor라는 변수에 저장하여 설정한 코드입니다. 2번 줄의 val 변수는 loop()에서 사용할 변수로 먼저 설정해 놓은 코드입니다. 

setup() 공간에서는 먼저 시리얼 모니터를 사용할 것이기 때문에 'Serial.begin(9600);'을 작성하여 시리얼 통신을 설정하도록 합니다. 이때 9600은 보드 레이트를 뜻합니다. 'pinMode(sensor, INPUT);'는 고감도 사운드 센서가 소리를 감지하는 센서이기 때문에 sensor를 INPUT(입력)으로 설정한 코드입니다. 

loop() 공간에서는 먼저 sensor의 입력값은 val이라는 변수에 저장한 코드입니다. 이때 아날로그 입력값을 측정할 것이기 때문에 'analogRead(sensor)'처럼 analogRead() 함수를 사용하며, 아날로그 입력값은 val 변수에 저장하도록 합니다. 

'Serial.println(val);'은 센서의 입력값을 시리얼 모니터에 출력한다는 코드입니다.

아래의 그림과 같이 시리얼 모니터를 켜면 아날로그 입력값을 확인할 수 있습니다. 가현쌤이 가지고 있는 고감도 사운드 센서의 경우 아무런 소리 효과를 주지 않았을 때는 약 60의 아날로그 입력값이 측정이 됩니다. 이때 손뼉을 치거나, 큰 소리를 낼 경우에는 60에서 좀 더 높은 숫자가 나오게 되겠죠?

아두이노 소리센서 값 - adu-ino solisenseo gabs

2. 고감도 사운드 센서로 LED 제어하기

고감도 사운드 센서의 아날로그 입력값을 시리얼 모니터로 확인할 경우 큰 차이를 확인할 수 없기 때문에, 아날로그 입력값으로 LED를 제어하여 소리의 유무를 확인하도록 하겠습니다. 코드를 살펴보도록 할까요?

아두이노 소리센서 값 - adu-ino solisenseo gabs


1~3번 줄의 코드는 변수를 설정한 코드입니다. 아까 보셨던 코드에서 LED에 대한 코드만 추가하시면 되는데요, 1번 줄의'int led = 11;'은 LED를 led라는 변수로 설정하여 연결된 11(데이터 핀)을 저장한 코드입니다. 아날로그 출력을 사용할 것이기 때문에 틸트(~)표시가 있는 11번에 연결하였습니다. 또는 9번이나 10번 등 틸트(~)표시가 있는 핀에 연결하셔도 상관없습니다. 

setup() 공간으로 넘어가 보도록 하겠습니다. led는 빛을 출력시키는 부품이므로 OUTPUT(출력)으로 설정하고, sensor는 소리를 감지하는 센서이므로 INPUT(입력)으로 설정합니다. 

loop() 공간으로 넘어가서는 이제 작동에 대한 코드를 설정해주시면 되는데요, 먼저 11번의 코드를 보시면 sensor의 아날로그 입력값을 val이라는 변수에 저장하도록 설정합니다. 이제 val의 입력값을 LED에 내보내는 신호로 바꿔주면 되는데요, 이때 map() 함수를 사용합니다. 'int light = map(val, 60, 1023, 0, 255);'으로 설정하여 '60~1023'인 아날로그 입력값을 '0~255'의 아날로그 출력값으로 변경할 수 있습니다. 

아두이노 소리센서 값 - adu-ino solisenseo gabs

'선생님, 근데 왜 아날로그 입력값을 60~1023으로 설정하나요? 0~1023으로 설정하는 게 아닌가요?'

아까 시리얼 모니터를 통해서 소리의 아날로그 입력값을 확인할 수 있었죠? 소리를 불지 않았을 때 아날로그 입력값이 대략 60으로 나왔기 때문에 60으로 설정한 것인데요, 만약 60이 아닌 다른 숫자라면 그 숫자를 작성하시면 된답니다.

마지막으로 'analogWrite(led, light);'를 작성하여 LED의 빛을 확인할 수 있습니다.

동영상을 보면서 소리에 따른 LED의 빛의 출력을 확인해보도록 합시다.

아두이노 소리센서 값 - adu-ino solisenseo gabs

고감도 사운드 센서에서 아날로그 핀만 사용하였기 때문에 고감도 사운드 센서의 A0핀은 아두이노 보드의 A0핀에 연결해주시고, 나머지 GND핀은 아두이노 보드의 GND핀에, +핀은 아두이노 보드의 5V핀에 연결해주세요. D0핀은 따로 연결하지 않겠습니다.

LED의 경우 +극은 11번 데이터핀에 연결해주시고, -극은 GND핀에 연결하도록 하겠습니다. 만약 시리얼 통신만 사용한다면 LED에 연결된 핀들을 모두 제거해주시면 된답니다.

오늘은 고감도 사운드 센서에 대해서 알아보았는데요, 재밌으셨나요? 고감도 사운드 센서의 경우 정확한 소리를 측정하기보다는 아주 큰 소리나 바람과 같은 작용을 주어야 제대로 측정할 수 있어서 아쉬웠던 센서였습니다.ㅜㅜ이 수업 이후에도 고감도 사운드 센서뿐만 아니라 마이크로폰 사운드 감지 센서를 사용하면서 어떻게 해야 제대로 소리를 측정하는지 더욱 열심히 공부해봐요!>3< 오늘도 즐거웠던 아두이노 공부가 되셨기를 바라면서 오늘 수업 마무리하도록 하겠습니다. 우리 다음 시간에 또 만나요! 

아두이노 소리센서 값 - adu-ino solisenseo gabs