v2 基板 ・ Arduino Nano ESP32

ACCEL KITCHEN — COSMIC RAY DETECTOR v2

宇宙から降る粒子を、
1 個ずつ数える。

シンチレータの光を SiPM で受け、ピークホールドで波の高さをつかみます。Arduino Nano ESP32 が波高・時刻・温度・湿度・気圧を 1 イベント 1 行で記録し、USB・Bluetooth・microSD に同時に出力。外部の検出器を 3 台までつないで、同時計測もできます。

3D モデルを準備しています
SCROLL

01 — INSIDE

部品ごとに、
役割があります。

光を受けてから記録するまで。カメラが該当する部品へ移動します。

01 / 10

光を受ける シンチレータ × SiPM

ミューオンがシンチレータを通ると、落としたエネルギーの一部が光になります。その光を 6 mm 角の SiPM(onsemi MICROFC-60035)が電気のパルスに変えます。SiPM は 40 mm 角の子基板にのっていて、子基板ごと品種を差し替えられます。

  • マイクロセル 35 µm × 18,980
  • Vbr 24.2〜24.7 V
  • J1 / J2:HV・GND・信号 ×2
02 / 10

バイアスをつくる HV 29.0 V

裏面の LT3461 が USB の 5 V から 29.0 V を昇圧してつくり、降伏電圧より 4.3〜4.8 V 高くかけます。値は抵抗の分圧で固定。子基板の 49.9 Ω と 10 µF でノイズを落としてから SiPM に届けます。

  • HV = 1.255 × (1 + 221k / 10k)
  • L1 47 µH
03 / 10

増幅する LT1807(U2A)

SiPM の電流は子基板の R12(49.9 Ω)で電圧になり、U2A の非反転アンプで増幅されます。ゲインは裏面のトリマ R10 で ×5.0〜×45。入力は 1 kΩ と BAT54S で守られています。アンプの出力は TP2 で測れます。

  • G = 1 + (R5 + R10) / R3
  • R3 249 Ω・R5 1 kΩ
  • DC 結合
04 / 10

山の高さをつかむ ピークホールドとしきい値

U2B のピークホールドが、数百 ns のパルスの山を 2 倍にしてコンデンサ C6 にためます。ためた電圧は A0 に出てきます。マイコンが読み終わると、D8 から 20 µs のパルスを出して Q1 で放電し、次のパルスに備えます。

  • ホールド ×2
  • A0 に出力
  • D8 → Q1 で放電
05 / 10

読み取る Arduino Nano ESP32

A0(ホールドの出力)を読み続け、しきい値を超えたらイベントとして扱います。外部検出器の同時判定を待ってから A0 を 12 bit で読み、その値が波高になります。しきい値は起動のたびに、A0 を 1 秒見てノイズの最大値 + 50 に自動で合わせます。

  • ESP32-S3・BLE
  • A0 をソフトで比較
  • トリガーの約 60 µs 後に読む
06 / 10

残す microSD

FAT32 のカードに /LOG0001.TXT から順にログを書きます。1 行ごとに書き込みを確定するので、USB を抜いても失うのはせいぜい最後の 1 行。USB と Bluetooth に出すのと同じ行がそのまま残ります。

  • Hirose DM3AT
  • SPI 4 MHz
  • 側面から差す
07 / 10

環境を測る BME280

温度・湿度・気圧を 2 秒ごとに読み、各イベントの行に書きます。気圧が上がると計数率が下がる「気圧効果」を調べられます。SiPM の降伏電圧は 1 °C あたり約 21.5 mV 変わるので、温度はあとで波高を見直すときにも使います。

  • I²C
  • 温度・湿度・気圧
08 / 10

知らせる OLED・LED・ブザー

