v1OWAN 縦長の箱
上の面に、画面の小窓と小さな丸い穴があります。マイコンは Arduino Nano、USB は Mini-B です。
目に見えない放射線を、どうやって「数」にするのでしょう。
検出器の中では、放射線が光に変わり、光が電気に変わり、電気が数値に変わる——
という小さなバトンリレーが起きています。この講座では、シンチレータ → SiPM → ADC → しきい値 → デッドタイムという
信号の流れにそって、放射線が1個ずつカウントされるまでを図解でたどります。実験を始める前の予習にどうぞ。
後半には、実機を使うための検出器マニュアル(OWAN v1・OHASHI v2)を収めています。
いまこの瞬間も、宇宙の彼方からやってきた粒子が、あなたの手のひらを毎秒2〜3個通り抜けています。 加速キッチンの検出器が主に数えているのは、この宇宙線ミュオンです。
宇宙空間を飛んでくる高エネルギーの粒子を一次宇宙線といい、その大部分は陽子(水素の原子核)です。 一次宇宙線が地球の大気に突入すると、大気中の分子と激しくぶつかってたくさんの粒子を生み出します。これを大気シャワー(空気シャワー)、 生まれた粒子を二次宇宙線と呼びます。このうち地上まで届く主役がミュオン(μ粒子)です。 宇宙線そのものについては宇宙線の基礎講座でくわしく扱っています。
ミュオンは電子の仲間(レプトン)で、電子の約207倍の質量を持つ粒子です。寿命は約2.2マイクロ秒(0.0000022秒)と非常に短いのに、 なぜ上空15 kmから地上まで届くのでしょうか。それは、ミュオンが光速に近い速さで飛んでいるため、 アインシュタインの特殊相対性理論高速で動く物体の時間はゆっくり進む(時間の遅れ)。ミュオンにとっての2.2 µsの間に、地上から見ると本来の何十倍もの距離を飛べる。による 時間の遅れの効果で、私たちから見るとずっと長生きして見えるからです。宇宙線は、相対論を「測れる」身近な題材でもあります。
地表でのミュオンの到来頻度は、おおよそ1個/cm²/分(水平面・海面高度)。手のひら(約150 cm²)には毎秒2〜3個が通っている計算です。 ただしこの数は、測る場所や条件で変わります。
| 要因 | 到来頻度への影響 |
|---|---|
| 高度 | 高いほど多い(大気に吸収される前に届くため)。山の上では明らかに増える。 |
| 天頂角(角度) | 真上(天頂)からが最も多く、斜めほど少ない。およそ $\cos^2\theta$ の法則にしたがう。 |
| 気圧 | 気圧が高い(=大気が厚い)と、到来頻度はやや減少する。 |
| 太陽活動 | 太陽活動が活発な時期は、太陽磁場の遮蔽でやや減少する。 |
到来頻度は確率的なので、同じ条件でも数えるたびに数が上下します。「差があるのか、ただのゆらぎか」を見分けるには統計の考え方が必要です。くわしくは統計の基礎講座の $\pm\sqrt{N}$ のエラーバーを参照してください。
この検出器はミュオンだけでなく、さまざまな放射線に反応します。放射線とは、高いエネルギーを持った粒子や電磁波の総称です。 種類によって「透過力」がまるで違うため、検出器での見え方も変わります。
| 種類 | 正体 | 透過力 | 検出器での反応 |
|---|---|---|---|
| α(アルファ)線 | ヘリウム原子核 | 紙1枚で止まる | 検出されない(遮光テープを通過できない) |
| β(ベータ)線 | 電子 | 数mmのアルミで止まる | 検出される(ADC値は小さめ) |
| γ(ガンマ)線 | 電磁波(光子) | 数cmの鉛で減衰 | 検出される(CsI/GAGGで分光も可能) |
| ミュオン(μ) | ミュオン | 数mのコンクリートも貫通 | よく検出される |
放射線そのものの性質(種類・半減期・単位・人体への影響など)は放射線の基礎講座でくわしく扱っています。 ここで押さえておきたいのは、「透過力が小さいものは検出器の中まで届かない」という点。 α線は検出器をおおう遮光テープすら通れないので、原理的に見えません。
私たちの身の回りには、いつも少量の放射線が存在しています。これを自然放射線(バックグラウンド放射線)と呼びます。 地面や建材にふくまれる放射性物質(カリウム40天然のカリウムにわずかに含まれる放射性同位体。食品や土壌、私たちの体の中にも存在し、γ線やβ線を出す。やラドンなど)からのγ線・β線、そして宇宙線由来のミュオンやγ線です。 検出器で測ると、これらは常に「バックグラウンド」として記録され続けます。
宇宙線ミュオンだけをバックグラウンドから選り分けたいときは、検出器を2台つかった同時測定(コインシデンス測定)が有効です。 貫通力の高いミュオンは2台を続けて通り抜けるので、両方が同時に光ったときだけ数えることで、あちこちから飛んでくるバックグラウンドのγ線・β線を排除できます。
ここからが検出器の本番です。放射線は目に見えませんが、検出器の中で光 → 電気 → 数値と姿を変えていきます。 まずはその「全体像」を頭に入れておきましょう。
最初のバトンを受け取るのがシンチレータです。シンチレータとは、放射線が通過すると微弱な光(蛍光)を発する物質のこと。 放射線そのものは捕まえにくくても、いったん「光」に変えてしまえば、あとはその光を測ればよい——というのが検出器の基本アイデアです。 本検出器で使うシンチレータには、測りたいものに応じて次の種類があります。
| シンチレータの種類 | 特徴 | 適した測定 |
|---|---|---|
| プラスチック | 軽量で大面積にしやすい | 宇宙線(ミュオン)の測定 |
| CsI(ヨウ化セシウム) | 密度が高くガンマ線の吸収効率が良い | ガンマ線・ベータ線の測定 |
| GAGG | 密度が高くガンマ線の吸収効率が良い | ガンマ線・ベータ線の測定 |
放射線がシンチレータの中を通ると、原子の電子をいったん高いエネルギー状態に押し上げます(励起)。電子が元に戻るとき、余ったエネルギーが光として放出される——これが蛍光です。この「放射線が物質を光らせる性質(励起作用)」は放射線の基礎講座でくわしく扱っています。
シンチレータが発する光は、ほんのわずか。肉眼ではとても見えません。この弱い光を電気信号に変えて、しかも大きく増幅してくれるのが SiPM(Silicon Photomultiplier、シリコン光電子増倍管)です。
SiPMのはたらきを、順番に追ってみましょう。
SiPMは温度によって特性が変化します(同じ光でも、暑い日と寒い日で信号の出方が変わる)。そのため検出器のデータには、温度計で測った温度も一緒に記録されています。データを正しく読むには、温度の影響も頭に入れておきましょう。
SiPMから出てくるのは、電圧が連続的に変化するアナログ信号です。コンピュータで扱うには、これを数(整数)に翻訳しなければなりません。 その役目をするのがADC(Analog-to-Digital Converter、アナログ-デジタル変換器)です。
本検出器は10ビットADCを使っており、信号の大きさを0〜1023の整数値(=210=1024段階)に変換します。 この数をADC値と呼びます。
測定で得たADC値を、横軸にADC値・縦軸に回数をとって並べたものがヒストグラム(度数分布)です。 これを描くと、検出器が正常に動いているかの確認や、どんなエネルギーの放射線が多いかといった傾向を一目で調べられます。 ヒストグラムの読み方やゆらぎの扱いは、統計の基礎講座とあわせて読むと理解が深まります。
検出器は常にSiPMの信号を見張っていますが、ノイズも含めてすべてを記録するわけではありません。 ある大きさを超えた信号だけを「これは本物のイベントだ」と判断して記録します。この判断の基準がしきい値(トリガー閾値)です。
本検出器には、役割の違う2つのしきい値があります。
しきい値は、検出器の起動時に自動設定されます。起動直後に信号のベースライン(ノイズの下限)を10回測定し、その最小値に一定のオフセットを足した値がしきい値になります。これにより、「ノイズはまたがず、本物の信号だけを拾う」ちょうどよい高さに調整されるわけです。
最後のバトンは「数え方」です。検出器が1つのイベントを処理している間は、次のイベントを受け付けられない短い時間があります。これをデッドタイム(不感時間)と呼びます。
検出器がイベントを記録するときには、ADC値の読み取り・データのシリアル送信・OLED画面の更新といった処理が走ります。 この間に別の放射線が来ても、検出器は気づけません。つまり、ほんのわずかですが「目をつぶっている時間」があるのです。
デッドタイムは検出器のデータに記録されています。正確な到来頻度(レート)を求めるには、ただ経過時間で割るのではなく、 デッドタイムを差し引いた実効測定時間で割る必要があります。
ここで $R$ はレート、$N$ はイベント数、$T$ は経過時間、$T_{\text{dead}}$ は累積デッドタイムです。 通常のレート(〜1 cnt/s 程度)なら、デッドタイムの影響はごくわずかです。しかし高レートの測定や精密な解析では、この補正をきちんと入れないと、本当の数より少なく見積もってしまいます。
レートのように「測定値から本当の値を見積もる」とき、必ずつきまとうのが統計的なゆらぎと系統的なずれです。デッドタイム補正は後者(系統誤差)を正すための一例。誤差の考え方の全体像は統計の基礎講座でまとめています。
ここからは、実機を使う編です。検出器が手元に届いてから最初の測定まで、PC につなぐ、同時測定、データの解析、トラブル対応、組み立てまでを、 OWAN(v1)と OHASHI(v2)の手順に分けて説明します。前半で学んだ「光 → 電気 → 数値」が、実機のどこで起きているかも確かめられます。
検出器が届いてから最初の測定まで、そのあとのデータ解析、困ったときの対処、組み立てまでをまとめました。手元の機種が OWAN(v1)か OHASHI(v2)かを選ぶと、その機種の手順だけが表示されます。
対象:OWAN(v1)/ OHASHI(v2)(v2.1 は準備中のため含みません)・2026-10-24 版(改訂履歴)
写真つきの原本:Google ドキュメント「検出器マニュアル」
困ったとき(09 トラブルシューティング)相談するときに伝えること用語集
上の面に、画面の小窓と小さな丸い穴があります。マイコンは Arduino Nano、USB は Mini-B です。
横の面に、画面の窓と丸い穴が 2 つ(ボタンと LED)あります。マイコンは Arduino Nano ESP32、USB は Type-C です。
検出器を受け取ってから、最初の測定に成功するまでの手順です。まずはこの順に進めて、宇宙線の検出を体験してみましょう。
手元の検出器が OWAN(v1)か OHASHI(v2)かを見分けます。箱の上にステッカーがあれば、お椀の絵で若草色の地が OWAN、お箸の絵で生成り色の地が OHASHI です。ステッカーがないときは、箱の形で見分けます(上の写真、または 02 機種と各部のしくみ)。ページ上部の「両方 / v1 / v2」の切り替えで機種を選ぶと、その機種の説明だけが残ります。
箱には次のものが入っています。
組み立てキットの場合は、シンチレータの光学接着と遮光が必要です。手順は 10 組み立て を見てください。
PC のブラウザは Chrome か Edge を使います(Firefox と Safari は USB 接続の仕組みに対応していません)。
COM3、/dev/tty.usbserial-XXXX)を選びます。次の値が目安です。大きくはずれているときは 09 トラブルシューティング を見てください。
| 項目 | 正常な範囲 |
|---|---|
| 測定レート | 0.5〜2.0 cnt/s 程度 |
| 5 分間のイベント数 | 150〜600 イベント程度 |
| v1 ADC 値の分布 | 0〜1023 のうち、大半が 20〜200 程度。まれに 300 以上の大きな値が出る |
| v2 ADC 値の分布 | 0〜4095。しきい値のすぐ上から数百までに身のまわりのガンマ線が多く、1000 付近に宇宙線の山ができる |
この範囲に入っていれば、検出器は正常に動いています。宇宙線の検出に成功です。はずれたときは、次の表で見当をつけてください。
| レート | 判定 | することは |
|---|---|---|
| 0.5〜2.0 cnt/s | ふつう | そのまま測ります |
| 0.3〜0.5、2.0〜3.0 cnt/s | 正常の範囲 | そのまま測ります。気になるときは、遮光とコネクタを確かめます |
| 0.1〜0.3、3〜10 cnt/s | はっきりしない | 検出器を再起動して、測り直します。変わらなければ、遮光(高いとき)かコネクタ(低いとき)を確かめます |
| 0.1 cnt/s 未満 | 低すぎる | しきい値が高すぎる、またはコネクタが外れています(09 トラブルシューティング) |
| 10 cnt/s 超 | 高すぎる | 遮光不良の可能性が高いです(09 トラブルシューティング) |
この目安は、v1 で確かめた値です。v2 は、しきい値の決め方が少しちがうので、ずれることがあります(v2 の値は、実測してから見直します)。
CsI シンチレータ版(1 cm 立方)は、受ける面積が小さいので、レートはもっと低くなります。宇宙線だけなら毎分 1 個ほどです。この表は当てはまりません。
最初の測定に成功したら、探究活動の全体像をつかみましょう。
わからないことは Discord でいつでも質問できます。週 1 回のオフィスアワーも使ってください。
この検出器は、ガンマ線・ベータ線・宇宙線のミューオンなどを数えられる放射線検出器です。
粒子がシンチレータを通ると、シンチレータが弱く光ります。その光を SiPM(シリコン光電子増倍素子)が電気の信号に変え、基板の回路で増幅します。マイコンがその信号の高さ(ADC 値)を読み取り、画面に出して PC に送ります。ADC 値が大きいほど、シンチレータで落としたエネルギーが大きかったことを表します。
宇宙線や検出器の仕組みを基礎から学びたいときは、先に、この講座の前半(1 章「この検出器は何を測っている?」から 7 章まで)を読んでください。
粒子が通ってから数字になるまでに、信号の形は 2 回変わります。SiPM の小さな信号をアンプで大きな短いパルスにして、そのあとピークホールドで頂点の高さをしばらく保ちます。保っているあいだに、マイコンがその高さを読みます。これが ADC 値です。
ピークホールドの出力がしきい値を超えたときが「トリガー」です。そのあと ADC を読み、最後にリセットして次のパルスに備えます。リセットのしかたは機種で違います。v1 は、信号が自然に下がって Res を下回るまで待ちます。v2 は、マイコンの D8 から出す短いパルス(約 20 µs)で、強制的にリセットします。
v1 は OWAN(お椀)、v2 は OHASHI(お箸)という名前です。箱の上に貼るステッカーには、丸い紋の中に、降ってくる粒子とその道具が描いてあります。ステッカーがあれば、絵と地の色で機種を見分けられます。
v1 縦長の箱
Online Watcher of Ambient Natural radiation
お椀の絵で、地は若草色。湯気の立つお椀が、降ってくる粒子を受けとめています。
v2 ほぼ立方体の箱
Online Hands-on Analyzer of Scintillation Hits, Individually
お箸の絵で、地は生成り(クラフト)色。お箸が、降ってきた粒子を 1 個だけつまみ上げています。
絵と文字は墨、略称の頭文字と右下の判は朱です。いちばん下に、加速キッチンのロゴがあります。ステッカーは、箱の上(上蓋)に貼ります。
| 項目 | v1 | v2 |
|---|---|---|
| 名前 | OWAN(お椀) | OHASHI(お箸) |
| ステッカー | お椀の絵。地は若草色 | お箸の絵。地は生成り(クラフト)色 |
| 箱の形 | 縦長。上の面に画面の窓と小さな丸い穴 | ほぼ立方体。横の面に画面の窓と丸い穴 2 つ |
| マイコン | Arduino Nano(ATmega328P) | Arduino Nano ESP32(ESP32-S3) |
| USB 端子 | Mini-B | Type-C |
| USB ドライバ | Windows のみ CH341 ドライバが必要 | 不要 |
| 信号の大きさ(ADC) | 10 bit(0〜1023) | 12 bit(0〜4095) |
| 環境センサ | 温度(TMP36) | 温度・湿度・気圧(BME280) |
| 通信 | USB シリアル(9600 bps) | USB シリアル(9600 bps)、Bluetooth LE |
| 本体への記録 | なし(PC に保存) | microSD に自動で記録できる |
| 同時測定 | 2 台。ケーブル 1 本で Master と Slave をつなぐ | OUT 1 つ、IN 3 つ。最大 3 台の外部検出器を同時に読む |
| 画面・通知 | OLED、LED | OLED、LED、ブザー(振動モーターは後付け) |
| 時間の単位 | ミリ秒(ms) | マイクロ秒(µs) |
| 測定アプリ | …/cosmicray-monitor/v1 | …/cosmicray-monitor/ |
v2 の基板に v1 用のアプリやスケッチを使わないでください。出力の列の意味が 1 列ずつずれて、正しく読めません。
v1 の基板に Arduino Nano ESP32 を載せ替えた機体もあります。画面と配線は v1、通信は v2 に近くなります。この機体は、v1 とは別のスケッチで動いていて、ADC は 12 bit(0〜4095)、出力は Mode 列を含む 7 列で、しきい値の決め方、設定の保存、コマンドの長さ(47 文字まで)、同時測定の方式が、v1 とちがいます。この機体では、このマニュアルの v1 の数字や手順を、そのまま当てはめないでください(08 ファームウェア)。
前から見たところ(試作機の写真)。
基板の裏側(シンチレータは外してあります)。
振動モーターは、後から付ける部品です。マイコンの端子(A7)に直接つなぐと、電流が大きすぎてマイコンを傷めます。A7 → 1 kΩ → NPN トランジスタ(2N3904 や S8050 など)か N ch MOSFET(2N7002)の順につなぎ、モーターと並列にダイオード(1N4148)を入れてください。D13 には付けないでください(microSD の信号と共用で、記録が壊れます)。モーターのノイズで、誤って数えてしまうこともあります。

