最近、BMP280が、安く購入出来る事を知り、早速購入、実験してみた。
アマゾンで230円だった。
※湿度も計測できる、BME280は、まだ高価なようだ・・(@540)
BMP280は、BMP180の後継で、色々な部分が改善されているようだ、ただ、
温度や気圧を得る為のシーケンスは、BMP180とは異なる為、新規に実装する必要
がある。
今後は、BMP180はBMP280に置き換わるものと思われる。
※現状では、BMP280の方が安く入手できる。
BMP180とBMP280の主な違い:
Parameter: BMP180 BMP280 Footprint: 3.6 × 3.8 mm 2.0 × 2.5 mm Minimum VDD: 1.80 V 1.71 V Minimum VDDIO: 1.62 V 1.20 V Current consumption: 12 μA 2.7 μA (@3Pa RMS noise) RMS Noise: 3 Pa 1.3 Pa Pressure resolution: 1 Pa 0.16Pa Temperature resolution: 0.1°C 0.01°C Interfaces: I²C I²C & SPI (3 and 4 wire, mode ‘00’ and ‘11’) Measurement modes: Only P or T, forced P&T, forced or periodic Measurement rate: up to 120 Hz up to 157 Hz Filter options: None Five bandwidths
早速、BMP280用にテンプレートクラスを実装して、動作実験を行った。
ここで、BMP180とインターフェースを合わせる為、BMP180の実装も見直した。
BMP180では、温度は0.1度単位で出力されるが、BMP280では、0.01度
までの分解能がある。
なるべく、小規模なマイコンなどで使う事を考えて、浮動小数点を使わないようにしたの
で、以前のインターフェースでは、10倍した整数で、温度を取得するようにしていたが
これを100倍とした。
圧力(ヘクトパスカル)は、元々100倍された値だったのでそのまま使った。
BMP280では、さらに小数点以下8ビットも有効のようだったが、センサの分解能か
ら考えて、必要ないと思ったので、捨てている。
圧力から、高度を求めるAPIは、std::pow を使うので、R8C版では、容量の関係で、
コンパイルは出来るものの、容量オーバーで、リンクに失敗する。
RL78でも問題無く機能するものの、バイナリーは64キロを超える。
※RXでは13キロ程度に収まる。
-----
補正などのソースコードはネットにあるソースを参考にしたけど、どうも、初期設定の
デバイスの動作モード設定に誤りがあるようで、データシートを読んで(観て)設定データ
としたが、それが正しいのか微妙ではある、データを1秒間隔で出力させると、それらしい
データを出力している。
※立川の高度は100mくらいのハズなので、かなり違うが、天気によりそれなりに変
化すると思うので、スルーしている。
※一応、圧力の補正ルーチンは確認しているが、特に間違いは無いと思える。
Bosh のデータシートには「filter」に関する説明が不十分なように思う・・・
※とりあえず、「Filter:16」の設定として、0b100としている。
BMP280 初期化コードの一部
// Ex: Ultra high resolution // setting control // osrs_t(X2): 010, osrs_p(X16): 101, mode(Normal): 11 uint8_t mode = 0b010'000'00 | 0b000'101'00 | 0b000'000'11; write8_(REG::CONTROL, mode); // setting config // t_sb(0.5ms): 000, filter(16): 100, xxx(0): 0, spi3w_en(0): 0 uint8_t conf = 0b000'000'0'0 | 0b000'100'0'0 | 0b000'000'0'0 | 0b000'000'0'0; write8_(REG::CONFIG, conf);
Temperature: 19.51 C Pressure: 1005.85 hPa Altitude: 61.79 m Temperature: 19.51 C Pressure: 1005.86 hPa Altitude: 61.71 m Temperature: 19.51 C Pressure: 1005.87 hPa Altitude: 61.63 m Temperature: 19.51 C Pressure: 1005.87 hPa Altitude: 61.63 m