ブログ/こばさんの wakwak 山歩き Twitter

2012-07-17 若松ガイガー 20120717版 リリース!

若松ガイガー 20120717版 公開

| 若松ガイガー 20120717版 公開を含むブックマーク

 本記事には古い情報が含まれている場合があります。まとめページ を作成しましたので併せて御覧下さい。


 新ファームの公開を予定 と書いておきながら、2週間がたってしまいました。

 主たるテーマだった 汎用アナログ入力(ADC)、Cosm対応 はさほど手間じゃなかったのですが、mbedの大元のライブラリを最新 Rev.41 に上げたら、これまで使えてた公開ライブラリたちが軒並みコンパイルエラーとなってしまいまして・・・


 Rev.40 もダメで、39 に戻すと以前のままコンパイルが通りましたので、 Rev.39 に戻してリリースしてしまう方法もありましたけど、せっかくなので・・・と努力した結果、なんとか Rev.41 でもキチンとコンパイルが通るように出来ました♪


20120717版 ファームウェア一式 20120723版をお使い下さい。


注意(20120723)

自動省電力判定(savePower=2)時で、起動時にLAN線が刺さってなくて自動的に省電力モードに移行した際、ネットワークを利用するサービスを無効にしないといけないのですが、それをやり損ね、起動直後にフリーズしてしまうバグを作ってしまいました。20120723版にて修正されています。ご迷惑をおかけし申し訳ありません。


20120423版との機能比較 (20120423版の仕様はこちらを参照ください)


  • 汎用アナログ信号の入力およびロギングの機能を追加
  • cosm.com(pachube.comの後継)に正式対応
  • cosm.comへ送信する際、移動平均化の中間時刻で測定値を送信する機能を追加
  • メンテナンスモード(ボタン追加した上、押しながら電源ON)で挙動が不安定だった不具合を修正
  • 起動シーケンスを見直し、mbedによるUSBフラッシュメモリー利用を初期化処理の前半にまとめる
  • 押しボタンにデフォルトで p20 を割り当てていたものを取りやめ、使用時には明示が必要なように変更

汎用アナログ信号の入力およびロギングの機能を追加


 複数GM管を繋いでおられる方はすでに mbed のピンがマンタンに近い状態かと思いますが、単管の人は随分とピンを余らせていると思います。

 もったいない・・・ということで、せっかく24時間運用で黙々と放射線量を測ってるわけですから、温度や湿度も一緒に測らせると良いと思いませんか?ってことで実装してみました。


 LM35DZ を例にして説明してみます。


http://dl.ftrans.etr.jp/?59202d5bf1c64a51bbb0fb25b4e89ad9584025ba.png


 こんな感じで mbed に繋いでみました。16ホールユニバーサル基板 1枚にラクラク載せられます。

 最初は LM35DZ の出力をマイコンの入力ピンに直結させて使っていたのですが、ほぼ常に実際値の +3〜+5℃ くらいを示し、なおかつ変動が大きいなど挙動不信だったので、LM35DZ のインピーダンスが高すぎるんじゃないのか?ってことで、テキトーに 0.1μF をパラってみたら見事に落ち着きを取り戻しましたので、こんな風になってます。


 10kΩは(念のための) LM35DZ の保護用です。

 空のコンデンサへのチャージに LM35DZ が耐えられるか心配だったので入れときましたが、たぶん1kΩもあれば十分なはずです。(100℃=1V、1V÷1kΩ=1mA でコンデンサの等価抵抗が0Ωの瞬間があっても 1mA までしか流れない)


 急激な温度変化に対する反応が数秒遅れくらいになると思いますが、測定対象が気温なら無問題でしょう。


定義ファイル項目名目的指定方法省略時
env.iniADC0ADC 設定ファイルファイル名未使用
env.iniADC1ADC 設定ファイルファイル名未使用
env.iniADC2ADC 設定ファイルファイル名未使用
env.iniADC3ADC 設定ファイルファイル名未使用
env.iniADC4ADC 設定ファイルファイル名未使用
env.iniADC5ADC 設定ファイルファイル名未使用
ADC 設定ファイルpin接続ピン必須
ADC 設定ファイルcaribration3.3V=65535とした除数数値1
ADC 設定ファイルoffset除した結果に足す数値数値0
ADC 設定ファイルdecimalPlaces小数点以下の有効桁数数値1

(お詫び)p14 はアナログ入力ピンじゃないのにアナログ入力ピンだと勘違いして当初 p14〜p20 の7ピンがアナログ入力に使用可と書いてましたが、p14 はアナログ入力非対応でした。下記の文章も訂正させて頂いてます。


 mbed の AnalogIn は p15〜p20 と6ピンもあるため ADC0〜ADC5 と最大で6種類の測定器を接続できるようにしましたが、標準 Mark2 の方は p15・p17・p18 が使用済みのため、残る3つのピンを使って最大3種類となります。

 Mark2 互換機でお使いの方は、GM管の検出ピンを p21 に変更するなどして、p15〜p20 を空けるなど工夫すれば、最大で6種類の測定器を使えます。