基板の端に立てた 0.96 インチ OLED に、計数・計数率・しきい値・環境値を 2 秒ごとに表示。イベントごとに LED が光り、ブザーが波高に応じた高さで「ピッ」と鳴ります(対数で 500〜4000 Hz)。A7 に振動モーターを後付けすると、大きなパルスほど長く震えます。

  • SSD1306 128 × 64
  • 25 ms のビープ
  • 振動 20〜120 ms
09 / 10

つなぐ 3.5 mm ジャック × 4

OUT が 1 つ、IN が 3 つ。自分がトリガーすると COIN_OUT(3.3 V・100 µs)を出し、50 µs 待ってから相手の COIN_OUT を読みます。相手もほぼ同時に反応していれば、そのジャックの列が 1 になります。アナログの波高も読めます。

  • TRRS ケーブル
  • 最大 4 台
  • 同時の窓 約 ±50 µs
10 / 10

包む 3D プリントのケース

底のついた箱に基板を上から入れ、上蓋を M2 ねじ 4 本で留める 2 ピース構成です。前面に OLED の窓と RESET・LED の穴、側面に USB と、ジャック 4 つ・microSD をまとめた四角い開口があります。LED の光は、透明な導光パイプで前面の穴まで導きます。STL は cad/ にあります。

  • FDM 印刷
  • 86 × 75 × 61.4 mm
  • 上蓋 ねじ 4 本

02 — EXPLORE

自由に回して、部品をクリック。

ドラッグで回転、右ドラッグで移動。部品をクリックすると説明が出ます。

「操作する」を押すと、指で回せます。

PART

部品をクリック

基板・ケース・ねじまで、80 個あまりの部品に説明が付いています。

SCINTILLATOR

シンチレータは、
2 種類から選べます。

基板もケースも同じで、光を出す部分だけが違います。広く集めたいか、小さく持ち運びたいかで選べます。

  • プラスチックシンチレータ版 5 cm × 5 cm × 1 cm

    板のように広い形です。受ける面積が 25 cm² あるので、宇宙線にたくさん当たります。短い時間でも数が集まり、計数率の変化を追いたいときや、2 台を重ねたコインシデンスに向きます。

    プラスチックシンチレータで取ったスペクトル。光の弱い側にガンマ線、強い側に宇宙線の山が分かれて見える
    取れるスペクトル光の弱い側にガンマ線(身のまわりの放射線)、強い側に宇宙線(宇宙から降ってくる放射線)の山。宇宙線だけを選んで数えられます。
  • CsI シンチレータ版 1 cm 立方

    サイコロのように小さな形です。コンパクトで、持ち運びや狭い場所への設置に向きます。受ける面積が小さいぶん、数えられる宇宙線の数は少なめです。

    CsI 検出器で花崗岩を測ったガンマ線のスペクトル。いくつかの山があり、その位置から Pb-214、Tl-208、Ac-228 が出したガンマ線だと分かる
    取れるスペクトル(花崗岩を測定)ガンマ線のエネルギーごとに山が立ちます。花崗岩にふくまれるウランやトリウムが崩れていく途中でできる Pb-214、Tl-208、Ac-228 が出したガンマ線が、山の位置から読み取れます。

どちらも、宇宙線が通ると光り、その光を SiPM が電気のパルスに変えるしくみは同じです。横軸は光の強さ(=落としたエネルギー)、縦軸は数えた回数です。計数率はシンチレータの面積にほぼ比例します(海抜 0 m で 1 cm² あたり毎分およそ 1 個が目安)。

ACTUAL UNIT

実物は、こんな姿です。

試作機の写真です。黒いテープで包んだ四角いかたまりがシンチレータと SiPM。手前の青い OLED に計数が出て、基板の端で緑の LED が光ります。

黒いテープで包んだシンチレータが基板にのり、手前に OLED が立っている検出器を斜め前から見た写真
前から左の 4 つがジャック、右端がボタンと LED。
検出器を横から見た写真。基板の下にスペーサの支柱と Nano のソケットが見える
横から支柱で基板を持ち上げ、下に Nano を差します。
シンチレータを外した読み出し基板。Arduino Nano ESP32、microSD スロット、ゲイン調整のトリマが見える
基板の上Nano ESP32、microSD、ゲイン用の青いトリマ。
動いているところOLED に Cnt と Rate が出ています。

