아두이노 - LCD | Arduino - LCD

이 아두이노 LCD 튜토리얼에서는 LCD(액정 디스플레이)를 아두이노 보드에 연결하는 방법을 배워보겠습니다. LCD는 정보를 표시하기 위해 전자 프로젝트에서 매우 인기 있고 널리 사용됩니다. LCD에는 여러 종류가 있습니다. 이 튜토리얼에서는 예로서 LCD 16x2(16 열과 2 행)를 다룹니다. 다른 LCD도 비슷합니다.

※ NOTE THAT:

배선을 간단하게 하고 싶다면, LCD I2C를 대신 사용할 수 있습니다. LCD I2C 자습서를 참고하세요.

준비물

1×Arduino Uno Amazon
1×USB 2.0 cable type A/B 쿠팡 | Amazon
1×LCD Amazon
1×Potentiometer Amazon
1×Breadboard 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Optional) 9V Power Adapter for Arduino Amazon
1×(Recommended) Screw Terminal Block Shield for Arduino Uno 쿠팡 | Amazon
1×(Optional) Transparent Acrylic Enclosure For Arduino Uno Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

LCD 16x2에 대하여

핀배치

LCD Pinout

LCD는 최대 16개의 핀을 가지고 있습니다. 가장 일반적인 사용에서는 모든 핀을 사용하지 않습니다.

LiquidCrystal 라이브러리 지원을 받아 이러한 핀의 의미를 몰라도 LCD를 사용할 수 있습니다. 그러나 궁금하거나 자세히 알고 싶다면, 이 핀들과 그 기능을 살펴봅시다:

  • GND 핀: GND(0V)에 연결해야 합니다.
  • VCC 핀: LCD의 전원 공급 장치로, VCC(5V)에 연결해야 합니다.
  • Vo(LCD 대비) 핀: LCD의 대비와 밝기를 제어하며, 5V(최대 대비 및 밝기)에 연결하거나, 대비 및 밝기를 조절하기 위해 가변 저항기에 연결할 수 있습니다.
  • RS(레지스터 선택) 핀: LCD에 보낼 두 종류의 데이터가 있습니다: 명령( LCD 제어)과 데이터. 이 두 가지는 같은 데이터 버스에서 전송됩니다. RS 핀은 데이터 버스 상의 데이터가 명령인지 데이터인지 LCD에 알립니다.
    • LCD를 제어하기 위한 명령을 보내려면, RS 핀을 LOW(예: 특정 위치로 커서를 설정, 디스플레이 지우기 등)로 설정해야 합니다.
    • LCD에 표시할 데이터를 보내려면, RS 핀을 HIGH로 설정해야 합니다.
  • R/W(읽기/쓰기) 핀: READ 모드와 WRITE 모드를 선택하기 위해 사용됩니다.
    • LCD에서 데이터를 읽으려면, 이 핀을 HIGH로 설정해야 합니다.
    • LCD에 데이터를 보내려면, 이 핀을 LOW로 설정해야 합니다. 우리는 이 LCD를 출력 장치로만 사용하기 때문에, 이 핀을 LOW로 연결할 것입니다.
  • EN(활성화) 핀: LCD를 활성화하기 위해 사용됩니다. LCD를 활성화하려면 HIGH, 비활성화하려면 LOW입니다.
  • D0-D7(데이터 버스) 핀: 아두이노와 LCD 사이에서 데이터와 명령을 전달합니다. 데이터를 전송하는 두 가지 모드가 있습니다: 4비트 모드와 8비트 모드.
  • A-K(양극 & 음극) 핀: LCD 백라이트에 전원을 공급하는 데 사용됩니다. A 핀은 VCC에 연결해야 합니다. K 핀은 GND에 연결해야 합니다.

4비트 모드와 8비트 모드

  • **8비트 모드**: 바이트의 8비트가 D0에서 D7까지의 핀에서 동시에 전송됩니다.
  • **4비트 모드**: 바이트의 8비트가 두 번에 걸쳐 전송되며, 각각의 시간에 D4에서 D7까지의 핀에 4비트씩 전송됩니다.

8비트 모드는 4비트 모드보다 빠르지만 4비트 모드보다 더 많은 핀을 사용합니다. 모드 선택은 LCD에 명령을 보내 초기화 과정에서 수행됩니다.

