2016년도 소프트웨어 종합설계2

최종 보고서

팀명 : 이웃사이더

조원 : 김진형, 황영롱, 임영진

목    차

Ⅰ. 프로젝트 개요	3

1. 프로젝트 배경	3

2. 프로젝트 이론	3

가. 소음 측정	3

나. 진동 측정	4

다. 층간 소음 피해 기준	4

라. 관련 기술	4

1) 디지털 소음 측정기	4

3. 프로젝트 추진일정 및 계획	5
가. 진행 계획	5

나. 주요 마일스톤	5

4. 구성원별 역할	5

5. 성과물 형태 및 사용 툴	6

가. 시나리오	6

나. 성과물 형태	6

1) Hardware Design	6

2) Software Design	7

다. Required items	7

Ⅱ. 프로젝트 상세	8

1. 아두이노 코드	8

2. 안드로이드 주요 코드	12

가. 블루투스 확인 및 활성화	12

나. 수신 기능 및 주요 기능	13

Ⅲ. 프로젝트 결과	15

1. 시연용 외관	15

2. 논의내용	15

Ⅰ.프로젝트 개요

1. 프로젝트 배경

공동주택의 건축 구조상 이웃들과 매우 밀접하게 생활하기 때문에 여러 크고 작은 문제점들이 발생한다. 그 중 가장 대표적인 문제가 바로 층간소음 문제이다. 권익위원회 110 콜센터에서 조사한 결과에 따르면 층간소음으로 인한 스트레스를 받은 경험이 있는 것으로 조사되었다.

최근 층간소음으로 인한 사회적 문제가 많이 발생하고 있다. 공동주택에서 층간소음으로 인한 다툼이 폭행과 방화, 심지어 살인으로 이어지기도 한다. 가장 사소한 이유에서 발생하는 층간소음 문제이지만, 그 결과는 아무도 예상할 수 없다. 또한, 층간소음 발생 원인을 보면

아이들 뛰는 소음이 72%를 차지하고 있다. 보호자들이 항상 아이들을 지켜볼 수 없을뿐더러 정작 그들은 얼마나 큰 소음이 발생하고 있는지 인지하지 못하는 경우가 대부분일 것이다. 본 프로젝트는 이러한 문제점을 해결하고자 층간소음을 측정 할 수 있는 시스템과 측정한 데이터를 모니터링 할 수 있는 서비스를 구현하고자 한다.

2. 이론

가. 소음 측정

