« 絵に描いたような | トップページ | 訂正ばなし »

2011年4月20日 (水)

測ってみよう放射線量

更新が遅れ気味で、済みません。
どうも新年度より、慣れない仕事を仰せつかりまして…。

いろいろと進まないのであります。
そのうえ、本業も年度始まりから暗雲が垂れ込めており、営業必至な状態でございます。やれやれ。

■ というわけで、今回もちょっと簡単なお話でお茶を濁そうというわけです。
 修理しました、と申し上げていたガイガーカウンターでございますが(秋月電子のキットで、浜松ホトニクスの D3372 というガイガーミュラー計数管を使うもの)、修理してもなお、少々動作が不安定だなぁ、と思っておりましたら、衝撃的なミスをしていたことが判明し、それを修繕しましたら、あっさり、安定した動作をするようになりました。

■ 一旦動作してしまえば、「こっちのもの」です。このキット、もともとは周波数カウンタとのセットだったものを単品で販売していたものだったようです。周波数カウンタはもちろん、放射線のカウント値を出力するためのものでした。
 そんなわけで、このキットには、周波数カウンタ行きの端子(EX_OUT)が初めからついていました。ただし出力パルスの電位はHIGHのレベルで9Vです。

■ で、いつぞや書きました、Japanino というマイコンボードが手元にございますので、これに繋いでやろうと思い立ったわけです。幸い、と、あるお方からパーツをいくつか頂きましたので、これを使って繋いでみようかと。
 とは、いえ、ピーク9Vのパルスを5Vに落とすだけですから、単に分圧抵抗をいれれば OK、という次第で…

11042001という単純回路を使いまして…。

■ Japanino の方は、といいますと、D0, D1 端子は予約されているわけで、ユーザが自由な用途に使えるのは D2 端子からです。また、予め POV という 7連のLED つきのおもちゃが D6-D13 を占めています。今回は、この LED 群をつかってレベルメータ的にカウント値に基づく値を出してやろうというわけです。

■ シーベルト値は、実際には人体への影響の度合いを測るための値で、カウント値から単純に計算できるものではありません。核種ごとに、nカウントでxシーベルト、という対応が決められます。つまり、ヨウ素131からの放射線1カウントと、セシウム134からの放射線1カウントと、ではシーベルトの値は違うわけです。
 原発からの放射性物質がまだ身近にあるとして、昨今ではヨウ素のほうは半減期を大分過ぎていますので、むしろ残っているのはセシウム(ヨウ素が崩壊してできたキセノンはどうだ、という話もありますが、ここでは単純に割り切って…)であると考え、セシウムからの放射線毎分1カウントでは、約0.008μSv/h だという話なので(セシウムにもいくつか種類があるだろうという話はちょっと置いておき…)、この値を使って、カウント値からシーベルト値に換算してやろうと思います。

■ Japanino では、パルスが入力される間隔dを測ることにします。1分あたりのカウント値nは、間隔をd(ミリ秒)とすれば、

n=60000/d

であるはずです。例えば間隔が60000ミリ秒であれば、1分あたり1カウントということになり、このときが 0.008μSv/hです。そこで、この値をnに乗じれば、シーベルト値が、

Sv=0.008n=480/d

と計算できます。
 過去5回分の検出の間隔を測定して、ここから μSv/h 値を得て表示するようにしてみます。

const int firstLedPin = 7;
int pin;
const int inPin = 2;
int cnt = 0;
unsigned long lastmills;
int val;
unsigned long sv;
unsigned long at=0;
unsigned long bt=0;
unsigned long ct=0;
unsigned long dt=0;
unsigned long et=0;

const int numPatterns = 9;

int pattern[ numPatterns ] = {
        0b00000001,
    0b01000000,
    0b01100000,
    0b01110000,
    0b01111000,
    0b01111100,
    0b01111110,
    0b01111111,
};

void setup() {
  for(pin = 0; pin < 7; pin++) {
    pinMode(firstLedPin + 6 - pin, OUTPUT);
  }
  pinMode(inPin, INPUT); 
  lastmills = millis();
  at =0;
  bt =0;
  ct =0;
  dt =0;
}

void loop() {
  cnt = 0;
  et = millis() - lastmills + 1; // make sure not zero
  val = digitalRead(inPin);
  if ( val == HIGH ) {
    at = bt;
    bt = ct;
    ct = dt;
    dt = et;
    lastmills = millis();
  }

  sv = at+bt+ct+dt+et;

  if ( sv > 249000 ) {
        cnt = 1;
  } else if (sv >  49800) {
        cnt = 2;
  } else if (sv >  24900) {
        cnt = 3;
  } else if (sv >  12450) {
        cnt = 4;
  } else if (sv >  4980 ) {
        cnt = 5;
  } else if (sv >  2490 ) {
        cnt = 6;
  } else if ( sv >  249) {
        cnt = 7;
  }

  for(pin = 0; pin < 7; pin++) { 
    digitalWrite(firstLedPin + 6 - pin, (pattern[cnt] >> pin) & 0b00000001);
  }
  delay(1);
}

より簡単な計算があるのは分かっておりますが、デバッグのときの都合上、こんな具合になってます。
 分圧抵抗の半田付けから、このプログラムまではほぼ一直線で、ものの20分程度というところだったと思います。Japanino 、こういう目的のためには素晴らしくよくできています。

11042002

■ こうして簡易的なガイガーカウンタができましたが、実際に動作させておくと、現在の東京は0.1μSv/hから0.2μSv/hの間くらい。ときどき0.5μSv/h に上がりますが、あまり持続しません。ということは、おおよそ自然放射線による日本人の年間平均からやや高い程度で、まぁ、問題はない線量だということがわかります。もっとも、原発のせいか、ふつうよりは若干高いレベルではありそうです。
 さらに試みに、冷蔵庫にあった、各地の野菜(ドロ付き)を測ってみましたが、特段特異的な放射線量は測定できませんでした。

□ Japaninoは、こちら:

大人の科学マガジン Vol.27(8ビットマイコン) (Gakken Mook)
大人の科学マガジン編集部
学習研究社
売り上げランキング: 13818

|

« 絵に描いたような | トップページ | 訂正ばなし »

コメント

こんちは。お邪魔しますぅ。

int pattern[] 宣言のところは素直ですね・・・。なるほど・・。

私なら、

 ( 1 << numPatterns ) - 1

  とかやっちゃいますね・・・。これ、可読性が下がるんだよなぁ・・・と思いつつ、バイト数を考えると、ついやってしまうのでした。こういうところに512バイトの中にアセンブラを突っ込んでいた時代のクセがでてしまうのでした。

投稿: chacha_oyaji | 2011年4月20日 (水) 15時32分

>セシウムからの放射線毎分1カウントでは、約0.008μSv/h

120CPM=1μSv/h というのを私もwebで見ましたが、大型のGM管の換算値らしいです。
D3372はミニサイズで、データシートからの計算からは、10分の1の感度だと考えないといけないようです。

下記2例は、ほとんど同じ係数を導きだしています。
http://logsoku.com/thread/kamome.2ch.net/denki/1302918444/901
http://www.fenix.ne.jp/~thomas/products/geiger/

投稿: 通りすがり | 2011年7月16日 (土) 22時19分

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 測ってみよう放射線量:

« 絵に描いたような | トップページ | 訂正ばなし »