아두이노

[아두이노] 조도센서와 소리센서를 이용한 결과값 출력을 위한 회로구성, 코드작성, 그래프출력

알까 2022. 11. 24. 03:23

지난 포스팅에서는 조도센서를 이용한 코드작성 및 결과값 출력, 소리센서를 이용한 결과값을 출력하였습니다.

 

https://catch-sin.tistory.com/19

 

[아두이노]조도센서를 이용한 회로구성과 조도값으로 변환

안녕하세요. 이전에 온습도 측정센서를 이용해 아두이노 회로를 구성하고 수식을 계산하는 과정을 진행했습니다. 이번에는 조도센서를 이용하여 아두이노를 구성하고 그 값을 휴대폰 조도계의

catch-sin.tistory.com

https://catch-sin.tistory.com/20

 

[아두이노]소리센서를 이용한 회로구성 및 데시벨과의 비교

지난 포스팅에서는 조도센서를 이용한 회로구성과 코드작성을 해보았습니다. 이번시간에는 소리센서를 이용한 회로를 구성해보도록 하겠습니다. 1. 소리센서의 종류 먼저 소리센서의 종류에는

catch-sin.tistory.com

 

이번 포스팅에서는 조도센서와 소리센서를 종합적으로 이용하여 결과값을 출력하고, 발전방향을 검토해 보고자 합니다.

 


1. 조도센서와 소리센서 회로구성

 

조도센서 회로구성
소리센서 회로구성

 

조도센서와 소리센서를 각각 구성한 회로구성은 다음과 같습니다. 

 

두 센서를 동시에 활용하기 위해서 조도센서에 들어가는 초록색 선(A0)을 (A1)으로 변경하였고, 소리센서에 들어가는 초록색 선(A0)은 그대로 유지하였습니다.

 

이를 통해 회로를 합쳐서 구성하면

조도센서와 소리센서를 동시에 배치

위 구성과 같습니다


2. 아두이노를 통해 출력된 조도값을 lux(실제 조도값)로 변환

 

조도센서를 통해 얻게된 결과값을 토대로

lux값을 구하기 위하여 휴대폰 조도계와 아두이노를 통해 출력한 결과값을 비교하였습니다.

 

그 결과는 다음과 같습니다.

 

x축 : 아두이노를 통해 구한 조도값 y축 : 휴대폰 조도계를 이용한 측정값

이를 통해 근사식을 도출한 결과 3차방정식이 가장 적절하다는 판단을 하였습니다.

 

따라서 

y(lux) = -0.0004438*x^3+0.1163*x^2+5.804*x-124.6

이 수식을 이용하여 실제 조도값을 구하고자 하였습니다.

 


3. 코드작성

 

코드작성은 다음과 같습니다.

void setup() {
// put your setup code here, to run once:
Serial.begin(115200); //통신속도 조절
pinMode(A0, INPUT); //a0에서 데이터 가져오기

}

void loop() {
int cds = analogRead(A1); //cds값에 a1에서 가져온 값을 입력
int sensorValue = analogRead(A0); //sensorvalue값에 a0에서 가져온 값을 입력
Serial.print(sensorValue); //sensorvalue값 출력
Serial.print(','); //','출력
//lux변환 수식
int y = -0.0004438*pow(cds,3)+0.1163*pow(cds,2)+5.804*cds-124.6; //조도값 수식 작성(lux단위로 변환)
Serial.print(y); //조도값 출력(cds값을 토대로 도출된 값을 lux단위로 변환)
Serial.print(','); //','출력
delay(1000); // 1초당 반복
}

여기서 pow(cds,3)은 (cds)^3을 의미합니다. 아두이노에는 지수함수를 활용할 때, pow() 함수를 이용합니다.

 


4. 가정

 

소리센서와 조도센서의 경우 민감도가 매우 낮은 편에 속합니다.

조도센서의 경우 어느정도 변화량이 나타나지만 소음센서는 멀리있는 경우 소리를 잘 인식하지 못합니다.

이러한 이유로 가정을 설정하였습니다.

 

'아두이노를 통해 얻은 소음값이 337인 경우 소리가 인지되었다.'

 

따라서 모든 결과값 중 337이상인 횟수를 '피크수'로 정의하여 해당 횟수를 측정하였습니다.

 

이 횟수가 많을수록 시끄러운 환경이고, 횟수가 0에 수렴할수록 조용한 환경입니다.

 


5. 측정값을 토대로 MATLAB 코드 작성

 

matlab 코드 작성

 

s1,s2,s3는 소음값을 측정한 결과값, c1,c2,c3는 조도값(lux)값을 측정한 결과값입니다.

p1,p2,p3는 소음값이 337이상인 횟수를 구하는 값입니다.

plot은 그래프를 출력하기 위한 함수입니다.

아래 출력한 그래프는 plot함수에 의해 출력되었습니다.

 


6. 측정값 그래프

 

비교분석을 위해 각기 다른 장소에서 조도값과 소음값을 각각 측정하였습니다.

 

그 결과는 다음과 같습니다.

 

-도서관

도서관에서 소음값 측정
도서관에서 조도값 측정

-카페

카페에서 소음측정
카페에서 조도값 측정

-집

집에서 소음값 측정
집에서 조도값 측정

이를 소음값과 조도값을 각각 하나의 그래프로 나타내면 다음과 같습니다.

 

장소별 소음측정
장소별 조도값 측정


7. 결과분석

 

이를 토대로 결과를 분석해보면 다음과 같습니다.

 

  소음값 피크수 조도값 평균(lux)
도서관 0 311.9
카페 88 765.9
5 491.2

 

도서관은 매우 조용하며 조도값의 평균은 311.9가 도출되었습니다.

카페는 매우 시끄러우며 조도값의 평균은 765.9가 도출되었습니다.

집은 조용한 편에 속하며 조도값의 평균은 491.2가 도출되었습니다.

 

다음포스팅에서는 이렇게 출력된 결과값에 대한 활용을 다뤄보도록 하겠습니다.