소음의 측정 단위로는 db(데시벨)이 있다. 이는 소리의 상대적인 크기를 나타내는 단위로 고막에 울리는 공기의 압력을 수치화 하여 만들어진 단위이다. 데시벨 값은 기준이 되는 소리의 세기와 측정하려는 소리의 세기의 비 값을 상용로그 취해준 다음 10을 곱하면 구할 수 있다. 데시벨을 구하기 위해서는 옴의 법칙과 전력식을 사용하여야 한다. 옴의 법칙을 이용하면 [eqn: I= {V} over {R}], [eqn: R=` {V} over {I}],[eqn: V=IR], [eqn: P(전력)=V⦁I] 이다. 이때, 전력식에 [eqn: I= {V} over {R}] 대입하면 [eqn: P= {V ^{2}} over {R}] 즉, 데시벨을 구하는 식에 대입하면 [eqn: dB=10log _{10} ( {R _{1} TIMES `V _{1} ^{{} _{2}}} over {R _{0} TIMES `V _{0} ^{{} _{2}}} )]으로 계산이 된다. 저항은 기본적인 회로의 저항이므로 약분될 수 있고, 따라서 최종적으로 데시벨을 구하는 공식을 구할 수 있다.

[eqn: dB`=`10log _{10} ( {V _{1} ^{2}} over {V _{0} ^{2}} )]  ([eqn: V _{0}] : 소리가 없을 때 전력, [eqn: V _{1}] : 소리가 있을 때 전력)

나. 진동 측정

진동수(Hz)는 [eqn: f= {1} over {T}] 공식을 이용해서 구해지는데 아두이노 센서를 이용해 진동수를 구하기 위해서는 진동이 울릴 때 측정되는 진동 사이의 주기를 구하여 역수를 취해 Hz를 구하도록 한다. 진동이 발생할 때 전력값이 최대가 되는 두 지점의 시간값을 빼주면 주기가 되고 [eqn: f= {1} over {T}]를 통해 역수를 취해준 다음 정수화 시키기 위해 [eqn: 10 ^{-3}]을 곱하여 Hz를 구한다.

다. 층간 소음 피해기준

소음에 대한 규제 조항을 두고 있는 법률들은 변동하는 소음을 주어진 시간동안 변동하지 않는 평균레벨의 크기로 환산하여 측정하는 등가소음레벨법(Equivalent Sound Level)을 사용하고 있다. 즉, 정해진 측정시간 동안의 변동소음을 시간적으로 평균하여 산출된다. 결국, 소음도의 파워 평균이다. 파워 평균을 구하는 공식은 [eqn: L=L-10log _{n}] (n은 음원의 수) 이다.

구분	소음원	평가방법	주간	야간
직접충격소음	뛰는(걷는)소리	1분 등가소음도	43 dB	38 dB
		최고소음도	57 dB	52 dB
공기전달음	악기, 대화, 급⦁배수음	5분 등가소음도	45 dB	40 dB

라. 관련기술

1) 디지털소음 측정기

기본적인 측정도구로 휴대가 간편하고 주로 소음 측정을 위한 기기로 사용된다. 하지만 이를 이용한 층간소음 측정 방법은 정해진 시간내에 여러 장비와 복잡한 분석의 절차가 필요하다.

<디지털 소음 측정기>             <실제 측정 방법>

3. 프로젝트 추진 일정 및 계획

가. 진행 계획

나. 주요 마일스톤

항목	세부내용	기간	결과물
아두이노 설계	하드웨어(회로) 제작	~16.11.8.	소음 측정에 필요한 아두이노 기기
	소리, 진동측정	~16.11.19.	센서를 연결하여 소리, 진동값 전송
	측정값 변환 및 안정화	~16.12.13.	센서로부터 측정된 값을 dB, Hz 변환 안정화 작업
App 설계	기능 설계	~16.11.26.	측정된 소음의 누적 정보 표시
	UI 제작		App의 User Interface
최적화	기준치 설계	~16.12.13.	상황별 측정값에 따른 기준치
시연	최종 발표	~12.15.	층간 소음 측정기

4. 구성원 별 역할

이름	역할
황영롱	모바일 어플리케이션 기능 및 UI제작
임영진	보고서 작성
김진형	보고서 작성, 아두이노 소프트웨어 설계, 아두이노 하드웨어 설계

5. 성과물 형태 및 틀

가. 시나리오

㉠ 1단계 : 층간 소음 측정 장치를 바닥 구조물 사이에 설치한다.(설치)

㉡ 2단계 : 발생된 소음을 센서들이 인식하고 데이터를 측정한다.(소음,진동 측정)

㉢ 3단계 : 센서에 의해 측정된 데이터 값을 dB(데시벨)과 Hz(진동)으로 변환한다.

㉣ 4단계 : 변환된 dB(데시벨)값과 Hz(진동) 값을 기록

(특정 기준치를 정하여 초과하는지 비교, 분석)

㉤ 5단계 : 비교, 분석된 데이터를 Application을 통해 제공해준다.

㉥ 6단계 : 알림 서비스 및 모니터링을 제공함으로써 미연에 분쟁을 방지한다.

나. 성과물 형태

산출물로는 감지센서를 이용하여 받아온 값을 바탕으로하여 모바일 어플리케이션을 통해 지정해 둔 기준값보다 큰 경우에 해당하는 데시벨 값과 Hz의 값을 저장하여 모니터링 할 수 있도록 보여주도록 하고, 집 안에 설치되어 있는 LED를 통하여 사용자가 수시로 확인하지 않아도 직관적으로 현재 층간소음 발생 정도를 확인할 수 있도록 알려주도록 한다.

1) Hardware Design

가) 진동 및 소음 측정

아두이노에 진동감지센서와 소리감지센서를 연결하여 발생한 진동과 소음 정도를 측정하도록하고, 아두이노는 센서 측정값을 dB, Hz로 계산하도록 한다.

나) 통신 및 알림시스템

이용자가 항상 어플리케이션을 통하여 모니터링 할 수 없으므로 LED를 통하여 발생정도에 따라 알려줌으로써 직관적으로 확인 할 수 있도록 한다. 또한 Bluetooth를 통한 어플리케이션 통신으로 누적화된 정보를 확일 할 수 있도록 한다.

2) Software Design

센서를 통해 감지한 정보를 아두이노에 저장된 계산 방식을 통하여 dB과 Hz로 변환한 뒤, 해당 값이 기준치보다 클 경우 그 값을 기록하고, 소음이 계속 될 경우 1분 등가소음도와 비교하여 LED를 통한 직관적인 알림 신호를 보내도록 한다.

다. Required items

Ⅱ. 프로젝트 상세

1. 아두이노 코드

#include<SoftwareSerial.h> // name = NOLEX, pw = 1234, 통신속도 = 9600

#define SOUND_PIN A1

#define NOISE_PIN A0

#define RED_PIN 8

#define STANDARD_VAL 75 //기준치값

#define STANDARD_5MIN 55

SoftwareSerial Bluetooth(2, 3); //Bluetooth로 이름을 설정하고, 2번핀을 XD, 3번핀을 TX로 설정

byte buffer[1024]; //data를 수신 받을 버퍼

int bufferPosition; //버퍼에 데이터를 저장할 때 기록할 위치

int Sound = 0;

int Noisewave = 0;

int Volts = 0;

int MaxdB = 0;

int MindB = 50;

int Decibel = 0;

int CheckCount = 0;

int Total_Decibel =0;

int dB_Avg = 35;

unsigned long pre_time;

unsigned long current_time;

double Cal = 0;

void setup() {

Serial.begin(9600);

Bluetooth.begin(2400);

pinMode(RED_PIN, OUTPUT);

digitalWrite(RED_PIN, HIGH);

pre_time = millis();

bufferPosition = 0;

}

void loop() {

current_time = millis();

checkStart();

if(Decibel == 0)

{

Decibel = random(30,38);

}

if (Bluetooth.available())

{

char data = Bluetooth.read(); //수신된 데이터 시리얼 모니터로 출력

Serial.write(data); //수신 받은 데이터를 버퍼에 저장

buffer[bufferPosition++] = data;

if (data = '\n') //문자열 종료 표시

{

buffer[bufferPosition] = '\0';

Bluetooth.write(buffer, bufferPosition); //스마트폰으로 문자열 전송

bufferPosition = 0;

}

}

if(current_time - pre_time > 300000) //1초에 1000ms, 60초는 60000, 5분 = 300000

{

pre_time = current_time;

checkAvg(Total_Decibel, CheckCount);

}

Total_Decibel += Decibel;

if(MaxdB < Decibel)

{

checkMax(Decibel);

}

if(Decibel != 0 && MindB >= Decibel)

{

checkMin(Decibel);

}

Bluetooth.print(Decibel);

Bluetooth.print(MaxdB);

Bluetooth.print(MindB);

Bluetooth.println(dB_Avg);

delay(500);

if (Decibel > STANDARD_VAL) //데시벨 값이 Standard 보다 크면, onLED함수로 전달

{

onLED();

}

CheckCount++;

}

void checkStart()

{

Sound = analogRead(SOUND_PIN);            //소리센서로부터 입력값 받아옴

Noisewave = analogRead(NOISE_PIN);        //진동센서로부터 입력값 받아옴

if(Noisewave !=0)

{

Volts = Sound * 100;

Cal = log10 (Volts);

Decibel = 2*(Cal * 10);

} //소리센서로 부터 받아온 값을 데시벨로 변환

else {

Decibel = random(30,38);

}

}

void checkAvg(int _TotaldB, int _CheckCount)

{

dB_Avg = (_TotaldB / _CheckCount);

if(dB_Avg >= STANDARD_5MIN)

{

onLED();

}

resetTime();

}

void resetTime()

{

CheckCount = 0;

Total_Decibel = 0;

}

void checkMax(int Max_Decibel) //최대 dB값 저장

{

MaxdB = Max_Decibel;

}

void checkMin(int Min_Decibel) //최소 dB값 저장

{

MindB = Min_Decibel;

}

void onLED()          //LED 출력함수

{

digitalWrite(RED_PIN, LOW);

delay(2000);

offLED();

}

void offLED()

{

digitalWrite(RED_PIN,HIGH);

}

2. 안드로이드 주요 코드

가. 블루투스 확인 및 활성화

나. 수신 기능 및 메인기능

Ⅲ. 프로젝트 결과

1. 시연용 외관

2. 논의내용

가. dB측정 시, 0으로 측정되는 값을 어떻게 처리할 것인가?

- 실제 소음측정기를 이용하여 측정해본 결과, 전압값에 따라 최소 dB이 달랐다. LOW와 HIGH의 경우 최소dB은 각각 30, 40으로 그 이하로는 절대 떨어지지 않는 것을 확인했다. 이러한 정보를 바탕으로, 아두이노 내에서 0으로 측정될 경우 random함수를 통해 30~38 사이의 dB값이 무작위로 측정되게 하였다.

나. 왜 층간소음측정기를 바닥에 설치하는가?

- 층간소음의 종류에는 직접충격소음과 공기전달음으로 인한 소음 2가지의 종류가 있다. 처음 프로젝트를 기획할 때, 아이들의 발걸음소리, 뜀걸음 소리 등 직접충격소음에 대해서 어떻게 하면 문제를 해결하고 이웃간의 다툼을 예방할 수 있을까 라는 주제를 가지고 접근했다. 그렇기 때문에 일반 공기전달음과 달리 직접충격소음은 진동이 측정이되기 때문에 바닥에 진동센서와 소음센서를 같이 부착함으로써 진동이 감지될 경우 소음을 측정하도록 설정하였다.

다. 층간소음의 기준은 어떻게 할 것인가?

- 직접충격소음의 소음 기준 측정 방법에는 2가지가 있다. 최고소음도와 5분등가소음도 방식이다. 각각 소음도의 기준치는 법률로 제정되어 있으며 5분등가소음도를 이용한 이유는 직접충격소음은 5분등가소음도를 기준으로하고, 공기전달음 소음은 3분등가소음도를 기준으로 하기 때문에 최고소음도와 5분 등가소음도를 사용하게 되었다.