GM管をPepperにつなぐ
GM管をPepperにつなぐ
福島原発の事故をきっかけに、身近な放射能を測定し共有するプロジェクトが開始されています。
放射能の測定にはガイガーミュラー管(GM管)が使われますが、現在GM管は品薄状態のようです。@felis_silvさんがソ連製のGM管を入手されキット化して配布されています。私もキットを入手し、はんだづけカフェで組み立てました。その場で動作の確認および調整までして頂くことができました。
せっかく作ったものなので、Pepper経由でパソコンに取り込めるようにしました。
@felis_silvさんのキットではGM管で放射能を検知すると、PICのポートがH->Lになる仕様ですので、パソコン側でこの立ち下がりを数えればカウンタが完成します。単純にPepper経由でパソコンからポーリングしても良いのですが、USBを経由してのポーリングになり効率が良くありません。そこで、Pepper側でカウントするモードを追加しました。※Tiny85の書き換えが必要になります。
ハードウエア
・予めキット側は5Vで動作するように電圧を調整しておきます。
・GM管キットの電源はUSBから取ります。Pepperの1、6ピンから取ります。
・カウンタ入力はPepperの2番ピンです。GM管キットのPULSE端子に接続します。
JP1は外しておきます。
※上記キット以外でも、放射能検出時にパルスを出せるカウンタであればインタフェース可能です。
PepperのKONFIGURATION_9の仕様
・カウンタ16ビット、2チャンネル
・C*コマンドでカウンタの値を読み出す。
返り値は CXXXXYYYY* (XXXXがチャネル0でYYYYがチャネル1,HEX出力)
・c[01]*コマンドで片方のチャンネルのみ読み出し
返り値はc[01]XXXX*
・X[01]*コマンドで立ち上がり、立ち下がりのカウントタイミングを指定
同時にカウンタをクリアします
また、ProcessingのGainerライブラリもKONFIGURATION_9をサポートする機能を追加しました。
gainer_libの追加仕様
・インスタンス作成時にコンストラクタの2番目の引数としてカウンタモードに設定
Gainer g = new Gainer(this, Gainer.MODE9)
・カウンタ値をクリア/立ち下がりモードに設定
g.resetCounter(0);
・カウンタ値を取得
g.peekAllCounter();
・カウンタ値を参照する
int c = g.counterInput[0];
スケッチでは1分毎にカウンタ値の増分を計算し、CPM(Counts per minute)として画面に表示しています。Pepper内部のカウンタは16ビットですので、長時間利用するとオーバーフローする可能性があります。連続で運用する場合には、適当なタイミングでクリアするか、ソフトでオーバーフローを検知する必要があります。
ダウンロード
•Pepperのファームウエア( pepper20110411.tgz )
•Processing用Gainerライブラリ(Pepper専用)(gainer_lib_processing_v1-1-0rc5-pepper.tgz)
•Sketch( geigerCounter.pde ) UPDATE (2011/04/25)
動作例
簡単なアプリですが、ネット上にアップロードするように拡張することも容易だと思われます。
【2011/04/17追記】
高電圧を使っていることから感電防止の意味もあり、ダイソーの100円ペンケースに入れました。試作Pepper基板を使って、ピンを垂直に立てたPepperを作成し、GMカウンター基板に裏返しに付けるようにしました。(写真左の緑の基板)
【2011/04/25 追記】
上記のProcessingのプログラムをアップデートしました。簡単なグラフ表示をするようにしました。
2011年4月14日木曜日
Pepperでガイガーカウンター