본문 바로가기
Arduino(아두이노) 키트 강좌

Step.19-Arduino Uno 로 DHT11 온습도센서를 이용해 실내 온습도 1602LCD로 출력하기

by 오마이엔지니어 2015. 6. 24.
반응형

Arduino Uno 로 DHT11 온습도 센서를 이용해 1602 캐릭터 LCD에 실내 온습도를 출력하는 프로젝트 입니다
DHT11 온습도 센서는 온도가 증가함에 따라 저항이 감소하는 부온도계지수 NTC (Negative Temperature Coefficient) 타입 의
습도에 따라 저항이 변하는 정전용량 습도센서 기능이 있는 온습도 센서 입니다
측정 범위는 온도 0~50℃, 습도 20~90% RH 입니다

DHT11 온습도 센서와 함께 16개의 문자를 2줄로 표현하는 1602 캐릭터 LCD를 사용해서 실내의 온습도를 LCD에 출력해 보겠습니다

 

 

사용된 부품

Arduino Uno R3 (Italy)
DHT11 온습도 센서

브래드 보드
1602 Character LCD - (QAPASS 1602A)
1602 Character LCD - (LC1621-SMLYH6)

1602 Character LCD - (SD1602VBWB-XA)

가변저항 10K (Ohm)
저항 10K (Ohm)

점퍼케이블

 

사용된 키트

Arduino Starter kit (클릭)
지니어스 키트 Starter Pack (클릭)


1602 LCD 핀맵 확인-LC1621-SMLYH6

 


1602 LCD 핀맵 확인-SD1602VBWB-XA

 

 

 

 

 

 

 


구성 배선도-LC1621-SMLYH6

 



구성 배선도-SD1602VBWB-XA

 


 

 

 

사용된 예제소스  

DHT11 LCD.txt


사용된 라이브러리

DHT11.zip

DHT11 온습도 센서는 라이브러리를 추가해 주어야 합니다
라이브러리 추가 방법은 Arduino IDE 설치하기 포스팅을 참조해 주세요


/*
 제목  : 온습도 센서로 실내 온도와 습도 학인하기
 내용  : 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);
}

주의사항

배선시 LCD의 핀맵을 잘 확인 해야 합니다

SD1602VBwB-XA 의 핀맵은 위 배선도에서 확인할 수 있듯이 15, 16, 1, ........ 14 순으로 되어 있습니다

헷갈리지 않도록 주의 합시다


백라이트는 들어 왔는데 문자 출력이 안되는 경우 가변저항을 돌려서 조정할 수 있습니다

사용된 예제소스에서 "LiquidCrystal.h" 이라는 라이브러리를 추가하는 명령어가 있는데

LiquidCrystal.h 은 아두이노 IDE를 설치하면 기본으로 포함되어 있습니다

이점 숙지하고 넘어 가도록 하겠습니다

 

 

프로젝트 동영상



 

DHT11 LCD.txt
0.0MB
DHT11.zip
0.0MB
반응형

댓글