아두이노 코딩-37: DHT11 온습도 데이터 non-i2c 1602 lcd 코딩

codingart(66)
Published in
#kr
Words
521
Reading
3 min
Listen
Play
8y

noname02.png

아두이노 우노에서 2줄짜리 lcd에 문자와 숫자를 출력해보자. 1602 lcd 출력용 PCB는 다리 핀 수(16개)가 너무 많아 지나치게 많은 점퍼선 와이어링 부담으로 인해 많은 사용자를 쫄게 하는 면이 있는 것이 사실이나 한번 정도 해봐야 하는 통과 의례로 생각하자. 이 블로그에서 제시하는 요령을 잘 따르기만 하면 사실 대단히 쉬운 편이다.

위는 배선도로 표현해 보았지만 배선이 많은 경우에는 오히려 구두 설명이 훨씬 더 정확한 배선 작업에 도움이 된다. 물론 배선 수가 많은 것은 사실이나 규칙이 있기 때문에 그냥 규칙대로 배선하면 된다. 아울러 제공하는 사진에서 배선 색을 잘 보고 약간의 주의를 기울이도록 하자.

참고로 위 배선도에서는 아두이노 우노에 온습도 센서 DHT11의 배선을 직접 3V3 과 GND에서 한 것으로 되어 있으나 사진에서는 빵판의 5V 와 GND에 하였음을 참조하자. DHT11 은 5V 와 3V3 겸용이기 때문에 별 차이는 없다.

noname03.png

아래의 1602 lcd 핀 배선을 설명하기로 하자.

noname05.png

아두이노의 0V 와 5V핀으로부터 점퍼선을 빵판에 설치 후 GND(VSS) 와 Vcc(VD0)는 0V 와 5V 빵판에다 배선한다.
Contrast adjust는 lcd 의 배경과 출력 내용과의 밝기 대비를 조절한다. 가변 저항의 양단에 5V를 걸어준 상태에서 손잡이를 돌리면 가운데 배선에서 0∼5V 사이의 전압이 출력되어 lcd 화면 밝기가 조절된다.

noname04.png

lcd 출력을 위한 코딩의 헤더 부분에 2개의 라이브러리를 사용하고 있음에 주목하자, 만약 DTH11 라이브러리가 설치되어 있지 않다면 이전에 포스트 된 블로그를 참조하여 읽어보고 설치하기 바란다.

초보자를 위한 아두이노 코딩 입문-12: Adafruit DTH11 센서를 이용한 온습도 모니터링
https://steemit.com/kr/@codingart/11-adafruit-dth11

헤더 부분의 코드 중 빨간색 친 클라스 명령을 보면서 나머지 배선을 설명하자.
RS는 0 이면 명령(Instruction)을 수행하고 1이면 데이터(Data)를 처리한다. 클라스 명령 즉 lcd()에서 RS 핀 번호는 아두이노의 12를 설정해 두면 된다.

Read/Write Select에 LOW 값을 설정하면 Write 상태가 되며 HIGH 값을 설정하면 Read 상태가 된다. lcd 출력은 Write 모드이므로 핀을 GND에 연결한다.

lcd Read/Write를 위해서는 Enable signal 핀이 설정되어야 한다. 마찬가지로 클라스 명령 즉 lcd()에서 아두이노 의 핀 번호 11번을 지정해 줄 필요가 있다.

아울러 DB0,DB1,⚫⚫⚫,DB7까지의 문자를 출력하기 위한 lcd의 데이터 핀들은 8핀을 모두 다 사용하는 방법과 DB4,DB5,DB6,DB7 4핀만을 사용하는 방법이 있다. 여기서는 4핀만을 사용하는바 아두이노의 디지털 데이터 핀 D2,D3,D4,D5 과 배선하도록 한다.

lcd 출력을 위한 코딩 단계에서 LiquidCristal.h 라이브러리가 필요하다. 스케치 탭의 라이브러리 추가 메뉴의 라이브러리 관리 메뉴에서 다음과 같이 LiquidCrystal 이라는 명칭으로 검색하면 이미 이 라이브러리가 깔려 있는지 여부가 확인된다.

noname06.png

LiquidCrystal Built-in ⚫⚫⚫이라는 메시지가 뜨는 것으로 보아서 이미 아두이노 편집기 설치 시에 포함되어 있음을 알 수 있다.

noname07.png

그렇다면 마지막으로 스케치 탭에서 라이브러리를 클릭하여 메뉴에서 직접 확인하도록 한다.

noname08.png

코드를 저장 후 컴파일 업로딩하자.
이때 주의할 점은 lcd 오른 쪽의 백라이트가 lcd 화면에 아무것도 없이 그냥 시퍼렇커너 또는 초록빛 바탕색일 때가 있다. 그렇다고 고장이 난 것은 절대 아니다. 왜 가변 저항을 설치했겠는가? 돌려 보라고 있는 것이다. 적절히 돌리면 문자 출력을 볼 수 있을 것이다.

이런 방식의 lcd 배선이 다소 배선 부담이 되기 때문에 lcd로부터 단지 4가닥의 배선이 나오는 I2C 인터페이스 lcd 배선을 많이 사용하는 편이다.

“Welcome Steemit!” 는 코드는 lcd 디스플레이 체크를 위한 가장 간단한 코드이다. 5초 후 화면을 지우고 온습도 데이터 출력으로 넘어간다.

noname09.png

//lcd_DHT11_01

#include <DHT11.h>
#include <LiquidCrystal.h>
int pin= 6;
DHT11 dht11(pin);
LiquidCrystal lcd(12,11,5,4,3,2);

void setup() {
Serial.begin(9600);
lcd.begin(16,2);
lcd.print(" Welcome Steemit! ");
delay(5000);
lcd.clear();
}

void loop() {
int err;
float temp, humi;
if((err=dht11.read(humi, temp))==0) {
lcd.setCursor(0,0);
lcd.print("temp:");
int t = temp;
lcd.print(t);
lcd.print(" C deg");

lcd.setCursor(0,1);
lcd.print("humidity:");
int h = humi;
lcd.print(h);
lcd.print(" %   ");
lcd.println();

}
else {
lcd.println();
lcd.print("Error No :");
lcd.print(err);
lcd.println();
}
delay(20000);
}//끝

아두이노 코딩-37: DHT11 온습도 데이터 non-i2c 1602 lcd 코딩 | Ecency