산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

아두이노 16×2 LCD 완벽 가이드: 연결, 프로그래밍 및 데이터 표시

LCD 문자 디스플레이란?

LCD(액정 디스플레이) 문자 디스플레이는 고정된 크기의 개별 ASCII 문자만 출력할 수 있는 특수한 유형의 디스플레이입니다. 이 개별 문자들을 조합하여 텍스트를 형성합니다.

디스플레이를 자세히 보면 5×8 픽셀 그리드로 구성된 작은 직사각형 영역들이 있습니다. 각 픽셀은 개별적으로 켤 수 있으며, 이를 통해 각 그리드 내에서 문자를 생성할 수 있습니다.

아두이노 16×2 LCD 완벽 가이드: 연결, 프로그래밍 및 데이터 표시

이 직사각형 영역의 개수가 LCD의 크기를 결정합니다. 가장 인기 있는 LCD는 16×2로, 16개의 문자 영역(캐릭터)이 있는 두 행을 가지고 있습니다. 물론 16×1, 16×4, 20×4 등 다른 크기도 있지만 모두 동일한 원리로 작동합니다. 또한 이 LCD들은 배경색과 텍스트 색상이 다를 수 있습니다.

16×2 LCD 핀아웃

왼쪽에서 오른쪽으로 16개의 핀이 있으며, 첫 번째는 그라운드(GND) 핀입니다. 두 번째 핀은 VCC로 아두이노 보드의 5V 핀에 연결합니다. 세 번째는 Vo 핀으로, 여기에 가변저항(포텐셔미터)을 연결하여 디스플레이의 대비(Contrast)를 조절합니다.

다음은 RS 핀(레지스터 선택 핀)으로, 명령어를 보낼지 데이터를 보낼지 선택하는 데 사용됩니다. 예를 들어 RS 핀이 로우 상태(0V)면 LCD에 명령어를 보냅니다: 커서 위치 설정, 디스플레이 지우기, 디스플레이 끄기 등. RS 핀이 하이 상태(5V)면 LCD에 데이터나 문자를 보냅니다.

아두이노 16×2 LCD 완벽 가이드: 연결, 프로그래밍 및 데이터 표시

다음은 R/W 핀으로 읽기/쓰기 모드를 선택합니다. 쓰기 모드는 명령어와 데이터를 LCD로 보내는 데 사용되며, 읽기 모드는 LCD 자체가 프로그램을 실행할 때 사용하므로 이 튜토리얼에서는 다루지 않습니다.

다음은 E 핀(인에이블 핀)으로, 레지스터 쓰기를 활성화하거나 그 다음 8개의 데이터 핀(D0~D7)을 활성화합니다. 이 핀들을 통해 레지스터에 쓸 때 8비트 데이터를 보냅니다. 예를 들어 대문자 'A'를 표시하려면 ASCII 표에 따라 0100 0001을 레지스터에 보냅니다. 마지막 두 핀 A와 K(애노드와 캐소드)는 LED 백라이트용입니다.

다행히 LiquidCrystal 라이브러리가 거의 모든 것을 처리해 주므로 LCD 작동 원리에 대해 크게 걱정할 필요가 없습니다. 아두이노 공식 웹사이트에서 라이브러리 함수를 확인할 수 있으며, 이를 통해 LCD를 쉽게 사용할 수 있습니다. 라이브러리는 4비트 또는 8비트 모드로 사용할 수 있는데, 이 튜토리얼에서는 4비트 모드(8개 데이터 핀 중 4개만 사용)를 사용합니다.

아두이노와 LCD 연결하기 – 배선도

16×2 LCD 디스플레이를 아두이노 보드에 연결하는 방법은 다음과 같습니다.

아두이노 16×2 LCD 완벽 가이드: 연결, 프로그래밍 및 데이터 표시

아두이노 보드에서 6개의 디지털 입력 핀만 사용합니다. LCD의 레지스터 D4~D7은 아두이노 디지털 핀 4~7에 연결합니다. Enable 핀은 2번 핀, RS 핀은 1번 핀에 연결합니다. R/W 핀은 그라운드에 연결하고 Vo 핀은 가변저항의 중간 핀에 연결합니다.

필요한 부품

  • 16×2 캐릭터 LCD
  • 가변저항(포텐셔미터) 10kΩ
  • 아두이노 보드 (Uno, Nano 등)
  • 브레드보드와 점퍼 와이어

LCD 대비 조절하기

Vo 핀의 입력 전압을 조절하여 LCD 대비를 조정할 수 있습니다. 가변저항을 사용하면 0~5V 사이의 입력 전압을 미세하게 조절하여 쉽게 대비를 맞출 수 있습니다.

아두이노 16×2 LCD 완벽 가이드: 연결, 프로그래밍 및 데이터 표시

가변저항 없이 LCD 사용 가능한가요?

