🕹️ 프로젝트 개요
아두이노를 활용하여 간단한 핑퐁(Ping Pong) 게임을 구현해보겠습니다. 이 프로젝트에서는 가변저항 두 개를 사용하여 플레이어가 공을 더욱 정밀하게 조작할 수 있도록 만들 것입니다.
✅ 첫 번째 가변저항 – X축(좌우 이동)을 조정
✅ 두 번째 가변저항 – Y축(상하 이동)을 조정
✅ LCD 디스플레이 – 공과 패들을 출력하여 간단한 게임 화면 제공
✅ 물리적 충돌 감지 – 패들에 공이 닿으면 방향이 변경
이번 프로젝트를 통해 아날로그 입력을 활용하는 방법과 LCD 디스플레이 활용법을 익힐 수 있습니다. 게임을 직접 플레이하며, 아두이노로 프로그래밍하는 즐거움을 경험해보세요! 🎮🚀
1️⃣ 필요한 부품 리스트
다음 부품을 사용하여 핑퐁 게임을 만들 수 있습니다.
아두이노 (Arduino Uno) | 코드 실행을 위한 마이크로컨트롤러 |
LCD 16x2 | 게임 화면을 출력할 디스플레이 |
가변저항 2개 | X축(좌우 이동)과 Y축(상하 이동)을 조작 |
점퍼 와이어 | 회로 연결을 위한 필수품 |
브레드보드 | 납땜 없이 회로를 구성하는 기판 |
2️⃣ 회로 연결 방법
🔗 LCD 연결
아두이노와 LCD를 LiquidCrystal 라이브러리를 활용하여 연결합니다.
VSS | GND | 그라운드 연결 |
VDD | 5V | 전원 공급 |
V0 | 가변저항 중간 핀 | LCD 대비 조정 |
RS | 12 | 레지스터 선택 |
RW | GND | 쓰기 모드 설정 |
E | 11 | Enable 신호 |
D4 | 5 | 데이터 핀 |
D5 | 4 | 데이터 핀 |
D6 | 3 | 데이터 핀 |
D7 | 2 | 데이터 핀 |
🎛️ 가변저항 연결
첫 번째 가변저항 (좌우 이동) | A0 (아날로그 입력) |
두 번째 가변저항 (상하 이동) | A1 (아날로그 입력) |
각 가변저항의 양쪽 핀을 5V와 GND에 연결하고, 중앙 핀을 각각 A0 및 A1에 연결하면 됩니다.
🎛️ 조정기가 1개일경우
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int ballPos = 7; // 공의 초기 위치
int direction = 1; // 공의 이동 방향
int paddlePos; // 패들 위치
void setup() {
lcd.begin(16, 2);
pinMode(A0, INPUT); // 가변저항 입력 설정
}
void loop() {
// 가변저항 값을 읽고 패들 위치 설정
paddlePos = map(analogRead(A0), 0, 1023, 0, 15);
lcd.clear();
// 공 출력
lcd.setCursor(ballPos, 0);
lcd.print("O");
// 패들 출력
lcd.setCursor(paddlePos, 1);
lcd.print("=");
delay(300); // 공이 움직이는 속도 조절
// 공의 위치 업데이트
ballPos += direction;
// 공이 왼쪽이나 오른쪽 끝에 닿았을 때 반대 방향으로 변경
if (ballPos == 15 || ballPos == 0) {
direction *= -1;
}
// 공이 패들과 같은 위치에 있으면 반대 방향으로 이동
if (ballPos == paddlePos) {
direction *= -1;
}
}
3️⃣ 게임 로직 및 코드 구성
게임의 주요 기능을 정리해보겠습니다.
✅ 공(O) 출력 – LCD 화면에서 X축과 Y축 방향으로 움직임
✅ 패들(=) 출력 – 두 개의 가변저항을 사용하여 플레이어가 조작
✅ 충돌 감지 – 공이 패들과 충돌하면 이동 방향 변경
✅ 벽 충돌 처리 – 공이 화면 끝에 도달하면 반대 방향으로 이동
4️⃣ 전체 소스 코드
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int ballPosX = 7; // 공의 초기 X 위치
int ballPosY = 0; // 공의 초기 Y 위치
int directionX = 1; // X축 이동 방향
int directionY = 1; // Y축 이동 방향
int paddleX, paddleY; // 플레이어 패들 위치
void setup() {
lcd.begin(16, 2);
pinMode(A0, INPUT); // 가변저항 1 (X축) 입력 설정
pinMode(A1, INPUT); // 가변저항 2 (Y축) 입력 설정
}
void loop() {
// 가변저항 값을 읽고 패들의 위치 설정
paddleX = map(analogRead(A0), 0, 1023, 0, 15); // X축 이동
paddleY = map(analogRead(A1), 0, 1023, 0, 1); // Y축 이동 (0 또는 1)
lcd.clear();
// 공 출력
lcd.setCursor(ballPosX, ballPosY);
lcd.print("O");
// 패들 출력
lcd.setCursor(paddleX, paddleY);
lcd.print("=");
delay(300); // 게임 속도 조절
// 공의 위치 업데이트
ballPosX += directionX;
ballPosY += directionY;
// 화면 경계 충돌 처리
if (ballPosX == 15 || ballPosX == 0) directionX *= -1;
if (ballPosY == 1 || ballPosY == 0) directionY *= -1;
// 공이 패들과 같은 위치에 있으면 반대 방향으로 이동
if (ballPosX == paddleX && ballPosY == paddleY) {
directionX *= -1;
directionY *= -1;
}
}
5️⃣ 게임 동작 설명
이제 아두이노가 어떻게 게임을 실행하는지 확인해보겠습니다!
✅ LCD 화면에서 공(O)이 좌우 및 위아래로 이동하도록 변경되었습니다.
✅ 패들(=)은 X축과 Y축을 가변저항으로 조작하여 원하는 위치로 조정할 수 있습니다.
✅ 공이 패들과 충돌하면 방향이 반대로 변경됩니다.
✅ 벽과 충돌하면 공이 자동으로 반대 방향으로 이동합니다.
6️⃣ 추가 기능 아이디어
더 재미있는 게임을 만들려면 다음 기능을 추가할 수 있습니다.
🎯 점수 시스템 – 패들이 공을 막을 때마다 점수 증가 🚀 공 속도 조절 – 게임이 점점 어려워지도록 속도 증가 💡 게임 승패 조건 – 일정 점수 이상 도달하면 승리
이런 기능을 추가하면 더욱 흥미로운 핑퐁 게임을 만들 수 있습니다! 🎮
🎯 결론
이번 프로젝트에서는 아두이노와 가변저항 2개를 활용한 핑퐁 게임을 만들어보았습니다!
👉 가변저항을 이용한 플레이어 조작법을 학습했습니다.
👉 LCD 디스플레이를 활용하여 공과 패들을 출력하는 방법을 익혔습니다.
👉 공이 패들과 충돌하는 기본적인 게임 로직을 구현했습니다.
이제 코드를 실행하고 핑퐁 게임을 직접 플레이해보세요!
😊 추가 기능을 개발하고 싶다면 언제든지 질문 주세요! 🚀 즐거운 코딩 되세요! 🎮✨
'아두이노' 카테고리의 다른 글
아두이노 메가 2560 프로그래밍 (0) | 2025.05.24 |
---|---|
아두이노 LCD 자동 슈팅 게임 만들기 🚀 (0) | 2025.05.24 |
아두이노 LCD 회로 설계 및 코드 구현 (0) | 2025.05.24 |
아두이노와 프로세싱을 활용한 LCD 알람 시계 제작 (0) | 2025.05.23 |
서보모터(Servo Motor) 사용 방법 및 회로 구성 (1) | 2025.05.22 |