Arduino、高圧ブースト、20x4 LCDで自作ガイガー・ミュラー計数管を作る
部品と用品
| Arduino UNO | ※どのArduinoデバイスでも可、UNOである必要はありません | 1 |
| DC-DC 1.5-3V to 300-400V 380V 高圧ブースト・ステップアップ電圧インバーターモジュール | 理想的な最終電圧は400Vですが、350-450Vの範囲(GM管の電力範囲)で動作します | 1 |
| STS-5 ガイガー・ミュラー管 | 私はeBayで入手しました(より安価)。ウクライナからの購入になる可能性が高く、到着まで2-3週間かかることをご承知おきください | 1 |
| SunFounder IIC I2C TWI シリアル 2004 20x4 LCDモジュールシールド for Arduino Uno Mega2560 | 配線が少なくて済むためこのLEDディスプレイを使用。20x4であれば問題ありません | 1 |
必要な工具と機械
| はんだごて(汎用) | 回路基板に合わせたデバイスの作成、およびコンデンサを電圧トランスに半田付けするために必要 |
| ブレッドボード、270ピン | 最終的には半田付け可能な自作回路基板を使用しましたが、恒久的でないプロジェクトの場合はこちらでも動作します |
このプロジェクトについて
警告: ADNOVEAの作業にも記載されている通り、このデバイスは高電圧(400V)を使用し、危険です。電流は低いですが、人体にいかなる電流や電圧が流れても心臓に不整脈を引き起こし、停止させ、死に至る可能性があります。この製品を製作する方は、電子工作の経験があり、高電圧回路を扱う際の適切な安全対策を十分に理解している必要があります。
私の目標は、AdNoveaの成果をベースに、より自由にプログラミングできるガイガー・ミュラー計数器を作ることでした(AdNoveaの作品は、修正に適したプログラムが見つからないスクリプトを使用していました)。これにより、ユーザーは管の物理をより深く理解し、自身のプロジェクトのニーズに合ったデバイスを作成できます。
このプロジェクトでは、AdNoveaの回路図を簡略化し、イーサネット接続や全国ネットワークへの接続など複雑な機能を省いた、カウントを表示する個人用カウンターを目指しました。Bluetoothモジュールやブザーの実験もしましたが、必要なときに参照できるバックグラウンド放射線カウンターとしてシンプルにしたかったため、それらは採用しませんでした。

構築は非常にシンプルです(回路図を参照)。このプロジェクトで唯一難しかったのは、一部の部品(GM管と高圧コンバーター)の入手でした。両方をeBayで安価に購入しましたが、どちらも遠方(ウクライナと中国)からの発送だったため、到着まで3-4週間かかりました。
まずブレッドボード上で回路を組み立て、回路の評価と改良を行いました。AdNoveaの図に従って組み立てましたが、ブザー、イーサネットモジュール、GM管への抵抗は省きました(その回路設計では管に十分な電流が流れず、動作しなかったため)。その後、すべてをユニバーサル基板に半田付けしました。

ここではArduino Unoを使用していますが、スペースを節約するならNanoでも代用可能です。GM管を基板に固定するためにビニールテープを使用し、高圧トランスの端子もテープで覆って安全性を高めました。AdNoveaのように綺麗なプラスチックケースを加工する設備がなかったため、Arduinoキット購入時の段ボール箱をケースとして流用しました。

箱の上面に穴を開け、LEDディスプレイがぴったり収まるようにし(さらにテープで補強)、側面にもUSBケーブルを通す穴を開けました。


