온습도 센서(온도와 습도를 동시에 측정할 수 있는 센서)인 DHT11의 사용법은 다 아실 텐데 이번 포스팅에서는 DHT22 온도 습도 센서에 대해 알아보겠습니다. DHT11 도 싸고 좋은 센서지만 보다 측정범위가 넓고 오차가 적은 정밀한 측정이 가능한 온습도 센서가 있습니다. 바로 DHT22 (AM2302) 입니다.
DHT22 가 dht11 보다 모든면에서 우수한 것 같지만 하나의 단점이 있습니다. DHT11은 1초마다 온습도 값을 측정해서 보내주지만 DHT22는 2초마다 보내줍니다. DHT11과 DHT22 센서의 간단한 비교는 아래 표를 참고하세요.
DHT11 | DHT22 | |
온도 측정범위 | 0 ~ 50℃ | -40 ~ 80℃ |
온도 측정오차 | 2℃ | 0.5℃ |
습도 측정범위 | 20 ~ 80% | 0 ~ 100% |
습도 측정오차 | 5% | 2% |
측정 간격 | 1초 | 2초 |
두 센서의 데이터 쉬트를 첨부합니다.
DHT22 센서의 핀배열은 아래 이미지와 같습니다. 3.3V 또는 5V 의 전압이 사용이 가능하며 가운데 핀으로 신호를 전송합니다. 3번핀은 사용하지 않습니다. 흔히 DHT22 라고 부르지만 정식명칭은 AM2302 입니다. AOSONG 은 제조사의 이름 입니다.
아두이노와 연결은 간단합니다. 중요한 것은 온도 습도 센서의 Data 핀 번호를 프로그램에서 사용하는 번호와 동일하게 해주시면 됩니다.
DHT 온도 습도 센서를 사용하기 위해서 라이브러리를 추가해야 합니다. 아래 라이브러리 다운받아 설치하세요. 라이브러리를 설치하는 방법은 아두이노 라이브러리를 설치하는 3가지 방법을 참고하세요. https://fishpoint.tistory.com/5171
동작 소스코드는 아래와 같습니다.
#include "DHT.h"
#define DHTPIN 2 // 데이터 입력 핀의 설정
#define DHTTYPE DHT22 // DHT22 (AM2302) 센서종류 설정
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("DHT22 TEST !!!");
dht.begin();
}
void loop() {
// 센서의 온도와 습도를 읽어온다.
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(t) || isnan(h)) {
//값 읽기 실패시 시리얼 모니터 출력
Serial.println("Failed to read from DHT");
}
else
{
//온도, 습도 표시 시리얼 모니터 출력
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
}
delay(2000); // 2초 디레이 타임
}
다음은 아두이노 라이브러리 관리자에서 라이브러리를 설치하여 테스트 하는 코드를 살펴보겠습니다. 아두이노 IDE를 실행시키고 메뉴에서 스케치 - 라이브러리 포함하기 - 라이브러리 관리를 선택합니다.. DHT22를 검색하여 DHT sensor library를 설치합니다.
소스코드는 아래와 같습니다.
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
#include "DHT.h"
#define DHTPIN 2 //센서가 연결된 디지털핀
//사용하려는 센서만 주석을 제거한다.
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
//DHT 센서 초기화
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("DHTxx test!");
dht.begin();
}
void loop() {
//측정하는 시간사이에 2초간의 딜레이를 줌
delay(2000);
float h = dht.readHumidity(); //습도값을 읽어옴.
float t = dht.readTemperature();//온도값을 읽어옴
//에러 검사
if (isnan(h) || isnan(t) ) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// 열지수 계산
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print("Heat index: ");
Serial.print(hic);
Serial.println(" *C ");
}
위 소스코드를 실행하여 아래 이미지와 같이 실행결과 습도, 온도, 열지수를 얻을 수 있습니다..
참고
Arduino UNO에서 dht-22 온도 / 습도 센서 사용하기
정밀한 온습도 센서 DHT22 (AM2302) 의 사용
'개발자 > Arduino' 카테고리의 다른 글
아두이노 포모도로 시계 만들기 (0) | 2022.04.11 |
---|---|
Arduino Uno로 ATtiny13 프로그래밍 (0) | 2022.04.07 |
아두이노 우노 보드와 브레드 보드 고정 아크릴 받침 (0) | 2022.04.07 |
아두이노 가변 저항 7-segment 에 표시하기 smart knob (0) | 2022.04.04 |
아두아노 millis()함수 시간 다루기 (0) | 2022.04.04 |
4 Digit 7 Segment Display 아두이노 제어 (0) | 2022.03.31 |
아두이노 버튼처리 한번, 버튼 길게, 더블 클릭 감지하기 (0) | 2022.03.09 |
ATtiny13a 기반 가장 작은 제어 시스템 (0) | 2022.03.03 |
더욱 좋은 정보를 제공하겠습니다.~ ^^