초급 예제

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

온습도 센서-실내 온도와 습도 확인하기

2015-01-26 10:32:46

온습도센서란?



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

온도를 측정하는 방법은 물리량을 측정하는 방법이나 사용하는 재질에 따라 다릅니다.

이 예제에서 사용된 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℉로하여 그 사이를 등분한 단위입니다.

 

 

 

 

 

DHT11 온습도 센서 사용방법


 

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

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

 

 

라이브러리 설치하기

 

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

 

 

 

 

 

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

 

 

 

 

 

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

 

 

 

 

 

 

 

지니어스 키트에 들어가 있는 온습도 센서는 연결을 편리하게 하기 위해 모듈형태로 되어있는 제품을 사용합니다.

 

따로 저항 연결 없이 직접 핀에 연결하시면 됩니다.

 

 

 

부품 목록

NO 부품명 수량 상세설명
1 오렌지 보드 1  
2 온습도센서 모듈 1  
3 I2C LCD 1  
4 브레드 보드 1  
5 점퍼케이블 9 M/F 4개, M/M 5개

 

 

부품명 오렌지 보드 온습도 센서 I2C_LCD 브레드보드 점퍼케이블
파트

 

 

 

 

 

 

하드웨어 making


 

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

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

3. 온습도센서 모듈의 S핀을 오렌지보드의 2번핀에 연결합니다.

4. 온습도센서 모듈의 가운데 핀을 브레드보드의 +버스에 연결합니다.

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

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

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

8. I2C_LCD의 SDA핀을 오렌지보드의 A4번핀에 연결합니다.

9. I2C_LCD의 SCL핀을 오렌지보드의 A5번핀에 연결합니다.

 

 

 

 

 

 

 

소프트웨어 coding


 

  1. /*
  2.  제목   : 온습도 센서로 실내 온도와 습도 학인하기
  3.  내용   : DHT11 온습도 센서를 사용하여 실내 온도와 습도를 측정하고 I2C_LCD 에 표시해봅니다
  4.  */
  5.  
  6. // DHT11 센서를 쉽게 제어하기 위한 라이브러리를 추가해줍니다.
  7. #include "DHT.h"
  8. // I2C LCD를 쉽게 제어하기 위한 라이브러리를 추가해줍니다.
  9. #include <LiquidCrystal_I2C.h>
  10.  
  11. // 온습도 센서를 디지털 2번 핀에 연결합니다.
  12. #define DHTPIN 2
  13. #define DHTTYPE DHT11
  14.  
  15. DHT dht(DHTPIN, DHTTYPE);
  16.  
  17. // 16X2 크기의 LCD 객체를 생성합니다.
  18. // 만약 LCD 화면이 나오지 않으면 0x3F 대신 0x27를 넣어주세요.
  19. LiquidCrystal_I2C lcd(0x3F, 16, 2);
  20.  
  21. void setup() {
  22.   Serial.begin(9600);
  23.   dht.begin();
  24.  
  25.   // LCD를 초기화 합니다.
  26.   lcd.init();
  27.   // LCD의 백라이트를 켜줍니다.
  28.   lcd.backlight();
  29. }
  30.  
  31. void loop() {
  32.   // 습도와 온도값을 측정하고, 제대로 측정되었는지 확인해줍니다.
  33.   float humidity = dht.readHumidity();
  34.   float temperature = dht.readTemperature();
  35.  
  36.   if (isnan(humidity) || isnan(temperature) ) {
  37.     Serial.println("Failed to read from DHT sensor!");
  38.     return;
  39.   }
  40.  
  41.   // 온도와 습도값을 시리얼 모니터에 출력해 줍니다.
  42.   Serial.print((int)temperature); Serial.print(" *C, ");
  43.   Serial.print((int)humidity); Serial.println(" %");
  44.  
  45.   // LCD에 출력할 습도 메세지를 만듭니다.
  46.   String humi = "Humi : ";
  47.   humi += (String)humidity;
  48.   humi += "%";
  49.  
  50.   // LCD에 출력할 온도 메세지를 만듭니다.
  51.   String temp = "temp : ";
  52.   temp += (String)temperature;
  53.   temp += "C";
  54.  
  55.   // 첫번째 줄, 첫번째 칸부터 "Humi = 000%" 를 출력해 줍니다.
  56.   lcd.setCursor(0, 0);
  57.   lcd.print(humi);
  58.  
  59.   // 두번째 줄, 첫번째 칸부터 "temp = 000C" 를 출력해 줍니다.
  60.   lcd.setCursor(0, 1);
  61.   lcd.print(temp);
  62.  
  63.   delay(1500);
  64. }

 