測定中は、基板に直接触れないでください。遮光テープをはがしたまま、明るい場所で通電しないでください。外の光が入ると、正しく測れません。
| 項目 | 内容 |
|---|---|
| シンチレータ | プラスチック 50 × 50 × 10 mm(「5 × 5 × 1 cm」)が標準です。CsI の 1 cm 立方の版もあります |
| v2 光センサ | SiPM(onsemi MICROFC-60035、6 mm 角)。40 mm 角の基板にのっています |
| v2 SiPM の電圧 | 約 29 V(USB の 5 V から、基板の上で昇圧します) |
| 信号の大きさ(ADC) | v1:10 bit(0〜1023)v2:12 bit(0〜4095) |
| 時間の単位 | v1:ミリ秒v2:マイクロ秒 |
| 通信 | USB シリアル(9600 bps)。Bluetooth LE も使えます |
| データの記録 | v1:PC に保存しますv2:PC に保存、または microSD(FAT32)に記録します |
| 電源 | USB(5 V)から給電します |
USB ケーブルでつなぎ、PC が検出器を見つけられるようにします。
v1 は、PC との通信に USB-シリアル変換(CH341 系)を使っていて、OS によってはドライバが要ります。v2 は Arduino Nano ESP32 が USB で直接つながるので、ドライバは要りません。
| OS | v1 | v2 |
|---|---|---|
| Windows | CH341 ドライバのインストールが必要 | 不要 |
| macOS | 多くの場合は不要。認識されなければ CH341 の macOS 用ドライバを入れる | 不要 |
| Linux | 不要(カーネルに含まれる) | 不要 |
| Chromebook | 不要(Chrome の Web Serial API にそのまま対応) | |
CH341SER.zip を右クリックして「すべて展開」を選びます。展開先のフォルダがどこになるか、確認しておきます。
CH341SER フォルダの中の SETUP.EXE を起動します。
SETUP.EXE(赤い矢印)を起動します。INSTALL を押すと、インストールが始まります。
INSTALL を押します。UNINSTALL を実行してから、もう一度 INSTALL を実行します。検出器を USB でつないだあと、ターミナルで次のコマンドを実行します。
ls /dev/tty.*
/dev/tty.usbserial-XXXX や /dev/tty.wchusbserial-XXXX のようなポートが出れば、認識されています。出ないときは、CH341 の macOS 用ドライバを入れてください。/dev/cu.usbmodem… のようなポートが出れば、認識されています。検出器をつないだあと、ターミナルで次のコマンドを実行します。
dmesg | grep tty
/dev/ttyUSB0 /dev/ttyACM0 などが出れば、認識されています。Web アプリからポートを開けないときは、ユーザーを dialout グループに加えてください。
sudo usermod -a -G dialout $USER
加えたあと、いちどログアウトして、ログインし直すと反映されます。
付属の USB ケーブルで、検出器と PC をつなぎます。検出器の画面に、次のような情報が出ます。画面のない機種では出ません。

