아두이노

[아두이노]온습도 측정 결과값 도출하기.(DHT11센서 이용)[1편]

알까 2022. 5. 24. 20:10

최근 아두이노를 이용한 프로젝트를 진행하였습니다.

 

전자공학과는 아니었지만 평소 IOT에 관해 관심이 많았기 때문에 아두이노를 프로젝트 주제로 선정했습니다만,

(사실 좀 후회됩니다... 하라는 대로 해도 안돼..)

 

직접 정보를 찾고 회로를 구성하다보니 정보들 중에서 오류가 있는 부분들이 많았고 그 덕에 많은 시행착오를 겪었습니다.

 

이 포스팅은 DHT11/22(온습도 측정센서)를 이용하시는 분들이 시행착오 없이 한번에 결과를 도출하셨으면 바라는 마음에 작성하게 되었습니다.

 

처음에는 가볍게, 그 후 점차 발전해나가는 방향으로 포스팅을 작성하겠습니다.

부디 많은 도움이 되었으면 좋겠습니다.

 


1. 아두이노 소개

 

제가 서론에 'IOT'에 관심이 많다고 말씀드렸습니다.

아두이노가 바로 'IOT'에 연관성이 많은 개발도구입니다.

센서를 통해 정보를 받아들이고, 전자기기를 작동할 수 있기 때문입니다.

'IOT'가 사물인터넷으로 스마트기기로 전자기기 작동하는 것을 의미하고

아두이노는 컴퓨터, 스마트폰 등을 통해  전자기기를 작동할 수 있습니다.

그렇기에 상당히 연관성이 많은 도구이죠.

 

아두이노 UNO보드

 

제가 사용한 보드는  '아두이노 UNO'입니다.

아두이노 중에서 가장 저렴한 편에 속하는 보드입니다.

일반적인 스타터킷에 포함이 되어있죠. 

복잡한 연산이 필요하지 않은 경우에는 쓸만합니다.

 

2. 온습도 센서(DHT11) 소개

온습도 측정 센서 (DHT11)

온도와 습도를 측정해주는 센서입니다.

온도를 0~50*C까지 측정 가능하고,

습도는 20~80%까지 측정 가능합니다.

일반적인 환경에서 사용하기 좋은 센서입니다.

 

이보다 조금 정교한 센서로 DHT22센서가 있습니다.

온도는 -40~80*C까지 측정 가능하고,

습도는 0~100%까지 측정 가능합니다.

 

제가 사용할 센서는 파란색을 띠는 DHT11 센서입니다.

 

3. 회로 구성

DHT11 회로구성

온습도측정을 위한 회로 구성은 매우 간단합니다.

 

DHT11센서를 보면 S와 - 표시가 보입니다.

 

총 3개의 핀이 있는데

     |                |         |

데이터 (S)   5V    GND(-)

 

이렇게 보시면 됩니다.

 

사진에서 보기 쉬우시도록

5V는 붉은색

GND는 검은색

데이터는 초록색으로 표시하였습니다.

초록색 전선은 아두이노 2번에 연결하였습니다.

 

(데이터 값은 임의설정이 가능하지만 코드변경이 필요하므로 나중에 설명드리도록 하겠습니다.)

 

 

4. 코드 작성

 

코드 작성을 하기에 앞서

라이브러리 설치가 필요합니다.

GITHUBE에서 다운 받는 방법도 있지만 그보다 쉬운 라이브러리 설치 방법을 알려드리도록 하겠습니다.

 

아두이노 툴 박스 들어가기

 

1.  아두이노 툴 박스에서 라이브러리 관리를 클릭합니다.

라이브러리 매니저

 

2. 라이브러리 관리 창에서 DHT11을 입력하여 관련 라이브러리를 설치(DFRobot_DHT11)합니다. (끝)

 

이렇게 라이브러리를 설치하셨으면 

예제 들어가기

 

파일-예제-DFRobot_DHT11을 클릭하시면 됩니다.

 

"DFRobot_DHT11은 저희가 방금 설치한 라이브러리죠."

 

그러면 코드가 뜹니다.

예제 코드

딱봐도 머리가 아픕니다.

 

그냥 간단하게 코드 분석을 해보겠습니다.

#include <DFRobot_DHT11.h> // 이 라이브러리를 사용하겠다. 
DFRobot_DHT11 DHT;
#define DHT11_PIN 10 // 아두이노 핀 10번으로 정의하겠다. (변경가능)

void setup(){
  Serial.begin(115200); //(컴퓨터와 통신을 115200속도로 하겠다.)
}

void loop(){
  DHT.read(DHT11_PIN);
  Serial.print("temp:");
  Serial.print(DHT.temperature); //온도를 출력하겠다.
  Serial.print("  humi:");
  Serial.println(DHT.humidity); //습도를 출력하겠다.
  delay(1000);
}

저 빨간색으로 써진 글씨만 주의하시면 됩니다.

 

첫째, 아두이노 핀이 무엇을 의미하는가.

아두이노 핀이 무엇을 의미하는가.

빨간색 박스로 되어있는 0~13, A0~A5까지 핀 번호입니다.

 

#define DHT11_PIN 10 // 아두이노 핀 10번으로 정의하겠다. (변경가능)

따라서 위 코드에 나온 '10'이라는 숫자는 핀 10번에서 데이터를 가져오겠다는 것을 의미합니다.

 

저희는 앞서 데이터를 '2'번 핀에 꽂았습니다.

 

따라서 코드를

#define DHT11_PIN 2 // 아두이노 핀 2번으로 정의하겠다.

로 고쳐주시면 됩니다.

 

 

둘째, 컴퓨터와 통신 속도가 왜 중요한가.

 

간단합니다.

9600으로 속도설정

속도가 다르면 값이 뜨지 않습니다.

 

 

115200으로 속도설정

속도가 같아야지만 값이 도출됩니다.

 

 Serial.begin(115200); //(컴퓨터와 통신을 115200속도로 하겠다.)

 

만약에 115200이라는 숫자를 9600으로 변경한다면

9600 보드레이트로 변경하시면 값을 도출할 수 있습니다.

 

셋째, 출력은 어떻게 하는가.

 

 

아두이노에서 출력하는 법

 

화살표를 통해 업로딩을 하고

우측 돋보기 모양을 클릭하여 시리얼 모니터를 켜시면 됩니다.

 

시리얼 모니터 출력

 

참고로 툴 - 시리얼플로터를 클릭하시면 시간에 따른 온습도 그래프가 출력됩니다.

 

시리얼 플로터
시리얼 플로터

Serial.print(DHT.temperature); //온도를 출력하겠다.


이 코딩은 알아두시는 것이 좋습니다.
아두이노에서
Serial.print(); 는 ()안의 값을 출력한다는 의미입니다.

 

앞서 말씀드린 것을 종합하여 코드를 작성해보겠습니다.

#include <DFRobot_DHT11.h>
DFRobot_DHT11 DHT;
#define DHT11_PIN 2 //2번 핀으로 정의하겠다.

void setup(){
  Serial.begin(115200); //컴퓨터와 아두이노간 통신속도를 115200으로 정의하겠다.
}

void loop(){
  DHT.read(DHT11_PIN);
  Serial.print("temp:");
  Serial.print(DHT.temperature);
  Serial.print("  humi:");
  Serial.println(DHT.humidity);
  delay(1000);
}

이렇게 코드를 작성하시면 값이 도출될 것입니다.

 

상당히 많은 길을 걸어왔습니다.

 

간단한 소개부터 아두이노 회로 연결 코딩까지.

 

조금은 복잡해보이지만 무슨 내용인지만 이해하신다면 몇번 핀에 연결하던 어려움이 없으실 것이라 확신합니다.

 

 

한줄요약해보면

 

회로연결-라이브러리설치-코드작성(예제이용)-출력입니다.

 

 

다음 포스팅에서는 센서를 통해 받은 온습도를 이용해  PMV를 계산하도록 하겠습니다.

 

(PMV)Predicted Mean Vote 로 쾌적성 지표를 나타내는 지수입니다.