M5Stackの最小級開発モジュール M5AtomS3 Lite を使用し、オープンソースのガイガーカウンターボード GeigerCounter-V1.1からのパルス信号を正確にカウント・計測してクラウドサービス ThingSpeak へ定期アップロードするシステムです。
ESP32-S3のマルチタスク特性を考慮し、排他制御を用いた厳密な割り込み処理(ISR)を実装しており、ノイズ対策のチャタリング防止機能や、本体LEDを活用したステータス可視化機能を備えています。
- 精密なパルス計測: GPIO割り込みを使用し、マイクロ秒単位でのチャタリング防止(最小パルス間隔 500μs)を実装。
-
データセーフティ: 割り込みハンドラとメインループ間でのデータ競合を防ぐため、
portENTER_CRITICALによるアトミックなデータ取得・リセットを採用。 -
ThingSpeak 連携: 60秒ごとに CPM(Counts Per Minute)および
$\mu\text{Sv/h}$ (マイクロシーベルト毎時)、生カウント数をWi-Fi経由で自動送信。 -
オンボードLEDによるステータス視覚化:
- 放射線パルス検知時: 一瞬 黄色 に点滅
- Wi-Fi接続試行中: 淡い青色 に点灯
- ThingSpeak送信成功: 緑色 に3回点滅
- ThingSpeak送信失敗: 赤色 に3回点滅
- スマートWi-Fi再接続: 接続が切断された場合、メインの計測処理をブロック(フリーズ)させることなく、5秒のタイムアウト付きで自動再接続を試行。
| デバイス | ピン名 / GPIO | 接続先 | 備考 |
|---|---|---|---|
| M5AtomS3 Lite | GPIO 2 |
ガイガーカウンターの信号線 (OUT) | PORT A (Groveコネクタ側) |
| M5AtomS3 Lite | GND |
ガイガーカウンターの GND | |
| M5AtomS3 Lite | 5Vまたは3.3V |
ガイガーカウンターの電源線 | モジュールの仕様に合わせて接続 |
*※デフォルトでは GPIO 2(PORT A)をパルス入力ピンとして使用しています。
ボードと GPIO2 の間に10kΩの抵抗を入れてあります *
コード内では、一般的なチューブ(例: M4011など)を想定した以下の換算係数を設定しています。使用するガイガー管のデータシートに合わせて調整してください。
-
CPM_PER_USV_H = 151.0f(151 CPM$\approx$ 1$\mu\text{Sv/h}$ )
本プログラムのビルドには以下の環境およびライブラリが必要です。
- Arduino IDE または PlatformIO
- ESP32 ボードパッケージ (M5AtomS3 がサポートされているバージョン)
- ライブラリ:
M5AtomS3(M5Stack公式ライブラリ)
- コードの修正
ご自身の環境に合わせて、コード内の以下のプレースホルダーを書き換えてください。
// Wi-Fi設定 const char* WIFI_SSID = "あなたのSSID"; const char* WIFI_PASSWORD = "あなたのパスワード"; // ThingSpeak設定 const char* THINGSPEAK_WRITE_API_KEY = "あなたのAPI_KEY";
ボードタイプで M5AtomS3(または ESP32S3 Dev Module)を選択し、PCに接続してプログラムを書き込みます。
起動時、Wi-Fi接続中はLEDが淡い青色に光ります。
接続成功後、放射線を検知するたびにLEDが黄色に小刻みに点滅します。
シリアルモニタ(115200 bps)を開くと、5秒ごとにライブの計測結果が出力されます。