층간소음 측정기 만들기

 

층간소음으로 고통받는 이들을 위한 층간소음 측정장치 만드는 방법입니다. 이걸로 층간소음을 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 모듈들은 전류 소모량이 높으므로 공급 전류에 대한 충분한 고려가 필요합니다.

arduino-wifi-shield-cc3000

 

소음 센서

소음을 측정할 메인 모듈인 마이크로폰 센서입니다. 시중에서 저렴하게 구매할 수 있습니다. 다만 데시벨(dB) 단위 측정이 어렵습니다. 정확도도 좀 떨어지구요. 그래도 특정 소음 수준 이상을 측정하는 경우 대세에 지장이 없긴 합니다.

하지만 처음 조립할 때 원하는 소음 수준에 맞게 측정할 수 있도록 마이크로폰 모듈의 감도를 수동으로 조절해줘야 합니다. 핸드폰의 소음측정 앱을 켜서 비교해가면서 맞춰주면 좋습니다. 감도 조절은 모듈에 붙어있는 가변저항을 돌려주면 됩니다. 감도를 조절하면 모듈에서 수집되는 analog 값의 편차가 커지게 됩니다.

microphone-module-4

 

진동 센서

아래 사진과 같이 생긴 센서가 저렴하게 구해서 쓸 수 있는 진동 센서입니다. 일정 진동 수준 이상이되면 D0(Digital Out)핀으로 신호가 오도록 되어 있으므로 마이크로폰 센서와 마찬가지로 가변저항을 이용해 감도를 수동으로 조절해 줘야 합니다. 특정한 기준이 없으므로 직접 실험을 해보면서 보정해야 합니다…

UT85EgAXf8XXXagOFbX3

 

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와 연결되도록 해줍니다.

 

모두 연결하면 아래처럼 됩니다.

circuit_bb

 

 

테스트

 

아래 링크에서 소스코드를 다운로드 받으실 수 있습니다.

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 가 있어야 외부에서 우리가 생성한 채널에 업데이트가 가능합니다.

 

이제 소스코드에서 필요한 부분들을 수정해 줘야 합니다.

위 항목들은 WiFi 공유기의 이름(SSID)과 비밀번호입니다. 자신의 환경에 맞게 수정해줘야 합니다.

 

위에서 API Key 부분을 자신의 설정에 맞게 업데이트 해줘야 합니다.

 

이 부분들은 진동, 소음을 감지하기 위한 기준치(threshold) 값입니다. 센서의 가변저항을 조절해서 감도를 조절하거나 이 값들을 변경해서 진동-소음이 적정 범위내에서 측정되도록 해줘야 합니다.

  • SHOCK_THRESHOLD : 진동이 측정되면 일정 시간동안 다수의 진동이 측정됩니다. 진동이 측정된 횟수가 이 기준치를 넘으면 기준을 초과한 진동으로 판단합니다.
  • NOISE_AVERAGE_THRESHOLD : 1분당 측정된 소음의 평균 값. 마이크로폰 센서로 소음을 측정한 값 평균이 이 값을 넓으면 기준을 초과한 소음으로 판단합니다.
  • NOISE_PEAK_THRESHOLD : 순간적으로 측정된 최대 소음 값 제한입니다. 이 기준을 넘은 값이 측정되면 소음이 기준을 넘은 것으로 판단합니다.
  • NOISE_PEAK_COUNT_THRESHOLD : 1분간 측정한 위 3개 항목의 제한치 초과 횟수가 여기서 정한 기준을 넘으면 1분동안 유의미한 초과 소음이 있었던 것으로 간주합니다.

 

아두이노 개발환경(IDE)을 이용해서 공유된 스케치(소스코드)를 수정해서 업로드 합니다. 그리고 Serial Monitor를 이용해서 소음을 일으켰을 때 측정되는 값이 어떻게 나오는지 충분히 테스트 해보세요. 그리고 천정에 설치해서 사용하면 됩니다.

test

 

test2

 

 

 

외형 만들기

 

