乱数生成器を作ってみた

久しぶりの更新です。

音楽から離れていたわけではないんですが、ネタが決まらなくて更新してませんでした。

最近は今更ながらアナログシミュシンセの bx_oberhausen にハマっています。

serum 全盛期に何故?って感じですが…

f:id:sstr649286:20210223124152j:plain

とにかく出音が良い!


さて、今回も音楽とは関係ないネタでいきます(笑)

そもそものきっかけはこの記事を読んだことに始まります。

gigazine.net
乱数…乱れた数字…いいですねぇ(オヤジ)

乱数はDTMだとノイズジェネレーターとかに使われていますね。

この乱数はコンピューターが計算で作るのですが、いかんせん計算なので本当のデタラメとは似て非なるものです。

なので暗号とかパスワードに使われる乱数はパソコンのノイズや熱を測定し、その値を手掛かりに乱数を生成しています(とウィキペディアに書いてあった)

 

ノイズや熱といってもよーわからんので、メルセンヌ・ツイスタという計算法で作った乱数とサイコロを振った結果を比較してみましょう。

条件は1から8の乱数を100回生成し、それぞれの出現回数をカウントします。

まずは本物のサイコロから

f:id:sstr649286:20210223131320j:plain

8面体のサイコロを100回振った結果

次にプログラムで作った乱数

f:id:sstr649286:20210223131852j:plain

メルセンヌ・ツイスタで100回生成

ん~、ちょっと偏っていますね。6の6回と5の20回で3倍の差があるのはいただけません。

計算で作る乱数は本物と似て非なるものですなぁ。

で、最初の記事の話に戻るのですが、放射性物質はデタラメに放射線を放出するので、このデタラメを使って乱数を作った人が紹介されています。

 

この人は親切にも生成器の仕様を公開してくれているので、マネをすれば作れそうです。

 

ほいだらワシもいっちょ作ってみるかのぉ!

 

…ウランガラスはアメリカから買えんのかい!

ガイガーカウンターGM管が付いてないんかい!

 

などと試行錯誤の結果、日本国内で買えるもので作れました!

f:id:sstr649286:20210223140012j:plain

完成品

これを使って生成した乱数を先ほどのダイスを使ったものと比較してみましょう。

f:id:sstr649286:20210223131320j:plain

8面体のサイコロを100回振った結果

f:id:sstr649286:20210223140255j:plain

乱数生成器で100回生成

おぉ~、なかなか良いではないですか。

では、先人に倣ってレシピなど。

 

■用意するもの

・ウランガラス(直径4mm、厚さ3mm、穴径1mm)

放射性物質のウランが極微量含まれているガラスです。紫外線を当てると緑色に光るので昔は工芸品に使われていたそうです。

GIGAZINEさんの記事の人はウランが3%も含まれているウランガラスのビー玉を使っていますがアメリカ国内限定品なので日本からは買えません。
日本ではヤフオクなどで0.1%前後含まれているとされているウランガラスが手に入りますが、放射線の強さはまちまちといった感じです。

私は大粒のおはじきと小さいビーズを買って検証した結果、小さいビーズをまとめたほうが放射線を拾いやすいと判断し、小さいビーズを使っています。

f:id:sstr649286:20210223142111j:plain

190粒入りのビーズ(穴あき)


ガイガーカウンター(NetIO Devices社のGC10)

f:id:sstr649286:20210223143338j:plain

音と光で知らせてくれるよ!

株式会社ネットIO開発

2011年から発売して実績のあるガイガーカウンター
私はアマゾンで買えたのですが、この記事を書くのに調べたら今はなかったです…
不定期にアマゾンに復活するようですので根気よくチェックしてみてください。
ちなみに基盤から上に出ている2本の線は私の改造によるものです。

Arduino UNO

Arduino Uno Rev3 ATmega328 マイコンボード A000066
 

 マイクロコンピューター。ガイガーカウンターからの信号を蓄えて計算した結果をディスプレイに表示します。

・ Adafruit RGB LCD Shield

www.adafruit.com
日本の代理店はこちら

www.switch-science.com
ディスプレイ。GC10 のディスプレイを流用してもいいのですが、必要なピン数が少ないことと、ボタンが付いていることからこれを選びました。

※バラバラのパーツなのでハンダ付けする必要があります

・その他細かいもの

USBケーブル

f:id:sstr649286:20210223161621j:plain

爪伸びてるな~

パソコンと Arduino UNO を繋ぐのに必須。コネクタの形状に注意。

 

プラ板

1mm厚のものが加工しやすく割れにくくて良いかも

 

ねじとナット

GC10 と arduino UNO をつないだり、土台をつけるためのもの。サイズはM2.6