計測値 = (入力信号電圧 ÷ 3.3) × 65535 ÷ caribration + offset

という風に内部計算していますので、これをもとに caribration と offset の値を設定します。

 LM35 の場合、10.0mV/℃ で 0℃=0V、100℃=1V ですので、先の計算式に当てはめると

   0℃  = (0.0 ÷ 3.3) × 65535 ÷ caribration + offset

   100℃ = (1.0 ÷ 3.3) × 65535 ÷ caribration + offset

で、これを解くと caribration=198.591、offset=0 という風になるかと思います。

 内部では 0.1秒おきにサンプリングして、10回分で平均化させて使ってます。(1秒間移動平均値)


 手持ちの、電波時計に付いてた温度計との誤差が ±0.5℃程度内だったし、ゆらぎも±0.2℃程度ですので、数mVオーダーの細かい変化を測定しているわりには優秀な結果かな、と。


 あと、所有してはいませんが、LM60BIZ のときの設定値も計算して同梱しておきました。(LM60.CFG)

 持ってないので本当に正しい結果になるのか試せていないのですが、もし計算が変だとかあったらお知らせ下さい。


 汎用アナログ入力の追加に伴い、Twitter、Logging、UdpSend、Serial、など出力書式を自由に定義できるサービスに、書式パラメータ %ADC0% 〜 %ADC5% が指定できるようにしました。

 ツィート内容のメッセージ定義の中で「線量は %uSV%μSV/h、気温は %ADC0%℃ です」みたいに定義すると「線量は 0.098μSV/h、気温は 28.5℃ です」という感じに呟くようになります。


 WebPost サービスでは ADC0〜ADC5 のうち定義ファイルが指定されているものにつき測定値を Post します。

 また、Cosm(旧Pachube)にも、汎用アナログ入力の測定値をフィードすることができるようになってます。(↓でも書きます)




cosm.com(pachube.comの後継)に正式対応


 この3ヶ月の間に、いつの間にやら Pachube が Cosm という更に(発音面で)難解なものに変わってしまってました。

 1つのアカウントでいくつもの Feed を持てたり、各 Feed で6つ以上の DataStream(項目)を持てるようになったりと、これまで有料会員のみが利用可能だった部分が、無料会員にも全面開放された感じです。

 有料会員制度がなくなった?


 cosm 移行後も pachube.com のドメインが生かされていて下位互換として動作しているため、特に支障なく使えていますが、いつ pachube.com がなくなるか分からないので、きちんと cosm.com へ測定値を送信することにしました。

 ちなみに旧 Pachube の人たちは、強制的に Cosm に移管されていますので、このファームを導入することで何か設定をいじる必要はありません。

(geiger.bin だけを上書きしていただき、設定ファイルはこれまでのものを流用ください)


 また、これに伴っていくつかの機能強化を施してあります。


 まず、項目ID(DataStream の ID)に、数値以外に文字列を指定できるようにしました。「0」〜「4」を指定するのが専らでしたが、こんな風 に文字も指定できます。

 Cosmのコンソール画面から「Temp」という項目IDを作り、Cosm設定ファイルの中で「adc0=Temp」と指定して、前述の汎用アナログ入力機能で取得した LM35DZ で観測された気温をアップロードさせてます。


 ただし、既に作成済みの 項目ID を変更する機能が cosm 側にはないらしく、過去のデータを自動的に引き継がせての 項目ID 変更は出来ない模様です。

(新しく項目IDを追加して新しく測定値を収集し始めるしかないぽい)



cosm.comへ送信する際、移動平均化の中間時刻で測定値を送信する機能を追加



 先日の 降雨による線量変化を捉える で気になったのですが、例えば 13:00〜14:00 の1時間移動平均値を 14:00 に送信する際に「14:00 の測定値」として送信する今の方式は正しいのか?と

 13:00〜14:00 の平均値なのだから、14:00 に「13:30 の測定値」として送信するのが本当は相応しいのではないのか??という気がしてきました。


 同じように 13:50〜14:00 の10分間移動平均値は、14:00 に 「13:55 の測定値」として送信すべきじゃないか???って。


 そんな疑問が沸いてきましたので、需要があるかどうか分かりませんが、その測定値の移動平均化処理に用いた時間帯の中間時刻を測定時刻として送信する機能を新設してみました。

 Cosm設定ファイルの中で middleTime=1 と指定することで、中間時刻の扱いで測定値が Feed されるようになります。

 この指定がなければ、これまでどおり、移動平均化処理に用いた時間帯の最終時刻を測定時刻として送信します。



押しボタンにデフォルトで p20 を割り当てていたものを取りやめ、使用時には明示が必要なように変更


 押しボタンをどれくらいの人が実際に装着されているのか分かりませんが、2012/02/25 に当機能を追加したとき、何も考えずにデフォルト p20 で決めうちで書いてしまってました。

 設定ファイルは何も弄らずに、p20 にボタンを接続するだけでボタンが機能するようになってました。

 つまり、実際のボタン接続の有無にかかわらず、プログラムは p20 を監視して動くようにしていたのです。


 今回、汎用アナログ入力機能を追加したわけですが、「アナログ入力の出来る貴重な p20 をボタンが占有するのは勿体ない」「ボタンなんか p21 あたりでいいじゃん」という意見が出るのは当然にして、さらに「俺はボタン繋げてないから p20 に温度計を繋ごう♪」って人が出たとき、Button=0 と明示した上で ADC 定義をしないといけないという仕様制限に気がつく可能性は限りなく低いだろうし、この不可解な設定を強要されることに対して強烈な違和感を抱くと思われましたので、ここら辺の仕様を大きく変更させて頂きました。


 ずばり

押しボタンを追加している人は env.ini の中に Button=20 と明記して下さい!

(p21に繋いでる人は Button=21 と)

これを忘れると、今回のファームウェアから、もれなく押しボタンを無視します。

という風にさせて頂きました。

 どうぞよろしくお願いいたします。




定義ファイル項目名目的指定方法省略時
env.inicosm または cosm0
または pachube
または pachube0
Cosm 定義ファイルファイル名未使用
env.inicosm1
または pachube1
Cosm 定義ファイルファイル名未使用
env.inicosm2
または pachube2
Cosm 定義ファイルファイル名未使用
Cosm 定義ファイルapikeyAPIKEY(Create権が必要)文字列必須
Cosm 定義ファイルfeedidCosmから採番されたFeed番号数値必須
Cosm 定義ファイルusv010分平均μSV/hをFeedするときの項目名文字列非送信
Cosm 定義ファイルnsv010分平均nSV/hをFeedするときの項目名文字列非送信
Cosm 定義ファイルcpm010分平均cpmをFeedするときの項目名文字列非送信
Cosm 定義ファイルusvlong01時間平均μSV/hをFeedするときの項目名文字列非送信
Cosm 定義ファイルnsvlong01時間平均nSV/hをFeedするときの項目名文字列非送信
Cosm 定義ファイルcpmlong01時間平均cpmをFeedするときの項目名文字列非送信
Cosm 定義ファイルadc0adc0に接続した測定値をFeedするときの項目名文字列非送信
Cosm 定義ファイルadc1adc1に接続した測定値をFeedするときの項目名文字列非送信
Cosm 定義ファイルadc2adc2に接続した測定値をFeedするときの項目名文字列非送信
Cosm 定義ファイルadc3adc3に接続した測定値をFeedするときの項目名文字列非送信
Cosm 定義ファイルadc4adc4に接続した測定値をFeedするときの項目名文字列非送信
Cosm 定義ファイルadc5adc5に接続した測定値をFeedするときの項目名文字列非送信
Cosm 定義ファイルmiddleTime平均化処理の中間時刻でFeedする0 または 10

うろたんうろたん 2012/07/21 22:31 こばさん、こんばんわ。
新ファームの温度センサー対応ということで早速アキバでLM35DZを買ってきてつけてみました。
当方ではビニールで密閉しているためoffsetを-10で使用しています。
別基板ですが高圧部の近くに内蔵しているためか±2℃位のゆらぎは出るようです。
それでは。

こばさんこばさん 2012/07/23 12:41 こんにちは。
1℃あたり0.01Vっていう時点で鬼ですよねー

私のところでは、シールドなしの単なるジャンパー線ながらも、15cmくらいの線で筐体の外に温度計を出したおかげか、ノイズの影響はあんまり受けてないです。
http://api.logoole.etr.jp/8Xxsetm2b0qoOMRpCl3BOA/datatable.html

温度計のOUT-GND間にコンデンサ入れてみてらっしゃいますか?
コンデンサなし直結だと、こちらでも±2℃くらい揺らぎが発生してました。
もし温度計にノイズが混入してる手応えであれば、0.1μを更に巨大な値(1μ〜10μ)にすることで、温度変化に対する反応性は相当に悪化するものの、ノイズによる揺らぎは誤魔化せるようになるかと。。

温度計〜mbed の間でノイズ混入してるようであれば、温度計の直後に、×5倍くらいの増幅度になるような定数でオペアンプ突っ込んで、1℃あたり0.05V(最大66℃)という風にしてしまうと多少は改善するかもしれません。

と書いて気がつきましたが、「高圧部の近くに内蔵」ですか。
ノイズも心配ですけど、mbed もそれなりに発熱するし、GPS があると更に発熱するので、ケース内だとデタラメな温度を計測しそうな予感がします。。



ちなみに、ただいま、対数チックな値を出してくるセンサーむけに、代表地点を何カ所か定義することで、それ以外の値を補間して割り出すスプライン補間とやらを mbed で実装すべく取り込み中でございます。