같은 팀으로 제작에 참여했던 강순구 대표님(http://www.designstudio365.com/)께서 멋진 외관을 만들어 주셨습니다. 천정에 붙이고 떼기 쉽도록 적절히 길이가 나오도록 디자인 되었습니다. 3D 프린터로 출력해서 사용하세요.

final2

final

 

현재는 9V 어댑터 등을 이용해서 전원을 공급하도록 되어 있지만 일반 휴대폰 재충전용 배터리를 이용해서 사용하시는 것이 좋습니다. 배터리에서 USB +, – 라인이 아두이노의 VIN(RAW), GND 로 연결시켜주면 됩니다.

 

Post Author: TORTUGA

TORTUGA
궁금하신 점은 새로 개편한 홈페이지의 QnA 게시판을 이용해주세요!!!!!!! http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=qna

14 thoughts on “층간소음 측정기 만들기

    김태민

    (2015년 7월 22일 - 1:39 오후)

    혹시 만드는 데 들어간 소음센서와 진동센서 모델명이 뭔지 알 수 있을까요??

    뉴파트

    (2015년 8월 10일 - 6:39 오후)

    안녕하세요.

    아두이노를 처음 다뤄봐서

    궁금한 점이 많네요.

    와이파이 쉴드로 와이파이를 연결했을 때와

    와이파이 쉴드 없이 그냥 센서값을 받았을 때와

    센서 값이 다르게 나옵니다.

    (와이파이 쉴드는 그대로 끼워둔 채 코드만 와이파이를 접속한 코드, 아닌 코드로 업로드 시켰습니다.)

    없이 했을 때가 비교적 정확해 보이는데

    이 것이 혹시 와이파이 쉴드 때문인지 궁금합니다.

    아두이노 R3와 R3 와이파이 쉴드를 사용하고 있습니다.

    의견을 말씀해주시면 감사하겠습니다!

      TORTUGA

      TORTUGA

      (2015년 8월 26일 - 6:31 오후)

      좀 어려운 문제네요. wifi가 센서에 어떤 간섭을 일으키는 건가 싶습니다만 정확한 이유는 잘 모르겠네요. 제 경우에는 느껴질만큼 큰 차이가 있지는 않았거든요.

    김태민

    (2015년 9월 17일 - 10:21 오전)

    혹시 소음측정해서 계산하는 부분 그니까 그 소음 관련부분 알고리즘을 알 수 있을까요 ?

      TORTUGA

      TORTUGA

      (2015년 9월 30일 - 11:44 오전)

      딱히 알고리즘이랄건 없고.. 특정 기준치와 횟수를 넘으면 소음으로 인식합니다.

    신세계

    (2016년 3월 20일 - 12:13 오전)

    아두이노에 관심이 가서.. 이것저것 보던 중에 구현을 해보고싶어서 문의를 드립니다.

    혹시 저 상태에서 수치의 값을 앱으로 전송을 해보고싶은데 가능할까요?

      TORTUGA

      TORTUGA

      (2016년 4월 11일 - 12:25 오전)

      블루투스 모듈을 달아서 SoftwareSerial 라이브러리를 사용하면 됩니다.

    pw

    (2016년 6월 2일 - 11:07 오전)

    사용하신 마이크 모듈은 디지털 출력이라 소리가 들어옴의 유무에 따라 0과 1을 출력하는데
    이걸로 소음측정이 가능하겠습니까?
    그런데 이미
    아마 이상한걸 알아채고 마이크모듈 바꾸셨을듯

    홍준영

    (2016년 10월 24일 - 5:49 오후)

    API Key 이건 무슨의미인지 알려주세요 어떤것인지 잘모르겠습니다.

    박진희

    (2016년 11월 22일 - 9:08 오후)

    제가 우연히 이 페이지를 보고 흥미를 느껴서 구현해 보았습니다.
    그런데 와이파이 쉴드와 아두이노를 연결하고 시리얼 포트를 실행시키니 WiFi shield not present
    라고 뜨는데 뭐가 문제일까요??ㅠㅠ

    김수운

    (2018년 3월 21일 - 3:00 오후)

    층간 소음 측정기 판매하실 생각은 없으신지요?

    정윤구

    (2018년 4월 3일 - 10:51 오전)

    안녕하세요!! 층간소음측정기를 구매하고 싶습니다.
    회사 사원아파트에 층간소음관련하여, 세대 내부에 설치하고 싶으며
    혹시 층간소음 DATA를 휴대폰으로 전송도 가능 할까요??

    이준호

    (2018년 6월 4일 - 3:58 오후)

    코딩을 하였는데
    C:\Users\411\Documents\Arduino\sketch_jun04a\sketch_jun04a.ino: In function ‘void setup()’:

    C:\Users\411\Documents\Arduino\sketch_jun04a\sketch_jun04a.ino:134:44: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

    if (! cc3000.getHostByName(WEBSITE, &ip)) {
    뜨고 컴파일 완료됬다는데 작동은 안되네요 혹시 원인을 알수있나요?

댓글 남기기

이메일은 공개되지 않습니다.