| 表示 | 意味 |
|---|---|
1Accel Kitchen :Master / :Slave | 2 台同時測定のときの役割です。単体で使うときは :Master と出ます(05 同時測定) |
2Cnt: | 電源を入れてから検出した、総イベント数 |
3T: | 電源を入れてからの経過時間(時:分:秒) |
4Rate: | 測定レート(回/秒)と、統計的な不確かさ(±)。数えられなかった時間(デッドタイム)を引いた時間で割っています |
5Sig | トリガー開始のしきい値(ADC 値)。信号がこの値を超えるとイベントとして数えます |
5Res | 次の測定を始めるためのしきい値。ADC 値がこの値を下回ると、次のイベントを待ちます |
| 表示 | 意味 |
|---|---|
1Cnt: | 電源を入れてから検出した、総イベント数 |
2T: | 電源を入れてからの経過時間(時:分:秒) |
3Rate: | 測定レート(回/秒)と、統計的な不確かさ(±)。数えられなかった時間(デッドタイム)を引いた時間で割っています |
4Thr: | 信号のしきい値(0〜4095)。信号がこの値を超えるとイベントとして数えます |
5Duty: | コンパレータ(比較回路)のしきい値をつくる PWM の値(0〜255)。Digital / Dual モードで使います |
| 6温度・湿度・気圧 | BME280 の値。2 秒ごとに更新されます。センサが見つからないときは出ません |
しきい値は、電源を入れるたびに自動で決まります。v1 は、起動の直後に A0 のノイズを約 0.1 秒測り、その最小値に 20(Sig)と 15(Res)を足します。v2 は、起動の直後に A0 のノイズを約 1 秒(100 回)測り、その最大値にマージン(初期値 50)を足します。
電源は、ふだんの組み上がった状態(遮光された状態)で入れてください。ノイズを測っている起動の直後の約 1 秒(v1 は約 0.1 秒)は、検出器を動かしたり、触ったりしないでください。起動のときに外の光が入ったり、ノイズが大きかったりすると、しきい値が高くなりすぎて、検出されなくなります(09 トラブルシューティング)。
測定用の Web アプリで、検出器からのデータをグラフにして、PC に保存します。
Web アプリは、PC の Chrome か Edge(Chromium 系のブラウザ)で開いてください。Firefox と Safari は、USB でつなぐ仕組み(Web Serial API)に対応していません。
https://accel-kitchen.com/app/cosmicray-monitor/ を開きます。最初に機種の選択画面が出ます。手元の検出器の箱の形と見くらべて v2 を選びます。選んだ機種はブラウザが覚えているので、次からは接続画面から始まります。
「USBでつなぐ」を押し、ブラウザの一覧から検出器のポートを選んで「接続」を押します。上の帯が「接続中 · USB」に変われば完了です。宇宙線が届くたびにグラフが伸びていきます。
最初は 5 分ほど測ってみます。保存は、「保存フォルダを選ぶ」で自動保存にするのがおすすめです。届いたデータが <検出器の名前>_<日付>.dat に書き足されていきます。画面のデータをまとめて 1 つのファイルにしたいときは、「ダウンロード」の下の「.dat で保存」か「.csv で保存」を押します。
画面を横にスクロールできます →
1
2
3
選んだ機種はブラウザが覚えています。選び直すときは、接続の画面の見出しの横の「機種を選び直す」を押します。
画面を横にスクロールできます →
1
2
3
4
CosmicRay)を入れます。画面を横にスクロールできます →
1
2
3
4
5
6
7
8
9
10
デモ(合成データ)の画面です。数値は実際の測定ではありません。
https://accel-kitchen.com/app/cosmicray-monitor/v1 を開き、「USBでつなぐ」を押します。シリアルポート(COMx など)を選ぶと、しばらくして自動で計測が始まります。
画面にグラフが出て、検出器の画面の Cnt: が増えていくことを確かめます。
測定が終わったら「.csv で保存」か「.dat で保存」を押して、データを PC にダウンロードします(保存フォルダを先に選んでおけば、自動で書き足されます)。.dat はタブ区切りで、# で始まる行は見出しとメモです。.csv はカンマ区切りで、1 行目が見出しです。メモ帳などで開いて、データが入っていることを確かめます。

画面を横にスクロールできます →
1
2
3
4
画面を横にスクロールできます →
1
2
3
4
5
6
7
デモ(合成データ)の画面です。数値は実際の測定ではありません。
測定アプリの右の欄(狭い画面では、右下の「保存」ボタン)にまとまっています。保存フォルダを選ぶと、そこから自動保存が始まります。長い測定には、自動保存を使ってください(画面には、最大で 100 万件までしか残りません)。
1
2
3
4
5
.dat、.csv、または両方。# をつけて書き込まれます。RESET を送り、番号と時間を 0 に戻します。保存済みのファイルは消えません。v2 の画面です。v1 のページには、「ファイル名の頭につける文字」の欄もあります。v1 のページの「データを消去して最初から」は、画面のデータだけを消します(検出器には RESET を送りません)。メモは、v1 のページでは .dat にだけ書き込まれます。
<検出器の名前>_<日付>.dat に書き足されます。日付が変わると新しいファイルになり、ファイルがとても大きくなると _02、_03… に分けます。名前の前半は、検出器の Bluetooth の名前なので、台ごとに名前を変えておくと、ファイルも台ごとに分かれます(よくある質問)。<名前>_<年-月-日_時-分-秒>.dat(測り始めた時刻)です。上の帯の「オシロスコープ」を押すと、検出器から届く信号の波形が見られます。信号が来ているか、しきい値が合っているかを確かめるときに使います。v2 は、12 µs ごとに 1 点を表示します。v1 のページにもあります。検出器は、60 秒間コマンドが来ないと自分で計数に戻りますが、v1 のページは、開いているあいだ 15 秒ごとに合図を送るので、戻りません。v1 の検出器は、Arduino Nano が 6.5 µs ごと、ESP32-S3 版が 12 µs ごとに 1 点です。Arduino Nano は、9600 bps では 1 秒に 2 本ほどしか波形を出せません。開いているあいだは、同時測定を含めて、計数がすべて止まります。
開いているあいだ、検出器は宇宙線を数えません。止まっていた時間は、デッドタイムとして引かれるので、平均カウントレートは正しいままです。「閉じて計数に戻る」(または Esc)で戻ります。v2 のページは、10 分間操作がないと、自動で閉じます。v1 のページは自動では閉じないので、見終わったら必ず「閉じて計数に戻る」を押してください。

画面を横にスクロールできます →
1
2
3
4
5
6
7
8
9
10
11
12
デモ(合成データ)の画面です。
見えているのは、増幅した生のパルスではなく、ピークホールド回路の出力です。立ち上がって頂点で止まり、ゆっくり下がってからリセットされる形になります。生のパルスを見たいときは、オシロスコープを、基板のテストポイント(TP2)に当てます(10 組み立て)。
開いても、波形が 1 本も出ないとき:トリガーのままだと、A0 のベースラインが再アームの水準より下まで下がらない限り、波形は出ません。しきい値をベースラインより十分上に、再アームの入力欄の値をベースラインのゆらぎより小さくしてください。確かめるだけなら「連続」にすると、ベースラインが見えます。
v1 のページのオシロスコープにも、同じ「トリガー/連続」と「再アーム(しきい値 −)」があります。v1 の検出器では、更新したスケッチに書き込み直したときに使えます。
上の帯の「詳細設定」を押すと、右からパネルが開きます。上の目次で、節に飛べます。基板の設定は、検出器をつないでいるときだけ変えられます。「基板: …」の行は、検出器が今使っている値です(v1 のページの「詳細設定」には、「しきい値とモード」「ESP32-S3 の設定」「接続」「ヘルプ」があります)。
1
2
3
4
5
しきい値が低すぎるとノイズまで数え、高すぎると小さな信号を取りこぼします。迷ったら、Analog のまま、自動校正を使ってください。



このほか、「表示」(グラフを描き直す間隔:1 秒、3 秒、10 秒、手動)と、「サーバー送信」、「ヘルプ」があります。
| 機能 | できること |
|---|---|
| 解析(プロッター) | 上の帯の「解析」で開きます(v2 のページにあり、v1 のページにはこのボタンがありません)。保存した .dat / .csv(v1 のページで保存した .dat と、microSD のログも)を読み込んで、ヒストグラム、天頂角分布、エネルギー校正をします。検出器は要りません。ファイルは、この PC の中だけで読み、どこにも送りません(06 データと解析)。 |
| サーバーへの送信 | v2 のページの、詳細設定の「サーバー送信」から、測ったイベントを観測サーバーへ送れます。正式な記録は、この PC への自動保存で、サーバーへの送信は複製です。今のサーバーの形式では、湿度・気圧・外部検出器(Dig1〜3、Ana1〜3)の列は送られません。 |
| デモ | 検出器がなくても、合成データで全部の機能を試せます。デモのあいだは、上に斜線の帯が出て、保存するファイルの名前に DEMO_ が付きます。 |
| v2 Bluetooth が切れたとき | 「切断」を押していないのに切れたときは、アプリが自動でつなぎ直します。1 秒から始めて、間隔を倍々にのばし(最長 30 秒、回数の制限はありません)、上の帯が点滅して「◯ 秒後に ◯ 回目の再接続」と数えます。自動保存は、同じファイルに続けて書きます。 |
| ページの開き方 | Bluetooth は、file:// で開いたページでは使えません。https:// か、http://localhost で開きます。 |
この章にない細かい説明(全コマンド、ファイルの形式、ピン配置)は、測定アプリのマニュアルにあります。
LOG0001.TXT のようなファイルに記録します(SD の記録は、初期設定でオンです)。屋外や、PC を持ち込みにくい場所で長く測るときに向いています。CosmicRay です。測定アプリから Bluetooth でつなげるほか、スマートフォンの汎用 BLE ターミナル(iOS は Bluefruit Connect、Android は Serial Bluetooth Terminal か nRF Connect)で、UART モードにして、行を見たり、コマンドを送ったりできます。2 台の検出器を重ねて置き、両方がほぼ同時に反応したイベントだけを選び出す測り方です。
2 台の検出器を上下に重ねて置き、両方がほぼ同時に反応したときだけを記録します。シンチレータの中で起きるノイズや、自然放射線(ガンマ線など)は、片方にしか入りません。両方の検出器を貫いて通る宇宙線のミューオンだけを、効率よく選べます。
概要と接続の例は、解説動画も見てください。
1 台で測ったレートが約 1 cnt/s のとき、2 台の同時測定ではレートが大きく下がります(検出器どうしの距離や面積で変わります)。十分な数のイベントを集めるには、1 台のときよりずっと長く測る必要があります。0.01〜0.1 cnt/s 程度になることが多く、数時間かかることもあります。
:Slave、Master 側の画面に :Master と出ていることを確かめて、測定を始めます(Arduino Nano の Slave は、ロゴの表示が終わるまで、LED が約 3 秒光ります)。v2 には Master と Slave の区別がありません。検出器が反応するたびに、OUT ジャックから 100 µs 以上の短いパルスを出します。そのあと約 50 µs 待って、IN1〜IN3 の状態を読み、ログの Dig1〜Dig3 の列に書きます。1 台のログに全イベントが残り、同時だったかどうかは、あとから Dig の列で選びます。
同時と判定される幅(相手の信号が来ていてよい時間差)は、コードから計算すると ±50 µs 程度です(実測した値ではありません)。偶然の同時(別々の粒子が、たまたま重なること)は、レートが高いほど増えます。
Dig1 = 1)が残ります。EXT)がオンになっていることを確かめます。初期設定はオンです。オフにすると、読み取りだけでなく OUT のパルスも出なくなり、相手から見えなくなります。Dig1 が 1 の行を選ぶと、相手も同時に反応したイベントだけが残ります。3 台までなら IN2、IN3 も同じように使えます。v1 など、5 V で動く機器の出力を v2 の IN につなぐときは、先に出力の電圧(3.3 V か 5 V)を、回路図で確かめてください。5 V のまま入れると、マイコンを傷めるおそれがあります。
保存したファイルの中身と、解析のはじめかたです。
検出器は、イベントが 1 つ起きるたびに 1 行を出力します。空白で区切られた数字の並びです。
### Event Time[ms] ADC[0-1023] SiPM[mV] Deadtime[ms] Temp[C]
この見出しの下に、1 イベントにつき 1 行、同じ並びの数字が空白区切りで続きます。
| 列 | 意味 |
|---|---|
| Event | 検出器が反応するたびに 1 ずつ増える通し番号 |
| Time[ms] | 電源を入れてからの経過時間(ミリ秒) |
| ADC[0-1023] | SiPM で読み取ったアナログ値。信号の強さを表します(最小 0、最大 1023) |
| SiPM[mV] | ADC 値から計算した、SiPM の信号の大きさ(ミリボルト) |
| Deadtime[ms] | 数えられなかった時間の合計(ミリ秒)。1 ミリ秒より短い処理の時間は切り捨てられるので、主に画面の書き換えと、オシロスコープを開いていた時間です |
| Temp[C] | 温度(℃)。2 秒ごとに更新されます |
測定アプリが保存するファイル(.dat はタブ区切り、.csv はカンマ区切り)は、2 列目に PC の時刻(PC_Timestamp)が入り、末尾に Mode(0 が Master、1 が Slave)の列が付きます。そのため、3 列目以降は上の行より 1 列右にずれます。
### Event Time[us] ADC[0-4095] Deadtime[us] Temp[C] Hum[%] Press[hPa] Dig1 Dig2 Dig3 Ana1 Ana2 Ana3
42 18732450 1940 1203000 24.3 48.2 1013.2 1 0 1 2448 112 2804
1 行の読み方です(色は、列の種類を表します)。
| 列 | 意味 |
|---|---|
| Event | イベントの通し番号(電源を入れる、または RESET したところから 1, 2, 3…) |
| Time[us] | 電源を入れて(または RESET して)からの時間(マイクロ秒) |
| ADC[0-4095] | この検出器のピークホールドの値。信号の強さです(0〜4095)。トリガーのあとに 1 回読んだ値で、測定した頂点そのものではありません |
| Deadtime[us] | 数えられなかった時間の累計(マイクロ秒) |
| Temp[C] / Hum[%] / Press[hPa] | BME280 の温度・湿度・気圧。2 秒ごとに更新。センサがないと nan |
| Dig1〜Dig3 | 外部検出器 1〜3 のデジタル入力(0 か 1)。1 は、そのとき相手も反応していたことを表します |
| Ana1〜Ana3 | 外部検出器 1〜3 のアナログ入力(0〜4095) |
測定アプリが保存するファイルは、2 列目に PC の時刻(PC_Timestamp、UTC)が入ります。そのため、3 列目以降は上の行より 1 列右にずれます。.dat はタブ区切り、.csv はカンマ区切りで、# で始まる行は、メモと見出しです。
microSD のログ(LOG0001.TXT など)は、形がちがいます。PC の時刻の列がなく(13 列です)、イベントの行のあいだに、起動のメッセージ(SD: ready、MODE:ANALOG など)やコマンドの応答の行が混ざります。ファイルは、起動のたびに新しくなります。測定アプリの解析ページは、そのまま読めます。Python で読むときは、13 項目の行だけを選びます(下のコード)。
レートは、数えられなかった時間(デッドタイム)を引いた時間で割ります。受け取った行の数を、経過時間で割ってはいけません。
デッドタイムには、イベントを 1 つ処理しているあいだ、画面を書き換えているあいだ、オシロスコープを開いているあいだなどが入ります。v1 は、1 ミリ秒より短い処理の時間が切り捨てられるので、主に画面の書き換えとオシロスコープの時間です。レートは、イベントの数をライブタイムで割って出します。
レート [個/秒] = (終わりの Event − 始めの Event) ÷ ((終わりの Time − 始めの Time) − (終わりの Deadtime − 始めの Deadtime))
Time と Deadtime は、v1 ではミリ秒、v2 ではマイクロ秒です。単位をそろえてから計算してください。v2 は、RESET や再起動で Event・Time・Deadtime が減ったら、そこで区間を切り替えて足し合わせます。
測ったデータを、信号の大きさ(ADC 値)ごとに数えてグラフにしたものが、ヒストグラム(エネルギー分布)です。プラスチックシンチレータでは、光の弱い側にガンマ線、強い側に宇宙線の山が分かれて見えます。
解析ページには、あと 2 つのタブがあります。天頂角分布は、検出器を 15° ずつ傾けて測ったカウントレートを入れると、cosnθ でフィットします。エネルギー校正は、線源の既知のガンマ線のピークから、ADC の値を keV に直す式をつくります。1 つのファイルに複数の測定(RESET や再起動で区切られたもの)が入っていても、解析ページは、区切って足し合わせます。


import pandas as pd
cols = ["event", "pc_time", "time_us", "adc", "deadtime_us",
"temp", "hum", "press", "dig1", "dig2", "dig3", "ana1", "ana2", "ana3"]
df = pd.read_csv("CosmicRay_2026-10-22.dat", sep="\t", comment="#", names=cols)
live_s = (df.time_us.iloc[-1] - df.time_us.iloc[0] - (df.deadtime_us.iloc[-1] - df.deadtime_us.iloc[0])) / 1e6
rate = (df.event.iloc[-1] - df.event.iloc[0]) / live_s
print(f"{rate:.2f} cnt/s")
.csv で保存したときは、見出し行があるので pd.read_csv("ファイル名.csv", comment="#") で読めます(sep と names は要りません)。
ファイル名は、保存したものに合わせて変えてください。
microSD のログは、PC の時刻の列がなく、ほかの行も混ざるので、次のように 13 項目の行だけを選んで読みます。
import pandas as pd
cols = ["event", "time_us", "adc", "deadtime_us", "temp", "hum", "press",
"dig1", "dig2", "dig3", "ana1", "ana2", "ana3"]
rows = [l.split() for l in open("LOG0001.TXT") if not l.startswith("#")]
rows = [r for r in rows if len(r) == 13 and r[0].isdigit()]
df = pd.DataFrame(rows, columns=cols).apply(pd.to_numeric, errors="coerce")
import pandas as pd
# .csv(見出し行のあるカンマ区切り)で保存したとき
df = pd.read_csv("data.csv", comment="#")
# .dat(# の見出しとタブ区切り)で保存したとき
cols = ["event", "pc_time", "time_ms", "adc", "sipm_mV", "deadtime_ms", "temp", "mode"]
df = pd.read_csv("data.dat", sep="\t", comment="#", names=cols)
ファイル名は、保存したものに合わせて変えてください。
Google Colaboratory は、ブラウザの上で Python を動かせる無料のサービスです。PC に Python を入れる必要はなく、Google アカウントがあればすぐ使えます。演習では、サンプルファイルを解析しながら、いろいろな宇宙線の解析を試せます。自分で測りながら進めると、自分の探究にどう使えるかがわかります。
Sign in と出ていたら、自分のアカウントでログインします。
Save a copy in Drive(ドライブにコピーを保存)を選びます。これで自分のドライブにコピーされ、自由に編集できます。解析のコードは、ChatGPT などの生成 AI に手伝ってもらえます。たとえば「Plotly でヒストグラムを作るコードを書いて」と頼むのは、よい使い方です。ただし、できたコードは必ず自分で読み、何をしているかを理解してから使ってください。わからないまま貼りつけると、エラーが出たときに直せず、結果の解釈もできません。各行が何をしているかを AI に説明してもらうのも、おすすめです。
演習のサンプルデータと自分のデータでは、列の並びや単位が違うことがあります。上の表で自分のデータの列を確かめてから、読み込んでください。
探究を進めていて「よくわからない」「困った」というときは、まずここを見てください。
セットアップ編
次を順に確かめてください。
それでも解決しなければ、Discord でメンターに相談してください。
使えます。Chromebook は Chrome 系ブラウザの Web Serial API に対応しているので、ドライバを入れなくても、測定アプリからそのまま測れます。
測定編
目的で変わります。目安は次のとおりです。
詳しくは、講習資料の統計の基礎「ポアソン統計と ±√N」を見てください。400 イベントで相対誤差が 5 % になる理由も、そこで説明しています。
PC の電源設定で、スリープを無効にしてください。
PC の USB 電源管理で「USB のセレクティブサスペンド」が有効だと、USB ポートへの給電が止まることがあります。無効にすることをおすすめします。
v1 次を確かめてください。
:Slave、Master 側に :Master と出ていますか。出ていなければ、アプリで Slave を選び直してください。v2 次を確かめてください。
EXT(外部検出器の読み取り)がオンですか。オフの検出器は、相手から見えなくなります。Dig1 が 1 の行です。くわしくは 05 同時測定 を見てください。
検出器は、USB ケーブルからの給電で動きます。屋外では次の方法が使えます。
モバイルバッテリーの注意:消費電力の小さい機器をつなぐと、自動で電源が切れる「低電力モード」や「自動オフ」がある製品があります。検出器は消費電力が小さいので、測定の途中で切れてしまうことがあります。事前に短い時間でテストして、切れないことを確かめてください。低電力モードを無効にできる製品や、常時給電のモードがある製品を選ぶと安心です。
v2 PC なしで測るとき:v2 は microSD に単体で記録できます。FAT32 の microSD を差して電源を入れてください(04 測定する)。
v1 PC なしで測るとき:v1 には SD カードがありません。データを記録するには PC が必要です。PC なしで記録したいときは、microSD に記録できる v2 を使います。
屋外で測るときは、場所の許可が必要かどうかを、事前に確かめてください。
検出器の設定編
再起動すると、検出器は最初から始め直します。
ANALOG から始まります。オシロスコープの設定(レート上限、撮り方、再アーム)も、初期値に戻ります。LOG0002.TXT など)に書きます。Duty)、自動校正のマージン、機能のオン・オフ(microSD、外部検出器、OLED、ブザー、振動)、音と振動の設定、Bluetooth の名前。Bluetooth の名前を変えて保存したときも、検出器は約 1 秒後に自分で再起動します。
台ごとに、Bluetooth の名前を変えます。名前は、Bluetooth の一覧にも、保存するファイルの名前の頭にも使われるので、ファイルも台ごとに分かれます。
-、_ だけで、ほかの文字は _ になります(「Lab 1」は Lab_1)。別の検出器につなぎ直すと、「別の検出器につながりました」と出ます。画面の計数率・経過時間・件数には、前の検出器の分も入っているので、測り直すときは「データを消去して最初から」を押してください。
SD: ready と SD: logging to /LOG0001.TXT が出ていれば、記録は始まっています。SD: init failed と出たときは、カードの形式、差しこみ、配線を確かめます。LOG0001.TXT、LOG0002.TXT…)。PC の時刻は入らないので、測り始めた時刻は、自分で控えておいてください。「ファームウェア」は、検出器のマイコンの中で動いているプログラムです。信号の読み取り方、しきい値の決め方、データの出力形式は、すべてこれで決まります。
ふだんの測定(Web アプリで測って、データを保存する)だけなら、この章は読まなくて構いません。Arduino IDE を入れる必要もありません。
こんなときに読みます。
| 機体 | マイコン | スケッチ |
|---|---|---|
| v1 標準 | Arduino Nano(Mini-B) | COSMICRAY_DETECTOR_v1.ino |
| v2 | Arduino Nano ESP32(Type-C) | COSMICRAY_DETECTOR_ESP32-S3-Nano-v2.ino |
| v1 Nano ESP32 に載せ替えた機体 | Arduino Nano ESP32(Type-C) | COSMICRAY_DETECTOR_ESP32-S3-Nano.ino(公開リンクはまだありません。必要なときはメンターか info@accel-kitchen.com へ) |
測定アプリは、この表の v2 のスケッチに対応しています(測定アプリのマニュアルの末尾にも、「対応ファーム」として書いてあります)。
オシロスコープの「トリガー/連続」と「再アーム」は、2026-10-23 以降のスケッチが必要です。古いスケッチでも数えられますが、この 2 つの切り替えは効きません(v1 のページは、古いスケッチだと「このファームはオシロスコープに対応していません」と出します)。書き込むスケッチが新しい版かどうかを、確かめてください。
| 機体 | 入れるライブラリ |
|---|---|
| v1 Arduino Nano | Adafruit SSD1306(1.0.1 以上)、Adafruit GFX Library(1.0.2 以上)、TimerOne(1.1.0 以上) |
| v2 | Adafruit SSD1306、Adafruit GFX Library、Adafruit BME280 Library、Adafruit Unified Sensor BLE と Preferences と SD は、ESP32 の Arduino Core に入っています |
| v1 Nano ESP32 載せ替え | Adafruit SSD1306、Adafruit GFX Library |
esp32(Espressif Systems)を検索して入れます。Core は 3.x が必要です。Arduino Nano ESP32 を選びます。ESP32S3 Dev Module を選んでも書き込めます。スケッチは、ピンを GPIO の番号で指定しています。迷ったときは ESP32S3 Dev Module が確実です。Arduino Nano ESP32 を選ぶときは、「ツール」の「Pin Numbering」を「By GPIO number」にします(スケッチのコメントによる説明で、実機での確認はこれからです)。公式でないクローン基板は、書き込みに失敗することがあります。Enabled にします。ここを間違えると、シリアルに何も出ません。COMxx、Mac は /dev/cu.usbmodem…)。Booting v2... と出れば完了です。書き込み中は、測定アプリを閉じておいてください(ポートの取り合いになります)。
ボード、USB CDC On Boot、ブートモード、ポートの選びかたは、v2 の手順と同じです(Core は 3.x)。USB CDC On Boot が Disabled でも書き込めますが、シリアルが USB ではなく D0/D1 の端子に出るので、PC のシリアルモニタにも測定アプリにも、何も届きません。
この機体は、v1 とは別のスケッチ(COSMICRAY_DETECTOR_ESP32-S3-Nano.ino)で動き、次の点が v1 とちがいます。ADC は 12 bit(0〜4095)。出力は、Mode 列を含む 7 列。しきい値は「ノイズの最大値 + 60」で、Res は Sig − 20。設定のうち、マージン、Res との差、同時測定の方式と窓、波高のとり方、OLED、Bluetooth の名前は保存されます(信号しきい値は、起動のたびに測り直します)。コマンドは 47 文字まで。同時測定は別の方式で、コマンド SET_COINC、SET_WINDOW などを使います。この章の v1 の数字とコマンドは、そのまま当てはまりません。起動のときに、基板・ピン・I²C の診断(### で始まる行)がシリアルに出ます。OLED が映らないときは、コマンド I2CSCAN で接続を確かめられます。
v1 の基板は 5 V で動く Arduino Nano を前提にしていて、アンプの出力が分圧なしでマイコンの A0 につながっています。ESP32-S3 の入力は 3.3 V までなので、A0 と GND のあいだの分圧か、3.3 V へのクランプがないと、マイコンを壊すおそれがあります。コインシデンス線(D6)も同じです。5 V 動作の v1 とつなぐときは、レベルシフタを入れてください。3.3 V の ESP32 を Master にして 5 V の v1 を Slave につなぐと、出力が約 2.8 V にしかならず、Slave が読み取れないことがあります。
しきい値は、「この大きさの信号から先を、粒子として数える」という線です。低すぎるとノイズまで数え、高すぎると小さな信号を取りこぼします。どちらも、電源を入れるたびに自動で決まります。
③ のように高くすると、小さなガンマ線は数えなくなります。何を数えたいかで決めます。迷ったときは、自動で決まる値のまま使ってください。
SET_THRESH:<sig>,<rst> を使います(rst は sig より小さく、sig は 1023 以下)。Thr):起動の直後に、A0 を 100 回(10 ms おき、約 1 秒)測り、その最大値 + マージン(初期値 50)にします。たとえば、ノイズが 12〜44 なら、しきい値は 94 です。マージンは、AUTO_THRESH:<margin> や SET_AUTO_MARGIN で変えられ、変えた値は保存されて、次の起動のときも使われます。しきい値そのものは、手で設定しても、次に電源を入れ直すと、この自動校正の値に戻ります。ANALOG は、A0 のピークホールドの値を、ソフトでしきい値と比べて判定します。DIGITAL は、外部のコンパレータの出力で割り込みをかけて判定し、信号しきい値は使いません。DUAL は、コンパレータで判定したあと、信号の大きさも信号しきい値と比べて、小さければ捨てます。電源を入れたときは、いつも ANALOG から始まります。Duty):D2 の PWM の値(0〜255)でつくります。DIGITAL と DUAL のときだけ使い、AUTO_PWM で自動調整します(約 7〜8 秒)。DIGITAL か DUAL に切り替えたら、一度実行してください。ANALOG のまま使ってください。しきい値を決め直したいときは、光の入らない状態で AUTO_THRESH を実行します。検出器にコマンドを送ると、設定を読み書きできます。測定アプリのボタンは、中でこのコマンドを送っています。手で送るときは、Arduino IDE のシリアルモニタ(9600 baud、改行は LF か CR)か、アプリの「詳細設定」を使います。1 行が 1 コマンドで、v1 は 31 文字まで、v2 は 47 文字までです。
| コマンド | 働き | 応答 |
|---|---|---|
SET_MODE:0 / SET_MODE:1 | 0 が Master、1 が Slave | MODE:0 / MODE:1 |
GET_MODE | 今の役割を読む | MODE:0 / MODE:1 |
SET_THRESH:<sig>,<rst> | Sig と Res を設定する | THRESH:<sig>,<rst> |
GET_THRESH | 今のしきい値を読む | THRESH:<sig>,<rst> |
AUTO_THRESH | ノイズを測り直して、しきい値を自動で決める | THRESH:<sig>,<rst> |
SET_SCOPE:ON / OFF、GET_SCOPE | オシロスコープ(波形の表示)。ON の間は数えません | SCOPE:ON / SCOPE:OFF |
SET_SCOPE_RATE:<1〜20> / GET_SCOPE_RATE | 波形を出す回数の上限(回/秒) | SCOPE_RATE:<n> |
SET_SCOPE_TRIG:NORMAL / FREE、GET_SCOPE_TRIG | オシロスコープの撮り方。NORMAL はしきい値を超えたときだけ、FREE はトリガーなしで撮り続けます(初期値 NORMAL) | SCOPE_TRIG:NORMAL / SCOPE_TRIG:FREE |
SET_SCOPE_REARM:<0〜1023>、GET_SCOPE_REARM | 波形を 1 本撮ったあと、A0 が「しきい値 − この値」以下に戻るまで、次を撮りません(初期値 5) | SCOPE_REARM:<n> |
v1 v1 の設定は保存されません。電源を入れ直すと、しきい値は自動設定に戻ります。オシロスコープの設定(レート上限、撮り方、再アーム)も保存されず、電源を入れ直すと初期値に戻ります。オシロスコープは、60 秒コマンドが来ないと自分で OFF に戻って、計数を再開します(ただし v1 のページは、開いているあいだ 15 秒ごとに合図を送るので、この動作は働きません)。
| コマンド | 働き | 応答 |
|---|---|---|
GET_THRESH | 信号しきい値と PWM の値を読む | THRESH:<sig> DUTY:<duty> |
SET_THRESH:<0〜4095> | 信号しきい値を設定する(次に電源を入れると、自動校正の値に戻ります) | THRESH:… |
AUTO_THRESH / AUTO_THRESH:<margin> | ノイズを約 1 秒測って、自動で決める。光の入らない状態で実行します。<margin> を付けると、マージンを変えて(保存して)から実行します | THRESH:… |
GET_MODE / SET_MODE:ANALOG|DIGITAL|DUAL | トリガーモード | MODE:ANALOG など |
SET_PWM:<0〜255> / GET_PWM / AUTO_PWM | コンパレータのしきい値(Digital・Dual 用) | PWM:<duty> |
SET_SCOPE:ON / OFF | オシロスコープ。ON の間は数えません(その時間はデッドタイムに入ります)。状態が変わらないときは何も返さないので、GET_SCOPE で確かめます | SCOPE:ON / SCOPE:OFF |
SET_SD / SET_EXT / SET_OLED / SET_BUZZER / SET_VIB :ON|OFF | microSD、外部検出器、OLED、ブザー、振動のオン・オフ(保存されます) | SD:ON など |
SET_BEEP:<min_hz>,<max_hz>,<ms> / BEEP_TEST | ブザーの音の高さと長さ(信号が大きいほど高い音) | BEEP:500,4000,25 |
SET_AUTO_MARGIN:<n> / GET_AUTO_MARGIN | 自動校正のマージン(保存されます) | AUTO_MARGIN:<n> |
SET_VIB_MS:<min>,<max> / VIB_TEST | 振動の長さ(1〜500 ms、min < max)と、ためし振動 | VIBMS:<min>,<max> |
SET_SCOPE_RATE:<1〜20> / GET_SCOPE_RATE | オシロスコープで送る波形の数の上限(回/秒、初期値 3。保存されません) | SCOPE_RATE:<n> |
SET_SCOPE_TRIG:NORMAL / FREE / GET_SCOPE_TRIG | オシロスコープの撮り方(初期値 NORMAL、保存されません)。FREE はトリガーなしで、最新の窓を撮り続けます | SCOPE_TRIG:NORMAL / SCOPE_TRIG:FREE |
SET_SCOPE_REARM:<0〜4095> / GET_SCOPE_REARM | 波形を 1 本撮ったあと、A0 が「しきい値 − この値」以下に戻るまで、次を撮りません(初期値 5、保存されません) | SCOPE_REARM:<n> |
SET_BLENAME:<名前> / GET_BTADDR | Bluetooth の名前を変える(保存すると、約 1 秒後に自動で再起動します)/基板のアドレスを読む | BLENAME:… / BTADDR:… |
RESET | イベント番号・経過時間・デッドタイムを 0 に戻す | RESET:OK |
v2 残る設定:PWM の値、自動校正のマージン、機能のオン・オフ、ブザーと振動の設定、Bluetooth の名前。起動のたびに決め直される設定:信号しきい値(自動校正)と、トリガーモード(いつも ANALOG)。オシロスコープの設定(レート上限 3、撮り方 トリガー、再アーム 5)も、起動のたびに初期値に戻ります。コマンドを実行しているあいだは数えず、その時間はデッドタイムに入ります(自動校正は約 1 秒、AUTO_PWM は約 7〜8 秒)。コマンドは大文字と小文字を区別し、長すぎる行(47 文字を超えるもの)は捨てられます。全コマンドの一覧と、ピン配置は、測定アプリのマニュアルの付録にあります。
症状から原因と対処を探せます。解決しないときは、Discord でメンターに相談してください。
| 症状 | 原因 | 対処 |
|---|---|---|
v1 Sig が 1023 になり、検出されない | 上の基板と下の基板をつなぐコネクタが外れている | ケースを開けて確かめ、外れていたらつなぎ直す |
v2 Thr が 4095 に張りつき、検出されない | 起動のときに測ったノイズが大きすぎた。SiPM 基板とのコネクタの外れ、または遮光不足が考えられる | ケースを開けてコネクタを確かめ、遮光を見直してから再起動する |
v1 Sig が 100 以上になっている | 外光の混入、またはノイズ | 遮光をし直す。基板が外部のものに触れていないか確かめる |
v2 Thr が 100 前後よりずっと大きい(数百以上) | 外光の混入、またはノイズ(起動時のノイズ + 50 で決まるため) | 遮光をし直して、再起動する(RESET ボタン、または USB の抜き差し) |
| レートが異常に高い(10 cnt/s を超える) | 遮光不良で、外光が SiPM に入っている | アルミテープなどで遮光を強める。テープに隙間がないか確かめる |
| v2 レートが異常に高い(遮光は十分) | しきい値(Thr や Duty)が低すぎる。ピークホールドのリセット線(D8)が効いていない。コンパレータの出力(D0)にノイズが乗っている | AUTO_THRESH や AUTO_PWM をやり直す。基板の配線とグラウンドを確かめる |
| レートが極端に低い(プラスチック版で 0.1 cnt/s 未満) | しきい値が高すぎる、または信号が弱い | 検出器を再起動する(しきい値は起動時に自動で決まる)。改善しなければメンターに相談する |
| OLED の画面が表示されない | I²C の接続不良、またはディスプレイの故障 | ケースを開けて、ディスプレイのコネクタを確かめる。v2 は、アプリの「検出器の機能」で OLED がオンか確かめる。OLED のアドレスは 0x3C です(出荷のファームウェアは 0x3C 固定で、0x3D の画面は表示されません)。改善しなければメンターに相談する |
| 同時測定で Slave(または受け側)が反応しない | ケーブルの接続や接触不良。役割がずれている | 画面の :Master / :Slave を確かめ、ケーブルを差し直す。アプリで Slave を選び直す。OUT と IN1 のつなぎ方と、EXT がオンかを確かめる。 |
| v1 温度が異常な値になる | 温度センサを積んでいない機種、または接触不良 | 機種を確かめる。解析のときに、温度の列を使わないようにする |
v2 温度・湿度・気圧が --(または nan)のまま | BME280 が見つかっていない | I²C のアドレス(0x76 か 0x77)と配線(SDA = A4、SCL = A5)を確かめる。BMP280(温度と気圧だけ)では、湿度は出ない |
v2 Dig1〜Dig3 がずっと 0(または 1) | 外部検出器の読み取りがオフ。または出力の電圧(3.3 V か 5 V)が合っていない | アプリの「検出器の機能」で、両方の検出器の外部検出器の読み取りがオンか確かめる。外部検出器の出力の電圧と、プルアップ・プルダウンの要否を、回路図で確かめる |
v2 シリアルに何も出ない(Booting が出ない) | ボードの設定、またはボーレートの違い | ボードが Arduino Nano ESP32、USB CDC On Boot が Enabled、ボーレートが 9600 か確かめ、書き込み直す。BOOT を押しながら RESET を押すと、書き込みモードに入れる |
| v2 microSD にログが記録されない | カードの形式(FAT32 ではない)。起動したあとにカードを差した。microSD への記録がオフ | FAT32 で初期化したカードを、電源を入れる前に差す。アプリの「検出器の機能」で、microSD への記録がオンか確かめる(手順) |
| 症状 | 原因 | 対処 |
|---|---|---|
| Web アプリでポートが表示されない | ドライバが入っていない。ケーブルの不良。Chrome か Edge 以外のブラウザ | v1 の Windows は、ドライバを確かめる。別の USB ポートとケーブルを試す。Chrome か Edge で開く |
| 「シリアルポートを開けませんでした」と出る | ほかのアプリがポートを使っている | Arduino IDE のシリアルモニタや、アプリを開いた別のタブを閉じてから、もう一度試す |
| v2 Bluetooth の一覧に検出器が出ない | 名前が合っていない。電源や距離の問題。ほかの機器とつながっている | アプリの「検出器の名前」が、検出器の名前(初期設定は CosmicRay)と同じか確かめる(大文字と小文字も区別します)。ほかのスマートフォンや PC とつながっていないか確かめる。つながったあとに切れたときは、アプリが自動でつなぎ直します(1 秒から倍々に、最長 30 秒間隔。自動保存は同じファイルに続きます) |
| オシロスコープを開いても、波形が 1 本も出ない | トリガーのまま、A0 のベースラインが、再アームの水準(しきい値 − 再アームの値)より下まで下がらない。しきい値が高すぎる。古いスケッチ | しきい値の線を、ベースラインの十分上へ動かし、再アームの値を、ベースラインのゆらぎより小さくする。確かめるだけなら「連続」にする(撮り方)。「トリガー/連続」が効かないときは、2026-10-23 以降のスケッチに書き込み直す |
| 保存したファイルが見つからない | ダウンロード先が違う | ブラウザのダウンロード履歴から、場所を開く。保存先の設定を確かめる |
| Google Colab でエラーが出る | ランタイムにつながっていない。セルの実行順が違う | 画面上部の「ランタイム」→「すべてのセルを実行」を試す。それでもだめなら「ランタイムを再起動」して、上のセルから順に実行する |
| データに欠けがある(途中でイベント番号が飛ぶ) | USB 接続が不安定。PC がスリープした | ケーブルを差し直す。長く測るときは、PC のスリープ設定を無効にする |
| 測定中に、データが突然止まる | USB ケーブルが抜けた。PC がスリープした | ケーブルのつながりを確かめる。PC の電源設定で、スリープを無効にする |
解決しないときは、Discord でメンターに相談してください(info@accel-kitchen.com でも受けつけています)。次のことを書いてもらえると、早く答えられます。
組み立てキットを組み立てる手順です。完成品を受け取った場合は、読まなくて構いません。
組み立ての動画があります(一部、古い内容を含みます):YouTube
手順の写真は、原本(Google ドキュメント)のものです。「検出器組み立て方法」も見てください。
はんだ付けを始める前に、「02 機種と各部のしくみ」の「安全のために」を読んでください。基板をつなぎ替えるときは、USB を抜いてからにします。

光沢のある方の面を内側にして、全体を包みます。片方の面の中央は、SiPM を当てるために空けておきます(写真よりも広めにあけるのがおすすめです)。

基板に 6 ピンのコネクタをはんだ付けしたあと、スペーサーをねじ止めします。

SiPM の受光面にグリスを塗り、シンチレータの空けた窓に合わせて当てます。

遮光テープで、ぐるぐる巻きにして完成です。どの部分も 2 層以上になるように巻きます。スペーサーと 6 ピンの端子は露出させます。テープを巻いたあと、ドライバーなどで穴を開けてください。

横から見て垂直になるように、はんだ付けします。

完成図(下の写真)を参考に、はんだ付けします。
1
2
3
4
5
6
7
8
9
10
メイン基板の完成図です。
まず、Arduino が浮かないように付けます。ピンが傾くと基板に刺さらないことがあるので、基板に刺した状態で、表の 4 つの角、裏の 4 つの角の順に、1 ピンずつ傾いていないかを確かめながらはんだ付けします。そのあと、残りをまとめてはんだ付けします。




TP2 にプローブの先(心線)を、GND にグラウンドをつなぎ、パルス信号を見ます。TP1 は SiPM の生の信号、TP2 は増幅した信号、TP3 はピークホールドの信号です。
TP2 に赤のクリップ、GND に黒のクリップをつなぎます。

