사용부품:
Arduino UNO 호환보드, DH-22 온습도 센서, 캐릭터 LCD(16x2글자), Potentionmeter
![]() |
| 아두이노 온습도계 |
AM2302 DH-22 온습도센서는 다음과 같이 3개의 핀을 사용한다.
Pin 1. Vcc (전원 3.3~ 5.5V)
Pin 2. GND (접지)
Pin 3. DOUT (데이터 송신, SDA핀 연결)
온습도 센서의 데이터 수신을 위해 DOUT 핀은 아두이노의 D2 핀에 연결했고, 전원과 DOUT을 10㏀ 풀업 저항을 달아 연결했다.
![]() |
| 부품 구성도 |
온습도 정보를 수집하여 LCD에 출력하기 위한 아두이노 소스는 다음과 같다.
소스코드: https://github.com/Jeongsam/arduino-DH22-LCD1602
소스코드: https://github.com/Jeongsam/arduino-DH22-LCD1602
#include <adafruit_sensor.h="">
#include <liquidcrystal.h="">
#include <dht.h="">
#include <dht_u.h="">
/**
* 현재 온습도를 디스플레이하기
* DHT22(AMS2302)로부터 데이터를 받아 LCD16x2 디스플레이에 표시
*/
// 온습도 센서 설정
#define DHTPIN 2 // 온습도 데이터 연결 핀 번호
#define DHTTYPE DHT22 // AMS2302
DHT_Unified dht(DHTPIN, DHTTYPE);
uint32_t delayMS;
// LCD1602 설정
const int rs = 7, en = 8, d4 = 9, d5 = 10, d6 = 11, d7 = 12;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
// DHT 초기화
Serial.begin(9600);
dht.begin();
Serial.println(F("DHTxx Unified Sensor Example"));
// 온도센터 상세정보 표시
sensor_t sensor;
dht.temperature().getSensor(&sensor);
Serial.println(F("-------------------------------------------"));
Serial.println(F("Temperature Sensor"));
Serial.print(F("Sensor Type: ")); Serial.println(sensor.name);
Serial.print(F("Driver Ver: ")); Serial.println(sensor.version);
Serial.print(F("Unique ID: ")); Serial.println(sensor.sensor_id);
Serial.print(F("Max Value ")); Serial.print(sensor.max_value); Serial.println(F("℃"));
Serial.print(F("Min Value ")); Serial.print(sensor.min_value); Serial.println(F("℃"));
Serial.print(F("Resolution: ")); Serial.print(sensor.resolution); Serial.println(F("℃"));
Serial.println(F("-------------------------------------------"));
// 습도센서 상세정보 표시
dht.humidity().getSensor(&sensor);
Serial.println(F("-------------------------------------------"));
Serial.println(F("Humidity Sensor"));
Serial.print(F("Sensor Type: ")); Serial.println(sensor.name);
Serial.print(F("Driver Ver: ")); Serial.println(sensor.version);
Serial.print(F("Unique ID: ")); Serial.println(sensor.sensor_id);
Serial.print(F("Max Value ")); Serial.print(sensor.max_value); Serial.println(F("%"));
Serial.print(F("Min Value ")); Serial.print(sensor.min_value); Serial.println(F("%"));
Serial.print(F("Resolution: ")); Serial.print(sensor.resolution); Serial.println(F("%"));
Serial.println(F("-------------------------------------------"));
// 지연시간 설정
delayMS = sensor.min_delay / 1000;
// LCD 행과 열 설정
lcd.begin(16, 2);
}
void loop() {
// 지연시간 설정
delay(delayMS);
// 온도 이벤트 발생시 값을 출력
sensors_event_t event;
dht.temperature().getEvent(&event);
lcd.setCursor(0, 0);
if (isnan(event.temperature)) {
lcd.print("Error reading temperature!");
} else {
lcd.print("Temp. ");
lcd.print(event.temperature);
lcd.print(" C");
}
// 습도 이벤트 발생시 값을 출력
dht.humidity().getEvent(&event);
lcd.setCursor(0, 1);
if (isnan(event.relative_humidity)) {
lcd.print(F("Error reading humidity!"));
} else {
lcd.print("Humi. ");
lcd.print(event.relative_humidity);
lcd.print(" %");
}
}


댓글
댓글 쓰기