카테고리 없음

Arduino - LCD

기하 2021. 8. 16. 12:55

이 Arduino LCD 튜토리얼에서는

LCD(Liquid Crystal Display)를 Arduino 보드에 연결하는 방법을 배웁니다. 

LCD는 정보 표시를 위한 전자 프로젝트에서 매우 대중적이고 널리 사용됩니다. 

LCD에는 많은 종류가 있습니다. 

이 자습서에서는 LCD 16x2(16열 및 2행)를 예로 사용합니다. 

다른 LCD도 비슷합니다.

 

※ 참고:

배선을 단순화하고 싶다면 LCD I2C를 대신 사용할 수 있습니다. 참조 LCD I2C 자습서

 

필요한 하드웨어

Arduino UNO 또는 Genuino UNO
USB 2.0 케이블 유형 A/B
LCD
전위차계
브레드보드
점퍼 와이어


LCD 16x2 정보

핀아웃

 

 

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

LiquidCrystal 라이브러리 의 지원 으로 이러한 핀의 의미를 알지 못해도 LCD를 사용할 수 있습니다. 
그러나 궁금하거나 심층적으로 알고 싶다면 다음 핀과 해당 기능을 살펴보겠습니다.

  • GND 핀  GND (0V)에 연결해야 합니다 .
  • VCC 핀 LCD용 전원 공급 장치는 VCC (5V)에 연결해야 합니다 .
  • Vo(LCD Contrast) 핀  LCD 의 대비 및 밝기를 제어하고
    5V(최고 대비 및 밝기)에 연결하거나 전위차계에 연결(대비 및 밝기 조정)
  • RS(Register Select) LCD에 보내야 하는 데이터에는
    명령(LCD 제어용)데이터의 두 가지 종류가 있습니다. 
    이 두 가지는 동일한 데이터 버스에서 전송됩니다. 
    RS 핀은 데이터 버스의 데이터가 명령인지 데이터인지 LCD에 알려줍니다.
  • R/W(Read/Write) 은 READ 모드 또는 WRITE 모드를 선택하는  입니다.
  • EN(활성화) 은 LCD를 활성화하는 데 사용됩니다. 
    HIGH 는 LCD를 활성화하고 LOW 는 LCD를 비활성화합니다.
  • D0-D7(데이터 버스) 은 Arduino와 LCD 간에 데이터와 명령을 전달합니다. 
    데이터 전송에는 4비트 모드와 8비트 모드의 두 가지 모드가 있습니다.
  • AK(Anode & Cathode) 은 LCD 백라이트에 전원을 공급하는 데 사용됩니다. 
    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)이 Arduino의 핀에 연결됩니다.
  • 4개의 핀(D0, D1, D2, D3)이 연결되어 있지 않습니다.
  • 나머지 6개의 핀은 GND / VCC 또는 전위차계에 연결됩니다 .

4비트 모드의 LCD 핀 테이블

LCD PIN CONNECTED TO
01 GND GND
02 VCC 5V
03 V0 5V 또는 potentiometer의 핀
04 RS Arduino의 핀
05 R/W GND
06 EN Arduino의 핀
07 D0 연결되지 않은
08 D1 연결되지 않은
09 D2 연결되지 않은
10 D3 연결되지 않은
11 D4 Arduino의 핀
12 D5 Arduino의 핀
13 D6 Arduino의 핀
14 D7 Arduino의 핀
15 A 5V
16 K GND

LCD 좌표

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

 

작동 원리

이 섹션은 심층 지식입니다. 이해하지 못하더라도 걱정하지 마십시오. 
과부하가 걸리면 이 섹션을 무시하고 다른 날에 다시 오십시오. 다음 섹션을 계속 읽으십시오.

(표시할) 데이터를 LCD로 보내는 과정:

  1. Arduino는 RS 핀을 HIGH로 설정합니다 (데이터 레지스터 선택)
  2. Arduino는 D4 → D7 핀(데이터 버스)에 데이터를 씁니다.
  3. LCD는 데이터 버스에서 데이터를 수신합니다.
  4. RS 핀이 HIGH 이므로 LCD는 수신된 데이터를 데이터 저항에 저장합니다 . 
    그런 다음 LCD는 화면에 데이터를 표시합니다.

