초급 예제

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

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

2015-01-26 10:32:46

개요

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

라이브러리 다운로드

http://kocoafab.cc/data/oss/libraries/DHT11.zip


받은 라이브러리는 압축을 풀어 원하는 이름으로 폴더 이름을 변경하고, 아두이노 IDE가 설치된 폴더에 있는 libraries 폴더 안에 넣어주면 됩니다. 그리고 IDE를 재실행하면 모든 설치과정이 끝나게 됩니다.  (좀더 자세한 설명은 부록의 A. 라이브러리 (Library) 설치를 참고합니다.

 

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

 

부품 목록

NO 부품명 수량 상세설명
1 오렌지 보드 1  
2 온습도 센서 1 DHT-11
3 LCD 1 mc1602-13
4 가변저항 1  
5 10KΩ 저항 1  
6 브레드 보드 1  
7 점퍼케이블 19  

 

 

부품명 오렌지 보드 온습도 센서 LCD
파트

 

 

 

부품명 가변저항 10KΩ 저항 브레드 보드 점퍼케이블
파트

 

하드웨어 making

브레드 보드

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

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

3. LCD를 그럼과 같이 세로로 꽂습니다.

4. 가변저항을 그림과 같이 세로로 꽂습니다.

5. DHT11 센서를 그림과 같이 오렌지보드를 향하도록 세로로 꽂습니다.

6. DHT11 센서의 2번째 data핀에 10KΩ 저항(풀업저항)을 연결합니다.

7. LCD의 16번핀을 -버스에 연결합니다.

8. LCD의 15번핀을 +버스에 연결합니다.


 

9. LCD의 14번핀을 오렌지보드 13번핀에 연결합니다.

 

10. LCD의 13번핀을 오렌지보드 12번핀에 연결합니다.

11. LCD의 12번핀을 오렌지보드 11번핀에 연결합니다.

12. LCD의 11번핀을 오렌지보드 10번핀에 연결합니다.

13. LCD의 6번핀을 오렌지보드 4번핀에 연결합니다.

14. LCD의 5번핀을 -버스에 연결합니다.

15. LCD의 4번핀을 오렌지보드 3번핀에 연결합니다.

16. LCD의 2번핀을 +버스에 연결합니다.

17. LCD의 1번핀을 -버스에 연결합니다

18. 가변저항의 상단 단자를 +버스에 연결합니다.

19. 가변저항의 가운데 단자를 LCD의 3번핀에 연결합니다


 

 

20. 가변저항의 하단 단자를 -버스에 연결합니다.

 

 

21. DHT11 센서의 1번 전원핀을 +버스에 연결합니다.

22. 10KΩ 저항이 연결된 DHT11센서의 2번 데이터핀을 오렌지보드 6번핀에 연결합니다.

23. DHT11 센서의 4번 GND 핀을 -버스에 연결합니다.


 

 

 

 

전자 회로도





 

 

 

 

소프트웨어 coding


/*
 제목		: 온습도 센서로 실내 온도와 습도 학인하기
 내용		: DHT11 온습도 센서를 사용하여 실내 온도와 습도를 측정하고 LCD 에 표시해봅니다
 */

// LCD를 쉽게 제어하기 위한 라이브러리를 추가합니다.
#include <LiquidCrystal.h>
// DHT11 센서를 쉽게 제어하기 위한 라이브러리를 추가합니다.
#include <DHT11.h>

// LCD 객체를 생성하고 오렌지보드의 3, 4, 10, 11, 12, 13번핀을 사용하도록 설정합니다.
LiquidCrystal lcd(3,4,10,11,12,13);

// DHT11객체를 생성하고 오렌지보드의 6번핀을 데이터 통신으로 사용하도록 설정합니다.
DHT11 dht11(6);

// 실행시 가장 먼저 호출되는 함수이며, 최초 1회만 실행됩니다.
// 변수를 선언하거나 초기화를 위한 코드를 포함합니다.
void setup() {
	// 조도센서의 동작 상태를 확인하기 위하여 시리얼 통신을 설정합니다. (전송속도 9600bps)
	// 메뉴 Tool -> Serial Monitor 클릭
	Serial.begin(9600);
	// 16개의 셀과 2줄을 사용하도록 설정합니다.
	lcd.begin(16,2);
	// LCD를 초기화 합니다.
	lcd.clear();
}

// setup() 함수가 호출된 이후, loop() 함수가 호출되며,
// 블록 안의 코드를 무한히 반복 실행됩니다.
void loop() {
	int err;
	float humi;
	float tem;

	// dht11.read() 함수는 DHT11 센서로부터 측정된 값을 읽으며,
	// 성공시에는 0을 반환하고, 실패시 에러코드를 반환합니다.
	if ((err = dht11.read(humi, tem)) == 0) {

    	// float 데이터 타입의 습도 값을 문자 배열로 변환하고 소숫점 1자리만 유지하도록 합니다.
		char humiCharValue[10];
		dtostrf(humi, 4, 1, humiCharValue);

		// 습도 정보를 표시하기 위한 문자열을 생성합니다.
		String humiDisplayStr = "Humidity: ";
		humiDisplayStr += (String)humiCharValue;
		humiDisplayStr += " %";

		// 0번째 줄 0번째 셀부터 입력하게 합니다.
		lcd.setCursor(0,0);
		// 현재 습도를 LCD에 출력합니다.
		lcd.print(humiDisplayStr);

		// float 데이터 타입의 온도 값을 문자 배열로 변환하고 소숫점 1자리만 유지하도록 합니다.
		char temCharValue[10];
		dtostrf(tem, 4, 1, temCharValue);

		// 온도 정보를 표시하기 위한 문자열을 생성합니다.
		String temDisplayStr = "Temper  : ";
		temDisplayStr += (String)temCharValue;
		temDisplayStr += "'C";

		// 1번째 줄 0번째 셀부터 입력하게 합니다.
		lcd.setCursor(0,1);
		// 현재 온도를 LCD에 출력합니다.
		lcd.print(temDisplayStr);
	}

	// 에러 발생시 에러번호와 에러를 시리얼 모니터에 출력합니다.
	else {
		Serial.println();
		Serial.print("Error No :");
		Serial.print(err);
		Serial.println();
	}
	// DHT11_RETRY_DELAY는 DHT11.h에 정의되어있으며, 1초(1000)입니다.
	// 따라서 1초동안 대기합니다.
	delay(DHT11_RETRY_DELAY);
}

 

 

kocoafabeditor

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

오렌지 보드, 온습도 센서, LCD

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

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