오늘은 아두이노에서 온습도 센서를 사용하는 방법을 알아보고, 온습도 센서를 통해 LED를 제어해보겠습니다.
우선 아두이노에서 DHT온습도센서(11버전, 22버전 모두)를 사용하기 위해서는 온습도센서 관련 정보가 담겨있는 라이브러리를 추가해야 합니다. 라이브러리란 자주 사용하는 변수, 함수 등을 따로 한 파일에 미리 지정하여 저장하고, 그 지정한 파일을 불러옴으로써 내가 작성하는 코드에서 변수나 함수를 정의하지 않아도 불러온 파일에 있는 함수, 변수를 사용할 수 있는 기능이 있습니다.
사용하기 복잡하거나 까다로운 센서 같은 경우는 제조사에서 센서를 사용하기 쉬운 환경을 제공하기위해 라이브러리를 추가로 제공하는 경우가 많습니다. DHT센서도 이러한 경우라고 할 수 있습니다.
라이브러리를 추가하는 방법은 다양하지만 저는 기존에 가지고있던 라이브러리 zip 파일이 있어 zip 파일을 추가하는 방식으로 라이브러리를 추가했습니다.
저와 같은 방법으로 라이브러리를 추가하실분들은 아래 파일을 다운로드하시면 됩니다.
아두이노에서 라이브러리를 추가하기 위해서는 아래 사진을 보고 따라오시면 됩니다.
도구 메뉴에서 '스케치' - '라이브러리 포함하기' - 'ZIP 라이브러리 추가...'를 선택하고 다운로드 받으신 파일을 추가하면 됩니다.
그럼 이제 작성한 코드를 보시죠
#include <DHT.h> // DHT11.h 라이브러리를 포함
#define DHTPIN 12 // DHTPIN를 2로 정의
#define DHTTYPE DHT22 // DHTTYPE를 DHT22로 정의(DHT11을 사용하는 경우 22대신 11을 입력)
unsigned int LED = 13;
DHT dht(DHTPIN, DHTTYPE);
void setup()
{
Serial.begin(9600); // 시리얼 통신을 시작하며,통신속도는 9600
pinMode(LED,OUTPUT);
}
void loop()
{
delay(2000); // 2초 대기
int h = dht.readHumidity(); // 변수 h를 선언하며 습도 값 대입
int t = dht.readTemperature(); // 변수 t를 선언하며 온도값 대입
Serial.print("습도 : "); // 시리얼 모니터에 출력(이하 생략)
Serial.print(h);
Serial.print(" \t");
Serial.print("온도 : ");
Serial.print(t);
Serial.println(" C");
if(h>60){ // 습도가 60을 초과하면 led를 켠다.
digitalWrite(LED, HIGH);
Serial.println("LED가 켜졌습니다.");
}
else{ // 습도가 60 이하면 led를 끈다.
digitalWrite(LED, LOW);
Serial.println("LED가 꺼졌습니다.");
}
}
회로도입니다.
마냥 이 회로도를 보고 따라 하셔도 되지만 3번째 핀이 왜 사용되지 않는지 궁금하신 분들이나 왜 저 핀에 전원, 접지, 신호를 인가하는지 궁금하신 분들은 아래 사진을 참고해주세요.
이건 DHT센서의 데이터시트의 한 페이지를 캡처한 사진입니다. 데이터시트를 찾아보면 위와 같이 각 핀의 기능이 적혀있습니다. 이는 센서를 제조하는 제조사에서 배포하는 것으로 이 센서에 대한 모든 정보는 각 센서의 제조사에서 확인할 수 있습니다.