본문으로 바로가기

  아두이노(Arduino) 기초 센서 2편 - 온습도 센서(DHT11)  


애드라이프의 아두이노 모든 포스팅 리스트를 보고 싶으신 분은 공지 읽어주세요.



안녕하세요. 애드라이프입니다.

센서 2편으로 온습도 센서를 포스팅하려 합니다!!!!

일기예보를 보면 오늘의 기온과 습도를 알려주는 보습을 쉽게 찾아 볼 수 있습니다.

그럼 내주변의 온도와 습도를 알 수 있는 방법은 없을까? 

그래서 준비한게 DHT11 온습도 센서입니다.


dht11 온습도 센서 모듈

DHT11센서를 사용한 모듈의 모습 ▲






바로 회로도를 살펴볼까요? 

이번에는 온습도센서로 받아 온 값을 시리얼 LCD를 이용해 출력해주는 예제를 만들어 볼겁니다.


아두이노 온습도센서를 이용하여 시리얼LCD에 출력하는 회로


회로구설을 간단히 설명하면 

온습도 센서는 +5V와 DATA 그리고 GND를 연결하여 사용합니다.

시리얼 LCD도 이전에 포스팅에서 소개 했기 때문에 +5V,GND,Rx 를 연결해서 쓰는 정도만 설명하겠습니다.

시리얼 LCD에 대해서 좀더 자세한 설명을 원하시는 분들은 아래 포스팅을 참고해주세요.▼

[아두이노/아두이노 기초] - 아두이노(Arduino) 기초 디스플레이 시리얼LCD






회로에 대한 설명은 짧게 끝내고 바로 프로그램으로 넘어가도록 하겠습니다.▼

우선 아래 DHTlibrary 파일을 받아서 라이브러리를 추가해 주세요.


DHTlibrary.zip


라이브러리 추가방법은 아래 포스팅을 참고해주세요.

[아두이노/개발환경 구축] - 아두이노IDE 개발환경 구축 5편 라이브러리 추가법(feat 헤더파일)



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <DHT11.h>                // 라이브러리 추가 필요
int DHT11_PIN=2;                // DHT11의 DATA핀을 아두이노 디지털 핀 2번에 연결한다.
DHT11 dht11(DHT11_PIN); 
void setup()
{
   Serial.begin(9600);            // 통신속도 9600
}
 
void loop()
{
  int err;
  float temp, humi;
  if((err=dht11.read(humi, temp))==0)        // 라이브러리 내부 함수로 습도 값과 온도 값을 받아옵니다.
  {
    Serial.print("$CLEAR\r\n");                // lcd에 모든 문자를 지웁니다.
    Serial.print("$GO 1 1\r\n");            // 1행 1열로 이동합니다.
    Serial.print("$PRINT temperature:");    // lcd에 해당문자를 출력합니다.
    Serial.print(temp);                        // 온도값을 출력합니다.
    Serial.print("\r\n");                    // 명령의 끝을 알립니다.
    Serial.print("$GO 2 1\r\n");            // 2행 1열로 이동합니다.
    Serial.print("$PRINT humidity:");        // lcd에 해당문자를 출력합니다.
    Serial.print(humi);                        // 습도값을 출력합니다.
    Serial.print("\r\n");                    // 명령의 끝을 출력합니다.
    Serial.print("$CURSOR 1 1\r\n");        // 커서를 다시 1행 1열로 이동합니다.
  }
  else
  {
    Serial.println();                        //값을 못받아 올 경우에 에러메세지를 시리얼 모니터에 출력하는 부분입니다.
    Serial.print("Error No :");
    Serial.print(err);
    Serial.println();    
  }
  delay(1000); //delay for reread
}
cs

프로그램의 전체적인 흐름은 주석을 참고해주세요.

라이브러리만 제대로 추가한다면 내부함수로 온습도 값을 받아올수 있습니다.

라이브러리 내부함수인 dht11.read(습도값,온도값)을 이용하여 센서로부터 값을 받아오면

다음은 이전 포스팅에서 다뤘던 시리얼 LCD에 출력만 해주면 됩니다.


가장밑의 딜레이부분을 짧게하면 else구문의 Error 출력이 나오는 것을 확인 할 수 있습니다.

값을 받아오는 시간이있는데 그시간보다 먼저 호출 요청을 할 경우 값을 못받아 왔다고 err를 반환하기 때문이죠

정상적인 연결 상태에서 Error문구를 보고 싶지 않으시다면 저처럼 delay를 1000으로 하시면 됩니다.


바로 결과를 보면서 포스팅을 끝내도록 하겠습니다. ▼

아두이노 온슨도센서를 이용한 시리얼LCD에 출력

지금 제 방의 온도와 습도가 표시되고 있습니다.


지금까지 아두이노(Arduino) 기초 센서 2편 - 온습도 센서(DHT11)에 대한 포스팅이였습니다.

계속해서 도움되는 포스팅으로 찾아 뵙겠습니다.

by 애드라이프