03 — PHYSICS

宇宙線を数えるしくみ

  1. ①
    通過

    一次宇宙線(主に陽子)が大気の上のほうで原子核とぶつかり、粒子のシャワーをつくります。地上に届くのはほとんどがミューオン。海抜 0 m で 1 cm² あたり毎分およそ 1 個です。

  2. ②
    発光

    ミューオンはシンチレータを通るあいだにエネルギーを落とし、その一部が光になります。プラスチックなら 1 cm で約 2 MeV(青い光)、CsI なら 1 cm で約 5〜6 MeV。

  3. ③
    SiPM

    35 µm のマイクロセルが 18,980 個並んだ SiPM。光子が当たったセルで、なだれ増倍が起きます。

  4. ④
    パルス

    子基板の R12(49.9 Ω)で電圧になります。数百 ns の速いパルスです。

  5. ⑤
    増幅・ホールド

    ×5〜×45 に増幅し、ピークホールドが山の高さを 2 倍にしてためます。A0 の電圧がしきい値を超えたら、イベントとして読み取ります。

  6. ⑥
    記録

    トリガーの約 60 µs 後に A0 を 12 bit で読み、時刻・環境値と一緒に 1 行で出します。読み終えたら D8 でホールドを空にします。

04 — SIGNAL

1 イベントの信号を、動かしてみる。

パルスの大きさ、アンプのゲイン、しきい値を変えると、アンプの出力・ピークホールド・記録される波高(ログの ADC 列)が変わります。ホールドのコンデンサは 1 µs に 1.36 V までしか充電できないので、速いパルスほど山を取りこぼします。

TP2 のピーク
—
ホールド(C6)
—
トリガー
—
読み取り時の A0
—
ログの ADC 列
—

arduino/shaping.html と同じ 1 次遅れのモデル(SiPM 60035 + GAGG:Ce、R12 = 49.9 Ω、TP2 の半値幅 432 ns)に、電荷で頭打ちになるピークホールド(U2B の出力電流 30 mA ÷ C6 22 nF)を足した目安です。「ミューオン」はアンプにレールがなければ TP2 で 7.9 V になる大きさで、実際は 4.9 V で頭打ちになります。ホールドの放電は時定数 300 µs、ADC は約 3.1 V をフルスケールとして近似しています。

05 — COINCIDENCE

重ねると、望遠鏡になる。

ミューオンは光速近くで飛ぶので、上下に重ねた 2 台をほぼ同時に通ります。SiPM のノイズや環境放射線は 1 台だけで起きることがほとんど。「両方がほぼ同時に反応した」イベントだけを選べば、ミューオンをより確実に選べます。間隔を広げるほど、真上から来たものだけが残ります。

上(A)0
下(B)0
同時(A∧B)0
A のうち B も通った割合—期待値 —

偶然の同時(バックグラウンド)

関係のない 2 つのイベントがたまたま窓(±W)に入る頻度は 2 × W × R1 × R2。v2 の窓はおよそ ±50 µs です。

1 時間に約 0.36 回

OUTJ3

COIN_OUT(D7、3.3 V・100 µs)と、自分のピークホールド出力 ANA_OUT

IN 1J5

相手の COIN_OUT を D6、アナログを A1 で読む

IN 2J6

同じく D5 / A2

IN 3J7

同じく D4 / A6

06 — USE CASES

持ち出すと、
いろいろな宇宙線が見えてきます。

宇宙線の数は、場所や高さ、そして太陽の活動で変わります。実際に測ったデータの例です。

富士山で測る

登りながら 1 分ごとの計数を記録。高いところほど大気が薄く、宇宙線が多く届きます。ふもとで毎分 7 回ほどだったのが、山頂近くでは 20 回ほどに増えました。

