아두이노-오렌지보드를 사용해 16X2 LCD에 문자 출력하기

[컴퓨터월드] 아두이노는 이탈리어로 ‘친한 친구’라는 뜻을 가진 대표적인 오픈소스 하드웨어다. 딱딱하고 접근하기 힘들었던 임베디드 분야를 누구나 쉽게 접근할 수 있도록 만든 미니 기판이라 할 수 있다. 이번 강좌에 사용하는 아두이노 오렌지보드는 한국형 아두이노라 할 수 있다.

아두이노의 보급은 오픈소스 하드웨어의 확산을 불러일으켰고 메이커 문화의 확산에도 큰 기여를 했다. 최근에는 인텔, 마이크로소프트 등 대형 기업들도 이런 오픈소스 하드웨어시장에 뛰어들기 시작했다. 그 만큼 오픈소스 하드웨어 시장의 잠재력이 커졌다는 얘기이다.

LCD란 무엇인가?
LCD는 Liquid Crystal Display의 약자로 액정표시장치 또는 액정 디스플레이라고도 한다. CRT와는 달리 자기발광성이 없어 후광이 필요하지만 동작 전압이 낮아서 소비전력이 적고 휴대용으로 쓰일 수 있기 때문에 손목시계, 컴퓨터 등에 널리 쓰고 있는 평판 디스플레이이다.

액정(Liquid Crystal)이란 액체처럼 유체의 성질을 가지면서 고체처럼 광학적 성질을 가지는 물질이다. 또한 액정은 고체표면에 액정이 특정 방향으로 정렬할 수도 있어, 전기적 신호를 가해 원하는 방향으로 배열하여 빛을 투과시키거나 차단시킬 수 있다.

 
 

LCD는 이러한 액정의 성질을 이용한다. 빛을 내는 백라이트, 백라이트에서 나온 빛을 한 방향으로 투과시키기 위한 편광판, 각 픽셀에 대한 액정 배열을 조절하여 투과하는 빛의 양을 제어하는 TFT, 그 다음으로 액정이 순서대로 위치하여 구성이 된다. 또한 컬러 지원여부에 따라 컬러 필터가 추가될 수 있다.

LCD는 얇고 가벼우며 소비전력이 적다는 장점이 있지만, 시야각이 제한적이고 어두운 곳에서는 선명함이 떨어지는 단점이 있다.
 

LCD 사용방법
이 예제에서 16개의 문자를 2줄로, 총 32개 문자를 표현할 수 있는 LCD를 사용한다.
LCD는 아래와 같은 핀 배치로 구성되어 있으며, DB0-DB7까지의 핀들을 통해서 문자를 표시 할 수 있다.

 
 

필요한 부품 목록

오렌지보드로 LED를 제어해보기 위한 준비물은 아래와 같다.

 
 

하드웨어 연결하기

릴레이와 트랜지스터, LED는 오렌지보드 핀 번호 연결 그림과 같이 연결한다.
1.오렌지보드의 5V핀을 브레드보드의 +버스에 연결한다.
2.오렌지보드의 GND핀을 브레드보드의 -버스에 연결한다.
3.LCD를 그럼과 같이 세로로 꽂는다.
4.가변저항을 그림과 같이 세로로 꽂는다.
5.LCD의 16번핀을 -버스에 연결한다.
6.LCD의 15번핀을 +버스에 연결한다.
7.LCD의 14번핀을 오렌지보드 13번핀에 연결한다.
8.LCD의 13번핀을 오렌지보드 12번핀에 연결한다.
9.LCD의 12번핀을 오렌지보드 11번핀에 연결한다.
10. LCD의 11번핀을 오렌지보드 10번핀에 연결한다.
11. LCD의 6번핀을 오렌지보드 4번핀에 연결한다.
12. LCD의 5번핀을 -버스에 연결한다.
13. LCD의 4번핀을 오렌지보드 3번핀에 연결한다.
14. 가변저항의 가운데 단자를 LCD의 3번핀에 연결한다.
15. LCD의 2번핀을 +버스에 연결한다.
16. LCD의 1번핀을 -버스에 연결한다.
17.가변저항의 상단 단자를 +버스에 연결한다.
18.가변저항의 하단 단자를 -버스에 연결한다.

 
 


소스코드

/*
제목 : LCD에 문자 출력하기
내용 : LCD에 원하는 문자를 표시해 봅니다.
*/
// LCD를 쉽게 제어하기 위한 라이브러리를 추가합니다.
#include <LiquidCrystal.h>
// 오렌지보드의 3, 4, 10, 11, 12, 13번핀을 사용하도록 지정된 lcd객체를 생성합니다.
LiquidCrystal lcd(3, 4, 10, 11, 12, 13);
// 실행시 가장 먼저 호출되는 함수이며, 최초 1회만 실행됩니다.
// 변수를 선언하거나 초기화를 위한 코드를 포함합니다.
void setup() {
// 16개의 셀과 2줄을 사용하도록 설정합니다.
lcd.begin(16,2);
// LCD를 초기화 합니다.
lcd.clear();
}// setup() 함수가 호출된 이후, loop() 함수가 호출되며,
// 블록 안의 코드를 무한히 반복 실행됩니다.
void loop(){
// random 함수를 사용하여 0부터 2까지의 숫자중 랜덤하게 값을 받습니다.
int value = random(0, 3);
// 랜덤 값이 0이라면 아래의 조건을 실행합니다.
if (value == 0) {
// 0번째 줄 0번째 셀부터 입력하게 합니다.
lcd.setCursor(0,0); // 0번째 줄 0번째 셀부터 입력하게 합니다.
lcd.print(" KocoaFab.cc "); // 문구를 출력합니다.
}
// 랜덤 값이 1이라면 아래의 조건을 실행합니다.
else if (value == 1) {
lcd.setCursor(0,1); // 1번째 줄 0번째 셀부터 입력하게 합니다.
lcd.print(" Hello World!! "); // 문구를 출력합니다.
}
// 랜덤 값이 2이라면 아래의 조건을 실행합니다.
else if (value == 2) {
// 0번째 줄 0번째 셀부터 입력하게 합니다.
lcd.setCursor(0,0);
// 아래의 문장을 출력합니다.
lcd.print(" KocoaFab.cc ");
// 1번째 줄 0번째 셀부터 입력하게 합니다.
lcd.setCursor(0,1);
// 아래의 문장을 출력합니다.
lcd.print(" Hello World!! ");
}
// 1초간 대기합니다.
delay(1000);
// LCD의 모든 내용을 삭제합니다.
lcd.clear();
}

