Arduino:
乱数の生成
方法:
Arduinoには乱数を生成するための直感的な関数があります:randomSeed()
と random()
。まず、プログラムが実行されるたびに異なる数のシーケンスを保証するために、乱数ジェネレーターを初期化するためのシードを設定します。よく使用されるアプローチの一つは、接続されていないピンからのアナログ読み取りによってシードすることです。
void setup() {
Serial.begin(9600);
// 乱数のシードを初期化
randomSeed(analogRead(0));
}
void loop() {
// 0から99の間の乱数を生成
int randomNumber = random(100);
Serial.println(randomNumber);
delay(1000); // 出力の可読性のために1秒遅延
}
上記のプログラムは、setup()
関数内で乱数ジェネレータを初期化し、各ループイテレーションで0から99の間の新しい数字を生成し、その数値をシリアルモニタに出力します。
サンプル出力:
42
17
93
...
深堀り
Arduinoのrandom()
関数は根底に、決定的なシーケンスに従うが統計的にランダムに見える疑似乱数ジェネレータ(PRNG)を活用しています。シーケンスの初期値、またはシードはその予測不可能性に大きく影響するため、ある程度ランダムな入力としてrandomSeed()
の一般的な使用があります。Arduinoによって生成されたランダム性は、ほとんどの趣味のプロジェクトには十分ですが、時間とともにその予測可能性のために、高セキュリティアプリケーションの基準を満たさない場合があります。暗号目的の場合、より洗練されたアルゴリズムや、物理的プロセスを利用して真のランダム性を提供できるハードウェア乱数ジェネレータ(HRNG)に目を向けることが推奨されます。