title

温度湿度計 1

秋月電子さんの変換基盤付きRL78G13(R5F100LG)です。センサーはDHT20、液晶表示はAQM-1602(2種類)です

センサー、液晶表示ともにIICバス仕様です。注意 0℃以下は測定できません。

仕様設定

5秒毎に温度と湿度を取り込み1行目に表示します。2行目には1分ごとに時刻表示更新します。 センサーはDHT20(またはAM2320)です。表示はAQM1602AとYです外観は違いますがソフトは全く同じで動作します。

まず最初にセンサーについて見ていきます。

1

電源投入後100m秒以上待て。温度湿度のデータを読み出す前に”0x71”を送ることによりステータスワードを 取り出しそれが”0x18"であることを確認しろ。もし異なっていたら(センサーの)イニシャライズが必要だがその方法はWebサイトを見ろ。

というような事が書いてありますが、稀にしか起きない事象なら故障と考えれば良いのでここは無視しました。

2

10m秒待て(多分1のステータス確認後の事だと思います)。測定開始”0xAC"コマンドに続いて”0x33”と"0x00"を続けて送れ。とあります。

3

測定完了まで80m秒まて。その後データを読み出して、最初のデータバイトがステータスなので第7ビットを確認して0だったら測定終了なのでOKだがそうでなければもうちょっと待て。とありますが 、実際に80m秒待っても1のままな事はよく起こりました。120m秒ほどに延ばしても効果は無いようです。測定結果(6バイトのデータ)は変化していますが、表示変換値に大きな誤差は無いようなので 良しとしました。こまめにbit確認し0になるのを待つ方法で400m秒ほど(これ以上は待つ意味がないだろうと思い)まで待ちましたが、待っても効果全く無いようです。読み出し不良時に再読み込みを 繰り返しても必ず時間切れになります。読み込み不良は数回~20回に1回程度のような感じですが連続して数回発生することがあります。

4

データーシートにある図を見ると読み出しトリガをIICバス上のDHT20:0x70に対して

スタートコンディション発行続いて0xac、0x33、0x00を送ります。ストップコンディションを発行します。

図にはアドレスに続く0xacは明記されていますが、次のバイト0x33とその次の0x00はDATAとしか記入されていません。 多分、オプションコマンドがあるのでしょうね。

それから80mSec以上待って

0x71から7バイト読み出すとデータが得られます。

5

DHT20のスレーブアドレスは7bit:0x38です。実際にアクセスするには1bit右シフトして8bitにするので0x70になります。LSBは書き込み/読み出し指定bitですので、書き込み時は0x70、 読み出し時は0x71でアクセスします。(ただし自動生成された読み出し関数にはLSBを自動的に1にしてくれる機能がありますので0x70、0x71どちらでアクセスしても読み出しとして機能します。

コンパイラ

純正コンパイラ(試用版)は「試用期限が過ぎている(ので購入しろ?)」というコンパイラ時に必ず出る警告を見るのが嫌いなのでGccを使用しています。

実用

実際の用途は湿度と時刻をもとに床下換気扇を回しています。梅雨時期の雨天時等、「あまりにも湿度が高い場合は無意味もしくは余計に湿度が上がるため稼働停止させるが そうでなければ午前10から午後4時まで稼働させる」というような使い方をしています。温かい静岡県南部の屋内用で、しかも湿度が高く蒸し暑い梅雨時期に作ったので 0℃以下は全く念頭にありませんでした。この度(2023.1.25)の寒波で「そうだ温度データは"unsigned" だったな、湿度は0以下はないけれど・・・」と気が付きました。

CRC

データーの最後にCRCデータがありますが使用していません。

次は回路図