본문 바로가기
아두이노 센서

[센서/마이크] 소리 세기/소음 측정 하는 마이크 센서(MAX4466)

by 작동미학 2015. 3. 30.
반응형

마이크 앰프 모듈(MAX4466)을 통해 음량을 측정해 다양하게 활용해보자.

 

▶ 이 가이드를 따라하면

- 음량/소음 정도를 측정할 수 있다

- Arduino의 Analog pin을 활용할 수 있다.

 

▶ 같이 읽으면 좋은 글

- passive buzzer를 통해 소리를 출력 : http://bbangpan.tistory.com/23

 

▶ 부품 설명 및 회로 구성

MAX4466은 조그만 마이크가 달린 앰프 모듈이다. 즉 들어온 음량을 증폭하여 전압을 발생시킨다. 원래 소리라는 것은 진동이고 이 진동이 셀수록 높은 전압을 발생시키는데, 자연상태의 것보다는 크게 만들어주므로 마이크 앰프(amplifier) 모듈이라고 부른다.

MAX4466은 25배~125배 정도의 증폭을 해주는 모델이고, 작은 조절 나사가 있어, 돌려 민감도를 조절할 수 있다. Adjustable gain이라고 이름 붙여진 이유이다.

<MAX4466, OUT->A0, GND->GND, VCC->5V로 연결>

https://learn.adafruit.com/adafruit-microphone-amplifier-breakout/measuring-sound-levels 여기에 더 상세한 설명이 들어있고 이 소스를 그대로 활용하여 시험구동을 해보자.

모듈의 전압수용은 2.4V~5.5V이므로 5V에 꼽아서 구동하자. (UNO의 경우 3.3V에 꼽으면 전력이 부족할 수 있다.)

Arduino의 Analog pin은 0~1023범위의 전압값을 읽을 수 있다. 이를 위해 A0~A5까지의 포트가 존재하며 여기서는 0번 포트에 연결해 AnalogRead함수를 통해 전압값을 읽게 된다. 전체 전압은 0~5V이므로 이것을 1024개의 구간으로 분할하여 값을 사용할 수 있는 셈이다.

참조로 AnalogWrite도 가능한데, 이는 아날로그 핀으로 가능한 것은 아니고, PWM표시가 붙은 디지털 핀을 통해 가능하다. 핀 옆에 물결(~)표시가 붙은 것이 바로 PWM이다(사실은 이 PWM도 5V를 유지하는 시간을 조절해서 낮은 전압을 에뮬할 뿐이다)

 

▶ 소스 코드 입력 및 구동

https://learn.adafruit.com/adafruit-microphone-amplifier-breakout/measuring-sound-levels 의 소스코드를 그대로 활용해보자(해당 저작권은 Adafruit사에 있다. 부득이 참조용으로 소스를 여기로 옮겨온다)

내용을 살펴보면 50ms동안의 전압변화를 살펴서 최소/최대 차이를 출력하도록 되어있다. 이를 통해 볼륨레벨을 파악할 수 있게 된다.

소스 :

/****************************************

Example Sound Level Sketch for the

Adafruit Microphone Amplifier

****************************************/

 

const int sampleWindow = 50; // Sample window width in mS (50 mS = 20Hz)

unsigned int sample;

 

void setup()

{

Serial.begin(9600);

}

 

 

void loop()

{

unsigned long startMillis= millis(); // Start of sample window

unsigned int peakToPeak = 0; // peak-to-peak level

 

unsigned int signalMax = 0;

unsigned int signalMin = 1024;

 

// collect data for 50 mS

while (millis() - startMillis < sampleWindow)

{

sample = analogRead(0);

if (sample < 1024) // toss out spurious readings

{

if (sample > signalMax)

{

signalMax = sample; // save just the max levels

}

else if (sample < signalMin)

{

signalMin = sample; // save just the min levels

}

}

}

peakToPeak = signalMax - signalMin; // max - min = peak-peak amplitude

double volts = (peakToPeak * 3.3) / 1024; // convert to volts

 

Serial.println(volts);

}

구동한 후 시리얼 모니터를 띄워보면 0.5~3.3V의 값으로 지속적으로 변화함을 알 수 있다. 이는 민감도 조절 여부에 따라 다른 값을 내게 된다. 3.3V라는 값은 인위적인 값이므로 소스 코드를 수정해 변경이 가능하다.

<무음상태일 경우 0.5V (0~3.3V로 설정) 전후 값 출력 확인>

▶ 구매 가이드

Arduino Keyes sound sensor : http://www.aliexpress.com/item/Free-shipping-Keyes-electronic-building-blocks-sound-sensor-with-analog-sensors-MIC-DuPont-line-for-arduino/1945352381.html ($3)

MAX4466 국내 : http://www.artrobot.co.kr/front/php/product.php?product_no=729&main_cate_no=&display_group= (12,000원)

 

강의 키워드

아두이노 마이크, 아두이노 사운드 센서, Arduino sound sensor, Arduino mic amp, MAX4466, 소음 측정, 음량 측정, 소음 센서

반응형