気圧センサMPL115A1をArduinoに繋いで気圧を測ってみました。
気圧センサに加えて、補償用の温度センサが入っています。*1 精度は"kPa accuracy"とのことなので、10hPaくらいは誤差範囲ってことでしょうか? (あまり精度よくない… BMP085の方が良かったかも。)
SPI接続のMPL115A1のほか、I2C接続のMPL115A2もありますが、インターフェースが違うだけで中身は同じようです。
書いたプログラム(Arduino用ライブラリ+気圧取得のサンプル)はこちら。ライブラリになってるので、~Documents/Arduino/libraries に放り込んで使います。
接続pinはサンプルの冒頭にあります。(SPIライブラリを使っているため、11〜13番ピンは固定、8,9はライブラリ初期化時に変えられます。)
実行画面はこんな感じ。hPa単位で値が表示されます。誤差結構あるような…
以下、ライブラリを書きつつ調べたりしたこと。
データシートを見てもSPIで値を取る方法が載ってなかったんですが、他所で見つけたサンプルプログラムを眺めたところ、
- 読み込み時:(データシート中のアドレス×2) | 0x80 を送信→データ受信
- 書き込み時:(データシート中のアドレス×2) & 0x7f を送信→データ送信
で良いようです。
ちなみにアドレス:$0から2byteが気圧センサのADC値(10bit)、アドレス:$2から2byteが温度センサのADC値(10bit)ですが、読み込み前にアドレス:$12に0を書き込んで計測を開始し、3msほど待つ必要があります。
補償に使う定数値(6つ)もセンサ内に格納されてるので、起動時に読み出しておき、計算に使っています。(浮動小数点なので結構分かりにくい。。)
*1:補償のための計算式はデータシートに載ってます。温度の単位は謎。