※ I2C LCD는 0x27, 0x3F 두 주소 중 하나를 가지고 있습니다. LCD에 문자가 출력되지 않는다면 다른 주소를 사용하여 코드를 사용해보세요.

 

 

 

 

 

온습도센서로 온도, 습도 측정하기

 

※ 온습도센서를 사용할 수 있는 방법은 설치한 라이브러리에 따라 달라집니다.

만약 다른라이브러리를 설치했다면 사용하는 코드 또한 달라집니다. 때문에 여기서 설명하는 내용은 항상 올바른 내용이 아닙니다.

 

 

위 코드에서 온습도센서를 측정하는 코드는 dht.readHumidity();와 dht.readTemperature();입니다.

측정되는 값은 정수부분 외에 소숫점까지 표기되기 때문에 저장되는 변수의 타입은 float로 지정합니다.

 

 

 

 

 

String문자 사용하기

 

C언어에서 문자열을 저장할 수 있는 변수의 타입은 String입니다.

String타입의 문자열은 자유롭게 더하기가 가능합니다.

 

"apple" + "pie" = "applepie"가 됩니다.

 

위 코드에서는 "temp : " + " 온도값" + "C"를 만들어 최종적으로 LCD에는 temp : 온도값C가 출력되도록 만듭니다.

 

 

 

 

 

형 변환하기(캐스팅)

 

모든 자료들은 특정 자료형으로 형변환이 가능합니다.

 

예를들어 19.8이라는 값을 정수형으로 변환하면 19가 되고, 67을 실수형으로 변환하면 67.0이라는 값으로 변경됩니다.

크기에는 변함이 없으나 같은 데이터형끼리 상호작용하는 코드의 특성상 타입은 항상 맞춰주는 것이 좋습니다.

 

itoa()나 atoi()와 같이 캐스팅을 도와주는 함수도 있지만 위 코드에서는 간단하게 변수앞에 타입을 붙여 형변환을 시도합니다.

 

ex) String타입으로 변환 -> (String)apple;

     int타입으로 변환 -> (int)number;

kocoafabeditor

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

온습도 센서, 아두이노, 오렌지보드

손동환 2016-10-17 16:21:19

lcd에 글자가 안나오는건 어떻게해야합니까?
i2c 쓰고 있는데 펌웨어를 어떻게하는건지도 모르고 왕초보입니다..ㅜㅠ

kocoafab 2019-01-07 17:42:59

I2C LCD의 경우 LCD 별로 I2C 주소가 정해져있습니다. 이 I2C 주소가 맞아야 LCD가 제대로 동작하게 됩니다.

위 코드를 넣었는데 제대로 화면이 안나올 경우 19번째 줄에 있는 LiquidCrystal_I2C lcd(0x3F, 16, 2); 이 부분을 0x3F 대신 0x27로 수정한 다음 다시 코드를 돌려보시면 될 것 같습니다.

김민우 2022-09-03 11:06:05

LiquidCrystal I2C 라이브러리를 추가해야하고, 위 전선 배선도에서 DHT11센서의 핀 연결이 잘못 표시되어 있습니다. 가운데 핀이 data out으로 2번핀으로 연결되어야하고, 맨 위의 핀이 (+)로 연결되어야 합니다.