레슨 20/31: LCD1602에 전압 표시하기
이 프로젝트는 Arduino와 I2C 인터페이스를 갖춘 LCD1602 디스플레이를 사용하여 디지털 전압계를 구축하는 방법을 보여줍니다. 가변저항기에서 아날로그 전압을 읽어 화면에 표시함으로써, 아날로그-디지털 변환, I2C 통신, LCD 제어의 필수 기술을 배우게 됩니다.
이 프로젝트는 많은 실용적인 응용 분야로 나아가는 훌륭한 발판입니다. 다음은 이를 바탕으로 구축할 수 있는 몇 가지 아이디어입니다:
- 프로젝트용 휴대용 배터리 전압 모니터 구축.
- 시각적 전압 판독 기능이 있는 간단한 전원 공급 장치 만들기.
- 태양광 패널 또는 기타 가변 전압 소스의 출력 모니터링.
- 광의존 저항기(LDR)와 같은 모든 아날로그 센서의 값을 읽을 수 있는 숫자로 표시.
이 가이드가 끝나면 구성 요소를 연결하고, 필요한 라이브러리를 구성하고, 자체 전압 디스플레이를 만드는 코드를 작성하는 방법을 명확히 이해하게 될 것입니다.
하드웨어 구성 요소
이 프로젝트를 구축하려면 다음 구성 요소가 필요합니다. 이 과정은 이러한 모든 부품이 포함된 SunFounder 3-in-1 Arduino 키트를 기반으로 합니다.
- Arduino 보드 (예: Uno)
- I2C 모듈이 있는 LCD1602 디스플레이
- 가변저항기 (10kΩ 권장)
- 점퍼 와이어
- 브레드보드
LCD1602 및 I2C 모듈 이해하기
LCD1602은 16열 2행의 널리 사용되는 영숫자 디스플레이입니다. 표준 병렬 LCD는 제어에 많은 디지털 핀이 필요합니다. 그러나 이 디스플레이에는 뒷면에 전용 I2C 모듈이 부착되어 있습니다(비디오 01:30). 이 모듈은 배선을 획기적으로 단순화하여 VCC, GND, SDA, SCL의 4개 와이어만으로 연결을 줄입니다. 이는 I2C 모듈이 브리지 역할을 하여 간단한 I2C 직렬 신호를 LCD에 필요한 병렬 신호로 변환하기 때문에 가능합니다.
이 프로젝트는 Arduino가 단 두 개의 와이어로 여러 장치와 통신할 수 있게 해주는 통신 프로토콜인 I2C 인터페이스를 사용합니다. 이는 다양한 유형의 센서와 디스플레이를 연결하는 데 필수적인 기술입니다.
배선 가이드
LCD와 가변저항기를 Arduino에 연결하는 것은 간단합니다. I2C 모듈에는 전원과 두 개의 통신 라인이 필요합니다. 가변저항기는 가변 전압 분배기 역할을 하여 와이퍼 핀의 전압을 조정할 수 있게 합니다.
다음은 상세한 배선 설정입니다:
- LCD I2C 모듈을 Arduino에 연결:
- GND를 Arduino GND에 연결 (비디오 05:38).
- VCC를 Arduino 5V에 연결 (비디오 05:47).
- SDA를 Arduino A4에 연결 (비디오 05:47).
- SCL을 Arduino A5에 연결 (비디오 05:57).
- 가변저항기를 Arduino에 연결:
- 왼쪽 핀을 Arduino 5V에 연결 (비디오 33:39).
- 가운데 핀 (와이퍼)을 Arduino A0에 연결 (비디오 33:43).
- 오른쪽 핀을 Arduino GND에 연결 (비디오 33:43).
필요한 라이브러리 설치
이 프로젝트는 I2C를 통해 LCD를 제어하기 위해 외부 라이브러리가 필요합니다. 비디오에서 사용된 라이브러리는 "Arduino Liquid Crystal I2C" 라이브러리입니다. Robojax 리소스 페이지 또는 GitHub에서 제공된 링크에서 다운로드할 수 있습니다 (비디오 06:16).
설치하려면 라이브러리를 ZIP 파일로 다운로드하세요. 그런 다음 Arduino IDE에서 Sketch > Include Library > Add .ZIP Library...로 이동하여 다운로드한 파일을 선택하세요 (비디오 06:41).
LCD의 I2C 주소 찾기
메인 코드를 업로드하기 전에 특정 LCD 모듈의 I2C 주소를 확인하는 것이 중요합니다. 이 주소는 제조업체에 따라 다를 수 있습니다. 비디오는 I2C 스캐너를 사용하여 이를 찾는 방법을 보여줍니다 (비디오 08:11).
이 스캐너는 File > Examples > Wire > i2c_scanner에서 찾을 수 있습니다. LCD를 연결한 상태에서 이 코드를 Arduino에 업로드하고 시리얼 모니터를 엽니다. 주소가 표시되며, 일반적으로 0x27 또는 0x3F입니다. 메인 코드에서 이 주소를 사용해야 합니다.
코드 설명
이 프로젝트의 코드는 아날로그 값을 읽고 표시용으로 형식을 지정하는 데 중점을 둡니다. 주요 사용자 구성 가능 부분을 살펴보겠습니다.
1. 라이브러리 포함 및 LCD 객체
이 섹션은 필요한 라이브러리를 포함하고 LCD용 객체를 생성합니다. 가장 중요한 부분은 I2C 주소로, 이전 단계에서 찾은 주소와 일치하도록 변경해야 합니다.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// 16 또는 20자 및 2 또는 4줄 디스플레이의 경우 LCD 주소를 0x27로 설정
LiquidCrystal_I2C lcd(0x27, 16, 2);#include <Wire.h>: 이 라이브러리는 Arduino에 내장되어 있으며 I2C 통신에 필요합니다.#include <LiquidCrystal_I2C.h>: 방금 설치한 라이브러리를 포함하며, LCD를 제어하는 함수를 제공합니다.LiquidCrystal_I2C lcd(0x27, 16, 2);: 이 줄은lcd라는 객체를 생성합니다. 첫 번째 매개변수인0x27은 앞서 찾은 I2C 주소입니다. 두 번째와 세 번째 매개변수는 LCD의 크기를 정의합니다: 16열과 2행입니다. 주소가 다르다면0x27을 해당 주소로 변경해야 합니다.
2. 설정 및 루프 함수
setup() 함수는 LCD를 초기화하고 백라이트를 켭니다. loop() 함수는 전압을 읽고 표시하는 핵심 로직을 포함합니다.
void setup()
{
lcd.begin();
lcd.backlight();
}
void loop()
{
int potValue = analogRead(A0);
float voltage = potValue * (5.0 / 1023.0);
// ... (LCD 표시 코드)
delay(1000);
}
lcd.begin(): LCD 인터페이스를 초기화하고 사용할 준비를 합니다.lcd.backlight(): 디스플레이의 백라이트를 켜서 텍스트를 보이게 합니다.int potValue = analogRead(A0);: 가변저항의 와이퍼에 연결된 A0 핀에서 원시 아날로그 값을 읽습니다. 이 값은 0에서 1023 사이의 정수로, 0V에서 5V의 전압을 나타냅니다.float voltage = potValue * (5.0 / 1023.0);: 이는 중요한 변환 단계입니다. 원시 ADC 값을 실제 전압 값으로 변환합니다. 공식은 원시 값에 기준 전압(5.0V)과 최대 ADC 값(1023)의 비율을 곱합니다. ADC가 전압을 직접 읽지 않고 비례하는 숫자를 읽기 때문에 이 과정이 필요합니다.
3. 전압 표시
코드는 화면을 지운 다음 두 번째 줄의 특정 위치에 전압 값을 출력합니다.
lcd.clear();
lcd.print("LCD1602 Tutorial");
lcd.setCursor (0,1); // 두 번째 줄의 시작으로 이동
lcd.print("Voltage:");
lcd.setCursor (9,1); // 두 번째 줄의 9번째 문자로 설정
lcd.print(voltage);
lcd.setCursor (13,1); // 두 번째 줄의 14번째 문자로 설정
lcd.print("V");
lcd.clear(): 화면에서 이전 텍스트를 모두 지웁니다.lcd.print("LCD1602 Tutorial"): 첫 번째 줄에 제목을 출력합니다.lcd.setCursor (0,1): 커서를 두 번째 줄의 시작으로 설정합니다. 첫 번째 매개변수는 열(0-15)이고, 두 번째는 행(0은 첫 번째 줄, 1은 두 번째 줄)입니다.lcd.print(voltage): 계산된 전압 값을 출력합니다.float변수는 기본적으로 소수점 두 자리까지 출력됩니다.lcd.setCursor (13,1): 숫자 바로 뒤에 "V" 문자를 배치하기 위해 두 번째 줄의 13번째 열로 커서를 이동합니다.
실시간 프로젝트 시연
코드를 업로드하면 LCD 첫 번째 줄에 "LCD1602 Tutorial"이 표시됩니다. 두 번째 줄에는 "Voltage:"와 현재 전압 값이 표시됩니다. 가변저항의 손잡이를 돌리면 표시된 전압이 약 0.00V에서 5.00V까지 실시간으로 변하는 것을 볼 수 있습니다(비디오 35:25 참조).
이 프로젝트는 원시 아날로그 신호를 명확하고 사람이 읽을 수 있는 값으로 변환하는 방법의 완벽한 예입니다. 여기서 배운 기술은 향후 사용할 다른 아날로그 센서에도 직접 적용할 수 있습니다.
비디오는 LCD에 텍스트 표시, 스크롤, 사용자 정의 문자 만들기 등 다른 관련 주제도 다룹니다.
이 비디오의 관련 프로젝트
챕터
- [00:00] LCD1602 소개 및 프로젝트 개요
- [01:30] LCD1602 하드웨어 및 I2C 모듈 설명
- [04:06] 점퍼로 I2C 주소 설정
- [05:28] LCD1602 배선도
- [07:31] 기본 텍스트 표시를 위한 코드 설명
- [11:10] 깜빡이는 커서 예제 시연
- [13:46] 사용자 정의 문자 만들기 및 사용
- [18:51] 직렬 표시 예제 사용
- [23:16] LCD에서 텍스트 스크롤
- [26:13] DHT11의 온도 및 습도 표시
- [33:00] 가변저항에서 전압 읽기 및 표시
- [35:56] 초음파 센서에서 거리 표시
/*
Lesson 20/31: Displaying voltage on LCD1602
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 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/>.
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Set the LCD address to 0x27 for a 16 or 20 chars and 2 or 4 lines display
LiquidCrystal_I2C lcd(0x27, 16, 2);
int count =700;
void setup()
{
// Robojax code for LCD with I2C
// initialize the LCD,
lcd.begin();
// Turn on the blacklight and print a message.
lcd.backlight();
// Robojax code for LCD with I2C
}
void loop()
{
int potValue = analogRead(A0);
float voltage = potValue * (5.0 / 1023.0);
//start of loop Robojax code for LCD with I2C
lcd.clear();
lcd.print("LCD1602 Tutorial");
lcd.setCursor (0,1); // go to start of 2nd line
lcd.print("Voltage:");
lcd.setCursor (9,1); // set to line 2 char 9
lcd.print(voltage);
lcd.setCursor (13,1); // set to line 2 char 14
lcd.print("V");
//lcd.setCursor (3,3); // set to line 4 character 4
//lcd.print("Text in line 4");
delay(1000);
count++;
//end of loopcode Robojax code for LCD with I2C
}
필요할 수 있는 것들
-
아마존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