第28回 温湿度・気圧センサ(BME280) 〜仕様概要〜

温湿度・気圧センサの仕様概要を確認します。

目次

BME280のセンサ

はじめに、温湿度・気圧センサモジュールについて注意点を説明します。

このセンサモジュールは「温湿度・気圧センサ」となっていますが、実際には温度データは測定環境の気温とは一致していません。温度データは取得できるものの、その値を気温として扱うことはできません。その背景について簡単に説明します。

このセンサモジュールは、BME280というセンサ部品を搭載しています。このBME280は湿度センサと気圧センサが搭載されていますが、これらのセンサは動作温度が変化すると特性が変化します。そのため、湿度と気圧を測定する際、湿度センサと気圧センサ自体の温度を測定してデータを補正する必要があります。

湿度センサと気圧センサとその制御回路は、動作時に発熱します。PCやディスプレイは動作中にちょっと熱を持ちますよね。それと同じです。センサで取得した値は、センサ自体の温度で補正する必要がありますので、気温ではなく、センサ自体の温度を測定しますが、その値は気温よりちょっと高くなっています(気温より数度高い値)。

とは言っても、動作するときの発熱を考慮すれば、測定した温度データから一定の値を引けば気温がわかるのではないか、という気もします。このセンサモジュールは測定時は電力を消費することにより発熱しますが、測定していないときはほとんど電力を使いません。

また、このセンサは測定モードがいくつかあり、一定時間ごと(0.5ms〜1s)に測定するモードや測定指示をした時のみ測定するモードがあります。そのため、測定モードにより消費電力が異なり、センサモジュールの発熱量も異なります。そのため、このセンサで取得できる温度データは、あくまで湿度と気圧の測定値の補正用ということになっています。

BME280のデータシートには、取得できる温度データについては以下のように説明されています。

“The integrated temperature sensor has been optimized for lowest noise and highest resolution. Its output is used for temperature compensation of the pressure and humidity sensors and can also be used for estimation of the ambient temperature.” (BOSCH社 BME280データシートより引用)

「温度センサはめっちゃ性能がいいんですが、これって気圧データと湿度データの補正用なんですよね。まぁ周囲の気温の参考程度にしてもらう分には構わないですが、ごめんなさい」(意訳)

データ通信観点からみた内部構造

これからPICマイコンを使用して、このセンサモジュールとSPI方式でデータ通信を行います(センサモジュールはI2C通信もサポートしていますが、実践編ではSPI通信でデータ通信を行います)。

SPI通信でのデータ通信のやり方は前回までの記事で説明しましたが、そうは言っても、一体どうやって温湿度・気圧データを取得するのか、まださっぱりわかりませんよね。そこで、センサモジュールの内部構造とあわせて、どのようにデータ通信すればよいのか、概要を説明します。

まず、センサモジュールは以下のように内部にデータを格納するためのメモリを持っています。このメモリはレジスタとも呼ばれており、今後はメモリ、あるいはレジスタと表現します。

Pic practice 28 bme280 memory

このメモリは以下のようにいくつか種類があります。

Pic practice 28 bme280 memory block

「測定データ格納メモリ」はその名の通り、測定した温度、湿度、気圧の数値が格納されているメモリです。また「動作設定用メモリ」は、測定モードなどのセンサモジュールの動作に関わる設定値を格納するメモリです。

また、センサはその製造工程で全く同じ特性にすることはできませんので、センサごとに測定値の偏りがあります。そのセンサごとの偏りを補正するための「校正用データ」も格納されています。他にも色々なデータが格納されていますが、主に使用するのはこれらのメモリです。

PICマイコンとセンサの間で、SPI方式でデータ通信を行って、これらのメモリに格納されているデータを読み出したり、設定値を書き込んだりします。

以前のSPI通信の説明で、リビングの母親から勉強部屋の息子に用事の情報を送って、勉強部屋からリビングにその返事をする方法を説明しましたよね。

Pic practice 28 spi home case

それと同じ要領でPICマイコンとセンサの間でSPI通信でデータのやり取りをします。例えば、測定データに格納されている湿度のデータが欲しい場合は、以下のようにSPI通信を行います。

Pic practice 28 spi bme280 case

スレーブであるセンサモジュールは、マスターであるPICマイコンからの測定データ要求に対して、メモリに格納されている測定データを送り返すわけです。

具体的なSPI通信手順や、詳細なデータ構造などは次回の記事で説明します。

温湿度・気圧データ取得の流れ

次に、温湿度・気圧データを取得するまでのデータ通信の流れを説明します。

センサモジュールは電源が入るとすぐに測定データを送ることができるわけではなく、最初に動作設定や測定条件などを設定します。測定条件を設定したあと、測定を指示、そのあと測定データを取得します。なお、今回作成するプログラムでは、測定のタイミングはPICマイコンから指示をしますが、他に一定時間ごとに測定するモードも用意されています。

Pic practice 28 data process

このあとの説明

次回は、このセンサモジュールのSPI通信手順を確認し、メモリの詳細構成を確認します。

そのあと、温湿度・気圧データを取得するプログラムを作成したいところですが、データ取得後の計算方法(上の図の(7)の計算)は複雑です。そのため、最初から温湿度・気圧データ取得のプログラムを説明すると、何をしているのかよくわからなくなる可能性があります。そこで、最初はSPI通信の確認を主目的とするプログラムを作成します。

最初に確認するプログラムでは、温湿度・気圧センサモジュールのIDをSPI通信を利用して取得します。先ほど説明したセンサモジュールのメモリの中に、モジュールのIDとして固定の「0x60」という値が格納されています。この「0x60」がSPI通信で正しく取得できるか、プログラムを作成して確認します。

SPI通信が正しく動作することを確認したあと、温湿度・気圧データを取得するプログラムを作成します。

更新履歴

日付 内容
2018.4.16 新規投稿
通知の設定
通知タイミング
guest
0 コメント
本文中にフィードバック
全てのコメントを見る
jh3gpn
jh3gpn
5 年 前

このセンサーに温度測定機能があるのに別に温度センサーを使うのが??でしたが、今回の説明で納得できました。

管理者
管理者
返信  jh3gpn
5 年 前

はい、このセンサの中にある温度センサは、湿度・気圧センサの温度を測る温度計なんですよね。測定時の電力はかなり少ないので、気温にも使えるかな、と思ったのですが、測定して見ると2〜3度高かったので、気温計に使用するのはちょっと難しそうです。

目次