DIY LEDルーレットゲーム – Arduino Nanoで作る1人用アーケードゲーム
部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| LED (汎用) | 9 | 赤6、黄2、緑1 |
| タクトスイッチ 12mm (SparkFun等) | 1 | |
| Arduino Nano R3 | 1 | |
| ピンヘッダ メス 8ピン | 1 | Arduino搭載用 |
| DCバレルジャック | 1 | 外部電源入力用 |
必要な工具と機器
- CNCルーター (フロントパネル切削用) – 手工具でも代用可能
アプリとオンラインサービス
- Arduino IDE
プロジェクト概要
1人で遊べるシンプルかつ中毒性のあるゲーム「LEDルーレット」をArduino Nanoで製作しました。9個のLED (赤6・黄2・緑1) が左右に往復し、ボタン押下で停止。緑LEDで停止すれば勝利、赤/黄なら敗北というルールです。
ゲームメカニクス
- LEDが両端間を往復移動 (配列インデックスで管理)
- ボタン割り込み (FALLING) で即座に停止検出
- 起動時: ボタン押下で難易度選択 (ディレイ短縮 = 高難易度)、ダブルクリックで確定
- ゲーム中: ボタン押下で停止、緑(インデックス4)なら勝利演出、それ以外なら敗北
- ゲーム終了後: 自動リセットして難易度選択に戻る
製作ステップ
- 設計・切削: Fusion 360でフロントパネル設計 (9 LED穴 + スイッチ穴)、CNCルーターで切り出し (合板等)。手工具でも可能。
- 組み立て: サンドペーパーで面取り、ホットグルーでパネル接着。
- 配線・プログラミング: スケッチ書き込み、動作確認。
スケッチ (TTBOUNCEライブラリ使用)
ライブラリ: TTBOUNCE (デバウンス・クリック/ダブルクリック検出)
/* LEDルーレット - Arduino Nano
* ピン割当: LED=D4〜D11 (9個), Button=D2 (割り込み対応)
* TTBOUNCEライブラリ必要
*/
#include <TTBOUNCE.h>
int delay_time = 0;
const uint8_t led_array[9] = {4,3,5,6,7,8,9,10,11}; // 物理配置順
const uint8_t button = 2;
uint8_t difficulty = 0;
uint8_t current_led = 0;
bool dir_flag = true; // true=右方向, false=左方向
bool game_ended = false;
bool is_win = false;
bool is_finished_selecting = false;
TTBOUNCE b = TTBOUNCE(button);
void doubleClick() {
Serial.println("double click");
is_finished_selecting = true;
delay_time = floor(500 / (difficulty + 1)); // 難易度に応じたディレイ
Serial.println("difficulty: " + String(delay_time));
sweep();
}
void click() {
Serial.print("Click | ");
digitalWrite(led_array[difficulty], LOW);
difficulty++;
if (difficulty > 8) difficulty = 0;
digitalWrite(led_array[difficulty], HIGH);
Serial.println("Difficulty is: " + String(difficulty));
delay(100);
}
void setup() {
Serial.begin(9600);
b.attachDoubleClick(doubleClick);
b.attachClick(click);
b.setActiveLow();
b.enablePullup();
for (int i = 0; i < 9; i++) pinMode(led_array[i], OUTPUT);
sweep(); // 起動演出
pulse(); // 全点滅
difficulty = 0;
digitalWrite(led_array[difficulty], HIGH);
while (!is_finished_selecting) b.update(); // 難易度選択待機
b.update();
pinMode(button, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(button), button_pressed, FALLING);
delay(1000);
}
void loop() {
if (!game_ended) {
move_led();
delay(delay_time);
} else {
Serial.println("Game over");
if (is_win) {
Serial.println("you won");
for (int i = 0; i < 5; i++) { pulse(); delay(100); } // 勝利演出
}
sweep();
game_ended = false;
is_win = false;
delay(2000);
}
}
void move_led() {
digitalWrite(led_array[current_led], LOW);
if (current_led == 8) { dir_flag = false; current_led--; }
else if (current_led == 0) { dir_flag = true; current_led++; }
else if (dir_flag) current_led++;
else current_led--;
digitalWrite(led_array[current_led], HIGH);
}
void pulse() {
for (int i = 0; i < 9; i++) digitalWrite(led_array[i], HIGH);
delay(100);
for (int i = 0; i < 9; i++) digitalWrite(led_array[i], LOW);
}
void sweep() {
for (int i = 0; i < 9; i++) { digitalWrite(led_array[i], HIGH); delay(50); digitalWrite(led_array[i], LOW); }
for (int i = 8; i >= 0; i--) { digitalWrite(led_array[i], HIGH); delay(50); digitalWrite(led_array[i], LOW); }
}
void button_pressed() {
Serial.println("Button pressed on LED: " + String(current_led));
game_ended = true;
if (current_led == 4) is_win = true; // 緑LED (中央)
else is_win = false;
current_led = 0;
delay(500); // チャタリング対策
}
回路図

拡張アイデア
- マルチプレイヤー対応: 緑以外のLEDにポイントを割り当て (赤=高ポイント、黄=低ポイント)、複数人で交互にプレイし、合計ポイントが少ない方の勝ち。
- サウンド追加: ブザーで効果音 (移動音、勝利/敗北音) を追加。
- 難易度段階増: 現在9段階だが、ディレイ計算式を調整してより細かく。
- バッテリー駆動化: リチウムイオン電池+昇圧モジュールでポータブル化。
まとめ
部品点数最小限、コードもシンプルで、電子工作入門者が「ゲーム機を作った」という達成感を得られる好例です。CNCがなくても、ユニバーサル基板やブレッドボード上で動作確認後、プラケースや段ボールケースに収めるだけでも十分楽しめます。
製造プロセス
- Arduino NanoとMPU-6050で作るリアルタイムジャイロスコープゲーム
- Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
- Arduino Nanoで37LEDルーレットゲームを自作:ヨーロピアンスタイル完全再現
- DIY Arduino USBゲームコントローラー - 高性能ゲームパッドを自作
- 自作16×8 LEDマトリックスでテトリスゲーム:Arduino Nano実装
- ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
- スマートArduino四足歩行ロボットの製作:ステップバイステップガイド
- Pixel Chaser: Arduino Nanoで作るワンタップLEDゲーム
- Bolt IoTとArduino UNOでLED輝度をシームレス制御
- Arduino Nanoで作る8×8 LEDマトリックスのフリップクロック - 自作リアルタイムクロック
- Arduino RGB LEDカラーミキサー:初心者向けDIYプロジェクト