본문 바로가기

Arduino 제어

08. 아두이노 DHT11 온도습도센서 사용하기

안녕하세요. 

이번 시간에는 DHT11 온습도 센서를 사용해보는 시간을 가지도록 하겠습니다.

 

DHT11 센서 특징 : 온도/습도 값을 측정 가능.  아날로그 신호가 아닌, 디지털 신호로 측정.

 

오늘의 준비물

아두이노 우노 혹은, WEMOS D1 R1,  DHT11 센서

 

오늘 이 글을 따라하기 위한 필수 라이브러리

DHT11_library.zip
0.00MB

 

압축을 푼 후, DHT11_library 폴더를 함께 생성하시기 바랍니다.
생성된 폴더 자체를 내 문서 - Arduino - Library 폴더에 넣어주시면 되겠습니다.

혹은,
스케치
- 라이브러리 포함하기
- .ZIP 라이브러리 추가..

에서 내려받은 압축파일을
선택하시기 바랍니다.

 

 

 

 

※ 라이브러리 설치를 하지 않으시면, 컴파일이 완료가 되지 않습니다.

 


오늘의 예제는 UNO / WEMOS D1 R1 으로 테스트 하였습니다.
MQTT 통신을 통한 Node-red Dashboard 구현을 원하시는 분은 추후 새로운 글로 찾아뵙겠습니다.
링크[생성중]

 

 

DHT11 핀은 이렇게,

 

왼쪽부터 +, 신호, - 입니다.

5V와 GND는 보드에서 나오는 5V와 GND로,
sig는 디지털핀

Arduino UNO의 경우 : digital 2 ~ 13 pin 중 1개 선택
Arduino Wemos D1 R1의 경우 : D2 ~ D8 중 1개 선택

 

 

 

회로도

 

우노와 WEMOS D1 R1용 소스코드 2개가 있습니다.
int pin에 우노는 4;를,   Wemos D1 R1은 D4 라고 입력하시면 됩니다.

소스코드 예제 <Arduino UNO 용>

#include <DHT11.h>
int pin = 4;  
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("temperature:");
    Serial.print(temp);
    Serial.print(" humidity:");
    Serial.print(humi);
    Serial.println();
  }
  else
  {
    Serial.println();
    Serial.print("Error No :");
    Serial.print(err);
    Serial.println();
  }
  delay(DHT11_RETRY_DELAY); //delay for reread  1000ms
}

 

소스코드 예제 <Wemos Di R1 용>

#include <DHT11.h>
int pin = D4;
DHT11 dht11(pin);
void setup()
{
  Serial.begin(9600);
}

void loop()
{
  int err;
  float temp, humi;
  if ((err = dht11.read(humi, temp)) == 0)
  {
    Serial.print("temperature:");
    Serial.print(temp);
    Serial.print(" humidity:");
    Serial.print(humi);
    Serial.println();
  }
  else
  {
    Serial.println();
    Serial.print("Error No :");
    Serial.print(err);
    Serial.println();
  }
  delay(DHT11_RETRY_DELAY); //delay for reread
}

 

 

결과

시리얼 모니터에서 UNO와 WEMOS D1 R1 모두 온도와 습도값을 불러올 수 있었습니다.

 

 

- 센서가 한개인데 어떻게 두개에서 가져오냐?  라고 생각하신다면... 

 

2개에서 뽑아오니 불안정하다. Error 메시지가 출력될때도 있다.

 

※ 추가
소수점 자릿수를 제어하려면,

void loop()
{
  int err;
  float temp, humi;
  if ((err = dht11.read(humi, temp)) == 0)
  {
    Serial.print("temperature:");
    Serial.print(temp);
    Serial.print(" humidity:");
    Serial.print(humi);
// 에서
// Serial.print(temp); 가 온도값 출력을 한다.
// 여기서, (temp,1); 이라고 하면 소수점 첫번째 자리까지만 출력이 된다!

 

 

오늘은 여기서 포스팅을 마치고, 다음 시간에 뵙겠습니다.
필요한 자료가 있으시다면, 말씀주시면 준비해드리겠습니다.
언제나 방문해주셔서 감사합니다!