« SSDAC用FPGA pofファイル公開のお知らせ | トップページ | RIAAフォノイコライザをIIRデジタルフィルタで実装する ⑤Octaveによる位相検証 »

2022年2月16日 (水)

PIC16F1705とBME280による温湿度気圧計

Pic_bme280
写真1.ブレッドボードに組んだ温湿度気圧計
PIC16F1705で温湿度気圧センサBME280モジュールを駆動し、LCD(AQM0802)に表示する。


今回はPICマイコンの開発環境MPLAB X IDEでMCC(Microchip Code Configurator)を使って、温湿度気圧センサBME280をI2Cで駆動して、測定した温湿度気圧をI2CのLCDパネルに表示する温湿度気圧計の試作をした。
PICマイコンのレジスタ設定等をGUIで行えるMCCを使う練習をするのが今回の主な目的だ。

これまで、PICの開発はMCCを使わずにやっていたが、最近のPICマイコンは機能が増え、レジスタ設定が非常に複雑になってきたため、手作業でレジスタ設定を行うことが困難になり始めていた。
Microchip側としてもそのあたりを考慮して、GUIで簡単にレジスタ設定ができるMCCをリリースした。
MCCを使うと、レジスタ設定は非常に簡単に行えるようになるが、その反面レジスタ分類ごとにファイルが生成されるため、慣れないとどこで何を設定しているのかがわかりにくく、全体として見通しが悪くなる。そのためいままで敬遠してきたが、今回使ってみて、慣れてくるととても便利だということがわかった。

【温湿度気圧計仕様】
今回試作した温湿度気圧計の仕様と開発環境は次のとおり。

PICマイコン      PIC16F1705-I/P
温湿度気圧センサ     BME280(I2C)
LCD           AQM0802(I2C)
開発環境         MPLAB X IDE v5.35
             XC8 v2.31
             MCC v4.0.2 ※
測定間隔         270.6秒
電源電圧         2.6~4.2V
消費電流         0.2~0.25mA

※MCCはMPLAB X IDEにプラグインとしてインストールする。


【回路】
16f1705_bme280sch_20220216104701

図1.回路図


図1に今回製作した回路図を示す。
温湿度気圧センサBME280は、3.3VLDOを搭載したモジュールを使用した。(写真2)

Bme280module
写真2.BME280モジュール
amazonやaliexpressなどで購入可能。

表示用LCDは秋月のAQM0802を使用した。これは安価でコンパクトなので、実験によく使用する。
ただ、電源電圧が変わると表示のコントラストが変わってしまう。そのため、今回はPICマイコンのA/Dコンバータ(ADC)で電池電圧をモニタし、電圧が3.5V以下に下がるとLCDコントラストを濃くするように調整している。
ADCには電池電圧を100kΩx2で分圧して入力しているが、ここで電流を消費しないように、測定時のみMOSFET AO3406で抵抗分圧をONしている。
主要部品の動作電圧範囲は、
PIC1705  2.3~5.5V
BME280   1.71~3.6V(LDOなしのBME280単体)
AQM0802  2.7~5.5V
となっており、BME280モジュールは3.3VLDO搭載なので、リチウムポリマ電池(最大4.2V)をそのまま使用した。
BME280とAQM0802はI2Cインタフェイスなので、SCLとSDAにプルアップ抵抗が必要だが、今回はBME280モジュールとAQM0802内部にそれぞれ10kΩが搭載されており、合成でそれぞれ5kΩのプルアップ抵抗になっている。

【ソフトウェア】
今回のソースファイルをプロジェクトホルダごとアーカイブしてこの記事の末尾にリンクしておく。
PICマイコンは、測定、表示が済むとSLEEPに入り、WDT(ウォッチドッグタイマ)によってSLEEPから目覚めて測定表示、再びSLEEP、を繰り返す。測定時は目印として一瞬LEDを点灯する。
WDTの最大時間は、MCCでポストスケーラーを最大値の8388608に設定したとき270.6秒となる。つまり、4分30秒に一度測定、表示更新をする。
WDTでSLEEPから目覚めたときは、SLEEPの直後の命令から復帰する。リセットではないので注意が必要だ。
LCDのコントラストが電池電圧によって変わってしまい、電圧が3Vを切るとほとんど見えなくなってしまうため、ADCで電池電圧をモニタし、3.5Vを堺にコントラスト設定を変えている。これはmain.cで電圧低下フラグBattLowを立ててi2c_lcd.cの113行目からの記述で行っている。

