2011年8月6日土曜日

BMP085センサーとフィルター

バリオのデータ元として使っているHow High RTは1秒に2回だけしかデータを送ってきません。そのせいもありバリオの音がスムーズではありません。Winged Shadowにもデータの送信頻度を高くできないか相談したのですがあまり可能性なさそうです。
そこで自前で高度センサーを用意しようかとI2Cで使えるBosch BMP085気圧センサーブレイクアウトボードを購入し、試し始めています。Arduino Pro miniにブレッドボードで配線してサンプルスケッチに手を入れるだけですぐに動き出すので苦労はありません。
使ってみてわかったのですが生のセンサーのデータはかなりノイズが載っているのですね。
elekidさんの発表されているコードに手を加えてProcessingで表示したらこんな感じ。(Processingをはじめて触りましたが環境をダウンロードしてから3時間でこれが動いちゃうのはたいしたもの。)Arduinoから送られた気圧データがかなりばらついているのがわかります。15データを平均化した緑の線でやっと何とかなるか。生データのままでは高度に変換すると1m以上暴れているのでそのままでは使えません。How High RTから送られてくるデータではこのようなことはありませんからフィルター済みなのですね。
BMP085センサーにはOversamplingを行ってデータの精度を高めるパラメータがあります。上のものはOSS=0ですが、最大の3にしてもまだ暴れている。
センサーのデータは生では使えないものなのですね。いろいろ調べていくとこのような簡単なlow pass filterからKalman filterなどまでいろいろな仕掛けが要りそうです。Hyperion EMeter II RDUの高度計データも結構暴れていますがあれは生のデータを送っているのですね。

気になるのがFrSkyの出してきた同じBMP085センサーとハブ。これだけあればバリオの機体側の仕掛けはできるはずなのですが、ハブがどのようにデータを読んで扱っているか気になります。生データを送ってきているだけでは、遅いシリアル経由ではあまりデータ更新もできず、レスポンスのよいバリオに使えるデータは取りにくいのではないかと考えています。誰かがより詳しく見るのを待ち中。

0 件のコメント: