ガイガーカウンターを用いて計測した結果をPachubeにアップロードすることで、自分の環境の放射線量を計測し、他の地域のデータと比較できる
材料
ガイガーカウンターとPCの場合
- ガイガーカウンター:1個(SparkFunのSEN-09848)
ガイガーカウンターとArduinoの場合
Pachubeの準備
Pachubeへのサインアップ
Pachubeを使い始めるにはサインアップが必要です。2011年3月現在、Pachubeには無料プランであるPachubeとPachube Pro/Premium/Maximum/Enterpriseの4つの有料プランがあります。まずは、無料で登録できるBasicプランで手軽に試してみましょう。サインアップの手順は次のようになります。
- ウェブブラウザでhttp://www.pachube.com/にアクセスする。
- ページ右上の「SIGNUP」をクリックする。
- 「Choose a plan and sign up below」(サインアップするプランを以下から選んでください)と表示されているページの一番左側にある「Pachube」プランの「Sign Up」ボタンをクリックする。
- サインアップページで必要事項を記入し、記入が終わったらSign upボタンをクリックする。
- Choose username:ユーザ名(英数字のみ、スペースなし、ピリオドも使えないので注意)
- Email:電子メールアドレス
- Confirm email:電子メールアドレス(確認)
- Password:パスワード
- Confirm password:パスワード(確認)
- Verify and sign up:画像として表示されている文字を入力
- 「Thanks for signing up! An activation email has been sent to <入力したメールアドレス>. Please check your mail and follow the instructions to complete your signup.」(サインアップありがとう!アクティベーションのメールが送信されました。サインアップを完了するにはメールをチェックしてそこに書かれている説明に従ってください。)と表示され、確認のメールが届く。 メール中の「To activate your new Pachube account, please click on the following link:」(新しいPachubeアカウントをアクティベートするには、次のリンクをクリックしてください:)の次の行にあるリンクをクリックする。
- アクティベーションが完了し、ウェブブラウザに「Thanks for activating your account」(アカウントをアクティベートしてくれてありがとう)と表示される。
図1:サインアップの登録画面例
以上でサインアップは完了です。
Pachubeでのフィードの登録
フィードを登録するには、ログインした後に表示される画面の右側の[INPUT • Register a Feed]の中の[REGISTER A FEED]というリンクをクリックし、フィードの登録画面に入ります。
登録画面では多くの項目が表示されていると思いますが、最低限記入が必要なのは[Feed type]と[Feed title]です。[Feed type]は[automatic](自動)と[manual](手動)がありますが、この後で紹介するサンプルは[manual]に該当しますので後者をチェックします。[Feed title]は、このフィードの題名ですので、簡潔にわかりやすいものを付けましょう。
図3:新規フィードの登録画面
その他の項目は任意となっていますが、できるだけ全て記入しましょう。特に、Feed Tagsは重要です。ここにこのフィードがどのようなものかをきちんと記入しておくことで、Pachubeに登録されている数多くのフィードの中から簡単に検索できるようになります。ここには、「sensor:type=radiation,sensor:model=lnd-712」のようにタブ区切りで記入します。「sensor:type=radiation」はセンサのタイプが放射線であること、次の「sensor:model=lnd-712」はセンサで使用されているガイガー=ミュラー計数管のモデルがLND-712であることを示します。どの計数管を用いるかで結果は大きく異なりますので、どの計数管を用いたのかは重要な情報になります。右側の部分では、このフィードを配信する場所を決めます。Google Mapのインタフェースを利用していますので、Google Mapsを使ったことがあれば設定は簡単でしょう。また、[Exposure](設置場所が屋内か屋外か)、[Disposition](固定か移動か)、[Domain](物理的なものか仮想か)についても記入していきます。
新しいデータストリームの追加
新しくデータストリームを追加するには、フィードの編集画面の下にある「Datastreams」の中の「Add a new datastream」(新しいデータストリームを追加)をクリックします。すると新しいフィードが追加されますので、ID(データストリームのID:最初は0で、1、2、3…のように順に増やしていく)Tags(タグ:フィードに設定したのと同じものでもよい)Units(単位)Symbol(シンボル)を記入し、最後のTypeを設定します。計測したデータを扱う場合、単位は非常に重要ですし、検索結果にも影響しますので、間違えないように記入しましょう。
図4:データストリームの設定例
表1:データストリームの設定項目一覧
| ID | Units | Symbol | Type |
|---|---|---|---|
| 0 | counts/minute | cpm | derived units |
| 1 | microsieverts/hour | µSv/h | derived SI |
| 1 | nanogray/hour | nGy/h | derived SI |
SparkFunのガイガーカウンターをProcessingで使う
ガイガーカウンターの準備
SparkFunのガイガーカウンター(SEN-09848)は、LND Inc.のガイガー=ミュラー計数管(参考:Wikipedia日本語版での解説)LND-712を使用した完成品で、ボード上に搭載されているUSB⇔シリアル変換チップにより、USBでPCに接続して簡単に計測できるようになっています。
図5:SparkFunのガイガーカウンター
USBでPCに接続するには、ドライバのインストールが必要です。Arduino Unoよりも前のArduinoボードやGainer(Gainer Miniを除く)を既に利用している場合には、同じチップが使用されているため、そのまま動くかもしれません。そうでない場合には、FTDIが提供しているドライバ(ダウンロードページはこちら)から自分の使用しているプラットフォームに対応するドライバをダウンロードし、インストールをすませておきましょう(インストール方法に関する参考リンクはこちら)。
なお、ガイガー=ミュラー計数管には数百Vの高い電圧を与えるようになっています。ボード上にスイッチがありますが、このスイッチはUSBケーブルでPCに接続した後にオンにし、USBケーブルを外す前にオフにするようにします。こうすることで、高圧回路に残っている電流を処理できるため、感電する危険性がほぼなくなります。
Processing側の準備とテスト
Processingで利用する場合には、次のURLからEEMLライブラリを取得してユーザライブラリフォルダ(書類/Processing/libraries、なければ作成する)にコピーしておきます。
[URL]http://www.eeml.org/library/
また、ブラウザで以下のURLを開き、Downloadsボタンを押してサンプルをダウンロードします。ダウンロード時には形式を選択できますので、「Download .zip」を選択してZIP形式でサウンロードします。
[URL]https://github.com/kotobuki/geiger-counter/tree/master/processing/
ダウンロードが終わったら、Processingでスケッチを開き、PrivateSettingsタブに切替えます。そこで、文字列feedUrlをPachubeの[Feeds]タブに表示されているURL(例: http://api.pachube.com/v2/feeds/12345.xml)に、同じく文字列apiKeyを[Settings]タブに表示されているYour Master API Keyの文字列で置き換えてください。なお、このAPI Keyは重要な情報ですので、これを入力したままのコードをネットワーク上に公開しないように注意してください。
図6:SettingsタブでのYour Master API Keyの表示例
図7:PrivateSettingタブを編集している様子
この変更を行った後、ガイガーカウンターをUSBケーブルでPCに接続し、Processingでスケッチを実行すると、1分ごとに値がPachubeに対してアップロードされます。
図8:Processingでデータストリームを更新している様子
ガイガーカウンターとArduinoボード+Ethernetシールドの場合
ガイガーカウンターとArduinoボードとEthernetシールドの組合わせにより、PCを介さずにネットワークに接続し、データストリームを更新することができます。
図9:ガイガーカウンターとArduinoボード+Ethernetシールドを接続した様子
ガイガーカウンターボードとArduinoボードの接続は次のようになります。ガイガーカウンターの端子にはコネクタやソケットははんだづけされていませんので、ここに直接ワイヤをはんだづけするか、ピンソケットをはんだづけしてジャンパワイヤなどでArduinoボードまで接続します。
表2:ガイガーカウンターとArduinoボードの接続
| ガイガーカウンター | Arduinoボード |
|---|---|
| 5V | 5V |
| GND | GND |
| OUT | D3 |
次に、ブラウザで以下のURLを開き、Downloadsボタンを押してサンプルをダウンロードします。ダウンロード時には形式を選択できますので、「Download .zip」を選択してZIP形式でサウンロードします。アーカイブは、適当な場所(書類/Arduinoの中に入れておくとArduino IDEから開く際に便利です)に展開しておきます。
[URL]https://github.com/kotobuki/geiger-counter/tree/master/arduino/
また、今回のスケッチを実行するにはEthernetDHCPライブラリ(開発者:Georg Kaindl)が必要になります。次のURLからこのライブラリを含むライブラリ群であるArduino Ethernetをダウンロードして、EthernetDHCPをユーザライブラリフォルダ(書類/Arduino/libraries、なければ作成する)にコピーしておきます。
[URL]http://gkaindl.com/software/arduino-ethernet/
以上で準備が完了しましたので、GeigerCounterToPachubeをArduino IDEで開きます。次に、PrivateSettings.hという名前のタブを開き、その中のenvironmentIdとapiKeyを、Pachubeで作成したフィードにあわせて設定します。また、macAddressをEthernetシールド裏側のシールに書かれているMACアドレスに従って編集します。
図10:PrivateSettingsタブを編集している様子
// アップロードするフィードのID
const int environmentId = 12345;
// APIキー(shared secure keyを推奨)
const char *apiKey = "*******************************************";
// Arduino Ethernetシールドの底面に記載されているMACアドレスに置き換える
byte macAddress[] = {
0x01, 0x23, 0x45, 0x67, 0x89, 0xAB };
// 更新の間隔(分単位)
// 小さなGM管を使用する場合には間隔を長めにすることで安定した値が得られるようになる
const int updateIntervalInMinutes = 5;
// cpmからµSv/hに変換するための係数
// この値はLND 712用の値であるため、他のGM管を使用する場合にはデータシートを参照して求める
const float conversionCoefficient = 0.002333;
編集が終わったら、スケッチをArduinoボードにアップロードします。アップロードが完了したら、シリアルモニタを開いて動作を確認します。正常に動作していれば、最初にDHCPでIPアドレスを取得した後、1分ごとにデータストリームを更新します。
図11:Arduino IDEのシリアルモニタで動作確認している様子
なお、この例ではEthernetシールドから有線で接続していますが、無線LANコンバータを利用することにより、無線で接続することも可能です。動作確認の段階では有線の方が簡単だと思いますが、常設する場合には無線の方が便利でしょう。なお、無線LANコンバータを用いる方法に関しては菅工房さんの記事「ウェザーステーション観測データ」を参考にさせていただきました。
解説
ガイガー=ミュラー計数管について
ガイガー=ミュラー計数管(Geiger-Müller counter)はGM計数管、あるいはガイガー・カウンターとも呼ばれ、放射線の量を計測できるセンサです。不活性ガスを充填した筒中に放射線が入った際、電極間に流れるパルス電流が流れることを利用し、そのパルスをカウントすることで放射線の量を計測します。GM計数管の種類により、計測できる放射線の種類には違いがありますが、α線、β線、γ線の3種類を計測できるものもあれば、γ線とβ線しか計測できないものもあります。なお、複数の種類を計測できる場合でも、どれが筒内に入ったのかを区別することはできません。
計測時の単位としてはCPM(=Counts Per Minute、1分間あたりにカウントしたパルスの数)になりますが、データシートに記載されている特性図を元に係数を求めることで、政府などの公式な機関が発表する際に標準的な単位となっているµSv/h(microsieverts per hour、マイクロシーベルト毎時)に換算することもできます。本レシピで紹介しているサンプルでは、LND-712のデータシートから求めた係数により、CPMからµSv/hに換算して両方をPachubeに対してアップロードするようにしています。
GM計数管は、さまざまなキットや完成品も販売されており、単体でも比較的安価で購入できることから、手軽に使えるのが特長です。ただし、万能ではないということに注意する必要があります。まず、計測できるのはあくまで放射線の数だけで、放射線のエネルギーを直接知ることはできません。また、筒中に放射線が入った時しか計測できないため、空気中に浮遊している放射性物質について測定することはできません。さらに、個体ごとの誤差や、駆動する電圧よる感度の違いもあります。公的機関で使用している測定器は、出荷時、および定期的に適切な校正を行って正確な測定ができるようになっていますが、キットを自分で組み立てたものなど、校正を行っていない計測器で計測したデータには誤差が含まれています。
こうした制約があることを理解した上で、自分で計測した値と、文部科学省が毎日公開している都道府県別環境放射能水準調査結果や、周囲で観測している観測点の情報を総合することにより、総合的に判断するようにしましょう。Pachubeにも、個人で計測したデータ以外に、さまざまな公式計測データを変換してアップロードされていますので、関東圏に関しては複数の情報を比較するが可能でしょう。特に、値に急な変化が見られた際には、1つの計測点のデータだけで判断するのではなく、周囲の計測点のデータと照らし合わせた上で判断しましょう。
PachubeのAPIについて
Pachubeは、HTTPで各種APIを利用することにより、さまざまなアクセスが可能です。その一例として、グラフ表示の際の最大値と最小値をカスタマイズする方法を紹介します。Pachubeでは、フィードにアクセスした際、次のようにグラフが表示されます(これはこのページにアクセスした際に実際に生成されたものです)。

しかし、最初にデータストリームを生成した状態では、グラフの縦軸は、登録されたデータの最大値と最小値に従って設定されます。人工的な放射線がなく、自然の放射線のみで推移している場合には、数十前後の値で変化が続くため、かなり小さな幅の変化が非常に大きく強調されてしまいます。これを設定するには、APIを使用してフィードの最大値と最小値を設定します。
APIに関しては、次のページに詳細な説明があります。
[URL]http://api.pachube.com/v2/
この中で、フィードの設定に関しては次の部分に説明があります。
[URL]http://api.pachube.com/v2/#update-feed-put-v2-feeds-feed-id
ここでは、JSON(JavaScript Object Notation)形式で設定を行ってみます。まず、次のような内容のテキストファイルを用意します。これは、IDが0と1の2つのデータストリームに対して、それぞれの最大値と最小値を指定するものです。ここでは、IDが0のcpmについては0〜100に、IDが1のµSv/hについては0〜1に設定しようとしています。
{
"version":"1.0.0",
"id":"21508",
"datastreams": [
{
"max_value":"100.0",
"min_value":"0.0",
"id":"0"
},
{
"max_value":"1.0",
"min_value":"0.0",
"id":"1"
}
]
}
これを用いてHTTPでアクセスするにはいくつかの方法がありますが、cURLというツールを使うと便利でしょう。cURLはMac OS Xでは標準でインストールされています。もし自分の環境にインストールされていない場合でも、大抵のOSについてはダウンロードできるようになっているようですので、ダウンロードしてセットアップしましょう。上記のファイルをfeeds.jsonというファイル名で保存し、次のようにターミナルから実行すると、HTTPでPachubeにアクセスして設定を行うことができます。
curl --request PUT --data-binary @feeds.json --header "X-PachubeApiKey: 自分のAPIキー" http://api.pachube.com/v2/feeds/自分のフィード番号.json
もし、エラーが表示された場合には、API Keyに正しい文字列が設定されていない場合などが考えられますので、再度内容を確認してから実行してみましょう。
関連リンク
- Pachube:http://www.pachube.com/
- このレシピで紹介しているフィード:http://www.pachube.com/feeds/21508
- Haiyan Zhangによる放射線量地図:http://japan.failedrobot.com/
- Pachubeを利用して可視化している放射線量地図の紹介:Crowd-sourced realtime radiation monitoring in Japan
- Pachubeで使用しているEEML(Extended Environments Markup Language):Extended Environments Markup Language (EEML)
- LNDの製品紹介ページ:712 End Window-Alpha-Beta-Gamma Detector
- ストロベリー・リナックスのガイガーカウンターを使ってPerlスクリプトからフィードする製作記事:ryuchi's wiki pages
謝辞 / Acknowledgments
- Special thanks to SparkFun Electronics for developing and providing me a Geiger counter to write this article. Without your prompt action, it was not possible for me to write this article in very short time.


昨日、注文してあったガイガーカウンタ(SparkFunのSEN-09848)が到着したので、情報を漁っていたら、こちらが見つかりました。
自分も計測したデータをPachubeにアップすることにしました。
システムは、AdobeAIRで組みました。徹夜でした。
大変分かりやすい説明で参考になりました。
ありがとうございます。
Posted by: ryunos | 2011.04.05 at 13:49
>ryunosさん
コメントありがとうございました。お役に立てたようで嬉しく思います。Pachubeのデータも順調にアップされているようですね。AIRで組まれたとのこと、興味を持つ方も多いと思いますので、もしブログ記事など公開されたら是非お知らせください。
Posted by: kogoro.kotobuki | 2011.04.05 at 16:40
J408+Arduinoを使って放射線測定器を作り、Pachubeにデータ更新するにあたり、大変参考になりました。ありがとうございました。
Posted by: vj | 2011.05.29 at 15:44
さて1点だけご報告なのですが、割り込みでのカウント数が異常に多くなりましたので、ソースを拝見させていただき、eventFlagに関する部分を全て削除したところ、正常のカウントになりました。
Posted by: vj | 2011.05.29 at 15:45
>vjさん
お知らせとご指摘をありがとうございます。「eventFlagに関する部分を全て削除」とのことですが、カウントがあった時にシリアル、LED、スピーカに出力している部分ですよね。こちらでは正常な値がとれていたのですが、再度確認してみます。後発の発生回路などはどれをお使いになりましたか?
Posted by: Shigeru Kobayashi | 2011.06.04 at 07:26
Arduino+SEN-09848にて参考にさせていただき無事稼働しました。
Arduinoのサンプルコードそのままですと、データストーリームのIDにSymbolが表示されたのでソースをちょっと変更して稼働させています。
Posted by: Katsumo | 2011.06.07 at 02:15
SEN-09848が手に入りましたので、参考にさせて頂いております。ひとつ気になることがあるのですが、LND-712のγ感度係数「00.002333」は、こちら(http://einstlab.web.fc2.com/geiger/geiger3.html)のサイトでは
LND712 のγ線感度 18cps/(mR/h)
とされているようです。
18cps/(mR/h) = 1.8cps/(uSv/h) = 108cpm/(uSv/h)
1分間に108カウントすると1uSv/h
つまり、
uSv/h = CPM * 0.00926
一応、報告させていただきます。
Posted by: En_daisuke | 2011.06.09 at 00:47
>endaisukeさん
ご指摘ありがとうございました。早速ソースを修正させていただきました。
Posted by: Shigeru Kobayashi | 2011.06.09 at 15:14
>Katsumoさん
こちらですが、IDは必ずしも数字でなくてもよい、ということがあり、シンボルに近いものの方が分かりやすいのでは、という指摘がありましたので変更しました。しかし、数字の方がアクセスしやすい、という場合もあると思いますので、その場合には変更していただけたらと思います。次のリビジョンでは、これも設定可能にしようと思います。
Posted by: Shigeru Kobayashi | 2011.06.09 at 15:21
SparkFunのSEN-09848はどちらのファームウェアを使いますか?v12かv13?
Posted by: Robert B. Staehlin | 2011.06.11 at 22:06
Have no cash to buy a building? Don't worry, just because it's available to get the loans to solve such kind of problems. Therefore get a small business loan to buy everything you require.
Posted by: Paige30Fletcher | 2011.11.06 at 15:40
I wanted to convey my thanks for what I have gained from this post. It's not often I come across sites that are as well written and presented - so best wishes with everything!
Posted by: AustinCOOPER | 2012.01.20 at 21:41
kobayashiさま。
この記事を参考にして、というかマネて放射線観測所を作りました。おかげさまでサクサク作ることが出来ました。ありがとうございます。
http://d.hatena.ne.jp/ntaka206/20120121
ソースで変更した場所が一つだけあったのでお知らせします。PachubeのIDが32767を超えているとおかしくなるので、intからunsigned intにしました。
変更前
const int environmentId = 44499;
変更後
const unsigned int environmentId = 44499;
Posted by: ntaka | 2012.01.23 at 17:46