초급 예제

누구나 쉽게 따라해볼 수 있는 쉬운 예제들입니다. 가볍게 도전~!

온습도 센서(모듈)로 온/습도 확인하기

2017-11-01 10:43:27

[이전 학습가이드] 서보모터 움직이기

개요

 

1) 온습도센서란 무엇인가?


온도라는 것은 원자 또는 분자가 가지고 있는 운동에너지의 크기를 말하며, 압력, 저항등의 물리량으로 변환하여 나타냅니다.

온도를 측정하는 방법은 물리량을 측정하는 방법이나 사용하는 재질에 따라 다릅니다. 이 예제에서 사용된 DHT11 센서는 서미스터(Thermistor: thermally sensitive resistor)라 하는 반도체의 저항이 온도에 따라 변하는 특성을 이용한 온도센서를 사용합니다.

일반적으로 금속산화물 반도체를 사용하며, 이는 금속에 비해 비교적 큰 저항온도계수를 갖습니다. 서미스터의 저항온도계수(TCR: Temperature Coefficient of Resistance)는 일정하지 않고 온도에 따라 달라지는 특성을 보입니다. 
 

온도가 증가함에 따라 저항이 증가 하는 타입을 정온도계수(PTC:positive temperature coefficient)형이라 하며, 온도가 증가함에 따라 저항은 감소하는 타입을 부온도계수(NTC:negative temperature coefficient)형이라 합니다. DHT11은 NTC형이 사용되고 있습니다.


습도란 공기중의 수증기량을 말하며, 습도를 측정하는 방법도 측정하는 방법이나 사용하는 재질에 따라 많은 종류가 있습니다. DHT11센서에서는 습도에 따라 저항이 변하는 정전용량 습도센서를 사용합니다.


DHT11 센서로 측정가능한 온습도 범위 및 오차는 다음과 같습니다.


 

참고로 습도의 단위 RH는 Relative Humidity로 상대 습도를 말합니다. 즉 대기 중에 포함되어있는 수증기량과 측정 당시의 온도에서 포함할 수 있는 최대의 수증기량과의 비를 백분율로 표시한 것입니다.

온도의 단위 섭씨 ℃는 얼음의 녹는점 0℃도와 물이 끓는점 100℃로하여 100등분한 단위이며, 화씨 ℉는 얼음이 녹는점을 32℉, 물이 끓는점을 212℉로하여 그 사이를 등분한 단위입니다.

 

2) DHT11 온습도 센서 사용방법


DHT11 센서를 쉽게 사용하기 위해서는 사용방법을 미리 구현해놓은 라이브러리를 다운로드 받아 사용하는 것이 좋습니다.

 

라이브러리 설치하는 방법은 아래를 따라하시면 됩니다.
 

 

 라이브러리 설치하기

 

 1. '스케치 -> 라이브러리 포함하기 -> 라이브러리 관리...' 를 눌러줍니다.

 

 

 2. 라이브러리 매니저 창이 나오면 DHT11을 검색 후 DHT sensor library by Adafruit를 설치해 줍니다.

 

 

3. 라이브러리 매니저 창에서 adafruit unified sensor를 검색 후 Adafruit Unified Sensor by Adafruit를 설치해 줍니다.

 

 

 DHT11 센서는 4개의 핀으로 구성이 되어 있으나, 왼쪽부터 1,2,4번째 핀만을 사용합니다.  1번핀은 5V 전원, 2번핀은 데이터 입출력, 4번핀은 GND에 연결합니다.

(이번에 사용하는 온습도센서는 모듈형태의 센서로써 핀이 3개 있으며, 저항을 따로 연결할 필요가 없습니다.)

 

 

LCD 뒷면을 보시면 핀이 나와있는 검은색 모듈 하나가 붙어있는 것을 볼 수 있습니다. 이 모듈을 통해 LCD의 백라이트 제어와 선명도를 제어할 수 있습니다.

 

자세한 사양은 아래와 같습니다.(I2C 주소의 경우 0x3F도 있습니다.)

 

- 1줄 16개 문자, 2줄 제어 가능.

- 동작 전압 : 5V

- i2C 주소(Address) : 0x20, 0x27

- 문자 선명도 : 가변 저항을 통해 문자의 선명도 조절 가능

- backlight :  점퍼 스위치를 통해 backlight On / Off 

 

부품 목록

NO 부품명 수량 상세설명
1 오렌지 보드 1  
2 온습도 센서 모듈 1 KY-015
3 LCD 1 I2C_LCD
4 브레드보드 1  
5 점퍼케이블 19  

 

 

부품명 오렌지 보드 온습도 센서 모듈 I2C_LCD 브레드보드 점퍼케이블
파트 ky-015에 대한 이미지 검색결과

 

 

 

하드웨어 making

브레드 보드

1. 오렌지보드의 5V핀을 브레드보드의 +버스에 연결합니다.

2. 오렌지보드의 GND핀을 브레드보드의 -버스에 연결합니다.

3. 온습도센서 모듈을 그림과 같이 세로로 꽂습니다.

4. 온습도센서 모듈의 맨 위에 있는 핀을 브레드보드의+버스에 연결합니다.

5. 온습도센서 모듈의 가운데에 있는 핀을 오렌지보드 D2번핀에 연결합니다.

6. 온습도센서 모듈의 맨 밑에 있는 핀을 브레드보드의 -버스에 연결합니다.

7. I2C_LCD의 GND핀을 브레드보드 -버스에 연결합니다.

8. I2C_LCD의 VCC핀을 브레드보드 +버스에 연결합니다.

