M5Stack と ESP32 で、ガス・気圧・温度湿度センサ BME680 を使ってみた

M5Stack

こんばんは。

前回記事でも述べましたが、大幅更新された最新版 Arduino – ESP32 が安定してきたので、数か月前から購入していて放置していた、ガス・気圧・温度・湿度センサの BME680 を再び動作させてみました。
そして、BOSCH 純正 BME680 ドライバライブラリを使ってみました。
また、Ambient にも送信して、ブラウザでグラフ表示をさせてみました。

今回は M5Stack で動作させていますが、ESP32-DevKitC や ESPr Developer 32 等の ESP-WROOM-32 開発ボードでも同様に動作させることができます。

今まで、Arduino – ESP32 の I2C ( Wireライブラリ )に不具合があって、イマイチ精度が出なかったのですが、今回の最新版 Arduino – ESP32 の大幅更新で、精度に納得できる BME680 の動作が確認できました。
引き出しの奥底に眠っていた BME680 がようやく日の目を見て活躍することができました。

これがあれば、電子工作やハンダ付け等で疎かになりがちな部屋の空気品質をモニタリングすることができます。
ハンダ付けで蒸発したフラックスは毒ですからね。

後で紹介していますが、エタノールを使った時、「おなら」をした時、そしてフラックスを蒸発させたときのガスセンサの反応を Ambient で表示させたりしています。

なかなかこの BME680 というものは、後で述べる注意点をしっかり押さえておけば、かなり使えるセンサだと思いました。

では、この使い方や注意点を個人的な視点で説明してみたいと思います。
今回は M5Stack のLCDディスプレイには表示させず、シリアルモニタとAmbientグラフだけです。
LCDディスプレイ表示は次回にします。

因みに何度も申し上げておりますが、私は素人のアマチュアです。
誤ったり勘違いしたりしていることがあるかも知れません。
もし、気が付いたことがあればコメント等でご連絡いただけると助かります。

スポンサーリンク

BME680 について、個人的に思った事

正直言って、私は BME680 については、温度・湿度・気圧センサの BME280 の延長線上で使っているだけで、仕組み等は良く分かりません。
個人的に分かったことを述べてみたいと思います。

まず、私が使っている、BME680 モジュールは、スイッチサイエンスさんで販売されていたこれです。

Amazon.co.jpでは現在品切れ中なので、以下のスイッチサイエンスさんのサイトをご覧ください。
https://www.switch-science.com/catalog/3570/

BME680 は、BOSCH Sensortec社製、空気品質、温湿度、気圧センサです。
本家サイトのリンクは以下です。

●BOSCH Sensortec社のサイト

https://www.bosch-sensortec.com/bst/products/all_products/bme680

BME280 から発展させて、揮発性有機化合物(VOC)を検出するセンサを加えたものです。
こんな小さいチップのなかに4つのセンサが詰め込まれています。

ガスの種類を特定するセンサではありません。
空気中に、揮発性有機化合物(例えばエタノール等)が含まれているかどうかを検出できます。

検出可能なものは、塗料系(ホルムアルデヒドなど)、クリーニング用品、家具、衣料品などの揮発性有機化合物(VOC)だそうです。

詳しい仕組みを述べているサイトはあまり見当たらないのですが、データシートには記載されているようです。
ただし、BOSCH社のデータシートは、お馴染みのテキストコピーができない残念なものです。
よって、英語の苦手な私にとって、Google翻訳が利用できないのは辛いところです。

そこで、販売元の以下のスイッチサイエンスさんのサイトと、製造元の以下のサイトを参照してみました。

●BME680モジュールを販売している、スイッチサイエンスさんのサイト

https://www.switch-science.com/catalog/3570/

●BME680モジュール製造元のサイト

https://learn.pimoroni.com/tutorial/sandyj/getting-started-with-bme680-breakout

ここには、20分間のバーンイン・タイムを必要とすると書いてあります。