이 튜토리얼은 가장 널리 사용되는 4비트 모드를 사용합니다.

이 모드에서, LCD의 핀들:

  • 6개의 핀(RS, EN, D4, D5, D6, 그리고 D7)이 아두이노의 핀에 연결되어 있습니다.
  • 4개의 핀(D0, D1, D2, 그리고 D3)은 연결되어 있지 않습니다.
  • 나머지 6개의 핀은 GND/VCC 또는 포텐쇼미터에 연결되어 있습니다.

4비트 모드에서의 LCD 핀 테이블

LCD PINCONNECTED TO
01GNDGND
02VCC5V
03Vo5V or potentiometer's pin
04RSAn Arduino's pin
05R/WGND
06ENAn Arduino's pin
07D0NOT connected
08D1NOT connected
09D2NOT connected
10D3NOT connected
11D4An Arduino's pin
12D5An Arduino's pin
13D6An Arduino's pin
14D7An Arduino's pin
15A5V
16KGND

LCD 좌표

LCD 16x2는 16개의 열과 2개의 행을 포함합니다. 열과 행은 0부터 인덱스됩니다.

Arduino LCD Coordinate

작동 원리

이 섹션에는 압도될 수 있는 고급 정보가 포함되어 있습니다. 내용에 대해 확신이 없다면 건너뛰어 다음 섹션으로 이동하십시오.

LCD에 표시할 데이터를 보내는 과정:

  1. 아두이노는 데이터 레지스터를 선택하기 위해 RS 핀을 HIGH로 설정합니다.
  2. 아두이노는 D4 → D7 핀(데이터 버스)에 데이터를 작성합니다.
  3. LCD는 데이터 버스에서 데이터를 수신합니다.
  4. RS 핀이 HIGH이기 때문에, LCD는 수신된 데이터를 데이터 저항기에 저장합니다. 그런 다음, LCD는 화면에 데이터를 표시합니다.

LCD(예: LCD 깜빡임, 커서를 특정 위치로 설정, 화면 지우기 등)를 제어하기 위한 명령을 전송하는 과정:

  1. 아두이노는 RS 핀을 LOW로 설정합니다 (명령 레지스터 선택).
  2. 아두이노는 D4 → D7 핀에 명령을 작성합니다 (데이터 버스).
  3. LCD가 데이터 버스에서 데이터를 받습니다.
  4. RS 핀이 LOW이기 때문에, LCD는 받은 데이터를 명령 레지스터에 저장합니다. 그런 다음, LCD는 명령의 값에 따라 동작을 수행합니다.

아두이노 - LCD

LCD 제어는 상당히 복잡한 작업입니다. 다행히도, LiquidCrystal 라이브러리 덕분에 이 라이브러리는 LCD 제어 과정을 단순화해주므로 낮은 수준의 명령어를 알 필요가 없습니다. 단지 아두이노를 LCD에 연결하고 라이브러리의 함수를 사용하기만 하면 됩니다. LCD 사용이 식은 죽 먹기가 됩니다.

선연결

Arduino LCD Wiring Diagram

이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.

LCD 프로그래밍 방법

라이브러리를 포함하세요:

#include <LiquidCrystal.h>

Arduino의 핀과 연결된 6개의 LCD 핀(RS, EN, D4, D4, D6, D7)을 정의하세요.

const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5;

라이브러리의 장점 중 하나는 Arduino의 핀이 LCD에 연결된 것이 설정 가능하다는 것입니다. 이는 Arduino를 LCD 및 기타 센서/액추에이터와 연결할 때 유연성을 제공합니다.

LiquidCrystal 객체를 선언하십시오:

LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);

LCD의 열과 행의 수를 설정하십시오.

lcd.begin(16, 2);

원하는 위치(column_index, row_index)로 커서를 이동하세요.

lcd.setCursor(column_index, row_index);

LCD에 메시지를 출력하세요.

lcd.print("Hello World!");

우리가 LCD로 할 수 있는 것들이 더 많습니다 (LCD로 더 많은 것을 하기 참조).

※ NOTE THAT:

아두이노 코드에서 연결된 핀을 지정하기만 하면, 아두이노의 아무 여섯 핀이나 LCD에 연결할 수 있습니다.

아두이노 코드

