Sparkfun USB Weather Boardの雨量計部分にローパスフィルタをつけてみた


 以前、USB Weather Board の雨量計誤検知対策でファームウェアを変更したことを書いたが、信号の変化で割り込みをかけてソフトウェア的に処理することから、割り込み部分の処理が結構重くなっていた。そこで、教えてもらったローパスフィルタを追加してみた

 秋葉原に行けば抵抗もコンデンサも1本単位で購入できるのだが、交通費と所要時間を考えると10本、100本単位で買った方が安かったので100本単位で購入した。

購入した抵抗とコンデンサ
購入した抵抗とコンデンサ

 これを元にフィルタを作って接続する。今回は面倒だったのと動作しなかった場合にすぐ外せるように空中配線してみた。ただし、そのまま空中配線状態だと何かの拍子にショートしかねないことから、ファンの逆起電流防止用のダイオードと同様、ホットボンドで固めておいた。

ローパスフィルタ
ローパスフィルタ

 ハードウェア的な改修は済んだので、実際に投入してみる。ファームウェアを Sparkfun オリジナルの v1.2 に戻して検証するが、いくつかデータフォーマットを変更しているのでその部分だけ修正した上で Arduino IDE でアップロードする。

 この状態で1日半ほど動作させてみたが、結果から言えばノイズを完全に拾わない状態にはならなかった。以下、受信側の自作デーモンが吐き出したログになる。

[2012-05-04 15:38:54]: Weather obsevation start.
[2012-05-04 19:06:03]: Too long interval found. (30.110707 sec)
[2012-05-04 20:27:19]: Too long interval found. (30.100421 sec)
[2012-05-04 21:40:19]: rain gauge changed from 0.000000 to 0.279400
[2012-05-04 21:53:15]: rain gauge changed from 0.279400 to 0.558800
[2012-05-04 23:16:53]: Parse failed:
  -> "$,16.22,91.79,14.88,992.90,0,*"
[2012-05-04 23:20:09]: Too long interval found. (81.265788 sec)
[2012-05-04 23:25:01]: rain gauge changed from 0.558800 to 0.838200
[2012-05-04 23:28:35]: Too long interval found. (39.139852 sec)
[2012-05-04 23:31:33]: Too long interval found. (63.213830 sec)
[2012-05-05 10:09:36]: Too long interval found. (48.158227 sec)
[2012-05-05 11:45:22]: Too long interval found. (30.105531 sec)
[2012-05-05 11:57:21]: Too long interval found. (30.106376 sec)
[2012-05-05 12:48:25]: Too long interval found. (30.101196 sec)
[2012-05-05 15:41:59]: Too long interval found. (30.081909 sec)
[2012-05-05 16:22:22]: Too long interval found. (30.091062 sec)
[2012-05-05 17:46:14]: Too long interval found. (30.098244 sec)
[2012-05-05 17:49:33]: Too long interval found. (30.093014 sec)
[2012-05-05 18:48:23]: Too long interval found. (30.125537 sec)
[2012-05-05 20:58:49]: Too long interval found. (30.094930 sec)
[2012-05-05 22:56:18]: Too long interval found. (30.102800 sec)
[2012-05-05 23:03:47]: rain gauge changed from 0.838200 to 1.117600

 「Too long interval found」は 3 秒ごとに出力されるはずの CSV データが 30 秒以上受信できなかった場合に出力される。以上の通り、結構な頻度で発生している。5 月 4 日夜に雨量計がカウントアップしているが、これは実際に雨が降っていたので正しいと思われる。だが、5月5日のものはスーパームーンがはっきり見えていたので誤検知なのは間違いない。

 ただ、これまでは平均すると 1 時間に 1 回以上ノイズを拾っていたところが、33 時間で 1 回のみ拾うところまで改善されている。USB Weather Board + Weather Meters にどこまで精度を求めるかにもよると思うが、ホビーの範囲では誤差の範囲として納得できる範囲ではあると思われる。ただし、我が家では残念ながらファームウェア側でも対応することとした。