사용부품:
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(" %");
  }
}
 
댓글
댓글 쓰기