これ、最初は意味が良く分からなかったのですが、ザッと調べたところ、これは熱抵抗式センシング方式で、金属酸化物半導体(例えば酸化スズ)を200~400℃のヒーターで温めて、そこに付着する有機化合物によって抵抗値が変化するというセンシングのようです。

つまり、ヒーターとセンサが安定するまで、ヒーターの焼き付けに約20分間動作させる必要があるということのようです。
確かに、実際に動かしてみたら、起動直後のセンサ値は安定しませんでした。

でも、こんな小さなチップにヒーターがあるということは、単純に考えると、温度湿度のセンサに影響あるのではないかと思ってしまいます。

実は、2018/06/24以前の、Arduino – ESP32 でプログラミングしたときには、温度湿度の誤差が市販の温湿度計に比べてあまりにも大きかったので、このセンサは使えないと思っていました。
ヒーターの悪影響が大きすぎると思っていました。

でも、2018/07/10以降の最新版 Arduino – ESP32 でプログラミングすると、市販の温湿度計と比べて、温度+1℃、湿度+3~+5% という範囲で収まるようになりました。
ヒーターの無い BME280 に比べれば、若干精度は劣りますが、個人的にこれで十分だと思います。

上記の pimoroni サイトチュートリアルにあるように、BME680 の温度湿度センサは、ヒーターを温める前に温度湿度センサ値を取り込んで、その後ヒーターを温めるとのこと。
極力温度湿度センサに影響を与えない様に工夫されているとのことでした。

そして、ガスセンサについてですが、精度は良く分かりません。
ただ、後で述べていますが、エタノールを近くに置いたりすると、すぐに反応して抵抗値が下がります。
近くで「おなら」をすると、すぐ反応します。
感度は鋭いものがあります。

某メーカーの高性能空気清浄機は「おなら」をするとすぐに反応して空気清浄してくれますよね。
それに匹敵する反応を示してくれるので、BME680 はなかなかスゴイと思いました。

ただ、後でも注意点を述べていますが、センサの測定時間間隔によって、データが異なります。
私の使い方が間違えているかもしれないのですが、そこを抑えておかないと使えないセンサとなってしまうので、注意が必要です。

また、データシートにあるように、室内の空気中の揮発性有機化合物の含有量の指標となる、 IAQ値( 0~500の値)というものがあるようです。
これの算出方法が不勉強で分かりません。
いつかこれを算出してみたいと思いますが、なんだか小難しいので、今回は算出を見送りました。

使ったもの

BME680搭載 空気品質、温湿度、気圧センサモジュール

BOSCH Sensortec社 BME680 搭載のセンサボードで、Pimoroni というメーカーが作成したものです。
I2Cインターフェース専用です。
I2C の SDA , SCLラインのプルアップ抵抗は約4.7kΩが予めハンダ付けされています。
ピンヘッダとL字ピンソケットが予め同梱されています。
(Amazon では現在売り切れ中です)


スイッチサイエンスさんのサイトでも販売しています。
https://www.switch-science.com/catalog/3570/

M5Stack

今回はM5Stack を使いましたが、ESP32開発ボードでもOKです。

(追記)
M5Stack Basicは、この記事を書いた当時より格段にバージョンアップしております。
以下のスイッチサイエンスさんの公式サイトをご参照ください。
https://www.switch-science.com/collections/%E5%85%A8%E5%95%86%E5%93%81/products/9010

単線ジャンパーワイヤ

φ0.65mm の単線で、ブレッドボードに挿せるものを使います

協和ハーモネット 耐熱通信機器用ビニル電線 H-PVC 0.65mm 2mX10色 茶赤橙黄緑青紫灰白黒
協和ハーモネット(Kyowa Harmonet)
¥1,448(2024/03/18 15:05時点)

Wi-Fi環境

インターネットにつながる、2.4GHz帯の Wi-Fi 環境を構築しておいてください。
Wi-Fi ルーターの、ファイアウォール設定や、MACアドレスフィルタリング設定は事前に済ませておいてください。

その他、パソコン、ハンダコテ、ハンダ、USBケーブル等

では、次ではモジュールの組み立てや接続方法を説明します。

コメント

タイトルとURLをコピーしました