I2C인터페이스 lcd를 사용하여 측정 범위가 넓고 정밀도가 높은 아두이노 온습도 측정용 센서 DHT22 의 측정 결과를 디스플레이 해보도록 하자. 단지 4줄의 점퍼 선만을 사용하는 I2C 인터페이스가 아닌 배선에 비해 적어도 5줄의 점퍼 선을 줄일 수 있어 배선이 대단히 간결한 이점이 있다.
DHT22 온습도 센서 사용에 따라 DHT.h 라이브러리를 설치하도록 한다. DHT11 온습도 센서 사용 시에는 라이브러리 명칭이 DHT11.h 이였으며 DHT.h 와는 다름에 유의한다.
DHT22 온습도 센서 측정을 위한 DHT.h 라이브러리는 아래의 최근 블로그를 참조하여 라이브러리 zip 파일을 다운받아 압축을 풀어 설치하도록 한다.
아두이노 DHT22 온습도 센서 측정
http://blog.daum.net/ejleep1/536
라이브러리 설치 이후 아두이노 편집기의 스케치 탭에서 라이브러리 포함하기 명령을 사용하여 ZIP 라이브러리 추가하기 작업을 한다. 작업이 끝난 후에는 라이브러리 포함하기 메뉴를 열어서 라이브러리 설치 여부를 확인하도록 한다.
한편 I2C lcd를 사용하기 위해서는 반드시 WIre.h 라이브러리 설치가 선행되어야 한다. 이는 꼭 I2C lcd 가 아니더라도 I2C 방식의 인터페이스용 센서를 사용할 때는 꼭 지켜야 할 코딩의 기본이다.
I2C 라이브러리 ZIP 파일인 LiquidCrystal_I2C-master 는 인터넷에서 흔히 구할 수 있으나 편리를 위해서 필요하다면 여기서 다운 받아 설치하기 바란다.
LiquidCrystal_I2C-master.ZIP
DHT22 온습도 센서와 I2C lcd 배선도는 아래와 같다.
DHT22 온습도 센서 배선
+: 3.3V, out: 디지털 핀 5번, -: GND
I2C lcd 디스플레이 배선
GND:GND VCC:5V SDA:A4 SCL:A5
아울러 I2C 인터페이스 lcd를 사용하기 위해서는 주소 확인 작업도 함께 이루어져야 한다.
인터넷에서 흔히 접할 수 있는 정보를 체크해 보면 0x27 과 0x3F 가 많이 사용되는 듯하다. 이 주소를 확인하기 위해서는 아래의 싸이트에 실려있는 i2cscanner 코드를 실행하여 확인해 보기 바란다. 확인된 데이터가 LiquidCrystal_I2C lcd(0x3F, 16, 2) 와 다르다면 주소를 수정하도록 하자.
백팩(backpack)PCB 회로를 부착한 I2C인터페이스 1602 lcd 출력
http://blog.daum.net/ejleep1/532
온습도 데이터인 temp 와 hum은 실수 즉 float 로 선언하여 사용한다. DHT11 온습도 센서에서는 소수 이하 데이터가 아무런 의미가 없었으나 DHT22에서는 특히 온도 데이터가 소수이하 첫째 자리까지가 유효 숫자임에 유의한다.
setup() 은 9600 으로 통신속도 설정과 더불어 dht.begin() 명령에 의해 온습도계 가동을 시작한다. 하지만 이 명령은 없어도 문제는 없는 듯하다.
delay(2000)은 DHT22 온습도 센서가 아두이노와 디지털 방식에 의해 데이터를 받아들이는 샘플링 타임 최소값이다. 아울러 loop() 에서도 반복적으로 온습도를 측정할 경우 끝 부분에 반드시 넣어야 한다.
I2C 인터페이스 시작을 위한 lcd.init()을 비롯하여 출력 후 사용자가 lcd 디스플레이에 출력된 결과를 확인할 수 있도록 시간 지연 delay(5000) 즉 5초의 여유를 주도록 한다. 잊 jd도 시간이면 출력을 확인함에 충분한 시간이다. 확인이 끝난 후 온습도를 디스플레이 할 예정이므로 lcd 출력 결과들을 lcd.clear() 명령에 의해 깨끗하게 지울 필요가 있다.
loop()에서 온습도 데이터를 읽은 후 lcd.setCursor(문자시작위치, 문자 출력 줄) 명령을 사용한다. 아울러 소수이하 첫 자리를 포함하는 정밀한 온도 출력을 위해 lcd.print(t, 1) 명령을 사용한다. 뒷 자리의 1 이 소수이하 자릿수를 의미한다.
마지막에 DHT22 온습도 센서의 샘플링 타임 간격만큼 시간 여유 delay(2000) 즉 2초를 부여한다.
LCD_DHT22_01
#include <DHT.h>;
#define DHTPIN 5 // what pin we're connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x3F,16,2);
float hum; //Stores humidity value
float temp; //Stores temperature value
void setup() {
Serial.begin(9600);
dht.begin();
delay(2000);
lcd.init();
lcd.backlight();
lcd.setCursor(2,0);
lcd.print("Hello, world!");
delay(5000);
lcd.clear();
}
void loop() {
hum = dht.readHumidity();//온도 읽기
temp= dht.readTemperature();//습도 읽기
Serial.print("Humidity: ");
Serial.print(hum,0);// 소수 이하 자리 없음
Serial.print(" %, Temp: ");
Serial.print(temp, 1);//소수 이하 1자리 허용
Serial.println(" Celsius");
lcd.setCursor(0,0);
lcd.print("temp:");
float t = temp;
lcd.print(t,1);
lcd.print(" C deg");
lcd.setCursor(0,1);
lcd.print("humidity:");
int h = hum;
lcd.print(h);
lcd.print(" % ");
lcd.println();
delay(2000);// 샘플링 간격 2초 부여
}//끝
'아두이노프로세싱 프로그래밍' 카테고리의 다른 글
아두이노 32비트 STM32 보드 설치와 붙박이 LED ON OFF (0) | 2018.03.21 |
---|---|
L239D DC모터 드라이브 IC, H브리지 모터 구동 회로, 모터 쉴드 (0) | 2018.03.21 |
다이소 양념통 스탠드어론 아두이노 DHT22 온습도 lcd 디스플레이 (0) | 2018.01.04 |
아두이노 DHT22 온습도 센서 측정 (0) | 2018.01.04 |
아두이노 DHT11 온습도 측정기 I2C인터페이스 1602 lcd 출력 (0) | 2017.12.15 |