아두이노 우노로 만드는 인터랙티브 LCD 게임
프로젝트 개요
아두이노 우노와 RGB 백라이트 16x2 LCD, 푸시 버튼 하나로 즐길 수 있는 간단한 러닝 게임을 만듭니다. 화면 오른쪽에서 다가오는 장애물을 점프해 피하는 고전적인 게임 방식으로, LCD의 커스텀 문자를 활용해 그래픽을 구현합니다.
필요한 부품
| 부품 | 수량 | 비고 |
| 아두이노 우노 (Arduino UNO) | 1 | |
| RGB 백라이트 LCD 16x2 (Adafruit) | 1 | I2C 모듈 아님, 병렬 인터페이스 |
| 브레드보드 | 1 | |
| 저항 220Ω | 1 | 백라이트 전류 제한용 |
| 푸시 버튼 스위치 12mm | 1 | 점프 조작용 |
| 점퍼 와이어 | 1세트 | |
| USB-A to B 케이블 | 1 | 프로그래밍 및 전원용 |
회로 연결
전원 및 LCD 기본 연결
- 아두이노 5V → 브레드보드 상단 빨간 레일 (양극 레일)
- 아두이노 GND → 브레드보드 상단 파란/검은 레일 (음극 레일)
- LCD 16핀 헤더를 브레드보드에 장착
LCD 핀 연결 상세
| LCD 핀 | 기능 | 연결 대상 |
| 1 (GND) | 전원 그라운드 | 브레드보드 음극 레일 |
| 2 (VCC) | 양전원 | 브레드보드 양극 레일 |
| 3 (V0) | 대비 조절 | 아두이노 핀 12 (또는 음극 레일) |
| 4 (RS) | 레지스터 선택 | 아두이노 핀 11 |
| 5 (R/W) | 읽기/쓰기 선택 | 아두이노 핀 10 (또는 음극 레일) |
| 6 (E) | 동작 인에이블 | 아두이노 핀 9 |
| 7-10 (DB0-DB3) | 데이터 비트 0-3 | 미사용 (4비트 모드) |
| 11 (DB4) | 데이터 비트 4 | 아두이노 핀 6 |
| 12 (DB5) | 데이터 비트 5 | 아두이노 핀 5 |
| 13 (DB6) | 데이터 비트 6 | 아두이노 핀 4 |
| 14 (DB7) | 데이터 비트 7 | 아두이노 핀 3 |
| 15 (LED+) | 백라이트 양극 | 220Ω 저항 → 양극 레일 |
| 16 (LED-) | 백라이트 음극 | 음극 레일 |
푸시 버튼 연결
- 버튼을 LCD 왼쪽, 브레드보드 중앙 홈에 걸쳐 장착
- 버튼 위쪽 핀 중 하나 → 음극 레일 (짧은 와이어)
- 버튼 다른 위쪽 핀 → 아두이노 핀 2 (인터럽트 0)
게임 로직 및 코드 구조
게임은 LiquidCrystal 라이브러리를 사용하며, LCD의 CGRAM에 7개의 커스텀 문자를 정의해 주인공(달리기/점프 자세), 지형(땅/빈 공간)을 표현합니다.
핵심 구성 요소
- 지형 스크롤: 16칸 너비의 상/하단 지형 배열을 반 문자 단위로 왼쪽으로 이동
- 주인공 상태 머신: 바닥에 서기(자세 1/2) → 점프 상승(3단계) → 공중(상단 행) → 점프 하강(2단계) → 착지
- 충돌 감지: 주인공 위치에 지형 블록이 있으면 게임 오버
- 점수: 이동 거리(프레임 수)로 계산
- 자동 플레이 힌트: 핀 1에 LED 연결 시 다음 장애물 예측 표시 가능
코드 주요 상수
#define PIN_BUTTON 2 // 버튼 인터럽트 핀
#define PIN_AUTOPLAY 1 // 자동 플레이 표시 LED
#define PIN_READWRITE 10 // LCD R/W
#define PIN_CONTRAST 12 // LCD 대비 조절
#define TERRAIN_WIDTH 16 // 화면 너비
#define HERO_HORIZONTAL_POSITION 1 // 주인공 고정 열
소프트웨어 설치 및 실행
- 아두이노 IDE 설치
- 제공된
LCD_Game.ino 스케치 열기
- 보드: Arduino/Genuino Uno 선택
- 포트 선택 후 업로드
- 전원 연결 후 "Press Start" 메시지에서 버튼 눌러 시작
확장 아이디어
- 난이도 조절 (장애물 생성 확률/속도 변경)
- 최고 점수 EEPROM 저장
- 사운드 효과 추가 (부저 활용)
- I2C LCD 모듈로 배선 간소화
- 두 번째 버튼으로 '숙이기' 액션 추가
교육적 가치
이 프로젝트는 임베디드 시스템의 기초인 △GPIO 제어 △인터럽트 처리 △타이밍 기반 게임 루프 △디스플레이 드라이빙 △상태 머신 설계 △커스텀 문자 생성 등을 모두 다루며, 하드웨어 제약 조건(16x2 텍스트 LCD)에서 그래픽 게임을 구현하는 창의적 문제 해결력을 기르기에 적합합니다.