【動作】
SLEEP状態での消費電流はおよそ0.2mAで、測定時には瞬間的に1mA程度(LED点灯含む)となる。平均電流はおおむね0.2~0.25mA程度。
400mAhのリチウムポリマ電池での実動作では72日程度の動作を確認した。
SLEEP状態での消費電流は、BME280モジュールに搭載されたLDOのIqが大きいのではないかと思っていたが、実際に確認してみるとIqでの消費はきわめて小さく、LCD(AQM0802)の消費電流が支配的だった。

【ソース】

ダウンロード - 20220214bmeaqm_1705adc_000ok.x.zip


そういうわけでMCCはとても便利なので、どんどん使いましょう(^-^)
MCCの使い方は、トランジスタ技術2021年9月号別冊付録「PIC開発マニュアル2021」を参考にしました。

| |

« SSDAC用FPGA pofファイル公開のお知らせ | トップページ | RIAAフォノイコライザをIIRデジタルフィルタで実装する ⑤Octaveによる位相検証 »

コメント

こんにちは
面白そうな記事でしたので作ってみました。
仕様は少し違って、USB5Vで動かしております。
23年7月に製作して約一年正常に動作しておりましたが、最近湿度表示が 0% になる事が度々発生してます。決まって朝方に発生しております。
センサーの故障かと思い再購入して交換しましたが症状は同じでした。
発生時は湿度が高い場合に起きているように思われます。
プログラムの転記ミス等も調べましたがなさそうです。
何か考えられる原因等があればご教授頂ければ幸いです。

投稿: 吉田春夫 | 2024年9月21日 (土) 12時00分

吉田さん
こんにちは。
 
最初のうちは正常に動いていたものが、最近になって湿度のみが0になることがあるとのこと、
当方ではそのような現象は見たことがありません。
まず考えられるのは、温度気圧は正常に出力されているとすれば、BME280のインタフェイスは正常に機能しているということ、
また湿度の検出値が100%を越えてオーバーフローするようなことは、プログラム上100越えを100としているので
考えにくいです。
BME280の類似デバイスで湿度が搭載されていないBMP280というデバイスを使った場合は湿度が常に0になるので、
現象としては同じなのですが、従来正常に湿度が表示されていたとすればBMP280ではなくBME280ですね。
そうするとあとはBME280内の湿度センサのみが故障しているというケースが考えられますが、
これも、デバイスを交換したのに症状が同じということは、BME280の故障は考えにくいですね。
あとは考えられるとしたら、USB5Vを電源として使用されているとのことですが、
BME280は3.3Vのデバイスですので、レギュレータが内蔵されていないタイプのBME280を5Vで使用すると、定格外ですので故障する可能性があります。
 
考えられるのはこんなところですが、いかがでしょうか……?

投稿: DJ HIGO | 2024年9月21日 (土) 15時32分

コメントありがとうございます
BME280は秋月電子でキット(コネクタのみ後加工)購入しております。
電源はレギュレータで3.3VにてPICとセンサーを駆動しております。LCDは5v動作の2004の為i2cの回路にレベルコンバータを組んであります。
なので電源オーバーでの故障は考えにくいと思うのですが、、、
なお、異常値表示は継続でなく、湿度が75%程度まで下がると正常値を表示します。オーバーフローと0以下を強制的に修正している様なのでこれも考えにくいですよね。
私の知識ではここまでで諦めるしかない様です。
ありがとうございました。
また記事を楽しみにしております。
ご活躍をお祈りいたします。

投稿: 吉田春夫 | 2024年9月22日 (日) 21時13分

吉田さん
当方で製作した構成とは違っているのですね。もし原因を究明するということですと、当方で試作したものとまったく同じ構成で試していただいて同じ症状が出るか、またそこからひとつずつ変えていったときに、症状が出るのかなどを見ていただくより他にないように思います。
ちなみに、BME280のデータ取り込みおよび処理は、ESP32によるWIFI対応のものでも同一のコードであり、こちらも湿度に関する不具合は出ていませんので、ソフトが原因の可能性は低いと思います。もし何かわかりましたらまたお教えください。

投稿: DJ HIGO | 2024年9月23日 (月) 07時50分

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



« SSDAC用FPGA pofファイル公開のお知らせ | トップページ | RIAAフォノイコライザをIIRデジタルフィルタで実装する ⑤Octaveによる位相検証 »