富士山に登りながら測った宇宙線の数と標高の推移。標高が上がるにつれて、毎分 7 回ほどから 20 回ほどに増える

点が宇宙線の数、薄い青が登った高さ。1 泊 2 日の登山で測定。

グラフは実際の測定例です。検出器の種類や大きさによって、数えられる数は変わります。動く絵は測定の傾向をもとにしたイメージです(フォーブッシュ効果の減り方は見やすいよう強調しています)。

07 — WEB APPS

ブラウザだけで、
計測から解析まで。

インストールは要りません。Chrome か Edge でコンソールを開き、USB(Web Serial)か Bluetooth(Web Bluetooth)でつなぐだけです。下はその画面のデモで、ボタンを押すと動きます。

arduino/v2/console/index.html DEMO · 時間 ×10
CosmicRay Recorderv2 未接続

宇宙線検出器 v2 のデータ記録アプリ

宇宙線を数えよう

検出器をパソコンにつなぐと、届いた宇宙線がその場でグラフになります。

  1. 1 つなぐUSB か Bluetooth で
  2. 2 測る届くたびにグラフが育つ
  3. 3 保存するフォルダを選ぶと自動で記録
総イベント数0
平均カウントレート0.000回/秒 ± —
経過時間00:00:00

エネルギー分布ADC ヒストグラム・ビン幅 64

カウントレートの変化20 秒ごと

温度
-- °C
湿度
-- %
気圧
-- hPa
外部検出器
--
平均 ADC
--
デッドタイム
-- s
トリガー
Analog

A0 を 12 µs ごとに読んだ波形(トリガーの前 32 点・後 128 点)。表示中は計数が止まります。

ピーク ADC
--
波形の数
0
レート上限
3 /s
残光
20
データを待っています…
  • USB と Bluetooth

    Web Serial と Web Bluetooth(Nordic UART)。同じコマンドと応答で動き、切れても Bluetooth は自動でつなぎ直します。

  • 自動保存

    フォルダを選ぶと、届いたデータを .dat・.csv で書き続けます。日付が変わるとファイルも分かれます。

  • ヒストグラムと計数率

    波高の分布、計数率の推移、温度・湿度・気圧の統計。計数率はデッドタイムを引いて計算します。

  • オシロスコープ

    A0 を DMA で 83.3 kHz(12 µs ごと)に読み、イベントごとの波形を 161 点で表示。開いているあいだは計数が止まります。

  • しきい値と機能

    信号しきい値(起動時の自動調整つき)、microSD・外部検出器・OLED・ブザー・振動の入り切りをボタンで。

  • サーバーへ送信

    測定サーバーへリアルタイムにアップロード。複数地点の比較に。日本語と英語の表示を切り替えられます。

ほかのツール

08 — DATA

宇宙線が来るたびに、
まわりの様子も一緒に残す。

1 個検出するごとに 1 行の記録ができます。半角スペース区切りの文字なので、表計算ソフトでも Python でもそのまま開けます。

  • 粒子の大きさ

    通った粒子がどれだけエネルギーを落としたか。ヒストグラムにすると、宇宙線ごとの山が見えます。

  • いつ来たか

    起動からの時刻をマイクロ秒単位で。計数率の変化も、1 個ごとの間隔も追えます。

  • 温度・湿度・気圧

    1 イベントごとにその場の環境を記録。気圧が上がると計数率が下がる「気圧効果」を、自分のデータで確かめられます。

  • ほかの検出器も反応したか

    つないだ検出器(最大 3 台)が同時に反応したかどうかが、イベントごとに残ります。重ねて置けば、真上から来た宇宙線だけを選べます。

  • ほかの検出器の波高

    同時に反応した相手の粒子の大きさも一緒に。2 台で同じ粒子を測ったときの比較に使えます。

  • 測っていない時間

    データを書き込んでいて数えられなかった時間も記録するので、正しい計数率を計算できます。

