본문 바로가기
아두이노 센서

[센서/온도] 온습도 센서(DHT22) 를 Arduino UNO/NANO 에서 구동해보자

by 작동미학 2015. 1. 26.
반응형

센서를 통해 온습도를 얻어 출력하는 가이드

 

▶ 이 가이드를 따라하면

- DHT22 온습도 센서를 아두이노와 연결, 온도와 습도를 알아낼 수 있다.

- 공개된 DHT 라이브러리를 사용해봄으로써, 아두이노 라이브러리 사용 방법을 파악할 수 있다.

- 아두이노 UNO외에도, 나노(NANO)에 대해서도 알 수 있다.

 

▶ 먼저 읽으면 좋은 글

- 라이브러리 설치 방법 : http://bbangpan.tistory.com/1

 

▶ 부품 설명 및 회로 구성

DHT22는 온도와 습도를 얻어내어 리턴하는 대표적인 아두이노 부품이다. DHT22는 몇가지 형태가 존재하며, 회로 보호용 저항이 같이 있는 버전과 독립된 버전이 존재하는데, 아래 사진은 보호 저항이 붙어있는 경우이다. 보조 저항이 내장되어 있지 않은 DHT22는 https://learn.adafruit.com/dht/connecting-to-a-dhtxx-sensor 를 참조하여 구성한다. 5V, GND, 데이터핀 2번 연결(번호는 소스코드에서 변경 가능)을 그림과 같이 해준다. Arduino NANO를 사용하는 경우, UNO와 배선에는 차이가 없다.

<Arduino UNO + DHT22 / 직접 연결>

<Arduino UNO + DHT22 / 빵판 경유 연결>

<Arduino NANO + DHT22 / 직접연결>


▶ 라이브러리 설치

Arduino IDE 다운로드 및 라이브러리 설치는 http://bbangpan.tistory.com/1 강좌를 참조 한다. Arduino 센서를 활용하기 위해서는 별도 라이브러리를 대개 필요로 한다. 라이브러리가 없는 경우는 해당 부품의 데이터쉬트(datasheet-부품 상세 스펙이 표기된 문서)를 보고 직접 제작하여야 하는데 쉽지 않다. DHT22는 온습도의 대표 센서인데, 여기서는 앞서 예제의 Adafruit(미국의 유명한 Arduino 부품 공급사이다)제공한 라이브러리를 (https://learn.adafruit.com/dht/overview)를 참조하였다.

라이브러리 다운로드를 위해 https://github.com/adafruit/DHT-sensor-library 에서 아래 그림의 오른쪽 하단Download ZIP을 클릭하여 받아, 기존 설치된 Arduino IDE 설치 디렉토리 밑의 libraries폴더에 복사한다. 이후 Arduino IDE를 재시작하면 해당 라이브러리가 로딩되어 소스상에서 오류없이 컴파일된다.

주의할 점은 폴더 명을 DHT-sensor-library대신에 DHT로 넣어주어야 제대로 작동한다. 압축풀고 난 후 폴더명을 rename하도록 하자.

<Adafruit의 라이브러리 GitHub>

<D:\Prog\Arduino 설치 폴더 하단의 libraries\DHT 에 라이브러리 복사된 모습. 폴더명을 DHT로 이름 변경함>

 

▶ 소스 코드 입력 및 구동

Arduino IDE를 실행하여 새로운 소스를 연 후, 아래 소스 코드를 입력하여 저장한다. 참고로 소스를 저장하면 윈도우 사용자 문서폴더 하단의 Arduino폴더에 저장된다.

GitHub 원본 소스 링크 / https://github.com/bbangpan/bbangpan.com/blob/master/neibc_dht22/neibc_dht22.ino

------------------------------------------------------------------------------------------------------------

/* Originally posted on www.bbangpan.com

 

Program Description: DHT22 sensor test code

Needed library : DHT

Tested on : Arduino 1.0.6, Arduino UNO R3, DHT22(registor integrated)

 

Copyright (c) 2015 www.bbangpan.com. All right reserved.

This program can be used for any non-commercial purpose freely. */

 

 

#include "DHT.h"

 

#define DHTPIN 2 // data pin to DHT22

#define DHTTYPE DHT22 // using DHT 22

 

DHT dht(DHTPIN, DHTTYPE);

 

void setup() {

Serial.begin(9600);

Serial.println("DHT22 test:");

 

dht.begin();

}

 

void loop() {

float hum = dht.readHumidity();

float tmp = dht.readTemperature();

 

// check if returns are valid

if (isnan(tmp) || isnan(hum)) {

Serial.println("Reading error..");

} else {

Serial.print("Temperature: ");

Serial.print(tmp);

Serial.print(" C\t");

Serial.print("Humidity: ");

Serial.print(hum);

Serial.println(" %");

}

}

------------------------------------------------------------------------------------------------------------

소스를 upload 버튼을 눌러 실행할 시, NANO보드의 경우에는 대상 보드를 바꿔주는 것을 잊지 말자.

<Arduino NANO의 경우 보드 변경>

Upload버튼(메뉴상단의 à버튼)을 눌러 실행 한 후, 시리얼 모니터(Ctrl+Shift+M, 도구 메뉴 하단의 시리얼 모니터 선택)를 구동해보자.

<Arduino IDE의 시리얼 모니터 화면, 오른쪽 하단 속도는 9600 baud로 맞추자>

상기 원래 소스의 Serial.print에서 출력한 내용이 보이게 됨을 알 수 있다. 온도와 습도 정보가 수초간격으로 출력된다. 이는 USB를 통해 Arduino가 보내온 신호를 받아 출력하는 기능으로 향후 다양한 용도로 이 Serial을 사용하게 되므로 주의 깊게 볼 필요가 있다.

이 Serial을 통해서 Arduino IDE가 프로그램을 Arduino에 업로드도 가능하고, 향후 디버깅이나 PC와의 통신용으로도 활용된다. 따로 모니터 포트가 존재하지 않는 Arduino로서는 몇 안되는 디버깅용 메시지 출력 수단이 된다.

참조로 속도 셋팅은 모니터링 툴과 실제 코딩 상의 지정한 속도(Serial.begin(9600))와 동일하게 해주어야 데이터가 손상되지 않고 볼 수 있다.

 

▶ 구매 가이드

DHT22와 Arduino NANO의 경우 아래 정보를 참조하여 구매한다. 국내 auction등에서도 구매 가능하다.

DHT22 :

Arduino NANO :

본인이 납땜이 가능한지를 잘 따져서, 그렇지 않은 경우 핀이 납땜되어 있는 것을 구매하도록 한다.

 

강의 키워드

DHT22, Arduino NANO, 온습도, 온도습도, Arduino UNO, 아두이노

반응형