아두이노로 만드는 휴대용 미니 게임기 – ST7789 컬러 LCD 완전 활용법

게임을 만든다고 하면 거창하게 들릴 수 있지만, 사실 우리가 일상에서 해보는 아주 간단한 아두이노 프로젝트도 작은 게임의 형태가 될 수 있습니다. 이번에는 ST7789라는 컬러 디스플레이와 아두이노를 이용해서, 직접 화면에 캐릭터를 출력하고 움직이며, 장애물을 피하는 미니 게임기를 만들어보겠습니다.
이 글은 ‘처음 만드는 아두이노 게임기’라는 마음으로 시작할 수 있도록, 준비물, 회로 연결, 코드 작성, 게임 로직 구성까지 아주 차근차근 설명합니다.
🎮 1. 왜 ST7789 디스플레이인가?
ST7789는 SPI 방식으로 동작하는 컬러 TFT 디스플레이로, 240x240 또는 240x280 해상도의 선명한 화면을 지원합니다. 크기가 작고, 전력도 적게 들며, 무엇보다 컬러 표현이 뛰어나기 때문에 텍스트 출력이나 센서 시각화뿐만 아니라 게임 UI로도 손색이 없습니다.
🧰 2. 준비물
- 아두이노 Mega 2560 (또는 UNO)
- ST7789 240x280 SPI 디스플레이 모듈
- 조이스틱 모듈 (또는 버튼 2개)
- 브레드보드, 점퍼 와이어
- Arduino IDE + 관련 라이브러리
📌 아두이노 Uno로도 구현은 가능하나, Mega는 핀 여유와 안정성 면에서 더 좋습니다.
중간광고자리
🔌 3. 하드웨어 연결
▣ ST7789 디스플레이 ↔ 아두이노 Mega
ST7789 핀 아두이노 Mega
| VCC | 5V |
| GND | GND |
| SCL | 52 (SCK) |
| SDA | 51 (MOSI) |
| RES | 8 |
| DC | 9 |
| CS | 10 |
▣ 조이스틱 모듈 (또는 버튼 2개)
조이스틱 핀 아두이노 핀
| VRx | A0 |
| VRy | A1 |
| SW | 7 |
조이스틱을 사용하면 좌우 이동, 상하 이동, 클릭 기능까지 총 3개의 제어 기능을 손쉽게 구현할 수 있습니다.
🔧 4. 라이브러리 설치
ST7789 디스플레이는 Adafruit에서 만든 GFX 기반 라이브러리로 쉽게 제어할 수 있습니다. 아래 2개를 꼭 설치해주세요.
- Adafruit_GFX.h
- Adafruit_ST7789.h
[스케치] → [라이브러리 포함하기] → [라이브러리 관리] → "ST7789" 검색 후 설치
💻 5. 화면에 캐릭터 그리기 – 기본 예제
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>
#include <SPI.h>
#define TFT_CS 10
#define TFT_RST 8
#define TFT_DC 9
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
int playerX = 100, playerY = 200;
void setup() {
tft.init(240, 280);
tft.fillScreen(ST77XX_BLACK);
}
void loop() {
tft.fillScreen(ST77XX_BLACK);
tft.fillRect(playerX, playerY, 20, 20, ST77XX_RED);
delay(100);
}
이 예제는 검은 배경에 빨간색 캐릭터를 고정 위치에 출력하는 코드입니다.
🕹 6. 조이스틱으로 캐릭터 움직이기
int joystickX = A0;
int joystickY = A1;
void loop() {
int xValue = analogRead(joystickX);
int yValue = analogRead(joystickY);
if (xValue > 600) playerX += 5;
if (xValue < 400) playerX -= 5;
if (yValue > 600) playerY += 5;
if (yValue < 400) playerY -= 5;
tft.fillScreen(ST77XX_BLACK);
tft.fillRect(playerX, playerY, 20, 20, ST77XX_RED);
delay(100);
}
조이스틱을 사용해서 캐릭터를 위아래, 좌우로 움직일 수 있게 해주는 코드입니다.
중간광고자리
🚧 7. 장애물 추가 + 충돌 감지 기본 구조
int obsX = 120;
int obsY = 100;
int obsW = 20, obsH = 20;
void loop() {
// 기존 조이스틱 코드...
// 충돌 체크
bool hit = (playerX < obsX + obsW && playerX + 20 > obsX &&
playerY < obsY + obsH && playerY + 20 > obsY);
tft.fillScreen(ST77XX_BLACK);
if (hit) {
tft.setCursor(50, 130);
tft.setTextColor(ST77XX_YELLOW);
tft.setTextSize(2);
tft.print("Game Over!");
} else {
tft.fillRect(playerX, playerY, 20, 20, ST77XX_RED);
tft.fillRect(obsX, obsY, obsW, obsH, ST77XX_BLUE);
}
delay(100);
}
이제는 단순히 움직이는 것에서 더 나아가, 충돌까지 감지하여 게임처럼 동작하게 됩니다.
🧠 8. 확장 아이디어
- 장애물 여러 개 생성 및 랜덤 배치
- 게임 점수 시스템 추가 (int score 활용)
- 버튼 누르면 게임 재시작
- 메뉴 화면, 시작 화면 구현
- 점점 속도 빨라지는 구조 (난이도 조절)
- 효과음 추가 (부저 연결)
✅ 9. 마무리하며
이 프로젝트는 아두이노를 이용한 입문자용 미니 게임기 제작의 완벽한 출발점이 됩니다. 디스플레이 제어, 입력장치 처리, 간단한 충돌 판정 등, 실제로 유의미한 로직을 구현하는 재미를 느낄 수 있어요.
굳이 완벽한 게임이 아니어도 괜찮습니다. 중요한 건 '내 손으로 만든다'는 성취감이죠. 다음에는 점수판이나 여러 캐릭터, 맵 전환 등의 기능을 추가해 더 복잡한 게임도 구현해볼 수 있습니다.
📌 출처: ythouse.tistory.com
'개발이야기' 카테고리의 다른 글
| 아두이노 스마트 미러 만들기 – 실시간 날씨·시간·뉴스를 한눈에! (0) | 2025.03.31 |
|---|---|
| 아두이노 와 ESP32-CAM으로 얼굴 인식 도어락 만들기 – IoT 보안 시스템 완성 (0) | 2025.03.31 |
| 도어락 해킹? 내가 만든 아두이노 보안 시스템으로 끝! (0) | 2025.03.31 |
| 아두이노로 만드는 스마트 홈 – 자동화의 모든 것 (0) | 2025.03.31 |
| 아두이노에 ChatGPT를 연결해봤습니다 – AI와 대화하는 나만의 스마트 디바이스 만들기 (0) | 2025.03.31 |