f:id:sstr649286:20210223145422j:plain

LCDを外したGC10。赤丸がM2.6のねじを入れるところ

 金属棒(直径1mm)

 ビーズをつなげるのに使用。加工しやすいよ。

 

ピンバイス

 

プラ板にねじ穴とウランガラス固定用の穴を開けるのに使用。買うなら1mm、2.5mmのドリル付きがいいかも(リンクはドリルなし)

 

■作り方

1.土台を作る

手に入れたウランガラスは粒が小さいからか、ガイガーカウンターと近くないと乱数に使えるほど放射線をカウントしません。

※ウランガラスの放射線量は胸のレントゲン1回分(50マイクロシーベルト)の6分の1程度です。とはいえゼロではないので扱いには気を付けてください。

f:id:sstr649286:20210223151153j:plain

近づけた時は8マイクロシーベルト(銀色の管の下にウランガラス)

f:id:sstr649286:20210223151259j:plain

少し離した時は1.6マイクロシーベルト

なので、できるだけ近づけるためにGC10の下にプラ板かまして隙間を作ります。

私はアタッチメント形式にしたかったのでプラ板を切っていますが、直付けにする場合は切らなくてもいけそうです。

f:id:sstr649286:20210223152528j:plain

裏面。ねじでGC10に固定している

f:id:sstr649286:20210223152615j:plain

横から。1mmプラ板とワッシャーで隙間を作っている。爪切らなきゃ…

2.ウランガラスのアタッチメントを作る

接着剤でL字にくっつけたプラ板に金属棒で串刺しにしたウランガラスを固定する。

プラ板に付いている白いものは、はみ出したアロンアルファです(笑)

f:id:sstr649286:20210223153112j:plain

下のプラ板は幅2cm、長さ7.3cm。金属棒を曲げてプラ板に刺してる

f:id:sstr649286:20210223153953j:plain

いい感じの隙間ができた

 

3.LCDを外した GC10 と Arduino UNO と Adafruit RGB LCD Shield を合体

注意する点が2つ。

1.GC10 の左から2番目のピンとArduino UNO のデジタル2、

  GC10 の左から5番目のピンとArduino UNO のデジタル側のGNDを繋ぐ。

f:id:sstr649286:20210223154859j:plain

Arduino UNO に繋ぐピン

2.Adafruit RGB LCD Shield を作る時に上方のピンを全てハンダ付けしない

GC10 と Arduino UNO を繋げられなくなるので、ピンを少なくハンダ付けします。
私は最初全部付けてしまい、後からピンを外しました…

f:id:sstr649286:20210223155320j:plain

最低でも2番とGND の所はピンを付けない

配線はこんな感じ。

LCDをブッ刺す場合は配線気にしなくても良いですが、一番左のピンがArduino UNO のRESETに刺さるようにしてください。

f:id:sstr649286:20210223155428j:plain

 

4.パソコンに Arduino IDE をインストールし、USBでArduino UNO と接続する

https://www.arduino.cc/en/software からArduino IDE をダウンロード&インストールし、起動した Arduino IDE の「ツール」からボードの種類とシリアルポートを選択して接続します。

※細かい IDE の使い方は他のブログを参考にしてください…(_ _)

f:id:sstr649286:20210223162738j:plain

環境によってポート番号は異なります

 

5.必要なライブラリをインストールする

Arduino IDE の「ツール」-「ライブラリを管理」から「Adafruit RGB LCD Shield Library」と「CircularBuffer」をインストールします。

f:id:sstr649286:20210223163122j:plain

f:id:sstr649286:20210223163135j:plain

似た名前のライブラリがあるので注意。

 

6.プログラムを Arduino UNO に転送する。

 下記のページから kuantice2_single.ino をダウンロードするかコピペしてArduino IDEからArduino UNO へ転送する。

github.com

f:id:sstr649286:20210223170530j:plain

警告が出ますがlcd.begin()の第3引数を指定していないだけなので大丈夫です

これで起動します。

このバージョンは左ボタンで12桁のパスワード、上ボタンで1桁の乱数、下ボタンで4つの1桁の乱数(銀行の暗証番号みたいなやつ)が表示されます。

f:id:sstr649286:20210223172113j:plain

下の赤丸部分のボタンを使います

どーでもいいですが、kuantice という名前は「quantum」+「Dice」からとっています。

 

ちなみにパスワードを表示するのに16秒かかります(汗

 

Arduinoの割り込み処理を上手く使ったバージョンでは7秒で出ますがこの記事のバージョンのプログラムの方が分かりやすいと思い、アップしました。

作ってみよう!という奇特な方はプログラムを好きなようにいじってみてください。