● 実験テーマ86
「PIC24F+NOKIA5110+HDC1000+LPS25Hで温湿度・気圧グラフ表示実験」
(最低限の目標であったノキア液晶に温湿度のグラフの分離表示までは実現出来ました。)
以下、この実験の顛末記です。
■ 2017.1.4
・前回テーマで、PIC24Fの、I2Cで動かし、温湿度・気圧値の表示までは出来たので、
今回のテーマでは、それぞれ単体の要素でグラフ表示の実験を行った後、温湿度の2ch分離グラフ表示
までやってみたいと思う。
気圧を含めた、3つの要素を固定スケールで、全て分離表示するには、ノキア液晶の分解能(Y方向:48dot)
では厳しいので、これはまた次のテーマで、QVGAカラー液晶に置換えて実験するつもりである。
まずは、以前のサーミスタ版のグラフ表示温度計を、HDC1000で実現してみる。
履歴バッファ処理・履歴グラフ表示関数は、トラ技のものを活用させていただいているが、ここの
記述が、ポインタとポインタ演算子を多用している為、理解は容易ではなかったが、
割と順調に表示させることが出来た。
1℃/dot、0〜 47℃で、プロットします。
※ ソースは、こちらからどうぞ→ GraphicalTmpHumPres_Test_2.c
■ 2017.1.11
・次に、グラフ表示湿度計にしてみる。
タイトルの漢字を、"湿度"にしてみる。
漢字フォント・サイズは、1文字、16dot*16dotで、2文字なので、16dot*32dotになる。
これを上下2つのブロック:8dot*32dotに分けて、xxxxH[]と、xxxxL[]のテーブルを用意する。
今回の場合、"温度"から、"湿度"の変更なので、xxxxL[]のテーブルのみ修正した。
その他、ソースを温度から湿度用に修正するポイントを以下に列記してみた。
@ dotプロットする時、湿度値を、Y座標として渡すには、2%/dotなので、humi/2で渡せばよい。
A 0〜96%の範囲をプロットするが、96%をオーバーした場合も、humi/2の値が、(Y=)48以上に
なった時、飽和表示になるようになっていたので、このまま修正無しで行けた。
⓷ 湿度がマイナスになることはないので、マイナスリミットについては考える必要がない。
C 履歴バッファ処理に必要なマクロ名は、TEMPから、HUMIに変更した。定数は変更なし。
これでソースを作成し、コンパイル〜動作確認までOKになる。
※ ソースは、こちらからどうぞ→ GraphicalTmpHumPres_Test_3.c
・次に、グラフ表示気圧計にしてみる。
"気圧"のフォントは、「太田さんのホームページ」に記載のものを借用させていただきました。
ポイントは、仕様決めにある。
プロット範囲を、983hPa〜 1030hPa、表示分解能:1hPaにした。
なので、Y座標変換は、-983するだけでよい。
それと、気圧値の表示は、小数点以下2位までだと、座標線と重なってしまうので、
小数点以下1位までの表示にした。
これで上手く行く。
・気圧プロットが急に下がっているのは、わざとセンサに光を照射したためです。
どうも光に影響されるようです。
※ ソースは、こちらからどうぞ→ GraphicalTmpHumPres_Test_4.c
■ 2017.1.12
・個々のグラフ表示は出来たので、いよいよ温湿度の2ch分離表示をしてみる。
最初、メモ用紙にラフ書きで、Y座標軸と目盛(刻み)をどうするか?検討してみたが、整理が付かなく
なったので、Excelシート上で、ちょっとまじめに考えることにした。
以下のように決めた。(以下に検討した時の、Excelシートを、そのままキャプチャしたものアップしました。)
上半分を、温度描画領域、下半分を、湿度描画領域にした。
温度目盛りは、0℃、22℃、44℃の、3つで、2℃/dotで、0〜
44℃まで表示可能にした。
湿度目盛りは、0%、44%、88%の、3つで、4%/dotで、0〜
92%まで表示可能にした。
■ 2017.1.13
・2ch分離表示のソースを検討した。
それぞれの計測値から、Y座標に変換するのは、今までやってきたので、それほど難しくない。
上の表の、y=25+temp/2, y=huim/4 がそれである。
また、ライブラリの、draw_point関数は、yの最大・最小値に対するリミッタ機能も含まれるので、
分離表示にした場合の、刻み(目盛)描画には、バンクの関係もあり、不適当なので、
その機能が含まれない、目盛のドット描画専用の関数:void draw_memori(int x, int y)を
用意して、それで描画することにした。
それと、2ch分離表示にすると、それぞれで、yが最大・最小を超えた場合の、リミット処理が
異なってくるので、draw_point関数に、mflagというフラグを用意して、この関数をコールする
時、温度プロットモードだったら、mflag=1、湿度プロットモードだったら、mflag=0にして
コールすることにした。
そうすれば、関数の中で、そのフラグを見て、各処理に分岐させることができる。
これ位が、ソース作成上のポイントと思う。
詳細は、このページ末尾のソースを参照してください。
これで、このページ・トップの写真にあるような、2ch分離表示が実現出来ました。
<最終回路図>
・実験テーマ85と同じです。
<最終ソース及びヘッダファイル>
・こちらから、どうぞ→ 「GraphicalTmpHumPres_Test_5.c」 (温湿度グラフ表示テスト・メインソース)
/// ノキア液晶5110ライブラリ: 2ch分離表示用で一部修正しましたが、名前は、そのままにしました。
nokiaGlcdlib.c
nokiaGlcdlib.h
※ この他の、ライブラリは、実験テーマ85と同じです。