온습도 센서 DHT22#
DHT22 센서를 이용하여 온도와 습도를 측정한다.
센서 | DHT11 | DHT22 (AM2302) |
---|---|---|
사진 | ![]() | ![]() |
온도 | 0 ~ 50℃ (오차범위 ±2℃) | -40 ~ 100℃ (오차범위 ±0.5℃) (해상도 0.1℃) |
습도 | 20 ~ 90% (오차범위 ±5%) | 0 ~ 100% (오차범위 ±2~5%) (해상도 0.1%) |
Pinout#
DHT22 | DAT | VCC | GND |
---|---|---|---|
Arduino | 8 | 5V | GND |
schematic#
라이브러리 준비하기#
Case1: 위 사진과 같은 형태의 DHT22 모듈을 사용하는 경우#
라이브러리 매니저검색창에 검색어로 ‘AM2302’를 입력
Groove Temperature And Humidity Sensor (by Seeed Studio) 설치
Case2: 위 라이브러리로 동작하지 않는 경우#
2개의 라이브러리가 필요합니다.
먼저 DHT sensor library (by Adafruit)를 검색하여 설치를 클릭합니다.
그러면 Dependencies for library DHT sensor library 창이 나타나는데, 이때 Install all을 클릭하면 2개의 라이브러리가 동시에 설치됩니다.
두 개의 라이브러리를 설치하기만 하면 되기때문에, 순서가 바뀌어도 관계없습니다.
sketch#
#include <DHT.h>
#define DHTPIN 8 // data pin
#define DHTTYPE DHT22 // change to DHT11 if you're using the DHT11
// AM2301(DHT21) -> DHT21, AM2302(DHT22) -> DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
delay(2000);
// float temperature = dht.readTemperature();
// float humidity = dht.readHumidity();
float temp_hum_val[2] = {0};
if(!dht.readTempAndHumidity(temp_hum_val)){
Serial.print("Temperature: ");
Serial.print(temp_hum_val[1]);
Serial.print(" *C\t,\t");
Serial.print("Humidity: ");
Serial.print(temp_hum_val[0]);
Serial.println(" %");
}
else{
Serial.println("Failed to get temprature and humidity value.");
}
}
1602 LCD에 온도, 습도 출력하기#
schematic#
sketch#
#include <DHT.h>
#define DHTPIN 8 // data pin
#define DHTTYPE DHT22 // change to DHT11 if you're using the DHT11
// AM2301(DHT21) -> DHT21, AM2302(DHT22) -> DHT22
DHT dht(DHTPIN, DHTTYPE);
// I2C 1602 LCD (연결핀을 바꿀 수 없음)
// VCC-5V / GND-GND / SDA-A4 / SCL-A5
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// i2c address 는 칩에 따라 0x27, 0x3F값을 가짐
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
dht.begin();
// lcd 초기화
lcd.init();
lcd.backlight();
}
void loop() {
delay(2000);
// float temperature = dht.readTemperature();
// float humidity = dht.readHumidity();
float temp_hum_val[2] = {0};
if(!dht.readTempAndHumidity(temp_hum_val)){
Serial.print("Temperature: ");
Serial.print(temp_hum_val[1]);
Serial.print(" *C\t,\t");
lcd.setCursor(0, 0);
lcd.print("Temp. : ");
lcd.print(temp_hum_val[1]);
lcd.print("*C");
Serial.print("Humidity: ");
Serial.print(temp_hum_val[0]);
Serial.println(" %");
lcd.setCursor(0, 1);
lcd.print("Humi. : ");
lcd.print(temp_hum_val[0]);
lcd.print(" %");
}
else{
Serial.println("Failed to get temprature and humidity value.");
}
}