본문 바로가기
아두이노

아두이노 가변저항을 활용한 핑퐁 게임 만들기

by 모빌리티키즈 2025. 5. 24.
728x90
반응형

🕹️ 프로젝트 개요

아두이노를 활용하여 간단한 핑퐁(Ping Pong) 게임을 구현해보겠습니다. 이 프로젝트에서는 가변저항 두 개를 사용하여 플레이어가 공을 더욱 정밀하게 조작할 수 있도록 만들 것입니다.

첫 번째 가변저항 – X축(좌우 이동)을 조정

두 번째 가변저항 – Y축(상하 이동)을 조정

LCD 디스플레이 – 공과 패들을 출력하여 간단한 게임 화면 제공

물리적 충돌 감지 – 패들에 공이 닿으면 방향이 변경

이번 프로젝트를 통해 아날로그 입력을 활용하는 방법과 LCD 디스플레이 활용법을 익힐 수 있습니다. 게임을 직접 플레이하며, 아두이노로 프로그래밍하는 즐거움을 경험해보세요! 🎮🚀

1️⃣ 필요한 부품 리스트

다음 부품을 사용하여 핑퐁 게임을 만들 수 있습니다.

부품명설명
아두이노 (Arduino Uno) 코드 실행을 위한 마이크로컨트롤러
LCD 16x2 게임 화면을 출력할 디스플레이
가변저항 2개 X축(좌우 이동)과 Y축(상하 이동)을 조작
점퍼 와이어 회로 연결을 위한 필수품
브레드보드 납땜 없이 회로를 구성하는 기판

2️⃣ 회로 연결 방법

🔗 LCD 연결

아두이노와 LCD를 LiquidCrystal 라이브러리를 활용하여 연결합니다.

LCD 핀아두이노 핀설명
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 디스플레이를 활용하여 공과 패들을 출력하는 방법을 익혔습니다.

👉 공이 패들과 충돌하는 기본적인 게임 로직을 구현했습니다.

이제 코드를 실행하고 핑퐁 게임을 직접 플레이해보세요!

😊 추가 기능을 개발하고 싶다면 언제든지 질문 주세요! 🚀 즐거운 코딩 되세요! 🎮✨

728x90
반응형