#include <LiquidCrystal.h> // LCD 핀 <--> Arduino 핀 const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5; LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); void setup() { lcd.begin(16, 2); // 열과 줄의 수를 설정한다 lcd.setCursor(0, 0); // 커서를 (0, 0)으로 이동한다 lcd.print("Arduino"); // (0, 0)에 메시지를 출력한다 lcd.setCursor(2, 1); // 커서를 (2, 1)으로 이동한다 lcd.print("GetStarted.com"); // (2, 1)에 메시지를 출력한다 } void loop() { }

사용 방법

  • 위의 코드를 복사하고 Arduino IDE로 열기
  • 아두이노에 코드를 업로드하기 위해 Arduino IDE에서 Upload 버튼을 클릭하세요.
  • LCD에서 결과를 확인하세요.
Arduino display text on LCD

텍스트와 위치를 수정해보세요.

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

사용자 정의 캐릭터

lcd.print() 함수는 ASCII 문자만 지원합니다. 특수 문자나 심볼(예: 하트, 앵그리 버드)을 표시하고 싶다면 아래 문자 생성기를 사용해야 합니다.

LCD 16x2는 32개의 문자를 표시할 수 있습니다(2행 16열). 각 문자는 40개의 픽셀로 구성됩니다(8행 5열).

Arduino LCD 16x2 Pixel

캐릭터 생성기는 캐릭터(40 픽셀)를 나타냅니다. 단지 다음 단계들을 수행하면 됩니다:

Click on each pixel to select/deselect


Copy below custom character code
Replace the customChar[8] in the below code
#include <LiquidCrystal.h> // LCD 핀 <--> Arduino 핀 const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5; LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; void setup() { lcd.begin(16, 2); // 열과 행의 숫자를 설정 lcd.createChar(0, customChar); // 새로운 커스텀 문자 생성 lcd.setCursor(2, 0); // 커서를 (2, 0)으로 이동 lcd.write((byte)0); // (2, 0)에 커스텀 문자 출력 } void loop() { }

LCD에 표시된 결과:

LCD custom character

다양한 맞춤형 캐릭터들

우리는 최대 8개의 사용자 정의 문자를 생성할 수 있습니다(0부터 7까지 인덱싱됨). 아래 예제는 세 문자를 생성하고 표시합니다.

#include <LiquidCrystal.h> // LCD 핀 <--> Arduino 핀 const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5; LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); byte customChar0[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; byte customChar1[8] = { 0b00100, 0b01110, 0b11111, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100 }; byte customChar2[8] = { 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b11111, 0b01110, 0b00100 }; void setup() { lcd.begin(16, 2); // 컬럼 및 행 수 설정 lcd.createChar(0, customChar0); // 새로운 사용자 정의 문자 생성 (인덱스 0) lcd.createChar(1, customChar1); // 새로운 사용자 정의 문자 생성 (인덱스 1) lcd.createChar(2, customChar2); // 새로운 사용자 정의 문자 생성 (인덱스 2) lcd.setCursor(2, 0); // 커서를 (2, 0)으로 이동 lcd.write((byte)0); // (2, 0)에 사용자 정의 문자 0 출력 lcd.setCursor(4, 0); // 커서를 (4, 0)으로 이동 lcd.write((byte)1); // (4, 0)에 사용자 정의 문자 1 출력 lcd.setCursor(6, 0); // 커서를 (6, 0)으로 이동 lcd.write((byte)2); // (6, 0)에 사용자 정의 문자 2 출력 } void loop() { }

LCD에서의 결과:

LCD multiple custom characters

요약: LCD에서 사용자 정의 문자 사용 방법

  • 위의 캐릭터 생성기를 사용하여 사용자 지정 캐릭터의 이진 코드를 생성하세요.
  • 사용자 지정 캐릭터의 이진 코드를 선언하세요 (위 단계에서 복사).
byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 };

setup() 함수에서 사용자 정의 문자를 생성하고 인덱스 값(0에서 7까지)에 할당하세요.

lcd.createChar(index, customChar);

언제 어디서나 (setup() 또는 loop() 함수에서) 사용자 정의 문자를 LCD에 출력하세요.

lcd.setCursor(column, row); // 커서를 원하는 위치로 이동 lcd.write((byte)index); // 원하는 위치에 사용자 지정 문자를 출력

도전해보세요

다음 프로젝트 중 하나를 수행하기 위해 LCD를 사용하세요:

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!