네, 가변저항이 없는 경우 두 개의 저항으로 전압 분배기를 만들어 LCD 대비를 조절할 수 있습니다. 전압 분배기를 사용하여 0~5V 사이의 전압 값을 설정하면 디스플레이에서 좋은 대비를 얻을 수 있습니다. 제 LCD의 경우 약 1V 전압이 잘 작동했습니다. 1kΩ와 220Ω 저항을 사용하여 적절한 대비를 맞췄습니다.

아두이노 16×2 LCD 완벽 가이드: 연결, 프로그래밍 및 데이터 표시

또 다른 방법은 아두이노에서 PWM 신호를 LCD의 Vo 핀으로 공급하는 것입니다. Vo 핀을 아두이노의 PWM 지원 핀에 연결하고 setup 섹션에서 다음 코드를 사용합니다:

analogWrite(11, 100); // D11 핀에서 PWM 신호 생성, 값 100 (255 중)

D11 핀에서 255 중 100 값의 PWM 신호를 생성하며, 이는 0~5V 전압으로 환산 시 약 2V가 LCD의 Vo 핀에 입력됩니다.

LCD 아두이노 코드

LiquidCrystal 라이브러리의 작동 원리를 설명하는 간단한 코드입니다. 영상의 첫 번째 예제 코드입니다:

/* 
 * 아두이노 LCD 튜토리얼
 * 작성자: Dejan Nedelkovski
 * www.HowToMechatronics.com
 */
#include <LiquidCrystal.h> // LiquidCrystal 라이브러리 포함

LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // LCD 객체 생성. 매개변수: (rs, enable, d4, d5, d6, d7)

void setup() {
  lcd.begin(16, 2); // LCD 인터페이스 초기화, 디스플레이 크기(가로, 세로) 지정
}

void loop() {
  lcd.print("Arduino"); // LCD에 "Arduino" 출력
  delay(3000); // 3초 대기
  lcd.setCursor(2, 1); // 이후 텍스트가 표시될 위치 설정
  lcd.print("LCD Tutorial");
  delay(3000);
  lcd.clear(); // 디스플레이 지우기
  lcd.blink(); // 깜빡이는 LCD 커서 표시
  delay(4000);
  lcd.setCursor(7, 1);
  delay(3000);
  lcd.noBlink(); // 깜빡이는 LCD 커서 끄기
  lcd.cursor(); // 다음 문자가 쓰일 위치에 밑줄 커서 표시
  delay(4000);
  lcd.noCursor(); // LCD 커서 숨기기
  lcd.clear(); // LCD 화면 지우기
}

코드 설명

가장 먼저 LiquidCrystal 라이브러리를 포함해야 합니다. 스케치 → 라이브러리 포함 → LiquidCrystal 순으로 선택하면 됩니다. 그런 다음 LC 객체를 생성합니다. 이 객체의 매개변수는 아두이노 보드의 디지털 입력 핀 번호로, LCD 핀에 각각 대응됩니다: (RS, Enable, D4, D5, D6, D7). setup에서 begin() 함수를 사용하여 LCD 인터페이스를 초기화하고 디스플레이 크기를 지정합니다.

loop에서는 메인 프로그램을 작성합니다. print() 함수를 사용하여 LCD에 출력합니다.

lcd.print("Arduino"); // LCD에 "Arduino" 출력

setCursor() 함수는 이후 텍스트가 표시될 위치를 설정하는 데 사용합니다.

lcd.setCursor(2, 1); // 이후 텍스트가 표시될 위치 설정

blink() 함수는 깜빡이는 커서를 표시하고 noBlink() 함수로 끕니다.

lcd.blink(); // 깜빡이는 LCD 커서 표시

cursor() 함수는 밑줄 커서를 표시하고 noCursor() 함수로 끕니다. clear() 함수로 LCD 화면을 지울 수 있습니다.

lcd.clear(); // LCD 화면 지우기

16×2 LCD와 아두이노로 텍스트 스크롤하기

텍스트 길이가 16자를 초과하는 경우 LiquidCrystal 라이브러리의 scrollDisplayLeft() 또는 scrollDisplayRight() 함수를 사용하여 텍스트를 스크롤할 수 있습니다.

예제 코드:

#include <LiquidCrystal.h>
LiquidCrystal lcd(1, 2, 4, 5, 6, 7);

void setup() {
  lcd.begin(16, 2);
  lcd.print("Scrolling Text Example");
}

void loop() {
  lcd.scrollDisplayLeft();
  delay(500);
}

scrollDisplayLeft() 또는 scrollDisplayRight() 함수로 텍스트가 왼쪽 또는 오른쪽으로 스크롤할지 선택합니다. delay() 함수로 스크롤 속도를 조절합니다.

텍스트 스크롤을 더 세밀하게 제어하려면 "for" 루프를 사용하여 직접 구현할 수도 있습니다:

