Arduinoでメダルゲームを制作する際、スロット表示として7セグメントLEDを使い、さらに特定条件でサーボモーターを動作させる仕組みは、初心者でも段階的に構築することが可能です。本記事では、7セグメント表示の基本からスロット制御、条件一致時のサーボ制御までを一体的に解説します。
7セグメントLEDの基本構造と表示の考え方
7セグメントLEDは、数字を表示するために7つのLEDを組み合わせたディスプレイです。各セグメントに対応するピンへHIGH/LOW信号を送ることで、0〜9の数字を表現できます。
例えば「0」は6本のセグメントを点灯、「1」は2本のみ点灯というように制御します。Arduinoでは配列を使ってパターン化するのが一般的です。
スロットのように数字をランダム表示する仕組み
スロット部分は乱数を使って数字を切り替えることで実現できます。Arduinoのrandom()関数を使い、一定間隔で表示数字を更新します。
例えばmillis()を使って100msごとに数字を変更することで「回転しているような演出」が可能になります。ボタン入力で停止させるとスロット風になります。
3つの数字を独立して表示する方法
3桁スロットを作る場合、7セグメントを3セット用意するか、シフトレジスタ(74HC595)を使って配線を節約します。
それぞれ独立した変数(例:num1, num2, num3)に乱数を入れ、別々に更新することでスロットの動きを再現できます。
揃ったときの判定ロジック
3つの数字がすべて一致した場合に特別な処理を行う条件分岐を追加します。
if(num1 == num2 && num2 == num3)のような条件式を使うことで簡単に判定できます。この条件成立時にサーボモーターを動作させます。
サーボモーターを30秒動作させる制御
サーボモーターはServoライブラリを使用して制御します。条件成立時に90度へ回転させ、タイマーで30秒間維持します。
millis()を使って時間管理を行い、30秒経過後に0度へ戻すことで自動復帰動作を実装できます。
Arduinoサンプルコード(スロット+サーボ制御)
以下は基本的な構造例です。
#include <Servo.h>
Servo myServo;
int num1, num2, num3;
unsigned long startTime;
bool win = false;
void setup(){
myServo.attach(9);
randomSeed(analogRead(0));
}
void loop(){
if(!win){
num1 = random(0,10);
num2 = random(0,10);
num3 = random(0,10);
delay(100);
}
if(num1 == num2 && num2 == num3 && !win){
win = true;
startTime = millis();
myServo.write(90);
}
if(win && millis() - startTime >= 30000){
myServo.write(0);
win = false;
}
}
まとめ
7セグメント表示とサーボ制御はそれぞれ独立した仕組みですが、条件分岐とタイマー制御を組み合わせることでメダルゲーム風の動作を実現できます。
基本構造を理解すれば、演出の追加やボタン操作なども容易に拡張できるため、まずはシンプルなスロットから段階的に作るのがおすすめです。


コメント