아두이노 나노로 37개 LED 룰렛 게임 만들기
필요한 부품 및 소모품
| 아두이노 나노 R3 (Arduino Nano R3) |
1개 |
| 74HC595 시프트 레지스터 IC |
5개 |
| LED (일반) |
37개 |
| 부저 (Buzzer) |
1개 |
| 범용 NPN 트랜지스터 |
1개 |
| 순간 푸시버튼 스위치 |
1개 |
필요한 도구 및 기계
앱 및 온라인 서비스
프로젝트 소개
룰렛은 '작은 바퀴'라는 프랑스어에서 유래한 카지노 게임입니다. 기존 10개 LED 룰렛 프로젝트가 많은데, 본 프로젝트는 실제 룰렛 휠과 동일하게 37개 LED(유럽식: 0~36)로 구현했습니다.
작동 원리
버튼을 누르면 가상 볼이 던져지며, LED가 순차 점멸하여 회전을 시뮬레이션합니다. 속도가 점차 감소하다가 난수로 생성된 숫자에서 멈춥니다. 회전 중 부저로 사운드 이펙트가 나와 현실감을 더합니다. 회전 속도와 시간은 코드에서 쉽게 조정 가능합니다.
구성 요소
- 아두이노 나노 마이크로컨트롤러
- 74HC595 시프트 레지스터 5개 (37개 LED 제어용)
- LED 37개
- NPN 트랜지스터 1개 (부저 구동용)
- 저항 2개
- 부저 1개
최종적으로 PVC 플라스틱 박스에 넣고 컬러 시트지로 마감했습니다.
코드
아두이노 코드 (C/C++)
int SER_Pin = 8; // 74HC595 핀 14
int RCLK_Pin = 9; // 74HC595 핀 12
int SRCLK_Pin = 10; // 74HC595 핀 11
#define number_of_74hc595s 5
#define numOfRegisterPins number_of_74hc595s * 8
boolean registers[numOfRegisterPins];
int Randomwaarde;
int del = 5;
void setup() {
pinMode(SER_Pin, OUTPUT);
pinMode(RCLK_Pin, OUTPUT);
pinMode(SRCLK_Pin, OUTPUT);
clearRegisters();
writeRegisters();
randomSeed(analogRead(3));
Randomwaarde = random(190, 210); // 정지 위치 랜덤 결정
}
void clearRegisters() {
for (int i = numOfRegisterPins - 1; i >= 0; i--) registers[i] = LOW;
}
void writeRegisters() {
digitalWrite(RCLK_Pin, LOW);
for (int i = numOfRegisterPins - 1; i >= 0; i--) {
digitalWrite(SRCLK_Pin, LOW);
digitalWrite(SER_Pin, registers[i]);
digitalWrite(SRCLK_Pin, HIGH);
}
digitalWrite(RCLK_Pin, HIGH);
}
void setRegisterPin(int index, int value) {
registers[index] = value;
}
void loop() {
for (int x = 0; x <= 36; x++) {
if (del <= Randomwaarde) {
setRegisterPin(x, HIGH);
writeRegisters();
delay(del);
setRegisterPin(x, LOW);
writeRegisters();
del = del + 1; // 점차 느려짐
} else {
setRegisterPin(x, HIGH);
writeRegisters();
delay(10000); // 정지 상태 유지
setRegisterPin(x, LOW);
writeRegisters();
del = 5; // 리셋
}
}
}
회로도
회로도 이미지가 제공됩니다.