아두이노 기초 강좌는 아두이노를 처음 접하시는 전자분야 비 전공자를 위한 강좌입니다. 이해를 위해서는 간단한 프로그래밍 지식이 필요할 수 있습니다. 프로그래밍이 처음이라면 [아두이노 프로그래밍 기초] 강좌를 먼저 읽으시길 권해 드립니다.

=============================================================

.
이번 회에서도 간단히 핀 하나로 통신할 수 있는 센서를 사용해보겠습니다. 그 중에서도 특히 활용도가 높은 온습도 센서의 사용법입니다.

1. DHT-11 온습도 센서

일반적으로 많이 사용하는 온습도 센서 모듈은 DHT-11 모듈인데 2가지 종류가 있습니다.

dht11sensor1-e1326310701210

DHT11_sensor_module

위 모듈이 인터페이스 보드가 없는 제품이고 아래 모듈이 인터페이스 보드가 달려있는 제품입니다. 위 제품은 5K ohm 저항을 거쳐 아두이노의 디지털 핀에 연결해줘야 하고, 아래 제품은 바로 디지털 핀에 연결해서 사용이 가능합니다. 인터페이스 보드가 없는 제품의 경우는 아래 링크를 참고해서 연결하시면 됩니다. 여기서는 인터페이스 보드가 있는 제품을 기준으로 설명하겠습니다.


2. 연결방법

DHT-11 에 보면 (+), (-), (S) 세 개의 핀이 있을 겁니다. 이 중 +, – 가 전원핀이고 (S) 핀이 데이터 라인입니다. 아래와 같이 연결합니다.

(아두이노 –> DHT-11) :  5V –> (+),  GND –> (-),  D2 –> (S) 

데이터 라인을 통해 아두이노 2번 핀으로 계속 전달되는 온습도 데이터 값은 아래 형식으로 들어옵니다.

Data format: [8bit integral RH data] + [8bit decimal RH data] + [8bit integral T data] + [8bit decimal T data] + [8bit check sum]

굳이 이 형식대로 데이터를 직접 읽어서 처리할 필요는 없습니다. DHT-11용 라이브러리에서 알아서 처리해주기 때문에 보다 간편하게 사용할 수 있습니다. 대신 먼저 라이브러리를 설치해야겠죠.

인터넷에서 DHT11 검색해서 라이브러리를 다운로드 받아 [아두이노 설치폴더 / libraries] 폴더에 [DHT11] 폴더를 만들고 그 안에 압축을 풉니다. 이제 아두이노 개발환경을 재시작하면 라이브러리를 사용할 수 있습니다.

3. 소스코드 (스케치)

#include <DHT11.h>
int pin=2;    // 연결한 아두이노 디지털 핀 번호
DHT11 dht11(pin); 

void setup()
{
   Serial.begin(9600);
}

void loop()
{
  int err;    // result code
  float temp, humi;   // temperature, humidity

  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
}

소스코드는 간단합니다. 온습도 센서에서 온도와 습도 값을 읽은 후, Serial 출력을 해줘서 Serial Monitor를 통해 확인이 가능하도록 한겁니다.

먼저 라이브러리를 사용하겠다고 선언하고, 쓸 준비를 해야겠죠. 소스 최상단 아래 코드들이 그 부분입니다.

#include <DHT11.h>
int pin=2;    // 연결한 아두이노 디지털 핀 번호
DHT11 dht11(pin);

 아두이노 2번 핀에 연결했기 때문에 2번 핀으로 DHT11 라이브러리를 사용할 준비를 한겁니다.

setup() 함수에서는 Serial 출력을 위해 Serial.begin(9600); 코드만을 실행합니다.

이제 loop() 함수 안에서 온습도 센서의 값을 읽고 Serial 출력하는 코드가 무한반복 됩니다. 먼저 err, temp, humi 변수가 선언되어 있습니다. err 는 라이브러리를 통해 온습도 센서값을 읽는데 문제가 없는지 결과를 받기위해 사용합니다. temp, humi 는 각각 온도, 습도를 받아오기 위해 선언해뒀습니다.

if((err=dht11.read(humi, temp))==0)

이 부분이 실제 데이터를 읽어오는 부분입니다. dht11.read(humi, temp) 형태로 사용하면 자동으로 humi, temp 변수에 측정된 값을 담아줍니다. 이제부터는 humi, temp 값을 원하는대로 사용하면 됩니다.

그리고 dht11.read() 함수는 데이터를 정확히 읽었는지 결과를 리턴해줍니다. 위 코드에서 결과는 err 변수로 받도록 해뒀죠. 그리고 if 조건문으로 결과가 제대로 왔는지 판별합니다.

결과가 제대로 왔으면 (err 값이 0 일 때) 온도와 습도를 Serial 로 출력해줍니다. 측정에 문제가 있다면 (err 값이 0이 아닐 때) 에러 코드를 출력하고 넘어갑니다.

다음 몇 회에 걸쳐서는 다른 모듈 사용법을 알아보고, 여러개의 센서와 모터 등을 묶어 완성품이 나올만한 프로젝트를 진행해 보겠습니다.

===============================================================

이 문서는 작성자의 동의없이 개인적인 목적 외의 상업적인 목적으로 활용되어서는 안됩니다.

이 문서의 일부 혹은 전체를 수정, 삭제, 재배포 하여서는 안됩니다.

작성자 : GodsTale (godstale@hotmail.com)