아두이노
아두이노 메가를 활용한 퀴즈 대회용 빨리 누르기 시스템 제작하기 🎉
모빌리티키즈
2025. 5. 10. 10:00
728x90
반응형
퀴즈 대회에서 가장 빠르게 버튼을 누른 참가자를 확인할 수 있는 "빨리 누르기 시스템"을 만들어볼까요? 이 프로젝트에서는 아두이노 메가(Arduino Mega)를 이용하여 4개의 버튼(SW)과 LED를 활용하고, 추가적으로 취소 버튼(SW5)까지 구현하여 리셋 기능을 적용할 것입니다.
1. 프로젝트 개요 📌
퀴즈 대회에서 참가자가 버튼을 눌렀을 때, 가장 빠르게 입력된 버튼의 LED가 켜지고 부저가 울리는 시스템을 제작합니다. 또한, SW 5 (취소 버튼)을 사용하여 언제든 초기화할 수 있도록 구현합니다.
🔹 사용 부품:
- 아두이노 메가 2560
- 푸시 버튼 스위치 (SW) 5개
- LED 4개 (각 참가자 표시용)
- 부저 1개 (알림용)
- 저항 (버튼 및 LED에 사용, 10kΩ 풀다운 저항 필요)
- 점퍼 와이어 및 브레드보드
2. 하드웨어 연결 ⚡
✅ 버튼 연결
- SW1~SW4: 참가자 입력 버튼 (핀 2, 3, 4, 5 연결)
- SW5: 취소 버튼 (핀 11 연결)
- 각 버튼은 풀다운 저항(10kΩ)을 추가하여 신호가 안정적으로 감지되도록 설정
✅ LED 연결
- LED1~LED4: 참가자 표시용 LED (핀 6, 7, 8, 9 연결)
✅ 부저 연결
- 부저: 알림음 출력 (핀 10 연결)
3. 아두이노 코드 🖥️
이제 버튼 입력을 감지하고 가장 먼저 버튼을 누른 참가자의 LED가 켜지도록 코드를 작성해 보겠습니다! 추가적으로 취소 버튼을 누르면 시스템을 초기화하는 기능도 포함됩니다.
#define NUM_PLAYERS 4
const int buttonPins[NUM_PLAYERS] = {2, 3, 4, 5}; // 플레이어 버튼 핀
const int ledPins[NUM_PLAYERS] = {6, 7, 8, 9}; // LED 핀
const int buzzerPin = 10; // 부저 핀
const int cancelButtonPin = 11; // 취소 버튼 핀
bool buttonPressed[NUM_PLAYERS] = {false}; // 버튼 상태 저장
bool gameActive = true; // 게임 활성화 상태
void setup() {
Serial.begin(9600);
for (int i = 0; i < NUM_PLAYERS; i++) {
pinMode(buttonPins[i], INPUT); // 일반 입력 모드 설정
pinMode(ledPins[i], OUTPUT);
}
pinMode(buzzerPin, OUTPUT);
pinMode(cancelButtonPin, INPUT); // 취소 버튼 일반 입력 설정
}
void loop() {
if (gameActive) {
for (int i = 0; i < NUM_PLAYERS; i++) {
if (digitalRead(buttonPins[i]) == HIGH && !buttonPressed[i]) { // 버튼이 HIGH가 되면 감지
buttonPressed[i] = true;
activateWinner(i);
gameActive = false;
break;
}
}
}
// 취소 버튼이 눌렸을 경우 모든 상태 초기화
if (digitalRead(cancelButtonPin) == HIGH) {
resetGame();
}
}
void activateWinner(int winner) {
digitalWrite(ledPins[winner], HIGH);
tone(buzzerPin, 1000, 500); // 부저 울림
Serial.print("Player ");
Serial.print(winner + 1);
Serial.println(" wins!");
}
void resetGame() {
Serial.println("Game reset!");
for (int i = 0; i < NUM_PLAYERS; i++) {
buttonPressed[i] = false;
digitalWrite(ledPins[i], LOW);
}
gameActive = true;
noTone(buzzerPin); // 부저 소리 끄기
}
4. 코드 설명 📝
✅ 버튼 입력 감지 & LED 활성화
- 플레이어 버튼(SW1~SW4)이 눌리면 HIGH 신호를 감지하여 가장 먼저 누른 참가자의 LED를 켜고 부저를 울림
- gameActive 변수를 활용하여 한 번 입력되면 더 이상 다른 버튼 입력이 동작하지 않도록 설정
✅ 취소 버튼을 통한 리셋 기능
- SW5(핀 11)가 눌리면 resetGame() 함수 실행
- 모든 버튼 상태 초기화, LED 끄기, gameActive를 다시 활성화
✅ 시리얼 모니터 출력
- 아두이노의 Serial.print()를 활용하여 누가 먼저 버튼을 눌렀는지 시리얼 모니터에 출력
5. 최종 테스트 방법 🚀
💡 아두이노를 PC에 연결하여 코드 업로드 후, 다음과 같이 테스트하세요! 1️⃣ 참가자가 버튼을 누르면 해당 플레이어의 LED가 켜지고 부저가 울리는지 확인 2️⃣ 취소 버튼(SW5)을 누르면 LED가 꺼지고 게임이 다시 초기화되는지 확인 3️⃣ 시리얼 모니터(9600 baud)를 실행하여 누가 먼저 버튼을 눌렀는지 확인
6. 마무리 & 확장 가능성 🌟
이제 간단한 "퀴즈 대회 빨리 누르기 시스템"을 만들 수 있게 되었습니다! 🔹 확장 가능성:
- 참가자 수 증가 (예: 6명 이상)
- 부저의 다양한 사운드 추가 (정답/오답 사운드 변경)
- LCD 디스플레이 추가하여 결과 화면 출력
📢 더 멋진 기능을 추가하면서 프로젝트를 발전시켜보세요!
아두이노를 활용한 창의적인 아이디어, 여러분도 도전해 보세요. 😊
728x90
반응형