2013年6月11日火曜日

気圧センサ

気圧センサといえば、比較的入手性がよくて簡単に扱えるものとしてMPL115A1およびA2があります。
これはSPI(A1)、もしくはI2C(A2)でアクセスできる気圧センサで、秋月を始めストリナやスイッチサイエンスでも販売されていて非常に入手しやすいと言えます。(個人的にはストリナのモジュールが一番扱いやすいと思います 欠点を上げればMPL115A2しか無いところ)

しかしMPL115の欠点として、測定範囲が500hPaから1150hPaと狭いこと
また、精度が10hPaと低いことが挙げられます

範囲としてはおよそ-1054mから6374mの範囲です
誤差は1013.25hPaから10hPa低くなる(1003.25hPa)と83.72mも変わります
いくら高速で読み出せるとはいえさすがにこの誤差は無視出来ません

高度もモデルロケット程度であれば範囲内ですが(というか誤差の範囲に入る可能性が高いですが)
ある程度高高度に上がる場合はこれでも足りないという可能性が出てきます
(ガッツリ航空法などの制限に入るのでこの高度まで飛ばすことはまれでしょうが ちなみに標高6400m以上の山は70箇所近くもあります)


そこで最近使い始めたのがSTMicroのLPS331APという気圧センサです
蛇足ですがSTMicroのMEMSセンサは累計20億個以上を出荷しているそうです

LPS331APの特徴として
1) 測定範囲が260hPaから1260hPaと広い
2) 精度が0.2hPaと高い
3) 24bitで直接気圧を取り出せるため計算が楽(ビットシフトだけで計算できる)
などが挙げられます
ほかの特徴として、ひとつのセンサでSPIとI2Cを選択できる/センサ内でサンプルの平均化ができる などがあります

欠点として最高で25Hzのため、MPL115よりもデータを得られる頻度が低いという点です
(25Hzを遅いと感じるか早いと感じるかは使う人や用途によるでしょう 僕は遅く感じます)

また、入手性は最高というわけではなく
現時点ではストリナかスイッチサイエンスから入手出来ます
スイッチサイエンスの方はどういう使い方を想定しているのか、ピンが片方に出ているため実装が面倒そうです。コネクタを使って配線を引き出すなら使いやすいかもしれませんが

測定できる範囲は高度で-1800mから12091mまで
精度は標準で0.83m MAXで1.66m程度です

更新レートはワンショットから1/7/12.5/25Hzを設定できます

割り込みなどもあり、一箇所に置いて天気予報に使うなども可能です


IFとしては一般的なI2C/SPIで接続可能ですが
センサ自体は微妙に謎な挙動を示し、書き込み可能なレジスタはほぼ全て、操作しないレジスタでも初期値を書き込まないと正常に動作しないようです
データシートを隅々まで読んだわけではないので、見落としがあるのかもしれませんが
書き込み可能なレジスタは飛び飛びで存在するので初期化がやや面倒です


気圧値を読み出すにはPRESS_OUT_XLからuint32_tとして3バイト読み出し(最上位バイトは0)
12bit右シフトすればhPaになります
ただこれでは1hPa単位となってしまうため精度が必要な場合はこの計算は使えません
リソースに余裕があるCPUであれば浮動小数点で扱ってもいいですが
32bit整数でも一旦100倍してから4096で割る等すればPa単位となりかなり高精度になります

温度を読み出すにはTEMP_OUT_Lからint16_tとして2バイトを読み出し
(読み出された値/480)+42.5
でdegCとなります
温度はやや複雑ですが、十分に整数だけで計算できるのと
少し高級なマイコンであれば掛け算や割り算もハードウェアでできるので大変ではないはずです


最後に、MPL115を擁護しておくと
このセンサは300hPa程度まで引いても壊れたりしませんでした
LPS331APはどこまで耐えれるか試していません(一応高圧には耐えられるようですが)
ただしMPL115もある程度の圧力まで下がると意味のない値になりますし
センサが破壊されていないとは限りません

0 件のコメント:

コメントを投稿