乱数生成器を作ってみた
久しぶりの更新です。
音楽から離れていたわけではないんですが、ネタが決まらなくて更新してませんでした。
最近は今更ながらアナログシミュシンセの bx_oberhausen にハマっています。
serum 全盛期に何故?って感じですが…
さて、今回も音楽とは関係ないネタでいきます(笑)
そもそものきっかけはこの記事を読んだことに始まります。
gigazine.net
乱数…乱れた数字…いいですねぇ(オヤジ)
乱数はDTMだとノイズジェネレーターとかに使われていますね。
この乱数はコンピューターが計算で作るのですが、いかんせん計算なので本当のデタラメとは似て非なるものです。
なので暗号とかパスワードに使われる乱数はパソコンのノイズや熱を測定し、その値を手掛かりに乱数を生成しています(とウィキペディアに書いてあった)
ノイズや熱といってもよーわからんので、メルセンヌ・ツイスタという計算法で作った乱数とサイコロを振った結果を比較してみましょう。
条件は1から8の乱数を100回生成し、それぞれの出現回数をカウントします。
まずは本物のサイコロから
次にプログラムで作った乱数
ん~、ちょっと偏っていますね。6の6回と5の20回で3倍の差があるのはいただけません。
計算で作る乱数は本物と似て非なるものですなぁ。
で、最初の記事の話に戻るのですが、放射性物質はデタラメに放射線を放出するので、このデタラメを使って乱数を作った人が紹介されています。
この人は親切にも生成器の仕様を公開してくれているので、マネをすれば作れそうです。
ほいだらワシもいっちょ作ってみるかのぉ!
…ウランガラスはアメリカから買えんのかい!
などと試行錯誤の結果、日本国内で買えるもので作れました!
これを使って生成した乱数を先ほどのダイスを使ったものと比較してみましょう。
おぉ~、なかなか良いではないですか。
では、先人に倣ってレシピなど。
■用意するもの
・ウランガラス(直径4mm、厚さ3mm、穴径1mm)
放射性物質のウランが極微量含まれているガラスです。紫外線を当てると緑色に光るので昔は工芸品に使われていたそうです。
GIGAZINEさんの記事の人はウランが3%も含まれているウランガラスのビー玉を使っていますがアメリカ国内限定品なので日本からは買えません。
日本ではヤフオクなどで0.1%前後含まれているとされているウランガラスが手に入りますが、放射線の強さはまちまちといった感じです。
私は大粒のおはじきと小さいビーズを買って検証した結果、小さいビーズをまとめたほうが放射線を拾いやすいと判断し、小さいビーズを使っています。
・ガイガーカウンター(NetIO Devices社のGC10)
2011年から発売して実績のあるガイガーカウンター。
私はアマゾンで買えたのですが、この記事を書くのに調べたら今はなかったです…
不定期にアマゾンに復活するようですので根気よくチェックしてみてください。
ちなみに基盤から上に出ている2本の線は私の改造によるものです。
・Arduino UNO
マイクロコンピューター。ガイガーカウンターからの信号を蓄えて計算した結果をディスプレイに表示します。
・ Adafruit RGB LCD Shield
www.adafruit.com
日本の代理店はこちら
www.switch-science.com
ディスプレイ。GC10 のディスプレイを流用してもいいのですが、必要なピン数が少ないことと、ボタンが付いていることからこれを選びました。
※バラバラのパーツなのでハンダ付けする必要があります
・その他細かいもの
USBケーブル
パソコンと Arduino UNO を繋ぐのに必須。コネクタの形状に注意。
1mm厚のものが加工しやすく割れにくくて良いかも
ねじとナット
GC10 と arduino UNO をつないだり、土台をつけるためのもの。サイズはM2.6
金属棒(直径1mm)
ビーズをつなげるのに使用。加工しやすいよ。
ピンバイス
プラ板にねじ穴とウランガラス固定用の穴を開けるのに使用。買うなら1mm、2.5mmのドリル付きがいいかも(リンクはドリルなし)
■作り方
1.土台を作る
手に入れたウランガラスは粒が小さいからか、ガイガーカウンターと近くないと乱数に使えるほど放射線をカウントしません。
※ウランガラスの放射線量は胸のレントゲン1回分(50マイクロシーベルト)の6分の1程度です。とはいえゼロではないので扱いには気を付けてください。
なので、できるだけ近づけるためにGC10の下にプラ板をかまして隙間を作ります。
私はアタッチメント形式にしたかったのでプラ板を切っていますが、直付けにする場合は切らなくてもいけそうです。
2.ウランガラスのアタッチメントを作る
接着剤でL字にくっつけたプラ板に金属棒で串刺しにしたウランガラスを固定する。
※プラ板に付いている白いものは、はみ出したアロンアルファです(笑)
3.LCDを外した GC10 と Arduino UNO と Adafruit RGB LCD Shield を合体
注意する点が2つ。
1.GC10 の左から2番目のピンとArduino UNO のデジタル2、
GC10 の左から5番目のピンとArduino UNO のデジタル側のGNDを繋ぐ。
2.Adafruit RGB LCD Shield を作る時に上方のピンを全てハンダ付けしない
GC10 と Arduino UNO を繋げられなくなるので、ピンを少なくハンダ付けします。
私は最初全部付けてしまい、後からピンを外しました…
配線はこんな感じ。
LCDをブッ刺す場合は配線気にしなくても良いですが、一番左のピンがArduino UNO のRESETに刺さるようにしてください。
4.パソコンに Arduino IDE をインストールし、USBでArduino UNO と接続する
https://www.arduino.cc/en/software からArduino IDE をダウンロード&インストールし、起動した Arduino IDE の「ツール」からボードの種類とシリアルポートを選択して接続します。
※細かい IDE の使い方は他のブログを参考にしてください…(_ _)
5.必要なライブラリをインストールする
Arduino IDE の「ツール」-「ライブラリを管理」から「Adafruit RGB LCD Shield Library」と「CircularBuffer」をインストールします。
似た名前のライブラリがあるので注意。
6.プログラムを Arduino UNO に転送する。
下記のページから kuantice2_single.ino をダウンロードするかコピペしてArduino IDEからArduino UNO へ転送する。
これで起動します。
このバージョンは左ボタンで12桁のパスワード、上ボタンで1桁の乱数、下ボタンで4つの1桁の乱数(銀行の暗証番号みたいなやつ)が表示されます。
どーでもいいですが、kuantice という名前は「quantum」+「Dice」からとっています。
ちなみにパスワードを表示するのに16秒かかります(汗
Arduinoの割り込み処理を上手く使ったバージョンでは7秒で出ますがこの記事のバージョンのプログラムの方が分かりやすいと思い、アップしました。
作ってみよう!という奇特な方はプログラムを好きなようにいじってみてください。