環境(気圧・湿度・温度)計測装置の製作 2022.10.17

    1.はじめに
     製作した環境計測装置。
    ケースはプラ板で自作した。

     マイコンを使った電子工作を始め出した頃に色々なセンサーを試してみようと購入をしましたが、これという使い道もなく道具箱にずっと眠らせたままのものが幾つかあります。

     BOSCHの気圧センサー(BME280)もその中の一つです。このセンサーは、気圧の他に湿度も計測できるセンサーです。更に、気圧センサーの温度補償のための温度センサーも内蔵されています。

     センサー以外にも眠っているものがあります。ラズベリーパイ用のクロックモジュール(DS3231 for PI)やROHMのグラフィックディスプレーモジュール(RCU6093W-B)です。

     今回、これらのパーツを使って気圧・温度・湿度を計測する装置を作ってみました。


    2.使用したパーツ

    2-1. PIC

     いつも使っているPIC32MXシリーズのマイコンの中からPIC32MX230F064Bを使いました。USBモジュール内蔵のマイコンですがUSB機能は使いませんので勿体ない使い方です。


    2-2.気圧・温度・湿度センサー
    秋月電子から購入したBME280

     気圧センサーBME280は、秋月電子からこれという目的もなく購入し使わずじまいで保管しておいたものです。このセンサーは人気のようで、これを使った工作例が既にネットにたくさんアップされています。

     今更ながらの製作になりますが、一つのセンサーで気圧・湿度・温度が計測できるというので興味あるところです。


    2-3.クロックモジュール
    Amazonから購入
    バックアップ用電池が付属

     計測した気圧などのデータはディスプレーに表示することになりますが、単にデータだけを表示しておくのは面白くありません。データを時系列で保存など出来れば面白いです。

     過去に温度記録装置を製作しましたが、この時は時刻付きのデータをフラッシュメモリに保存しました。

     今回もデータを保存するかどうかは別として、時刻をデータと一緒に表示してみることにしました。その時計機能として、これまた使わずに眠っていたラズベリパイ用のクロックモジュールを使うことにしました。

     このモジュールは、DS3231というクロックICを使っています。DS3231は、温度補償付きの水晶発振回路を使っており、その温度補償のための温度センサーが内蔵されています。BME280に内蔵の温度センサーと比較するのも面白いかも知れません。


    2-3.グラフィックディスプレー
    aitendoから購入
    15pinのコネクタ接続

     aitendoで見つけた特価品のグラフィックディスプレーです。いつか使い道があるだろうと保管していましたが、やっと陽の目をみることになりました。 

     ROHMのRCU6093W-Bというグラフィック液晶です。横102ドット、縦65ドットという変則的なディスプレーです。

     電源電圧は、+3.3Vでも動作するのですが、バックライト用に9ボルト程度の電源が必要です。

     コントロールは、シリアルクロックに同期したシリアル通信で行います。PICからは、ポートをオンオフしてソフトウエアでシリアル通信を行うようにしました。


    2-4.ACアダプタ
     HardOffで購入したジャンクのアダプタ

     時折ハードオフに出かけては、マイコンの電子工作用に使える、+5V出力や+6V、+9V出力のACアダプタのジャンク品をよく購入しています。

     今回使用するACアダプタですが、+6V,200mAと手頃なアダプタです。形状からしてDCコンバータ方式のものと思っていたのですが、動作確認してみたらトランス式で、無負荷では、+12Vの出力があります。

     RCU6093W-Bのバックライトの点灯に+9Vが必要です。この種のアダプタは、負荷を取ると電圧は下がりますので、9Vぐらいまで下げて使うことにしました。、


    2-5.温度センサー
     温度記録装置の製作で使ったセンサーLM61

     BME280に内蔵の温度センサーを使って一度試作したのですが、センサーの自己発熱により周囲温度よりも高めの温度を示します。DS3231に内蔵の温度センサーも同様です。ちなみにどちらのセンサーもほぼ同じような温度を示しました。

     BME280やDS3231に内蔵の温度センサーは、気圧センサーや水晶発振回路の温度補償を行うためのものです。これらの温度センサーで気温を測定するのは不適当なようです。

     そこで、温度記録装置の製作で使いました温度センサーLM61を使うことにしました。


    3.製 作

    3-1.回 路
    回路図(クリックで拡大)

     今回は、USBは使いませんしマイコンのクロック精度に大きく依存するような処理は行いませんので、外付けのセラミック発振子や水晶発振子は使わずに、PIC内蔵のRCオシレータを使うことにしました。OSC端子には何も接続していません。

     気圧センサーBME280とクロックモジュールDS3231は、ともにI2Cで接続しています。SCLとSDAのプルアップは気圧センサーモジュールにて行っています。
     両センサーは、I2Cアドレスが異なるのでSCL、SDAともに同一バスに接続できます。

     クロックモジュールの時刻合わせの操作のためにタクトスィッチを3個使っています。SET,UP,DOWNの3つです。
     SETで日付・時刻の設定を開始します。年、月、日、時、分、秒 の順に設定が進みます。年から開始し、SETで次の項目へ進み、秒の設定の時に、SETで設定を終了します。UP,DOWNで各項目の値を+1,-1します。

     温度センサーLM61はアナログ出力のセンサーです。アナログ入力ポートAN1に接続しました。PIC内蔵のADCで出力を読み取っています。

     グラフィックディスプレーRCU6093W-Bの制御信号は、デジタルポートRB0からRB3、RB5に接続しています。

     電源は、先に説明しましたACアダプタを使いますので、約9Vの出力となるように390Ωの抵抗を2本パラに接続しています。この疑似負荷の追加により電圧は8.6Vになっています。約0.4Wの電力を無駄に消費しており省エネに反しています。


    3-2.ユニバーサル基板での製作

     回路図に従ってユニバーサル基板で製作しました。ケースに収納することを考慮し、基板の右半分に回路を、左半分にグラフィックディスプレーを配置しました。

     操作用のタクトスィッチは、ディスプレーの下部に配置しました。スィッチは嵩上げしています。

     温度センサーLM61の取付は、ケース外部に引き出せるようにケーブル配線としました。最初は、基板に半田付けしていたのですが、基板をケースに収納するとケース内部の発熱により約10度高い温度となりましたので、外部引き出しに変更しました。

     秋月電子のB基板を使って製作しました。  LCDとの接続はXHコネクタを使いました。
     自作のケースに収納。空気穴を開けましたが、内部は約10度の温度上昇があります。  温度センサーはケース裏側に銅シールを貼ってその上に止めています。

     以下に表示画面を示します。通常は、日付時刻・気圧・温度・湿度を表示しています。本装置を設置している拙宅は標高約250mの所にあります。この時の神戸市の海面気圧は1024hpでしたのでほぼ正しい気圧表示になっていると思います。

     ここで、SETボタンを押すと日付時刻の再設定を行うことができます。UPボタンを押すと、グラフ表示に切り替わります。

     UPを押すごとに、気圧、温度、湿度の順にグラフ表示が切り替わります。表示期間内の最大値、最小値も表示します。

     グラフのデータは30分毎のデータになっています。最新の100データをグラフ表示しますので、30分x100=50時間で、2日分の変化を見ることが出来ます。

     電源を切るとこれらのデータは消えてしまいます。PICのプログラムメモリには、空きがありますのでそちらに計測結果を保存(上書き)することも可能ですが、データの使い道が見いだせずやっておりません。

    時刻・気圧・温度・湿度を表示
    気圧変化をグラフ表示
    温度変化をグラフ表示
    湿度変化をグラフ表示

    3−3.プログラム

     MPLAB IDEでC32コンパイラを使って開発しています。作った主なプログラムは次のとおりです。詳細はソースコードをご覧ください。

      main.c ...メイン処理です。
      bme280.c ...BME280センサーの読み取り処理です。
      ds3231.c ...DS3231のクロックの設定、読み出しの処理です。
      RCU6093.c ...RCU6093の表示処理です。
      display.c ...RCU6093を使ったディスプレードライバーです。
      key.c ...タクトスィッチの読み取り処理です。
      tskchg.c ...自作のノンプリエンプティブなマルチタスク処理です。
      tsk_chg.S ...タスクのコンテキストスィッチです。アセンブラで書いています。
      timer.c ...1msecのtimerです。
      pic_delay.c ...msec,usec単位の遅延処理です。
      uart1.c ...デバッグ用シリアル通信処理。割り込みで送受信しています。

    プロジェクトファイルはこちらです。EnvironmentMonitor.zip