- 필요한 재료 :
- 회로도 :
- 회귀 방법을 사용하여 ADC 값에서 dB 계산 :
- 소음 수준을 dB로 측정하는 Arduino 프로그램 :
- Arduino 소음 측정기 작동 :
- 필터 회로가있는 증폭기 :
인구 밀도가 높기 때문에 소음 공해 가 정말로 중요해지기 시작했습니다. 정상적인 사람의 귀는 0dB에서 140dB까지의 소리를들을 수 있으며 120dB에서 140dB의 소리는 소음으로 간주됩니다. 라우드니스 또는 사운드 레벨은 일반적으로 데시벨 (dB)로 측정되며, 사운드 신호를 dB로 측정 할 수있는 악기가 있지만이 미터는 약간 비싸고 슬프게도 데시벨 단위로 사운드 레벨을 측정 할 수있는 out of box 센서 모듈이 없습니다. 그리고 작은 교실이나 거실 의 사운드 레벨 을 측정해야하는 작은 Arduino 프로젝트를 위해 값 비싼 마이크를 구입하는 것은 경제적이지 않습니다.
따라서이 프로젝트 에서는 Arduino 와 함께 일반 Electret Condenser 마이크 를 사용하고 실제 값에 최대한 가깝게 dB 단위로 사운드 또는 소음 공해 수준을 측정 해 보겠습니다. 정상적인 증폭기 회로를 사용하여 사운드 신호를 증폭하고 Arduino에 공급합니다. 여기서 회귀 방법을 사용하여 사운드 신호를 dB로 계산합니다. 얻은 값이 올바른지 확인하기 위해 "Sound Meter"android 응용 프로그램 을 사용할 수 있습니다. 더 좋은 측정기가 있으면 보정에 사용할 수 있습니다. 이 프로젝트는 dB를 정확하게 측정하는 것을 목표로하지 않으며 가능한 한 실제 값에 가까운 값을 제공합니다.
필요한 재료:
- Arduino UNO
- 마이크로폰
- LM386
- 10K 가변 POT
- 저항기 및 커패시터
회로도:
이 Arduino Sound Level Meter의 회로는 LM386 오디오 증폭기 회로를 사용하여 콘덴서 마이크의 신호를 증폭하여 Arduino의 아날로그 포트에 공급하는 매우 간단합니다. 우리는 이미이 LM386 IC를 사용하여 저전압 오디오 증폭기 회로를 구축했으며 회로는 거의 동일하게 유지됩니다.
이 특정 연산 증폭기의 이득은 핀 1과 8에 걸쳐 저항 또는 커패시터를 사용하여 20에서 200까지 설정할 수 있습니다. 만약 자유롭다면 이득은 기본적으로 20으로 설정 될 것입니다. 우리 프로젝트의 경우이 회로에서 가능한 최대 이득이므로 핀 1과 8 사이에 10uF 값의 커패시터를 사용합니다.이 핀은 극성에 민감하며 커패시터의 음극 핀은 핀 8에 연결되어야합니다. 완전한 증폭기 회로는 Arduino의 5V 핀에 의해 전원이 공급됩니다.
Capacitor C2는 마이크에서 DC 노이즈를 필터링하는 데 사용됩니다. 기본적으로 마이크가 소리를 감지하면 음파가 AC 신호로 변환됩니다. 이 AC 신호에는이 커패시터에 의해 필터링되는 일부 DC 노이즈가 결합되어있을 수 있습니다. 마찬가지로 증폭 후에도 커패시터 C3는 증폭 중에 추가되었을 수있는 DC 노이즈를 필터링하는 데 사용됩니다.
회귀 방법을 사용하여 ADC 값에서 dB 계산:
회로가 준비되면 Arduino를 컴퓨터에 연결하고 Arduino에서 "Analog Read Serial" 예제 프로그램을 업로드하여 마이크에서 유효한 ADC 값을 얻고 있는지 확인할 수 있습니다. 이제이 ADC 값을 dB로 변환해야합니다.
온도 또는 습도 측정과 같은 다른 값과 달리 dB 측정은 간단한 작업이 아닙니다. 때문에 dB의 값은 ADC의 가치와 선형되지 않습니다. 당신이 도달 할 수있는 방법은 거의 없지만 내가 시도한 모든 가능한 단계가 좋은 결과를 얻지 못했습니다. 시도해보고 싶다면 여기 Arduino 포럼을 읽을 수 있습니다.
내 응용 프로그램의 경우 dB 값을 측정하는 동안 많은 정확도가 필요하지 않았으므로 dB 값으로 ADC 값을 직접 보정하는 더 쉬운 방법을 사용하기로 결정했습니다. 이 방법을 사용하려면 SPL 미터가 필요합니다 (SPL 미터는 dB 값을 읽고 표시 할 수있는 도구입니다).하지만 슬프게도 저는 하나도 없었고 대부분의 사람들이 없을 것입니다. 그래서 우리는 Play 스토어에서 무료로 다운로드 할 수있는 “사운드 미터”라는 안드로이드 애플리케이션을 사용할 수 있습니다. 이러한 유형의 응용 프로그램이 많이 있으며 원하는 것을 다운로드 할 수 있습니다. 이러한 애플리케이션은 휴대폰의 내장 마이크를 사용하여 소음 수준을 감지하고이를 모바일에 표시합니다. 그것들은 그다지 정확하지는 않지만 분명히 우리 작업에 효과적입니다. 그러니 Android 애플리케이션을 설치하는 것으로 시작하겠습니다. 열었을 때 다음과 같이 보입니다.
앞서 언급했듯이 dB와 아날로그 값 사이의 관계는 선형이 아니므로이 두 값을 서로 다른 간격으로 비교해야합니다. 휴대폰에 표시된 다른 dB에 대해 화면에 표시되는 ADC 값을 기록해 두십시오. 10 번 정도 읽었는데 아래와 같이 보 였는데 약간 다를 수 있습니다
Excel 페이지를 열고이 값을 입력합니다. 지금은 Excel을 사용하여 위 숫자에 대한 회귀 값을 찾습니다. 그 전에 그래프를 그려서 둘 다 어떻게 관련되어 있는지 확인하겠습니다.
우리가 볼 수 있듯이 dB 값은 ADC와 선형 적으로 관련이 없습니다. 즉, 모든 ADC 값에 대해 동등한 dB 값을 얻기 위해 공통 승수를 가질 수 없습니다. 이러한 경우 "선형 회귀"방법을 사용할 수 있습니다. 기본적으로이 불규칙한 파란색 선을 가능한 가장 가까운 직선 (검은 색 선)으로 변환하고 해당 직선의 방정식을 제공합니다. 이 방정식을 사용하여 Arduino가 측정하는 모든 ADC 값에 대한 dB의 등가 값을 찾을 수 있습니다.
Excel에는 데이터 분석 용 플러그인이있어 값 세트에 대한 회귀를 자동으로 계산하고 데이터를 게시합니다. 이 프로젝트의 범위를 벗어나므로 Excel로 수행하는 방법은 다루지 않겠습니다. 또한 Google에서 쉽게 배울 수 있습니다. 값에 대한 회귀를 계산하면 Excel은 아래와 같은 값을 제공합니다. 아래에 강조 표시된 숫자에만 관심이 있습니다.
이 숫자를 얻으면 다음과 같은 방정식을 만들 수 있습니다.
ADC = (11.003 * dB) – 83.2073
dB를 도출 할 수있는
dB = (ADC + 83.2073) / 11.003
보정이 다를 수 있으므로 자체 방정식을 사용해야 할 수도 있습니다. 그러나 Arduino를 프로그래밍하는 동안이 값이 필요하므로이 값을 안전하게 유지하십시오.
소음 수준을 dB로 측정하는 Arduino 프로그램:
dB를 측정하는 전체 프로그램은 아래에 나와 있으며 몇 가지 중요한 라인이 아래에 설명되어 있습니다.
위의 두 줄에서 우리는 핀 A0의 ADC 값을 읽고 방금 도출 한 방정식을 사용하여 dB로 변환합니다. 이 dB 값은 실제 dB 값으로 정확하지 않을 수 있지만 모바일 애플리케이션에 표시되는 값에 거의 가깝습니다.
adc = analogRead (MIC); // 증폭기에서 ADC 값 읽기 dB = (adc + 83.2073) / 11.003; // 회귀 값을 사용하여 ADC 값을 dB로 변환
프로그램이 제대로 작동하는지 확인하기 위해 Arduino가 60dB 이상의 시끄러운 소음을 측정 할 때 1 초 동안 높게 유지되는 디지털 핀 3에 LED를 추가했습니다.
if (dB> 60) {digitalWrite (3, HIGH); // LED를 켭니다 (HIGH는 전압 레벨). delay (1000); // 두 번째를 기다립니다. digitalWrite (3, LOW); }
Arduino 소음 측정기 작동:
코드와 하드웨어가 준비되면 코드를 업로드하고 직렬 모니터를 열어 Arduino에서 측정 한 dB 값을 확인하십시오. 나는 외부 트래픽을 제외하고는 소음이 많지 않은 내 방 에서이 코드를 테스트하고 있었고 직렬 모니터에서 아래 값을 얻었으며 Android 응용 프로그램도 이와 비슷한 것을 표시했습니다.
프로젝트의 전체 작업 은이 페이지 끝에 있는 비디오 에서 찾을 수 있습니다. 방에서 소리를 감지하고 활동이 있는지 또는 각 교실에서 얼마나 많은 소음이 발생하는지 확인하는 데 사용할 수 있습니다. 60dB 이상의 소리가 들리면 LED를 2 초간 높게 설정했습니다.
작업은 이상하게 만족 스럽지만 프로젝트 및 기타 기본 프로토 타입에 확실히 사용할 수 있습니다. 몇 번 더 파고 들었을 때 문제가 실제로 하드웨어에 있다는 것을 알았습니다. 그래서 저역 통과 및 고역 통과 필터가있는 스파크 펀 마이크 보드에 사용되는 다른 회로를 사용해 보았습니다. 나는 당신이 시도 할 수 있도록 아래 회로를 설명했습니다.
필터 회로가있는 증폭기:
여기에서는 앰프와 함께 저역 통과 및 고역 통과 필터를 사용 하여이 소음 수준 측정 회로 의 노이즈 를 줄여 정확도를 높일 수 있습니다.
위의 회로에서는 널리 사용되는 LM358 증폭기를 사용하여 마이크의 신호를 증폭했습니다. 증폭기와 함께 두 개의 필터도 사용했습니다. 고역 통과 필터는 R5, C2로 구성되고 저역 통과 필터는 C1 및 R2에 의해 사용됩니다. 이 필터는 8Hz에서 10KHz의 주파수 만 허용하도록 설계되었습니다. 저역 통과 필터는 8Hz 미만의 모든 것을 필터링하고 고역 통과 필터는 15KHz 이상의 모든 것을 필터링하기 때문입니다. 이 주파수 범위는 아래 데이터 시트에 표시된 것처럼 내 콘덴서 마이크가 10Hz에서 15KHZ까지만 작동하기 때문에 선택됩니다.
주파수 수요가 변경되면 아래 공식을 사용하여 필요한 주파수에 대한 저항 및 커패시터 값을 계산할 수 있습니다.
주파수 (F) = 1 / (2πRC)
또한 여기에 사용 된 저항 값은 증폭기의 게인에도 영향을 미칩니다. 이 회로에 사용되는 저항 및 커패시터 값에 대한 계산은 다음과 같습니다. 주파수 값을 수정하고 회귀 값을 계산하기 위해 여기에서 엑셀 시트를 다운로드 할 수 있습니다.
이전 회로는 내 기대에 만족 스러웠 기 때문에 나는 이것을 시도하지 않았습니다. 이 회로를 시도해 보시면 댓글을 통해 이전 회로보다 더 잘 작동하는지 알려주세요.