#include <LiquidCrystal.h>
LiquidCrystal lcd(1, 2, 4, 5, 6, 7);

void setup() {
  lcd.begin(16, 2);
}

void loop() {
  // 오른쪽으로 텍스트 스크롤
  for (int i = 0; i <= 13; i++) {
    lcd.setCursor(i, 0);
    lcd.print("LCD");
    delay(500);
    lcd.clear();
  }
  // 왼쪽으로 텍스트 스크롤
  for (int i = 12; i >= 1; i--) {
    lcd.setCursor(i, 0);
    lcd.print("LCD");
    delay(500);
    lcd.clear();
  }
}

LCD에서 사용자 정의 문자 생성 및 표시하기

ASCII 문자 외에도 LiquidCrystal 라이브러리를 사용하여 LCD에 사용자 정의 문자를 생성하고 표시할 수 있습니다.

아두이노 16×2 LCD 완벽 가이드: 연결, 프로그래밍 및 데이터 표시

각 문자의 모양을 8바이트 배열로 지정할 수 있습니다. 예제 코드:

#include <LiquidCrystal.h>

byte heart[8] = {
  B00000,
  B01010,
  B11111,
  B11111,
  B01110,
  B00100,
  B00000,
  B00000
};

byte smile[8] = {
  B00000,
  B00000,
  B01010,
  B00000,
  B10001,
  B01110,
  B00000,
  B00000
};

byte lock[8] = {
  B01110,
  B10001,
  B10001,
  B11111,
  B11011,
  B11011,
  B11111,
  B00000
};

byte character[8] = {
  B11111,
  B10101,
  B11111,
  B01010,
  B01110,
  B11111,
  B01110,
  B01110
};

LiquidCrystal lcd(1, 2, 4, 5, 6, 7);

void setup() {
  lcd.begin(16, 2);
  lcd.createChar(0, heart);
  lcd.createChar(1, smile);
  lcd.createChar(2, lock);
  lcd.createChar(3, character);
  lcd.clear();
  lcd.print("Custom Character");
}

void loop() {
  lcd.setCursor(1, 1);
  lcd.write(byte(0)); // 하트 문자 표시
  lcd.setCursor(5, 1);
  lcd.write(byte(1)); // 스마일 문자 표시
  lcd.setCursor(9, 1);
  lcd.write(byte(2)); // 자물쇠 문자 표시
  lcd.setCursor(13, 1);
  lcd.write(byte(3)); // 사용자 정의 문자 표시
}

5×8 픽셀 그리드에서 0을 1로 변경하여 문자 모양을 지정하는 것을 볼 수 있습니다.

아두이노 16×2 LCD 완벽 가이드: 연결, 프로그래밍 및 데이터 표시

setup에서 createChar() 함수를 사용하여 사용자 정의 문자를 생성합니다.

lcd.createChar(0, heart); // 사용자 정의 문자 생성

이 함수의 첫 번째 매개변수는 0~7 사이의 숫자로, 지원되는 8개의 사용자 정의 문자 중 하나를 예약합니다. 두 번째 매개변수는 바이트 배열의 이름입니다.

write() 함수를 사용하여 사용자 정의 문자를 디스플레이에 쓰고, 매개변수로 문자 번호를 사용합니다.

lcd.write(byte(0)); // 사용자 정의 문자 0(하트) 표시

참고: 아두이노 터치 스크린 튜토리얼 | TFT LCD

결론

아두이노와 LCD 사용에 대해 알아야 할 거의 모든 것을 다뤘습니다. 이 LCD 문자 디스플레이는 많은 전자 프로젝트에서 정보를 표시하는 데 매우 유용합니다. 예제에서는 16×2 LCD를 사용했지만, 같은 작동 원리가 다른 크기의 문자 디스플레이에도 적용됩니다.

이 튜토리얼이 도움이 되었기를 바랍니다. 궁금한 점은 아래 댓글 섹션에 자유롭게 질문해 주시고, 30개 이상의 아두이노 프로젝트 모음도 확인해 보세요.

제조공정

  1. 플런지 EDM 마스터: 정밀 방전 가공 궁극 가이드
  2. 주철(Cast Iron) 완벽 가이드: 조성, 용도, 장단점
  3. 고로(Blast Furnace) 완벽 가이드: 정의, 구성요소, 작동 원리, 유지보수
  4. 드릴 프레스 마스터하기: 드릴링 머신 완전 가이드
  5. 판금 필수 지식: 유형, 용도 및 제조 인사이트
  6. 밀링 머신 종합 가이드: 기능, 작업 및 응용
  7. 플래너 머신 완벽 가이드: 기능, 용도 및 이점
  8. 성형 머신 완벽 가이드: 특징, 용도 및 이점
  9. 금속 가공 마스터하기: 과학에서 장인 정신까지
  10. CNC 기계 종합 가이드: 특징, 이점 및 응용 분야