LabVIEWとBME280で温度・湿度・気圧測定
Bosch社の BME280 センサを使って、LabVIEWとMCP2221Aを組み合わせて温度・湿度・気圧を測定してみた。MCP2221Aの代わりに CP2112を使う場合には Vectorでドライバが配布されている(プログラムを参考にさせて頂きました)。
関連記事:MCP2221Aを使ってLabVIEWで I2C通信
あらかじめやっておくこと
LabVIEW Home Bundleの入手とインストール。
BME280モジュールの入手。
秋月電子、ス
イッチサイエンス、ス
トロベリーリナックスなどで入手可能。
MCP2221Aインターフェースボードの入手。
https://www.marutsu.co.jp/pc/i/1360420/
回路を組む。
VDD(VIN), GND, SCL, SDA の4つを繋ぐだけなので簡単。
回路の電圧は3.3Vにする。
インターフェースボード上でプルアップがされているので追加の抵抗はいらない。
(Aliexpressで購入したBME280モジュールを使ったが、こちらでもプルアップされてるみたい)
MCP2221AをLabVIEWで使えるようにしておく。
関連記事:MCP2221Aを使ってLabVIEW
でI2C通信
MCP2221Aインターフェースボード
購入先:マルツオンライン https://www.marutsu.co.jp/pc/i/1360420/
紹介記事はこちら
プログラミング
測定画面。温度、相対湿度、気圧が表示される。
プログラムは大きく分けると
writeReg(測定条件を書き込む)
readTrim(補正値を読み込む)
readData(測定と補正計算)
の3つ。
Get Connected Devices
MCP2221AがPCに接続されている数を調べる。MCP2221AのVID(04D8)とPID(00DD)を指定する。
Open By Index
MCP2221AのVID(04D8)とPID(00DD)を指定してICを使い始める。
I2c Write ✕3
BME280のアドレスは0x76。
" T "
をつないで7bitのアドレス(0x76)を8bitに変換している。
測定条件を書き込む
0xF2(ctrl_hum)に 1 (0b001)
0xF4(ctrl_meas)に5bitずらして1、2bitずらして1、そして3 (0b00100111)
0xF5(config)に5bitずらして3、2bitずらして0、そして0 (0b01100000)
↓は BME280
データシート より引用。
I2c Write, I2c Read ✕3
BME280がそれぞれに持つ固有の補正値を読み出す。
0x88から24バイト、0xA1から1バイト、E1から7バイトを読み出し、
これらを合わせて、T1~T3, P1~P9, H1~H6 を得る。
↓は BME280
データシート より引用。
I2c Write, I2c Read
温度・湿度・気圧を測定する。
0xF7から8バイト読み出して、pres_raw(気圧),
temp_raw(温度), hum_raw(湿度) を得る。
temp_raw, T1~T3 から温度と t_fine
を求める。
hum_raw, t_fine, H1~H6 から湿度を求める。
pres_raw, t_fine, P1~P9
から気圧を求める。
計算方法には何種類かあり、用途によって使い分ける。
・APIを使用する(推奨)
・32bit符号付き整数で計算
・圧力のみ64bit、他は32bit符号付き整数で計算
・倍精度浮動小数点で計算(PCアプリケーション用)
今回はPC(LabVIEW)を使うので高精度の倍精度浮動小数点で計算する。
BME280
データシート 8. Appendix A(p.49)の計算式をLabVIEWにコピペして、
doubleをfloat64(LabVIEW
の倍精度浮動小数点)に直す。
↓
Close
ループが終了したら最後に終了処理を行う。
ダウンロード
memo
参考にさせて頂きました。
http://www.ne.jp/asahi/shared/o-family/ElecRoom/AVRMCOM/BME280/BME280test.html
http://toolsbox.biz/product/LVBME280/index.html