레슨 20/31: DHT11의 온도와 습도를 LCD 화면에 표시하기
이 튜토리얼은 DHT11 온습도 센서와 I2C 지원 LCD1602 디스플레이를 결합하여 컴팩트한 환경 모니터링 스테이션을 만드는 방법을 보여줍니다. 시리얼 모니터에서 원시 센서 데이터를 읽는 대신, 16x2 문자 화면에 실시간 온도와 습도 판독값을 표시하는 방법을 배우게 됩니다. 이 프로젝트는 데스크톱 날씨 스테이션, 소형 온실 모니터를 만들거나 모든 홈 자동화 프로젝트에 로컬 판독 장치를 추가하는 데 이상적입니다. I2C 인터페이스는 배선을 단순화하여 초보자도 쉽게 접근할 수 있고 숙련된 메이커에게는 빠르게 추가할 수 있는 프로젝트입니다.
이 지식을 활용하여 만들 수 있는 몇 가지 실용적인 아이디어는 다음과 같습니다:
- 현재 실내 상태를 보여주는 데스크톱 날씨 스테이션.
- 파충류 또는 식물 테라리움용 컴팩트 디스플레이.
- 서버실 또는 작업장 환경용 로컬 판독 장치.
- 더 복잡한 홈 자동화 시스템의 기본 모듈.
하드웨어 및 부품
이 프로젝트를 만들려면 다음 부품이 필요합니다:
- Arduino Uno (또는 호환 보드)
- I2C 인터페이스 모듈이 있는 LCD1602 디스플레이
- DHT11 온습도 센서
- 4.7kΩ 또는 10kΩ 풀업 저항 (베어 DHT11 센서를 사용하는 경우)
- 점퍼 와이어
- 브레드보드 (선택 사항, 더 쉬운 연결을 위해)
I2C LCD1602 이해하기
LCD1602은 16열 2행의 일반적인 문자 디스플레이입니다. 디스플레이 뒷면에 납땜된 "I2C" 모듈이 단순함의 핵심입니다. 이 모듈은 LCD의 병렬 인터페이스를 직렬 I2C 인터페이스로 변환하며, 데이터용 2개 와이어(SDA 및 SCL)와 전원용 2개 와이어(VCC 및 GND)만 필요합니다. 이렇게 하면 Arduino에서 필요한 핀 수가 크게 줄어들어 다른 센서와 액추에이터에 더 많은 핀을 사용할 수 있습니다. 이 모듈에는 텍스트가 보이도록 하는 데 중요한 디스플레이 대비를 조정하는 소형 가변 저항기도 포함되어 있습니다. 모듈의 I2C 주소는 보드의 작은 납땜 점퍼(A0, A1, A2)를 사용하여 변경할 수 있으므로 여러 I2C 장치가 동일한 버스에서 공존할 수 있습니다.
배선 가이드
아래 다이어그램과 같이 부품을 연결하십시오. I2C LCD는 Arduino의 I2C 핀을 사용하고 DHT11 센서는 디지털 핀을 사용합니다.
LCD1602-I2C의 경우:
- VCC를 Arduino 5V에 연결
- GND를 Arduino GND에 연결
- SDA를 Arduino A4에 연결
- SCL을 Arduino A5에 연결
DHT11 센서의 경우:
- VCC (핀 1)을 Arduino 5V에 연결
- Data (핀 2)를 Arduino 디지털 핀 2에 연결 (5V에 10kΩ 풀업 저항 사용)
- NC (핀 3) - 연결 안 함
- GND (핀 4)를 Arduino GND에 연결
(비디오 25:16 부분)
라이브러리 설정
이 프로젝트에는 두 개의 라이브러리가 필요합니다. Wire.h 라이브러리는 표준 Arduino 설치의 일부입니다. LiquidCrystal_I2C 라이브러리와 dht11 라이브러리를 설치해야 합니다. 비디오에서 설치 방법을 보여줍니다. 라이브러리는 비디오 설명의 링크 또는 Robojax 웹사이트에서 다운로드할 수 있습니다. 다운로드 후 Arduino IDE에서 Sketch > Include Library > Add .ZIP Library...로 이동하여 다운로드한 파일을 선택하여 설치할 수 있습니다. (비디오 06:16 부분)
LCD의 I2C 주소 찾기
디스플레이를 사용하려면 먼저 I2C 주소를 확인해야 합니다. 가장 일반적인 주소는 0x27 또는 0x3F이지만 다를 수 있습니다. 이를 찾으려면 I2C 스캐너 스케치를 사용할 수 있습니다. 이는 I2C 버스를 스캔하고 찾은 주소를 시리얼 모니터에 보고하는 간단한 프로그램입니다. 스캐너 코드를 업로드하고 9600 보드에서 시리얼 모니터를 열면 LCD의 주소가 표시됩니다. (비디오 08:11 부분)
코드 설명
이 섹션에서는 코드의 주요 사용자 구성 가능 부분을 설명합니다. 전체 프로그램은 기사 아래에서 다운로드할 수 있습니다.
코드는 필요한 라이브러리를 포함하고 사용된 핀과 객체를 정의하는 것으로 시작합니다.
// GetHub의 헤더 파일: https://github.com/adidax/dht11
#include <dht11.h>
dht11 DHT11; // DHT11 객체 생성
#define dhtpin 2 // DHT11에 연결할 핀 설정
// LCD1602-I2C 설정 시작
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// 16자 2줄 디스플레이의 LCD 주소를 0x3F로 설정
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// LCD1602-I2C 설정 끝
설정에 맞게 구성해야 하는 가장 중요한 줄은 다음과 같습니다:
#define dhtpin 2: DHT11 센서의 데이터 핀에 연결된 Arduino 핀을 정의합니다. 다른 핀을 사용하는 경우 숫자2를 변경하십시오.LiquidCrystal_I2C lcd(0x3F, 16, 2);: 이 줄은 LCD 객체를 생성합니다. 첫 번째 매개변수인0x3F는 이전 단계에서 찾은 I2C 주소입니다.16과2는 디스플레이의 열과 행 수를 정의합니다. 스캐너에서 다른 주소(예:0x27)를 찾은 경우 주소를 업데이트하십시오.
이 코드는 사용자 정의 함수인 getTemp()를 사용하여 온도를 읽고 다른 단위로 변환합니다. 이는 코드를 다양한 애플리케이션에 재사용할 수 있게 만드는 강력한 기능입니다.
float getTemp(char type) {
float temp = (float)DHT11.temperature;//온도 가져오기
if(type =='F')
{
return temp * 1.8 + 32;// 화씨로 변환
}else if(type =='K')
{
return temp + 274.15;// 켈빈으로 변환
}else{
return temp;
}
}
이 함수를 사용하려면 원하는 단위를 나타내는 단일 문자 인수와 함께 호출합니다. 예를 들어, getTemp('C')는 섭씨 온도를 반환하고, getTemp('F')는 화씨 온도를, getTemp('K')는 켈빈 온도를 반환합니다. 이 함수는 DHT11 센서에서 원시 온도를 읽고 필요한 변환 공식을 적용합니다. 이를 통해 센서 읽기 로직을 다시 작성하지 않고도 메인 loop()에서 표시 단위를 쉽게 변경할 수 있습니다. 메인 루프는 lcd.setCursor() 및 lcd.print() 함수를 사용하여 화면에 값이 나타나는 위치를 제어하면서 온도와 습도를 LCD에 출력합니다.
도 기호 표시하기
표준 HD44780 LCD 문자 세트에는 전용 도 기호(°)가 포함되어 있지 않습니다. 이를 표시하려면 LCD의 ROM에서 문자의 십진수 값과 함께 lcd.write() 함수를 사용해야 합니다. 도 기호의 경우 이 값은 223입니다. 코드는 lcd.print((char)223);을 사용하여 온도 값 뒤에 기호를 출력함으로써 이를 보여줍니다. (비디오 30:16에서)
실시간 프로젝트 시연
코드가 업로드되면 디스플레이는 시작 메시지를 표시한 후 지우고 현재 온도와 습도를 표시합니다. 디스플레이의 첫 번째 줄에는 "LCD1602 DHT11" 텍스트가 표시되고, 두 번째 줄에는 섭씨 온도, 도 기호 및 "C", 그 다음 화씨 온도, 도 기호 및 "F"가 표시됩니다. 습도 값은 시리얼 모니터에 출력됩니다. 비디오의 시연은 센서를 잡고 있을 때 디스플레이가 0.5초마다 업데이트되어 주변 환경 조건을 정확히 반영하는 것을 보여줍니다. (비디오 29:42에서)
가변 저항기의 전압을 LCD에 표시하는 방법은 Lesson 20/31: Displaying voltage on LCD1602에서 다룹니다.
동일한 LCD를 사용하여 초음파 센서의 거리를 표시하는 방법은 Lesson 20/31: Using LCD1602 with Arduino display temperature, voltage and distance | Robojax에서 다룹니다.
이 비디오의 관련 프로젝트
- Lesson 20/31: Using LCD1602 with Arduino display temperature, voltage and distance | Robojax
- Lesson 20/31: Displaying voltage on LCD1602
챕터
- [00:00] LCD1602 소개 및 프로젝트 개요
- [01:30] LCD1602 하드웨어 및 I2C 모듈 설명
- [02:47] LCD 대비 조정
- [03:14] LCD 핀아웃 및 I2C 주소 구성
- [05:28] LCD1602 배선도
- [06:16] LiquidCrystal_I2C 라이브러리 설치
- [08:11] 스캐너로 I2C 주소 찾기
- [09:28] LCD에 텍스트를 출력하는 기본 코드
- [11:10] 예제: 깜빡이는 커서 및 사용자 정의 문자
- [13:46] 사용자 정의 문자 생성 및 사용
- [18:51] 시리얼 표시 예제
- [23:16] LCD에서 텍스트 스크롤
- [24:36] DHT11 센서 코드와 LCD 결합
- [30:16] 도 기호 표시
- [32:03] 온도에서 소수점 제거
- [33:00] 가변 저항기의 전압을 LCD에 표시
- [35:56] 초음파 센서의 거리 표시
/*
Lesson 20/31: Displaying Temperature and humidity from DHT11 on LCD screen
Get this code and watch video Download and resource page https://robojax.com/RJT603
YouTube video https://www.youtube.com/watch?v=NXAswOc_2zg
* This is the Arduino code for DHT11 module to read temperature and humidity
* This code can display temperature in:
* C is used to get Celsius
* F is used to get Fahrenheit
* K is used for Kelvin
* *
* Written by Ahmad Shamshiri for Robojax
* on Jan 04, 2018
* Robojax.com
Please watch video instruction here https://youtu.be/0XMLnCYkvbE
This code is available at http://robojax.com/course1/?vid=lecture11
with over 100 lectures Free On YouTube Watch it here http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// header file from GetHub: https://github.com/adidax/dht11
#include <dht11.h>
dht11 DHT11; // create object of DHT11
#define dhtpin 2 // set the pin to connect to DHT11
// start of settings for LCD1602-I2C
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x3F for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x3F, 16, 2);
// end of settings for LCD1602-I2C
void setup() {
Serial.begin(9600);// setting up serial monitor
// initialize the LCD,
lcd.begin();
// Turn on the blacklight and print a message.
lcd.backlight();
lcd.clear();
lcd.setCursor (0,0); //
lcd.print("DHT11 Sensor");
delay(2000);
}
void loop() {
//Robojax Step By Step Arduino Course YouTube Watch it here http://robojax.com/L/?id=338
DHT11.read(dhtpin);// initialize the reading
int humidity = DHT11.humidity;// get humidity
lcd.clear();// clear previous values from screen
lcd.setCursor (0,0); //character zero, line 1
lcd.print("LCD1602 DHT11"); // print text
// print distance in degrees C
lcd.setCursor (0,1); //character 0, line 2
lcd.print(getTemp('C'));// print Temperature Celsius
lcd.setCursor (4,1); //character 5, line 2
lcd.print((char)223);// print degree
lcd.setCursor (5,1); //character 6, line 2
lcd.print("C");// print C
// print distance degrees F
lcd.setCursor (7,1); //character 8, line 2
lcd.print(getTemp('F'));// print distance in cm
lcd.setCursor (13,1); //character 14, line 2
lcd.print((char)223);// print degree
lcd.setCursor (14,1); //character 16, line 2
lcd.print("F");// print F
//code for Robojax.com video
Serial.print(getTemp('C'));
Serial.print("C ");
Serial.print(getTemp('F'));
Serial.print("F ");
Serial.print(getTemp('K'));
Serial.print("K ");
Serial.print(" humidity:");
Serial.print (humidity);
Serial.print("% ");
Serial.println();
delay(500);
}
/*
* getTemp(char type)
* type character of upper case
* C is used to get Celsius
* F is used to get Fahrenheit
* K is used for Kelvin
*/
float getTemp(char type) {
//Robojax Step By Step Arduino Course YouTube Watch it here http://robojax.com/L/?id=338
float temp = (float)DHT11.temperature;//get temp
if(type =='F')
{
return temp * 1.8 + 32;// convert to Fahrenheit
}else if(type =='K')
{
return temp + 274.15;// convert to Kelvin
}else{
return temp;
}
}
필요할 수 있는 것들
-
아마존SunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
아마존
-
아마존
-
아마존
자원 및 참고자료
-
문서화Documentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
외부Purchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
파일📁
아두이노 라이브러리 (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB
사용자 매뉴얼
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB