本記事には古い情報が含まれている場合があります。まとめページ を作成しましたので併せて御覧下さい。
大変長らくお待たせいたしました〜2ヶ月ぶりの更新です。
ようやく Bluetooth ガイガーロガー の出来上がりとなります!!
BT モジュールの他、いくつかの新しい周辺デバイスに対応すると同時に、プログラムも大幅に見直しかけてまして、動作検証(バグ出し)に予想以上に時間がかかってしまい・・・
かなりの機能追加にかかわらず、複数管(4管)対応を維持したまま、メモリー使用量は以前より少ないという、時間を費やしただけのことはあるバージョンになったと自負しています。
20120225版 ファームウェア一式 20120301版をお使い下さい
- シリアルポートへの出力機能を新設しBluetoothにも対応(GPSドングル互換として振る舞う)
- バックライト液晶を使用する場合で視認性と省電力とを両立する輝度可変モードを追加
- 押しボタンに対応(動作中のlcdLayoutを変更、長押しで安全に強制リセットなど)
- ウォッチドッグ機能を実装(フリーズを検知したら強制再起動)
- GM管への昇圧段階を自由に設定可能に(40Vステップを5Vステップにすると冷間時の起動失敗が緩和されます)
- 遅延起動モードを新設(停電回復時にハブやルーターより早く起動することを防止)
- 平均化時間を動的に自動可変させる仕組み(低線量では長め高線量では短かめ)を実装
- lcdLayout=1の時は動的に可変させた平均化時間で線量を表示
- lcdLayout=2の時は1分平均の値をブザー鳴動の判定に用いるよう修正
- NMEA形式ログで異常データが作成される場合があるバグを修正(遅いμSDで起きやすかった)
- NMEA形式ログの DMDRT センテンス出力フォーマットを最新規格に準拠
- USB無効化ファーム未導入時は省電力表示「S」でなく「s」になるよう修正
- プログラムを大幅に見直し空きメモリーを更に確保(機能追加にかかわらず空きは増えた)
いつもは、この箇条書きに続いて変更内容を詳しく書いていくのですが、あまりにボリュームがありすぎて、それを書いてるだけで丸一日かかってしまいそう(そのぶん公開が遅れる)ので、まずは「3書けば9まで想像を膨らませて頂けそうな人」向けに、超おおざっぱに書いたものを上げておき、後日内容を詳報に差し替えていきたいと思います。
新しく対応する周辺デバイス(制作作業に際して準備したもの)
種類 | 機種 | 価格帯 | コメント |
Bluetooth | SBT1-T-S シリアル 通信モジュール[SLAVE/TTL] |
1950円 | 最低限必要な機能は備わってます BT未認証のため日常運用には不向き |
Bluetooth | RBT-001 シリアル(UART)モジュール |
4700円 | BT2.0 対応、高機能かつ省電力 BT認証取得済み これから動作テスト始めます |
microSDロガー | Open Log | 2495円 | 以前シリアルロガー作りました |
ボタン | パネル取り付け用押しボタン | 70円 | お好きな色・お好きなデザインのものを |
液晶 | キャラクタディスプレイモジュール | 800円 | 3.3V動作品 |
配線図
上記のように OpenLog を BT に対して並列に配線することで、BTに出力している内容(NMEA形式の位置情報つき線量ファイル)を OpenLog を使って収集することも出来ますが、通常は OpenLog は必要ありません。
様々な機材が GND を必要としますので mbed 1番が大賑わいになってしまいます。
GND は他にも TP4、USB コネクタ固定用ホール、R6 そばの四角枠、R14 の下にある四角枠、GMアノード金具右下の四角枠、などあちことに露出してますので、それを代わりに使っても問題ありません。
Bluetooth モジュールの接続
GPS と同様にシリアル制御で動作し、電源・GND・信号線2本の4本を配線するだけで十分な仕事をしてくれるという代物。
(BT(TX)→mbed(10)の信号線は今のところ未使用ですので省略可。合計3本でもOK)
szParts で扱われてる SBT1-T-S というモジュールは電源電圧・信号線ともに 3.3V で動作しますので直結ですが、RBT-001 は 3.0V で絶対定格が 3.3V なので直結は危険そう・・・(動作テスト後、説明追加予定)
追記(2012/03/12) RBT-001も繋げてみました
mbed はシリアル3系統あるんですけど、うち1系統は LCD のパラレル制御で潰されてしまってます。(実にもったいない)
残り2つのうち片方は GPS が繋がれていると思いますので、残りの1系統を利用することになります。
現時点では 2nd GPS との併用は不可ですが、GPS は受信のみ利用、BT は送信のみ利用、ということなので、何とか兼用利用させられないものかチャレンジしてみたいとは思っておりまする。。
ピンヘッダが付属してましたが ピンソケット 付けてます。ゆくゆくはケース内に内蔵させますが、今のうちはジャンパー線で引き出したほうがラクなもので・・・
隣に置かれたモジュールは OpenLog です。
定義ファイル(NMEA.CFG)をファイル中に書かれたコメントを読みつつメンテします。
通信速度は使用する Bluetooth モジュールの工場出荷値にしておくのがラクチンです。(上で挙げた2機種とも 9600bps)
env.ini の中で、NMEA.CFG を食わせておく(#NMEA=NMEA.CFG の # を外す)ことも忘れずに。。
電源投入後10分以内にペアリングを済ませて下さい。(パスコードは「0000」)
ペアリングが完了して接続させると、パソコンからは COM ポートとして繋がります。(使用されるプロファイルはSPP)
TeraTerm 等で中身を見ると、いかにも GPS そっくりなデータの羅列を見ることが出来ます。
NMEA.CFG 定義ファイルを見ても分かりますが、デフォルトの送信間隔は5秒となってます。
Google Earth で使用する際には、ツール → GPS → リアルタイム のタブから「開始」しますが、送信間隔5秒に対して「ポーリング間隔4秒」はタイミングが合わないらしく、なかなかデータを取得できません。
Mark2 側の送信間隔を1〜2秒おきに変更するか、Google Earth のポーリング間隔を10〜20秒にするか、どちらか弄ってください。
なお、Mark2 側を1秒おきにしたときはファイル作成されるデータも1秒おきとなり、莫大なデータサイズになりますので、車載パソコンで高速移動しながら利用する等でない限り、Google Earth 側を弄ったほうが賢明です。
市販されてる Bluetooth GPS ドングルと同様に、リアルタイムに位置がプロットされていきますが、あいにく線量情報の色づけ等は Google Earth 側がそーいう仕様になっていないため出来ません。
TeraTerm もしくは OpenLog を使って流れてるデータを見てみると、GPGGA などの見慣れた NMEA センテンスとは別に DMDRT という聞き慣れないセンテンスが混じっていることを確認できると思います。
この中に測定に用いた機種とガイガー管(Mark2 sbs-20等)、線量(cpm・μSV/h)、換算係数、処理に使用した間隔秒数、累積値、等々の二次利用に好都合な情報が埋め込まれております。
パソコンやスマホのアプリを開発できる人は、この情報を読み取って描画してくれると嬉しいですねー
DMDRT の仕様については別に書こうと思ってますが、メールか何かで問い合わせ下されば直ちにお知らせします。
以上、シリアル出力に Bluetooth モジュールを接続し、NMEA 形式で扱う場合で書きましたが、Logging や UdpSend と同じように、出力する書式を自由に定義して、テキストデータとして送信するモードも用意しておきました。
SERIAL.CFG あたり覗いて見て下さい。NMEA.CFG と SERIAL.CFG の中で同じポート番号を指定すると混じって出力されます。
液晶バックライト輝度制御
3.3V 向け液晶 のバックライトを mbed から直接駆動させることにより輝度を制御できるようにしました。
3.3V 向け液晶という名前の通り、ロジック部電源・信号レベル・バックライト電源の全てが 3.3V 仕様なのですが、信号レベルは現状でも 3.3V ですし、バックライトはロジック電源から切り離し可能となってます。
あとはロジック電源だけクリアすればいいのですが、きちんと 3.3V で使おうとすると、ピンソケットの足の切断や基板のパターンカットが必要になってしまいます。
ちょっと憂鬱な気分になってしまいそうですが、データシートによれば定格上限 4.5V ながらも絶対定格は 7V と余裕があるため「ただちに〜(中略)〜ない」と判断、ロジック部への電源は現行通りと致しました。
もともとショットキーで電圧降下して動いているので、5Vとはいえ実際には4.6V前後で動いてますからね。
注意点ですが、液晶の裏にあって普通は半田でショートさせる場所(上で言う J3)をショートさせない状態で使います。
新品はショートされていない状態になってますが、ショート済みの液晶を再利用して使用する場合は半田吸い取り線などを使って除去するとともに、確実に半田が取れたかテスターで測って導通がないことを確認して下さい。
その上で、液晶基板の端に出てる LED のアノードホールを mbed の 25番ピン に繋ぎます。
R9 のような電流制限抵抗は必須ですので、きちんと取り付けて下さい。
わずか、これだけの配線です。
具体的な輝度調整ですけど、savePower=0 のとき、もしくは savePower=2 で起動時に LAN 線が刺さってたとき、いわゆる省電力モードでない通常モードのときには輝度100%で動作されます。
省電力モードのときには消費電流を削減させるべく、辛うじて視認できる最低限の明るさに下げて動作されます。
いちお5%の設定値ですが、実際には10%くらいに見えます・・・
→env.ini 内 minBacklight、maxBacklight で調整可、単位は%で 0〜100
(注意)
mbed のピンの最大供給電流量は 40mA だそうなので、その範囲内で点灯するバックライトに限ります。
追記(2012/03/01)
20120301版以降のファームウェアでは配線のほか env.ini 内に backLight=25 の行を記述する必要があります。配線だけでは点灯しませんので御注意ください。
追記(2013/01/28)
ボードオレンジ などを使って Mark2 互換機としておられる場合、ボードオレンジのジャンパーを差し替えることで液晶ロジック部に 3.3V な電源を供給することができるようになりますが、私の個体だけかもしれませんが、激しい文字化けが発生する現象が起きたことがあります。
5V の位置で使うと文字化けは一切なし。
3.3V に GPS 等々の機器を繋げすぎて mbed ボード上の三端子が悲鳴を上げているのか分かりませんが、3.3V 液晶のロジック部は最大7Vまでは壊れないらしいので、文字化けが発生するときは 5V で動かしてしまったほうがいい気がします。
※
バックライト部、3.3V向けに計算した過電流防止抵抗で5Vに繋げるとバックライトが確実に壊れます。
5Vを突っ込んでも大丈夫ぽいのは、あくまで液晶のロジック部のみです。
押しボタンの接続
普通のガイガーにあって若松ガイガーにないもの、それは「ボタン」でした。
これがないが故に、若松ガイガーは正式にはガイガーではなく「パーソナルモニタリングポスト」でした。
待望の押しボタン、本日ここに登場!
mbed の中にある残念2ピンの片方 20番 をボタンにつなぎ、ボタンの先は GND に落とします。
プログラムでピンをプルアップさせておりまして、20番ピンが GND に落ちたらボタンが押された、と判断してます。
注意(20120717)
20120717版からボタンを利用する際には env.ini 内への明示が必須になりました。
20番ピンにボタンを繋げたときには env.ini 内 button=20 と書きます。
また温度センサーなどアナログ出力なセンサー類を接続できるようになりましたので、これらセンサーを利用される予定がある場合にはアナログ入力が可能な貴重な20番ピンをボタンなんぞに使わず、ボタンは21番ピンあたりに割り当てた方がいいです。
ボタンの位置ですが、ケースの加工容易性と操作性(普段は邪魔にならないこと)から鑑みて、以前にボタン電池を配置した場所 が最適であると判断。
「押しボタンがボタン電池を押し出した」と文字そのままの結末に、特等地から追し出された電池も観念してることでしょ。
電池のほうは すまき・・じゃなくてビニテ巻きにして、縁のし・・・もとい液晶の下に放り込んでます。
ちなみに私と同じ LAN 口の隣にボタンを配置させようという場合で、かつ、もし OpenLog も使いたいという場合は、接触しない程度ながらも、ボタンをなるべくガイガー管に寄せて付けた方がいいです。
私は LAN コネクタ寄りに付けてしまいましたが、管に寄せて付けるとボタン〜LANコネクタの間に空間ができ、LANコネクタの側面に OpenLog を接着させて、LANコネクタの穴を少し大きくするだけで、microSD の出し入れが容易に出来る、という風に仕上げることができ、コネクタ側面という貴重な平面を有効活用できます。
さて押しボタンの使い方ですが、将来は拡張していくにせよ、現時点では以下のとおりです。
ボタン押しながら電源投入 | パソコンからUSBフラッシュメモリーとして見えて mbed に邪魔されることなくプログラムの差し替えや 定義ファイルの編集が容易に出来るメンテナンスモードに突入 |
メンテナンスモード内でボタン押す | メンテナンス終了してリセット |
稼働中に短押し | 液晶レイアウト(lcdLayout)を変更 |
稼働中に長押し(5秒くらい) | 処理終了(データ書き込みも終了)させて安全にリセット |
割り込み制御ではない(19番20番は割り込みが効かない残念ピン)ので、他の処理の処理中などでは反応が悪いときありますが、タイミングによって僅かにイラってする程度かと。。(チャタリング制御不要でラクラク仕上げしました)
他にも何かボタンに割り当たってたら便利だな、って機能あればリクエスト下さいね。
ウォッチドッグ (フリーズを検知して自動リセット)
いちお現行ファームウェアでは、初期の頃と比べて動作中にフリーズするようなバグは殆ど無くなりましたが、唯一残ったフリーズ要因が Mark2 に microSD ソケットを装着しているときに、microSD への書き込み途中に何かトラブルが起きたとき。
microSD 書き込みは公開プログラムを一時修正していますが、元々がエラー時の判定が悉く足りていないという、かなりファジーなプログラム。
公開ライブラリは DHCP のアドレス再リース処理も省略してたり(なぜだか嫌がらせのようにコメントアウトされてた)、無人で何十時間も運用する前提で作られていないものを私のところで何とか使えるように改造していったわけですけど、microSD 絡みのライブラリだけは奥が深すぎて(何をやってるのか理解しきれず)断念・・・
カードなしでフリーズする現象だけは何とか解消させたつもりですが、その他のエラー諸々への対応は絶賛放置中でして、調子の悪い microSD を使ったり、microSD ソケットの取り付けがイマイチで接触不良してたり、と言ったイレギュラー時にはフリーズを防げない可能性が高いのです。
リセットさせれば問題が解決するという訳ではないのですが、リセットさせれば(一時的にせよ)直る場合も多々ありますので、巷でウォッチドッグと呼ばれる機能を実装させてみました。
デフォルトは 300秒 です。
もっと短い時間でフリーズ判定させるときは、env.ini 内に watchDog=180 とか秒数を指定します。(180だと3分)
私の場合は勝手にリセットかかるとバグを見つけにくくなるので、watchDog=0 で使わざるを得ないですけど。。
冷間起動と停電への対策
冬になってから、みなさんの Mark2 も起動直後しばらく 0cpm/0μSv の表示が続くようになってませんか?
10分20分と放置しておくと、いつの間にか直ってしまいますが、回路の最初に挿入されてるショットキーダイオードは温度が寒くなると電圧降下が大きくなる、という特性があって電圧低下してしまい、74HCT14 がうまく発振できなくて高電圧を作り損なってるのに、がんばって高電圧を作らせようとオペアンプが頑張ってしまい MOSFET のソースとドレインとが半ばショートに近い状態を維持する、という悪循環が繰り広げられているようなのです。
回路を弄らずになんとかならないか?と悩んだところ、昇圧ステップの電圧を小刻みにすることで緩和することを発見。
デフォルトは0.5秒おきに40Vずつ上げていくんですけど、これが冷温下では早すぎるようなのです。
ということで、stepVolt なるパラメータを新設しました。
env.ini の中で stepVolt=5 とか書くと0.5秒に5Vずつ昇圧していくようになります。380Vに達するまで38秒もかかるようになってしまいますが、自分の場合は起動失敗の確率が大幅に下がった気がしています。
ダメ元で一度お試しくださいませ。
平均化時間の自動可変機構(仮称リコメンドモード)
低線量環境では長めの時間をかけて誤差を減らし、高線量地域では線量の変化を機敏に追従させる、と相反する要件を両立させる平均化処理時間自動可変機構なるものを用意しました。(まるで VTEC みたいだ)
考え方としては、ある程度の測定ムラ(バラツキ)を許容したうえで、応答性を重視したモードだと思って頂ければと思います。
lcdLayout=1 の表示(Gps/Ntpマークが出るモード)は、このリコメンドモードの線量値になってます。
線量変化への追従性は env.ini 内 recommendCount パラメータで微調整できますが、今のところのデフォルトは「0.1μSV/h の環境では6分弱、0.5μSV/hでは1分強)」くらいになってます。
上の記事で書いた押しボタンを装着させるとパソコンと接続せずに稼働中に表示モード(lcdLayout)が変えられますので、是非とも頑張ってボタンを装着させて線量の違いを見比べてみてください。
個人的には、みなさんに付けて欲しい機材の順位としては、Bluetooth よりも押しボタンのほうが上です。
(リチウム電池>押しボタン≫GPS>microSD≧Bluetooth)
lcdLayout | 表示内線量の計算間隔 |
0 | 10分平均値 |
1 | リコメンドモード(周辺線量に応じて可変) |
2 | 上段が1分平均値、下段が10分平均値 |
今の recommendCount=100 の設定値は、市販ガイガー同様の測定ムラ±20%程度を許容したまま出来るだけ応答性を優先した感じです。
10分平均値よりはバラツキの多い数値となりますが、1分平均値よりは遙かに「まともな数値」を出してきます。
もう少し測定ムラを減らしたいときには、recommendCount の値を大きめにしてみてください。
(放射線検知に伴うカウントが recommendCount で指定された値に到達する時間で平均化させてます)
各種パラメータ設定
以下の項目が追加になりました。
定義ファイル | 項目名 | 目的 | 指定方法 | 省略時 |
env.ini | bootWait | 起動遅延秒数(savePower=2時) | 1〜99 | 5 |
env.ini | watchDog | 自動再起動を行うフリーズ秒数 | 数値 | 300 |
env.ini | backLight | バックライト制御ピン | 25 | 未接続 |
env.ini | minBackLight | 最小輝度(省電力時のみ有効) | 5 | |
env.ini | maxBackLight | 最大輝度 | 100 | |
env.ini | recommendCount | リコメンドモード判定カウント数 | 100 | |
env.ini | nmea | NMEA 設定ファイル | ファイル名 | NMEA 未使用 |
env.ini | serial | SERIAL 設定ファイル | ファイル名 | SERIAL 未使用 |
env.ini | stepVolt | 昇圧ステップ電圧 | 数値 | 40 |
env.ini | button | 押しボタンを接続したピン番号 | 未使用 | |
NMEA 設定ファイル | path | ファイル名 | パラメータ書式が使用可 | ファイル出力しない |
NMEA 設定ファイル | baud | シリアル出力通信速度 | 9600 | |
NMEA 設定ファイル | tx | シリアル出力ピン番号 | 9 or 13 | 9 |
NMEA 設定ファイル | interval | 出力間隔(秒) | 数値 | 省略不可 |
SERIAL 設定ファイル | baud | シリアル出力通信速度 | 9600 | |
SERIAL 設定ファイル | tx | シリアル出力ピン番号 | 9 or 13 | 9 |
SERIAL 設定ファイル | format | シリアル出力時の書式 | 半角文字 | 省略不可 |
NMEA 関係、旧形式(nmeaLog、nmeaInterval)も使えますが、設定項目が増えましたので別ファイルに出しました。
いずれ旧方式はサポートしなくなる予定なので、ご面倒ですが設定内容を NMEA.CFG に書き写して下さい。
DMDRT 仕様と対応アプリ開発者むけ情報
(続きを書く予定)