LCD에 명령(제어)을 보내는 프로세스(예: LCD 깜박임, 커서를 특정 위치로 설정, 디스플레이 지우기 ...):

  1. Arduino는 RS 핀을 LOW로 설정합니다 (명령 레지스터 선택).
  2. Arduino는 D4 → D7 핀(데이터 버스)에 명령을 씁니다.
  3. LCD는 데이터 버스에서 데이터를 수신합니다.
  4. RS 핀이 LOW 이기 때문에 LCD는 수신된 데이터를 명령 저항에 저장합니다 . 
    그러면 LCD는 명령 값에 따라 조치를 취합니다.

아두이노 - LCD

LCD를 제어하는 ​​것은 상당히 복잡한 작업입니다. 
다행히 LiquidCrystal 라이브러리 덕분에 이 라이브러리는 LCD 제어 프로세스를 단순화하므로
낮은 수준의 지침을 알 필요가 없습니다. 
Arduino를 LCD에 연결하고 라이브러리의 기능을 사용하기만 하면 됩니다. 
LCD를 사용하는 것은 케이크 조각입니다.

 

배선도

 

LCD 프로그래밍 방법

  • 라이브러리 포함:
    #include <LiquidCrystal.h>​
  • 6개의 LCD 핀에 연결된 Arduino의 핀 정의: RS, EN, D4, D4, D6, D7
    const int RS = 11, EN = 12, D4 = 2, D5 = 3, D6 = 4, D7 = 5;​
     

     라이브러리의 장점 중 하나는 LCD에 연결된 Arduino의 핀이 설정 가능하다는 것입니다.      
    이것은 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 부분으로 더 많은 작업 참조)

 

※ 참고:

Arduino 코드에서 연결된 핀을 지정하기만 하면 LCD에 연결할 Arduino의 6개 핀을 선택할 수 있습니다.

 

아두이노 코드

#include <LiquidCrystal.h>

// LCD pins <--> Arduino pins
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); // set up number of columns and rows

  lcd.setCursor(0, 0);         // move cursor to   (0, 0)
  lcd.print("Arduino");        // print message at (0, 0)
  lcd.setCursor(2, 1);         // move cursor to   (2, 1)
  lcd.print("GetStarted.com"); // print message at (2, 1)
}

void loop()
{
  
}

빠른 단계

  • 위의 코드를 복사하여 Arduino IDE로 엽니다.
  • 클릭 업로드 아두 이노 코드를 업로드 아두 이노 IDE 버튼을
  • LCD에서 결과 보기
  • 텍스트와 위치를 수정해 보세요.

커스텀 캐릭터

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

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

 

문자 생성기는 문자(40픽셀)를 나타냅니다. 다음 단계만 수행하면 됩니다.

 

1. 각 픽셀을 클릭하여 선택/선택 해제

2. 사용자 정의 문자 코드 아래처럼 복사

byte customChar[8] = {
	0b00000,
	0b01010,
	0b11111,
	0b11111,
	0b01110,
	0b00100,
	0b00000,
	0b00000
};

 

3. 아래 코드에서 customChar[8]  교체합니다.

 

#include <LiquidCrystal.h>

// LCD pins <--> Arduino pins
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); // set up number of columns and rows

  lcd.createChar(0, customChar); // create a new custom character

  lcd.setCursor(2, 0); // move cursor to (2, 0)
  lcd.write((byte)0);  // print the custom char at (2, 0)
}

void loop()
{
  
}

 

LCD의 결과:

 

 

여러 사용자 정의 문자

최대 8개의 사용자 지정 문자를 만들 수 있습니다(색인 0에서 7까지). 
아래 예에서는 3개의 문자를 생성하여 표시합니다.

#include <LiquidCrystal.h>

// LCD pins <--> Arduino pins
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); // set up number of columns and rows

  lcd.createChar(0, customChar0); // create a new custom character (index 0)
  lcd.createChar(1, customChar1); // create a new custom character (index 1)
  lcd.createChar(2, customChar2); // create a new custom character (index 2)

  lcd.setCursor(2, 0); // move cursor to (2, 0)
  lcd.write((byte)0);  // print the custom char 0 at (2, 0)

  lcd.setCursor(4, 0); // move cursor to (4, 0)
  lcd.write((byte)1);  // print the custom char 1 at (4, 0)

  lcd.setCursor(6, 0); // move cursor to (6, 0)
  lcd.write((byte)2);  // print the custom char 2 at (6, 0)
}

void loop()
{
}

 

LCD의 결과:

 

 

요약: 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); // move cursor to a desired position
      lcd.write((byte)index);  // print the custom char at the desired position​
     

대체 LCD

위의 코드는 다음 LCD에서도 작동합니다.

LCD 라이브러리 기능 참조

[참조 번역인용] https://arduinogetstarted.com/tutorials/arduino-lcd