소스를 사용하기 위해서는 #include를 통해 LCD라이브러리를 읽어와야 한다.

아두이노나 오렌지보드에서 쓰이는 라이브러리란 특정 센서나 모듈을 사용할 때 필요한 함수나 메소드를 정리하여 사용자가 간편하게 센서나 모듈을 사용할 수 있게 함수나 메소드를 모아둔 집합이다. 기본적으로 제공하는 라이브러리가 있고 사용자나 모듈 제작 회사가 라이브러리를 만들어서 배포하는 경우도 있다.

LCD를 사용할 수 있게 도와주는 라이브러리인 LiquidCrystal은 아두이노IDE를 설치할 때 기본적으로 제공하기 때문에 아두이노 설치 폴더 - libraries에서 찾을 수 있다.

코드에서는 lcd라는 객체를 하나 생성한다. lcd하고 괄호 옆에 써 있는 숫자는 연결된 핀 번호를 의미한다.


 

// 오렌지보드의 3, 4, 10, 11, 12, 13번핀을 사용하도록 지정된 lcd객체를 생성합니다.
LiquidCrystal lcd(3, 4, 10, 11, 12, 13);


setup()함수에서는 lcd를 사용하기 위해 초기화시키는 작업을 한다.
lcd를 사용하기 위해 아래 코드를 작성하는데 아래 코드의 의미는 16x2의 lcd를 사용하겠다는 의미다.

lcd.begin(16,2); // 16개의 셀과 2줄을 사용하도록 설정

그 다음 lcd.clear()라는 함수를 불러와서 lcd의 화면을 깨끗하게 만든다.

clear()라는 함수는 원래는 오렌지보드에 존재하지 않지만 LiquidCrystal라이브러리 안에 정의되어 있기 때문에 사용할 수 있다.

loop()함수에서는 이제 lcd에 띄울 문구를 설정하게 된다.

random(0,3) 함수는 0부터 2까지의 값 중 하나를 랜덤하게 가져오겠다는 함수다. 랜덤 함수를 통해 value라는 변수에 0부터 2까지의 숫자 중 랜덤한 값을 지정한다.

// random 함수를 사용하여 0부터 2까지의 숫자중 랜덤하게 값을 받습니다.
int value = random(0, 3);

value의 값에 따라 lcd에서는 각각 다른 문구가 출력된다.
setCursor(0,0)이라는 함수를 통해 lcd의 커서의 위치를 정하게 된다.
setCursor()함수에서 첫 번째 매개변수는 칸을 의미하고 두 번째 매개변수는 줄을 의미한다.
예를 들어 setCursor(6,1)일 경우에는 2번째 줄 6번째 칸부터 시작하게 된다.
(항상 그렇듯 0일 경우 첫 번째 줄이고 1일 경우는 2번째 줄이다.)

// lcd에서 띄울 글자의 위치를 결정한다. 첫 번째 매개변수의 값은 칸이고 두 번째 매개변수는 줄을 나타낸다.
lcd.setCursor(0,0);


위 조건에 따라 value의 값이 0일 경우에는 lcd의 첫 번째 줄에 KocoaFab.cc라는 글자가 출력되며, 1일 경우에는 두 번째 줄에 Hello World!!라는 글자가 출력되고, 2일 경우에는 KocoaFab.cc와 Hello World!!라는 글자가 동시에 출력된다.
 

마치며

lcd는 아두이노에서 뿐 아니라 다양한 기기에서도 출력 기기, 모듈로써 다양하게 사용되고 있는 장치이다. 현재는 LED에 서서히 밀려나고 있는 추세지만 아두이노에서는 글자를 표현해주는 모듈로써 많이 사용되고 있다. 그 중에서도 이 글에서 사용하고 있는 16x2 lcd를 가장 많이 사용한다. 오렌지보드에서 사용할 수 있는 lcd의 종류는 한글 lcd부터 시작해서 Nokia5110, TFT lcd 등 다양한 종류가 있으니 프로젝트에 맞게 사용한다면 좋은 출력 모듈로써 사용할 수 있다. 좀 더 깊게 파고든다면 lcd의 각 픽셀을 조절하여 다양한 문자나 그림도 그릴 수 있다.

프로젝트에 대한 더 자세한 내용을 알고 싶다면 Kocoafab.cc를 방문해 보길 바란다.

 

 

 코코아팹은 한국 메이커 문화를 만들어가는 온라인 메이커포털이다. 오픈소스 하드웨어 오렌지보드의 생산과 활용법 공개 등 많은 활동을 진행하고 있다.

 

저작권자 © 아이티데일리 무단전재 및 재배포 금지