最初は9V電池で駆動を試みましたが、予想通り長持ちしませんでした。最後に、回路が段ボールに接触する可能性のある箇所に追加でビニールテープを巻き、火災防止と信号漏れ防止を図りました。
作成したプログラムは、GM管が30秒ごとに収集したカウントを2倍して推定CPM(分あたりカウント、GM管の測定単位)を算出し、さらにメトリック換算でμSv/hr(より一般的な基準測定値)を表示します。プログラム実行中は、これまで収集した測定値の平均と標準誤差(SD/√n)も表示します。統計的に見ても、収集されるのは平均バックグラウンド放射線レベルからのサンプルであるため、標準誤差がより適切な指標となります。ただし、Arduinoのメモリ制約により、測定値の配列は100要素までしか確保できませんでした(工夫すればもう少し増やせるかもしれません)。したがって、正確な値を表示できるのは50分間のみですが、それでも十分なサンプルサイズです。
次のプロジェクト(医療従事者として静脈検知デバイスの製作)に移りたいので、このデバイスの細かな改良(CPMがバックグラウンドを超えたらブザーでアラームを鳴らし警告文を表示する、'log period'変数を調整してより短い周期で妥当な迅速測定を可能にする等)は行いませんでしたが、このデバイスをさらに発展させたい方は、自由に改良してより良いものにしてください。
コード
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
unsigned long counts; // GM管イベント用変数
unsigned long previousMillis; // 時間測定用変数
float averageCPM;
float sdCPM;
int currentCPM;
float calcCPM;
LiquidCrystal_I2C lcd(0x27, 20, 4);
float CPMArray[100];
#define LOG_PERIOD 30000 // カウントレート(ミリ秒)
void setup() {
counts = 0;
currentCPM = 0;
averageCPM = 0;
sdCPM = 0;
calcCPM = 0;
lcd.init();
lcd.backlight();
Serial.begin(9600);
pinMode(2, INPUT);
attachInterrupt(digitalPinToInterrupt(2), impulse, FALLING); // 外部割り込み定義
}
void loop() {
lcd.setCursor(0, 2);
lcd.print("CPM Count: ");
lcd.print(counts);
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > LOG_PERIOD) {
previousMillis = currentMillis;
CPMArray[currentCPM] = counts * 2;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("uSv/hr: ");
lcd.print(outputSieverts(CPMArray[currentCPM]));
counts = 0;
averageCPM = 0;
sdCPM = 0;
// 平均と標準偏差を計算
for (int x = 0; x < currentCPM + 1; x++) {
averageCPM += CPMArray[x];
}
averageCPM /= (currentCPM + 1);
for (int x = 0; x < currentCPM + 1; x++) {
sdCPM += sq(CPMArray[x] - averageCPM);
}
sdCPM = sqrt(sdCPM / currentCPM) / sqrt(currentCPM + 1);
Serial.println("Avg: " + String(averageCPM) + " +/- " + String(sdCPM) + " ArrayVal: " + String(CPMArray[currentCPM]));
currentCPM++;
displayAverageCPM();
}
}
void impulse() {
counts++;
}
void displayAverageCPM() {
lcd.setCursor(0, 1);
lcd.print("Avg: ");
lcd.print(outputSieverts(averageCPM));
lcd.print("+/-");
lcd.print(outputSieverts(sdCPM));
}
float outputSieverts(float x) {
float y = x * 0.0057;
return y;
}
回路図
Fritzingで開くと部品が移動してしまうため、回路図は少し変則的です。
geiger_counter_4LAnJvZEpC.fzz
製造プロセス
- Raspberry Piガイガーカウンター構築 - オープンハードウェア放射線センサーチュートリアル
- Arduinoで実現する低コスト・リアルタイム太陽光パネル監視システム
- Bluetooth操作のArduinoスパイボットを自作する
- FlickMote:ジェスチャー操作のIRリモコンでスマートホームを制御
- 自作Arduino TV-B-Gone:全テレビ対応の万能リモコン
- 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
- 給湯器パイロットライト監視システム - サーモカップル電圧をArduinoとRaspberry Piで監視し異常通知
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- Arduinoで作るパンチングキーボードボタン:ストレス解消カスタムキー
- Arduinoプロジェクトのための最適化電源ソリューション
- バレンタインデーの贈り物:DIY 交際日数カウンター