v2 の基板は、小さな表面実装部品の多くが基板に実装された状態で届くことを想定しています。部品表(BOM)のうち、実装用の部品表に入っていない次の部品は、手ではんだ付けします。キットの内容は版によって違うので、実際に届いた基板で、どの部品が付いているかを確かめてください。
| 記号 | 部品 |
|---|---|
| U3 | Arduino Nano ESP32 用の 15 ピンソケット(2 個) |
| OLED1 | OLED 用の 4 ピンソケット |
| RESET1 | リセットスイッチ |
| J1、J2 | 2 列 3 ピン(6 ピン)のヘッダ。SiPM 基板と読み出し基板をつなぐのに使います(どちらも 6 ピンで、3 ピンではありません) |
| LED1 | 3 mm の LED(スルーホール)。部品表のどちらにも載っていないので、キットに入っているか確かめてください |
Nano ESP32 用のソケットは、浮かないように付けます。ピンが傾くと刺さらなくなるので、Nano ESP32 を刺した状態で、4 つの角を 1 ピンずつはんだ付けしてから、残りをまとめてはんだ付けします。OLED のソケット、リセットスイッチ、ヘッダも、基板の向きに合わせて付けます。
読み出し基板(63 × 63 mm)は、M2 × 17 mm のスペーサー 3 本で支えます。SiPM 基板(40 × 40 mm)は、10 mm のスペーサーで支えます。シンチレータは、上の手順で包んだものを使います。
SiPM 基板と読み出し基板は、USB を抜いた状態で、6 ピンのコネクタ(J1・J2)を差しこんでつなぎ、M2 のスペーサーとねじで固定します。シンチレータは SiPM にしっかり密着させ、遮光テープで、すき間なくふさぎます(すき間があると、蛍光灯の光でカウントが跳ね上がります)。
基板の裏のソケットに Nano ESP32 を差し、OLED をソケットに差します。
USB でつないで、OLED に Cnt と Rate が出ることを確かめます。測定アプリを開き、オシロスコープで波形が出ることも確かめられます(オシロスコープ)。ファームウェアは「08 ファームウェア」の手順で書き込みます。この確認は、Nano ESP32 にファームウェアが先に書き込まれているときだけできます。何も表示されないときは、先に書き込んでください。
v2 のケースは、3D プリンタで作る、上蓋を外して組み立てる形です。外寸は 86 × 75 × 61.4 mm で、前面に OLED の窓、リセットスイッチの穴、LED の穴があります。側面には USB ケーブルの穴と、OUT・IN1〜3 のジャックをまとめた四角い開口があります。
| ファイル | 用途 |
|---|---|
cosmic-ray-detector-v2-compact-base.stl | 本体と底板(1 個) |
cosmic-ray-detector-v2-compact-lid.stl | ねじで固定する上蓋(1 個) |
cosmic-ray-detector-v2-compact-lightpipe.stl | LED の光を前面へ導く部品。任意、透明な素材で印刷 |
印刷は、0.4 mm ノズル、0.2 mm の積層、外周 4 本ほど、インフィル 20〜30 % が出発点です。本体と蓋は、STL の向きのまま印刷します。ジャックの四角い開口は幅 50 mm の橋渡しになるので、開口の上辺にサポートを付けてください。STL のデータの入手方法は、info@accel-kitchen.com へお問い合わせください。
このケースの寸法は、3D モデルの上で基板や部品との干渉を確かめたものです。実物での試作の組み立ては、まだ行っていません。合わないところがあれば、メンターに知らせてください。
シンチレータのモデルには、包んだ厚みが入っていません。実物の、包んだブロックで合うかを確かめてください。蓋のねじは、PLA に直接ねじ込む形です(下穴は 2.2 mm)。リセットスイッチと LED の穴は 7.5 mm です。microSD は、ジャックの四角い開口から抜き差しします。
この講座の前半は、検出器を手に取る前の予習用テキストです。後半の検出器マニュアルは、実機を使うときの手順書です。 より深く学びたいテーマは、姉妹講座へどうぞ。