9. I2C_LCD의 SDA핀을 아날로그 A4번핀에 연결합니다.

10. I2C_LCD의 SCL핀을 아날로그 A5번핀에 연결합니다.


 

 

전자 회로도

소프트웨어 coding

// DHT11 센서를 쉽게 제어하기 위한 라이브러리를 추가해줍니다.
#include "DHT.h"
// I2C LCD를 쉽게 제어하기 위한 라이브러리를 추가해줍니다.
#include <LiquidCrystal_I2C.h>

// 온습도 센서를 디지털 2번 핀에 연결합니다.
#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

// 16X2 크기의 LCD 객체를 생성합니다.
// 만약 LCD 화면이 나오지 않으면 0x3F 대신 0x27를 넣어주세요.
LiquidCrystal_I2C lcd(0x3F, 16, 2);

void setup() {
  Serial.begin(9600);
  dht.begin();

  // LCD를 초기화 합니다.
  lcd.init();
  // LCD의 백라이트를 켜줍니다.
  lcd.backlight();
}

void loop() {
  // 습도와 온도값을 측정하고, 제대로 측정되었는지 확인해줍니다.
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  if (isnan(humidity) || isnan(temperature) ) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  // 온도와 습도값을 시리얼 모니터에 출력해 줍니다.
  Serial.print((int)temperature); Serial.print(" *C, ");
  Serial.print((int)humidity); Serial.println(" %");

  // LCD에 출력할 습도 메세지를 만듭니다.
  String humi = "Humi : ";
  humi += (String)humidity;
  humi += "%";

  // LCD에 출력할 온도 메세지를 만듭니다.
  String temp = "temp : ";
  temp += (String)temperature;
  temp += "C";

  // 첫번째 줄, 첫번째 칸부터 "Humi = 000%" 를 출력해 줍니다.
  lcd.setCursor(0, 0);
  lcd.print(humi);

  // 두번째 줄, 첫번째 칸부터 "temp = 000C" 를 출력해 줍니다.
  lcd.setCursor(0, 1);
  lcd.print(temp);

  delay(1500);
}

 

I2C_LCD의 자세한 사용법은 https://kocoafab.cc/tutorial/view/727 를 참고하세요.

 

 

 

 

 

 

 

 

활용하기

불쾌지수를 나타내는 스마트 전등 만들기

 

 

 

// DHT11 센서를 쉽게 제어하기 위한 라이브러리를 추가해줍니다.
#include "DHT.h"

// 온습도 센서를 디지털 6번 핀에 연결합니다.
#define DHTPIN 6
#define DHTTYPE DHT11

//온습도 센서를 사용하기 위한 객체를 선언하며, 객체의 이름은 dht입니다.
DHT dht(DHTPIN, DHTTYPE);

// 실행시 가장 먼저 호출되는 함수이며, 최초 1회만 실행됩니다.
// 변수를 선언하거나 초기화를 위한 코드를 포함합니다.
void setup() {
// 온도와 습도를 확인하기 위해 115200의 속도로 PC와 통신을 시작합니다. 
  Serial.begin(115200);

  dht.begin();
}

// setup() 함수가 호출된 이후, loop() 함수가 호출되며,
// 블록 안의 코드를 무한히 반복 실행됩니다.
void loop() {
  //온습도 모듈로 부터 온도와 습도를 읽어와 temperature, humidity에 각각 저장합니다. 
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();


  //데이터를 읽어올 수 없는 경우 "Failed to read from DHT sensor!"를 출력합니다.
  if (isnan(humidity) || isnan(temperature) ) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  
  //온도와 습도를 계산해 불쾌지수를 구한 후 discomfortIndex에 저장합니다. 
  float discomfortIndex = (1.8 * temperature) - (0.55 * (1 - humidity / 100.0) * (1.8 * temperature - 26)) + 32;
  
  //불쾌지수를 시리얼 모니터에 출력합니다. 
  Serial.println(discomfortIndex);
 
 //불쾌지수에 따라 LED의 색상을 제어합니다. 
 //68 이하일 경우 초록색 
 //69~75 사이일 경우 노란색
 //76 이상일 경우 빨간색
 if(discomfortIndex < 69.0){
    analogWrite(9, 0); analogWrite(10, 255);
    analogWrite(11, 0);
    
  }
  else if(discomfortIndex < 76.0) {
    analogWrite(9, 255); analogWrite(10, 255);
    analogWrite(11, 0);
  }

 else {
    analogWrite(9, 255); analogWrite(10, 0);
    analogWrite(11, 0);
  }
  //1초 주기로 반복합니다.
  delay(1000);
}

 

 

 

 

 

온·습도 센서를 활용한 프로젝트

불쾌지수에 따라 켜지는 선풍기

온·습도 센서는 온도와 습도를 측정할 수 있는 센서입니다. 온도와 습도를 활용하면 불쾌지수도 측정을 해볼 수 있습니다.

온·습도 센서로 불쾌 지수를 측정해 불쾌 지수에 따라 제어되는 스마트 선풍기를 제작한 프로젝트입니다. 

 

출처 : https://youtu.be/g34-9K6Mpyo

 

 

[다음 학습가이드] I2C LCD로 문자 출력하기

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

코코아팹, 오렌지보드, 아두이노, 오픈소스하드웨어, SW교육, SW코딩, 코딩, 코딩 교육, 스마트홈, IoT 홈, IoT, DIY, 키트, kit, kocoafab, ornage board, arduino, opensource hardware, Software, education, physical computing, 온습도 센서, 온도 센서, 습도 센서, DHT11