【 아두이노 센서#18】 DHT11 온·습도 센서 다루기 #2
지난 시간 온도와 습도 센서 DHT11의 값을 '시리얼모니터'를 이용해서 출력해 보았다. 이번에는 활용도가 높은 I2C 통신모듈이 포함된 LCD 디스플레이에 표시해 보고자 한다. 또한 온도와 습도의 상관관계를 이용해 만든 불쾌지수(DI)도 표시해 볼 것이다.
▶ 선수 학습 :
1. I2C 통신 이란? 강좌보기클릭☜
2. DHT11 온·습도 센서 다루기#1 강좌보기클릭☜
▶ 실습에 사용되는 부품 자료 ( DHT11 )
《 DHT11 핀 배열 》
위와 같은 DHT11 센서를 바로 사용하기도 하지만, 보통은 아래 처럼 풀업저항과 LED가 달려 있는 모듈 형태가 사용하기 편해서 많이 사용한다.
▶ 실습 목표 :
1. 풀업 저항이 포함된 DHT11 센서를 다룰 수 있다.
2. DHT11 센서의 온도 값과 습도 값을 I2C LCD로 표시 할 수 있다.
3. 불쾌지수(DI)를 함께 표시해 볼 수 있다.
▶ 실습 회로도면 :
(이미지 클릭하면 확대 가능)
▶ 프로그램 코드 및 설명 :
/* DTH11 센서로 I2C LCD에 온·습도 표시하기 */
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd (0x27, 16,2);
#include <DHT.h>
#define DHTPIN 8
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup( ) {
Serial.begin(9600);
lcd.begin();
lcd.clear();
}
void loop( ) {
delay(2000);
int h = dht.readHumidity();
int t = dht.readTemperature();
Serial.print("Humidity: "); // 시리얼 통신창에 출력
Serial.print(h);
Serial.print("%\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println("C");
lcd.setCursor(0,0); //커서를 1열 1행으로 이동
lcd.print("Humidity :");
lcd.print(h);
lcd.println("% ");
delay(100);
lcd.setCursor(0,1); //커서를 1열 2행으로 이동
lcd.print("Temperature:");
lcd.print(t);
lcd.print(char(223)); // 223 또는 0xDF (특수문자 ℃의 표현)
lcd.print("C ");
}
※ 만약 위 코드를 실행할 때 DHT11 센서 관련 라이브러리 에러가 난다면, 아두이노 IDE 메뉴의 라이브러리 관리 팝업창에서 <dht.h> 헤더파일을 검색하여 추가(설치)해 주어야 한다.
① 라이브러리 검색창에서 "dht.h" 검색!
② 설치 클릭!
※ 중요! : 위의 라이브러리 매니저 화면에서 다운로드 받는 DHT.h 는 1.2.3 버전 이하를 사용해야 본문의 코드로 정상 작동 됩니다 ! 1.2.3버전 이상의 최신버전을 사용하면 에러 나지는 않지만 온도 습도값이 정상적으로 나오지 않습니다.
혹은 첨부되는 라이브러리를 다운로드 받아 설치하세요.
▶ 실행 결과 : 【 실습1. I2C LCD 사용한 기본 온·습도 표시 】
(영상은 고화질로 설정하고 전체화면으로 보세요)
※불쾌 지수 산출 공식을 이용하여 시리얼모니터와
LCD에 출력해보자.
#적용 공식#
di= 1.8*t-0.55*(1-h/100)*(1.8*t-26)+32
▶ 프로그램 코드 및 설명 :
/* DTH11 센서로 I2C LCD에 온·습도 & 불쾌지수 표시하기 */
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h> //이부분 에러가 날 경우'DHT.h' 1.23 이하 버전을 설치해 볼것
#define DHTPIN 8
#define DHTTYPE DHT11
LiquidCrystal_I2C lcd (0x27, 16,2);
DHT dht(DHTPIN, DHTTYPE);
float di; // 불쾌지수
void setup() {
Serial.begin(9600);
lcd.begin();
lcd.clear();
}
void loop() {
int h = dht.readHumidity();
int t = dht.readTemperature();
Serial.print("Hum: "); // 습도
Serial.print(h);
Serial.print(", \t");
Serial.print("Temp : "); // 온도
Serial.print(t);
Serial.print("℃");
Serial.print(", \t");
di= 1.8*t-0.55*(1-h/100)*(1.8*t-26)+32;
Serial.print("Di : "); // Di(불쾌지수)
Serial.println(di);
lcd.setCursor(0,0);
lcd.print("H:");
lcd.print(h,1);
lcd.print("%");
delay(100);
lcd.setCursor(7,0);
lcd.print(" T:");
lcd.print(t,1);
lcd.print(char(223));
lcd.print("C");
delay(100);
lcd.setCursor(0,1);
lcd.print("DI:");
lcd.print(di,1);
if (di < 68.0) {
Serial.print("Di Condition: "); // Di conditions 좋음!
Serial.println(" Good!");
lcd.setCursor(8,1);
lcd.print(" Good! ");
Serial.println(" ");
}
else if ( di > 68.0 && di < 75.0) {
Serial.print("Di Condition: "); // Di conditions 보통!
Serial.println("Normal");
lcd.setCursor(8,1);
lcd.print("Normal! ");
Serial.println(" ");
}
else if (di >= 75 && di < 80) {
Serial.print("Di Condition: "); // Di conditions 나쁨!
Serial.println("High!");
lcd.setCursor(8,1);
lcd.print("High! ");
Serial.println(" "); }
else {
Serial.print("Di Condition: "); // Di conditions 아주 나쁨!
Serial.println("Too High!");
lcd.setCursor(8,1);
lcd.print("TooHigh!");
Serial.println(" ");
}
delay(2000);
}
▶ 실행 결과 : 【 실습2. I2C LCD에 온·습도 & 불쾌지수 표시 】
(영상은 고화질로 설정하고 전체화면으로 보세요)
▶ 아두이노 파일(다운) :
[ 01 : I2C LCD 온습도 출력 ] :
[ 02 : I2C LCD 온습도 & DI 출력 ] :
DHT11_LCD_i2c__hum_temp_di2.ino
【 LCD관련 에러나 동작이 안 될 때 】
LCD관련한 라이브러리 에러나 코드 에러에 대한 안내를 드립니다.
크게 아래와 같은 두 가지 형태를 보이는데요,
▶ 1. 코드를 실행하기전 LiquidCrystal_I2C.h: No such file or directory 에러라고 뜨는 경우!
이때는 LCD 헤더파일이 설치가 되어 있지 않았을 경우입니다. 아예 관련 라이브러리(해더 파일)가 설치 되지 않은 경우입니다.
해결법은 바로 아래에 첨부한 라이브러리를 다운받아 압축을 풀지 말고 라이브러리 관리 메뉴에서 .zip 라이브러리 추가 메뉴를 이용해서 추가해주세요.
경로 : 아두이노IDE > 스케치 》 라이브러리 포함하기 》 .zip 라이브러리 추가... 》 "다운받은 라이브러리파일 선택"
하지만! , Liquid... 관련 비슷한 이름의 라이브러리가 많아서 잘못설치되면, 제대로 동작되지 않고 에러를 내게 됩니다. 라이브러리는 이름과 내용이 비슷하다고 실행되지 않습니다. 완전히 다른 것으로 이해하셔야 합니다.
검색보다는 여기 첨부해드리는 라이브러리를 다운받아 .zip라이브러리 추가로 추가해 주세요.
Arduino-LiquidCrystal-I2C-library-master.zip
▶ 2. 또 한가지 LCD관련 에러는 , no matching function for call to ‘LiquidCrystal_I2C::begin(); 라고 뜨는 경우!
라이브러리 파일도 똑같은 이름이지만, 제공자에 따라 내부코드가 다른 라이브러리인 경우가 종종 있어요. 그래서 만약 제가 실험에서 사용한 라이브러리가 아닌, 같은 이름이지만 다른 라이브러리를 사용할 경우 위와 같은 에러 표시를 낼 수 있습니다. 라이브러리는 분명 설치되어 있지만 그래서 프로그램이 인지는 하는데, 코드에서 사용한 함수 적용이 되지 않을 때 이런 에러를 띄우게 됩니다. 그럼, 해결책은 실험에 사용한(적용한) 그 라이브러리를 다시 설치해 주어야 하는데요, 이 때 중요한 것은 아두이노에서는 똑 같은 이름의 라이브러리가 두 개 설치될 경우 또다른 중복에러를 띄우게 됩니다. 그러니 잘 못 설치된 라이브러리는 찾아서 반드시 삭제하거나, 다른이름으로 임시 변경해 놓거나, 나중에 다른 프로그램에서 사용해야 할 경우를 대비해서 압축해 놓고 원본은 지워 놓으면 됩니다.
그럼 기존 라이브러리를 찾아서 삭제를 하거나 하려면 설치된 라이브러리를 찾아야 겠죠?
찾는 위치는 보통 아래 두 곳입니다. (윈도우10 기준이며, 윈도우7도 비슷한 위치)
두 곳으로 나뉘어 설치되는 이유는 아두이노 IDE의 "라이브러리 관리 메니저" 창을 통해 검색으로 설치되는 기본위치가 있고(아두이노 설치된 경로), '.zip 라이브러리' 추가로 설치되는 위치가(도큐멘트 문서 저장영역-Doucuments) 따로 있어서 그렇습니다.
< .zip 라이브러리 추가 메뉴에서 추가한 라이브러리 설치 위치 >
1. C:\Users\유저-이름\Documents\Arduino\libraries
<라이브러리 관리 메뉴창에서 라이브러리 직접 검색으로 설치된 라이브러리 위치 >
2. C:\Program Files (x86)\Arduino\libraries
위 두 곳에서 찾아서 삭제를 하세요. (그냥, 폴더 째로 삭제하면 됩니다.)
그리고 아래 첨부하는 라이브러리를 다운받아 압축파일 그대로 .zip 라이브러리 추가 메뉴로 추가해 주세요.
만약, 압축파일 그대로 추가할 때 에러가 난다면, 앞축을 풀고 xxxxx.h 가 있는 폴더만 "C:\Users\유저-이름\Documents\Arduino\libraries" 경로에 붙여넣기 하면 됩니다. 이때 아두이노 스케치 IDE는 모두 닫고 재실행 해야 적용 됩니다.
본 예제에서 사용한 라이브러리 다운로드 받기 :
Arduino-LiquidCrystal-I2C-library-master.zip
※ 중요! : 여기에서 제시된 코드로 작성할 경우 반드이 이 라이브러리로 설치하셔야 합니다. 만약, 여러분의 PC에 똑 같은 이름의 라이브러리가 있을 경우 반드시 삭제를 하거나 압축해서 백업을 해 놓으면 충돌이 일어나지 않습니다.!!!
'아두이노 > 2. 아두이노센서' 카테고리의 다른 글
【 아두이노 센서#20】 HC-SR04 초음파 센서 다루기 #1 (0) | 2019.01.15 |
---|---|
【 아두이노 센서#19】 DHT22 온·습도 센서 다루기 with LCD#3 (0) | 2019.01.02 |
【 아두이노 센서#17】 DHT11 온·습도 센서 다루기 #1 (0) | 2018.12.28 |
【 아두이노 센서#16】 TC74 센서 & 74HC595 with I2C LCD (0) | 2018.12.27 |
【 아두이노 센서#15】 TC74 센서 & 74HC595 응용회로 실습 (0) | 2018.12.26 |