グラフィックLCDを利用した気圧計・温度計・湿度計の製作

 日常生活で気圧の変化を見たいので気圧計を作ります。気圧センサーは秋月電子で購入したLPS25Hを使います。また、どうせならということで温度計と湿度計もいっしょにします。センサーは、同じく秋月電子で購入したSHT31を使用します。SHT31は、こちらで評価を始めてから3年以上となりますが安定して動作するセンサーだと思います。

 表示は7セグLEDが好きなのですが、桁数が多くなるのでグラフィックLCDを使用します。グラフィックLCDは、2年以上前にAmazonで購入した2.8インチのTFT液晶です。コントロールチップは、ILI9341で割とよく使われているものでネット上にも情報が豊富です。添付画像では光の反射でくすんだ色に見えますが、実際は鮮やかな発色できれいに見えます。購入した当時はアンテナアナライザーでグラフ表示を考えてたのですが、あまりにも描画が遅いのでパーツボックスに死蔵していました。

 数字の表示だけなら使えるだろうとおもいましたが、やっぱり遅いです。真面目にソフトウェアを作ればいいのでしょうがGithubからいただいたソースそのままでは描画速度は速くありません。ソースを見ればわかるのですが、2バイト書き込みごとにCS制御しています。SPIにはこのグラフィックLCDのみなので、不要なCS制御をやめるなど、一部修正で早くなるとは思いますが・・・。

2.8インチTFTグラフィックLCDの表示

 ブレッドボードでの開発中は、LCDの描画速度をあげようとSPIクロックを最大クロックの約5MHz(AVRではCPUクロックの1/2)とするとデータの取りこぼしがあるのか表示が乱れていました。仕方ないのでSPIクロックをCPUクロックの1/8の2MHz弱として作業をしていたので数字の描画にえらく時間がかかります。このため変化のあった桁のみ、古い数字を背景色(黒)で描画して新しい数字を書き直すことでなんとか使えるようになりました。大きな数字は、フォントの拡大機能で表示しています。大きなポイント数のちゃんとしたフォントも用意しましたが、描画速度が遅いので使用しません。数字表示の下の空き領域には簡易グラフを表示します。

 回路図です。グラフィックLCDはSPI、LPS25HとSHT31はI2Cで制御です。AVRはハードウェアでシリアルインターフェースがあるATmega328Pを使用します。いいかげんなグラフ表示ですが、スパンにはある程度正確な時刻がほしいので水晶発振子を使った外部クロックとします。AVRは電源電圧が3.3V時は最大で10MHzまでと仕様が決められているのでそれに従います。

 フルカラーLEDは不快指数の表示に利用します。気温に関しての感覚が鈍った(失礼お許しください)お年寄りがいる家庭はこの表示が冷暖房利用の目安となります。「寒い」をブルー、「肌寒い」をシアン、「何も感じない」をグリーン、「やや暑い」をイエロー、「暑い」をマゼンタ、「暑くて危険」をレッドで表示します。

AVRとグラフィックLCDを使った気圧・気温・湿度計回路図
AVRとグラフィックLCDを使った気圧・気温・湿度計回路図

 基板を作成してみるとSPIクロックをCPUクロックの1/2(約5MHz)としても問題なく描画します。ブレッドボードの環境が悪かったようです。ただ、これでもグラフィクLCDの描画速度は速いとは言えません。ネット上の情報では20MHzでも動作したとのレポートがあるのでAVRのクロックを早くすべきでした。ただ、そのためにはAVRの電源電圧も5Vにする必要があるのでSPIやI2Cのレベルコンバート(5V→3.3V)が必要です。

AVRとグラフィックLCDを使った気圧・気温・湿度計

 ケースは、100均で購入したフォトスタンドです。周囲がオープンなので気温や湿度測定のための空気の流れが確保できます。なお、気圧測定だけなら完全密封されたケース以外の普通のケース内でも問題ないはずです。 秋月電子のSHT31は、その形状から固定方法に工夫が必要です。この画像では、基板上のソケットにさしていましたが、周辺部品の放射熱の影響から気温が高めに測定され、湿度も低く測定されていました。一番良さそうなのはストロベリーリナックス社の取り扱いのものですが、価格が高いのがネックです。仕方がないので、amazonで「あやしい」SHT31を安く入手しました。モジュール基板に固定用の穴が開いているので、基板から離れた場所に実装して正常な測定値が得られるようになりました

AVRとグラフィックLCDを使った気圧・気温・湿度計

 壁に取り付けてある大昔(40年以上前だと思う)のアネロイド型気圧計と比較してみました。なぜかアネロイド型気圧計が2hPa高い値を示します。あとで一番近い気象台の観測データから確認すると海面気圧で1014.1hPaとなっていました。自宅の標高60m、気温28℃の時の現地気圧を高度補正により計算すると1007.22hPaとなるので今回作成した気圧が比較的正確と判断しました。なお、気象台までの水平距離が15㎞程度あるので気圧の傾きによりある程度の差はでます。気圧傾度が小さくなる夜間や曇りで風が弱いときに比較する必要があります。

AVRとグラフィックLCDを使った気圧・気温・湿度計とアネロイド型気圧計の比較

 登山はしませんが、登山で使用する気圧計内蔵の腕時計と比較しました。ほぼ同じ値を示しています。

AVRとグラフィックLCDを使った気圧・気温・湿度計と腕時計気圧計の比較

 下のグラフは、気温と湿度と気圧を表示します。表示要素やインターバルは基板上のマイクロスイッチで選択できるようにしてあります。グラフの描画インターバルを90秒、180秒、360秒の三段階の選択式としてドットをプロットするだけの手抜きグラフです。横幅238ドット(240ドットから両脇の枠線を除く)あるので、最大スパンがおよそ6時間、12時間、24時間となります。振幅は100ドットで、気温センター20℃で0.5℃単位のプラスマイナス25℃、湿度はセンター50%で1%単位でプラスマイナス50%、気圧はセンター1000hPaで0.5hPa単位のプラスマイナス25hPaとしています。

AVRとグラフィックLCDを使った気圧・気温・湿度計の表示