0台

まで同時に計測できる

0つ

の記録先(USB・Bluetooth・microSD)

0種類

の環境値(温度・湿度・気圧)

0個ずつ

宇宙線を数えて記録する

09 — START

はじめての測定

ファームウェアが書き込まれていれば、USB-C をつなぐだけで測り始めます。

  1. 1
    センサ子基板を付ける

    USB を抜いた状態で、子基板の J1 を読み出し基板の J2 に差し、M2 のスペーサとねじで固定します。

  2. 2
    シンチレータを密着させ、遮光する

    反射材で包み、黒いテープで光をふさいで SiPM にのせます。すき間があると蛍光灯の光でカウントが跳ね上がります。

  3. 3
    microSD を入れる(任意)

    FAT32 のカードを側面の開口から J8 に。入れなくても USB と Bluetooth には出ます。

  4. 4
    USB-C でつなぐ

    PC かモバイルバッテリーへ。起動のたびに A0 を 1 秒見てしきい値を決めるので、その間は動かさずに待ちます。

  5. 5
    OLED と LED を見る

    Cnt が増え、LED が光ってブザーが鳴れば動いています。Thr: がしきい値です。

  6. 6
    コンソールで見る

    Chrome / Edge で arduino/v2/console/index.html を開いて「USBでつなぐ」。時間とともにヒストグラムが育ち、計数率の誤差が小さくなります。

10 — SPEC

仕様

検出のしかた
シンチレータ + SiPM(onsemi MICROFC-60035-SMT:受光 6 × 6 mm、マイクロセル 35 µm)。SiPM は 40 × 40 mm の子基板に載せ、2×3 ピンで接続
SiPM バイアス
LT3461 昇圧、29.0 V 固定(USB の 5 V から)。子基板で RC フィルタ
アンプ
LT1807(U2A)非反転、×5.0〜×45(R10 で調整)。入力保護 1 kΩ + BAT54S
ピークホールド
LT1807(U2B)+ ダイオード + C6、アンプ出力の ×2 を保持。放電の時定数は数百 µs(計算 487 µs)。D8 → Q1 で 20 µs 放電
マイコン
Arduino Nano ESP32(ESP32-S3、BLE)。裏面のソケットに差す
トリガー
アナログ。A0(ピークホールドの出力)をソフトでしきい値と比べ、超えたらイベントとして記録。しきい値は起動時に自動で決まり、あとから変えられます
波高
12 bit(0〜4095)。トリガーの約 60 µs 後に A0 を 1 回読む
デッドタイム
イベントの処理(約 0.1 ms)、2 秒ごとの OLED 書き換え、オシロ表示中、コマンド実行中。ログに累積値を出力
環境センサ
BME280(温度・湿度・気圧)、2 秒ごとに更新
表示・通知
OLED SSD1306 128 × 64、LED、圧電ブザー(500〜4000 Hz)、振動モーター(A7 に後付け、ドライバが必要)
記録・通信
USB シリアル(9600 bps)、Bluetooth LE(Nordic UART、名前 CosmicRay)、microSD(FAT32、1 行ごとに確定)
外部入出力
OUT × 1、IN × 3(3.5 mm 4 極)。デジタルの同時判定とアナログの波高
オシロスコープ
A0 を DMA で 83.3 kHz、1 イベント 161 点。毎秒 1〜20 波形
電源
USB-C 5 V
大きさ
読み出し基板 63 × 63 mm、センサ子基板 40 × 40 mm、ケース 86 × 75 × 61.4 mm

数値は回路図(KiCad 9)・ファームウェア(COSMICRAY_DETECTOR_ESP32-S3-Nano-v2)・arduino/description.md・shaping.html による値です。回路の見直しを反映した後継機 v2.1 では、整形段と DAC によるしきい値に置き換えています。この装置は自然の宇宙線を数えるためのもので、線量計としての校正はしていません。