마이크 앰프 모듈(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, 소음 측정, 음량 측정, 소음 센서
'아두이노 센서' 카테고리의 다른 글
[센서/터치] 정전식 터치 센서를 통해 손가락 터치를 감지한다 (0) | 2015.06.22 |
---|---|
[센서/진동] 약한 진동까지 감지할 수 있는Piezo Disk Vibration Sensor(피에조 디스크 진동 센서) (12) | 2015.06.22 |
[센서/컬러] 눈앞에 색을 인식하는 TCS3200 IC기반의 Color(RGB 색깔) sensor 인 GY-31을 실습해보자. (17) | 2015.06.18 |
[센서/진동] 충격을 감지해주는 digital vibration sensor (0) | 2015.06.17 |
[센서/가속도,자이로 센서] MPU-6050으로 만나는 각종 위치 및 움직임 관련 정보 센싱 (2) | 2015.06.17 |
[센서/온도] 접촉없는 원격 온도 측정, 적외선 기반 TM006 모듈 (0) | 2015.04.29 |
[센서/심박] 광학식으로 심박수를 측정하는 Pulse heart rate sensor (0) | 2015.04.01 |
[센서/RFID] 접촉형 신분증/태그 구현이 가능한 RC522 RFID모듈 (0) | 2015.03.20 |
[센서/IR] 가장 저렴한 통신방식인 IR(적외선) 리모콘을 아두이노(Arduino)로 해킹 해보자 (0) | 2015.02.06 |
[센서/온도] 온습도 센서(DHT22) 를 Arduino UNO/NANO 에서 구동해보자 (0) | 2015.01.26 |