온습도 센서(DHT-11)
Last updated
Last updated
공식 사이트에서 라이브러리를 다운로드받는다.
스케치
→ 라이브러리 포함하기
→ ZIP 라이브러리 추가하기
를 눌러 다운로드받은 압축파일을 선택한다.
또는 라이브러리 관리
에서 DHT11을 검색하여 다운로드한다.
GND to GND
DATA to DIGITAL-PIN-2 또는 A0
VCC to 5V
예제에서 DHT_unified_sensor
를 선택하여 생성한다.
연결된 핀번호와 DHT_TYPE만 설정하면 예제는 정상적으로 작동한다.
설명을 수정한 예제는 다음과 같다.
//include는 자바의 import처럼 필요한 요소들을 미리 준비시키는 역할을 수행
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
//define은 매크로 설정을 수행
// - #define A B 라고 작성하면 프로그램 컴파일 직전에 A를 B로 바꾸라는 뜻(찾아 바꾸기)
#define DHTPIN A0 // DHT센서의 출력값을 받아들일 입력핀(디지털,아날로그 모두 가능)
//센서 유형 설정 매크로
#define DHTTYPE DHT11
//dht 센서 제어 객체
DHT_Unified dht(DHTPIN, DHTTYPE);//자바였다면 DHT-Unified dht = new DHT_Unified(DHTPIN, DHTTYPE);
//시간 지연 값
uint32_t delayMS;
void setup() {
//출력을 위한 시리얼 준비
Serial.begin(9600);
//DHT-11 센서 준비
dht.begin();
//F() 매크로를 사용하면 문자열이 Flash memory 에 저장된다.(아두이노는 Flash memory가 일반 메모리보다 크다)
Serial.println(F("DHTxx Unified Sensor Example"));
//온도센서 정보를 얻어와서 출력
// - &가 변수 앞에 작성되면 해당하는 변수의 "주소"를 말한다.
// - C언어에서는 "참조" 개념 대신 "주소"를 이용하여 직접 접근하여 설정하는 방식을 사용함
// - 만약 자바였다면 아래 코드는 다음과 같았을 것...
// - sensor_t sensor = dht.temperature().getSensor();
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("°C"));
Serial.print (F("Min Value: "));
Serial.print(sensor.min_value);
Serial.println(F("°C"));
Serial.print (F("Resolution: "));
Serial.print(sensor.resolution);
Serial.println(F("°C"));
Serial.println(F("------------------------------------"));
// 습도 센서 정보 출력
// - sensor = dht.humidity().getSensor();
dht.humidity().getSensor(&sensor);
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("------------------------------------"));
//sensor의 최소딜레이 / 1000만큼 지연시간을 설정(임의로 설정도 가능)
delayMS = sensor.min_delay / 1000;
}
void loop() {
//미리 설정해둔 지연시간만큼 대기
delay(delayMS);
//온도 측정 이벤트를 확인하여 출력이 가능하다면 출력을 수행한다.
//- sensors_event_t event = dht.temperature().getEvent();
sensors_event_t event;
dht.temperature().getEvent(&event);
//측정결과가 숫자가 아니라면 오류메세지를 출력(센서고장,회로이상)
if (isnan(event.temperature)) {
Serial.println(F("Error reading temperature!"));
}
//측정결과가 숫자라면 섭씨온도로 출력
else {
Serial.print(F("Temperature: "));
Serial.print(event.temperature);
Serial.println(F("°C"));
}
//습도도 동일하게 구하여 출력
// - event = dht.humidity().getEvent();
dht.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
Serial.println(F("Error reading humidity!"));
}
else {
Serial.print(F("Humidity: "));
Serial.print(event.relative_humidity);
Serial.println(F("%"));
}
}
Ctrl+R
또는 스케치 메뉴의 확인/컴파일
을 눌러 컴파일을 진행한다.
Ctrl+U
또는 스케치 메뉴의 업로드
를 눌러 업로드를 진행한다.
온습도 정보가 불러와진다.