Arduino, 온도 및 습도 측정 (DHT22)

온습도 센서 DHT22

DHT22 센서를 이용하여 온도와 습도를 측정한다.

센서 DHT11 DHT22 (AM2302)
사진 DHT11 DHT22
온도 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#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.");
}
}
Author

chemidot

Posted on

2018-09-02

Updated on

2021-11-17

Licensed under

댓글