층간소음 측정기 만들기
층간소음으로 고통받는 이들을 위한 층간소음 측정장치 만드는 방법입니다. 이걸로 층간소음을 100% 해결할 수는 없지만 적어도 하루종일 소음 측정기를 들고 모니터링 하는 수고는 덜어줄 수 있도록 고안한 장치입니다.
모르시는 분들이 아마 더 많으실텐데.. 정부에서 정한 층간 소음 종류와 기준이란게 있습니다. 크게 최고소음도, 1분 등가소움도, 5분 등가소음도로 나뉘는데 아래와 같은 기준을 넘으면 층간 소음으로 판정할 수 있습니다.
- 소음종류 : 뛰거나 걷는 소리, 문-창문을 닫거나 두드리는 소음, 망치질-톱질 등으로 발생하는 소음, 탁자-의자 등 가구를 끌면서 나는 소음, 헬스기구-골프연습기 등의 운동기구를 사용하면서 나는 소음
주간 : 최고소음도 57dB, 1분 등가소음도 43dB
야간 : 최고소음도 52dB, 1분 등가소음도 38dB - 소음종류 : 텔레비전-라디오-악기 등을 통해 발생하는 공기전달소음
주간 : 5분 등가 소음도 45dB
야간 : 5분 등가 소음도 40dB
이번에 만들 장치는 이 기준에 정확히 부합하는 장치는 아닙니다. 그보다는 러프하게 장비를 세팅해서 기준치가 넘을 경우 자동으로 서버에 기록되도록 만들 것입니다. 그리고 층간소음을 단순히 마이크 모듈로 측정할 경우 진동이나 저주파 소음에 의한 피해를 측정하기가 힘이 듭니다. 그래서 진동센서를 추가해서 이 부분을 보완하도록 했습니다.
층간소음 측정기는 WiFi 실드를 이용해서 층간소음 모니터링 도중 기준치 이상의 측정값이 판별되면 서버로 (무료 IoT 서버인 thingspeak 서버) 보내도록 만들었습니다. 매 1분 단위로 측정결과가 업데이트 됩니다. 따라서 언제든 웹으로 접속해서 하루 혹은 그 이상의 기간동안 층간소음 측정치를 모니터링 할 수 있습니다.
준비물
아두이노
WiFi 실드를 사용하므로 아두이노 UNO 를 준비합니다. 그리고 WiFi 실드의 전류 소모량이 높으므로 충분한 전원이 공급될 수 있도록 배터리나 아두이노용 9V 어댑터를 사용하는 것이 좋습니다.
WiFi 실드
CC3000 WiFi 실드를 사용합니다. 국내 판매 가격이 상당한데 해외 구매를 하면 20불 정도에 구매할 수 있습니다. 다른 WiFi 솔루션을 사용하셔도 되지만 이 경우 CC3000용 라이브러리 소스를 해당 모듈용으로 모두 바꿔줘야해서 소스를 상당히 수정해야 합니다. 주의하세요.
WiFi 모듈들은 전류 소모량이 높으므로 공급 전류에 대한 충분한 고려가 필요합니다.
소음 센서
소음을 측정할 메인 모듈인 마이크로폰 센서입니다. 시중에서 저렴하게 구매할 수 있습니다. 다만 데시벨(dB) 단위 측정이 어렵습니다. 정확도도 좀 떨어지구요. 그래도 특정 소음 수준 이상을 측정하는 경우 대세에 지장이 없긴 합니다.
하지만 처음 조립할 때 원하는 소음 수준에 맞게 측정할 수 있도록 마이크로폰 모듈의 감도를 수동으로 조절해줘야 합니다. 핸드폰의 소음측정 앱을 켜서 비교해가면서 맞춰주면 좋습니다. 감도 조절은 모듈에 붙어있는 가변저항을 돌려주면 됩니다. 감도를 조절하면 모듈에서 수집되는 analog 값의 편차가 커지게 됩니다.
진동 센서
아래 사진과 같이 생긴 센서가 저렴하게 구해서 쓸 수 있는 진동 센서입니다. 일정 진동 수준 이상이되면 D0(Digital Out)핀으로 신호가 오도록 되어 있으므로 마이크로폰 센서와 마찬가지로 가변저항을 이용해 감도를 수동으로 조절해 줘야 합니다. 특정한 기준이 없으므로 직접 실험을 해보면서 보정해야 합니다…
LED, 저항
실시간으로 소음 측정 상태를 표시해 줄 LED와 저항(460옴)을 준비합니다. 필수는 아닙니다.
연결 방법
1. 먼저 아두이노에 WiFi 실드를 결합니다. 이건 뭐 쉽죠. 그냥 핀 모양에 맞춰 얹기만 하면 되니까요.
2. Microphone 센서를 연결합니다. 아날로그 출력을 전달하기 때문에 아두이노의 A0 핀으로 연결해야 합니다.
- VCC ==> 아두이노 5V
- GND ==> 아두이노 GND
- AO ==> 아두이노 A0
3. 진동센서는 디지털 신호를 전달해주므로 아두이노 D7 핀과 연결되도록 합니다.
- VCC ==> 아두이노 3.3V
- GND ==> 아두이노 GND
- DO ==> 아두이노 D7
4. 아두이노 D8 핀이 470옴 저항을 거쳐 LED와 연결되도록 해줍니다.
모두 연결하면 아래처럼 됩니다.
테스트
아래 링크에서 소스코드를 다운로드 받으실 수 있습니다.
https://github.com/godstale/noise-detector
그리고 WiFi 실드용 라이브러리도 미리 설치해줘야 합니다. 아래 링크에서 CC3000 WiFi 실드용 라이브러리를 다운로드 받을 수 있습니다. 아두이노 설치폴더 – libraries 폴더안에 설치해주면 됩니다.
https://github.com/adafruit/Adafruit_CC3000_Library
테스트에 앞서 층간소음 측정장치가 보내는 데이터를 받을 서버가 필요합니다. 여기서는 thingspeak 서버를 이용했습니다. thingspeak.com 에 가셔서 회원가입 후 채널을 하나 생성하세요. 채널 생성 후에는 필드를 field1 ~ field4 까지 생성해둡니다. 각각의 필드는 1분간 측정된 [최대 소음 제한 초과 횟수], [평균 소음 제한 초과 횟수], [진동 제한 초과 횟수], [종합 소음 수준 – 각 항목별 제한 초과 횟수의 합] 입니다.
그리고 API Key 값을 따로 메모해 둬야 합니다. API Key 가 있어야 외부에서 우리가 생성한 채널에 업데이트가 가능합니다.
이제 소스코드에서 필요한 부분들을 수정해 줘야 합니다.
#define WLAN_SSID "xxxxxxxx" // cannot be longer than 32 characters! #define WLAN_PASS "xxxxxxxx"
위 항목들은 WiFi 공유기의 이름(SSID)과 비밀번호입니다. 자신의 환경에 맞게 수정해줘야 합니다.
// What page to grab! #define WEBSITE "api.thingspeak.com" // ThingTweet configurations String thingspeakAPIKey = "xxxxxxxxx";
위에서 API Key 부분을 자신의 설정에 맞게 업데이트 해줘야 합니다.
#define SHOCK_THRESHOLD 100 #define NOISE_AVERAGE_THRESHOLD 3 #define NOISE_PEAK_THRESHOLD 40 #define NOISE_PEAK_COUNT_THRESHOLD 3
이 부분들은 진동, 소음을 감지하기 위한 기준치(threshold) 값입니다. 센서의 가변저항을 조절해서 감도를 조절하거나 이 값들을 변경해서 진동-소음이 적정 범위내에서 측정되도록 해줘야 합니다.
- SHOCK_THRESHOLD : 진동이 측정되면 일정 시간동안 다수의 진동이 측정됩니다. 진동이 측정된 횟수가 이 기준치를 넘으면 기준을 초과한 진동으로 판단합니다.
- NOISE_AVERAGE_THRESHOLD : 1분당 측정된 소음의 평균 값. 마이크로폰 센서로 소음을 측정한 값 평균이 이 값을 넓으면 기준을 초과한 소음으로 판단합니다.
- NOISE_PEAK_THRESHOLD : 순간적으로 측정된 최대 소음 값 제한입니다. 이 기준을 넘은 값이 측정되면 소음이 기준을 넘은 것으로 판단합니다.
- NOISE_PEAK_COUNT_THRESHOLD : 1분간 측정한 위 3개 항목의 제한치 초과 횟수가 여기서 정한 기준을 넘으면 1분동안 유의미한 초과 소음이 있었던 것으로 간주합니다.
아두이노 개발환경(IDE)을 이용해서 공유된 스케치(소스코드)를 수정해서 업로드 합니다. 그리고 Serial Monitor를 이용해서 소음을 일으켰을 때 측정되는 값이 어떻게 나오는지 충분히 테스트 해보세요. 그리고 천정에 설치해서 사용하면 됩니다.
외형 만들기
같은 팀으로 제작에 참여했던 강순구 대표님(http://www.designstudio365.com/)께서 멋진 외관을 만들어 주셨습니다. 천정에 붙이고 떼기 쉽도록 적절히 길이가 나오도록 디자인 되었습니다. 3D 프린터로 출력해서 사용하세요.
현재는 9V 어댑터 등을 이용해서 전원을 공급하도록 되어 있지만 일반 휴대폰 재충전용 배터리를 이용해서 사용하시는 것이 좋습니다. 배터리에서 USB +, – 라인이 아두이노의 VIN(RAW), GND 로 연결시켜주면 됩니다.