I2C
LCDとDHT-22(I/O1ワイヤー)を使った温湿度計
H24.8.5
今年も暑い夏を迎え熱中症と節電対策の一助とするため温湿度計を作ることにした。
製作に当たっては、なるべくコンパクトとするため信号線の少ないI2C
LCDと1本信号線で通信できる温湿度センサーと
CPUは8ピンAVRを使い、それらのインターフェイスの勉強も兼ねて作った。(意外にハマった ^^;)
構成・使用部品
CPU AVR TINY13A 8ピン 内蔵RC4.8MHz動作
LCD SB0802G ストロベリーリナックス I2Cインターフェイス 信号線2本+リセット信号
温湿度計 DHT22 ストロベリーリナックス 1ワイヤーインターフェイス 1-Wireではない(それより簡単)
回路構成は、回路図のとおり至ってシンプル。
LCDのピンピッチは1.5mmのため1本おき(奇数ピン)に基板に指し、偶数ピンは裏側に無理やり持っていって接続。
LCDのリセット信号は、VDDに直付でも問題ないようだが、CPUで制御
DHT22は、なるべく他の部品から離した。(近いと温度が高めになる)
電源は、3.3〜5V対応可。(LCDコントラスト設定調整要)
制御ソース
TINY13AにはI2C(TWI)のインターフェイスが実装されていないので、I2Cのシーケンスを組でLCDを制御。初期化処理はストロベリーリナックスの
サンプルを参考にした。最初コントラストは濃くしておいた方が無難。(薄いと表示がほとんど見えず初期化が成功したかどうかわかりにくい)
DHT22の制御は、
こちらのHPの日本語データシートを参考にさせて頂いた。データ読み出しスタート信号は、Lowレベル1ms以上となっている
ので最初2msとしたが、時間が経つと起動しなくなってしまったので、5msとして解決した。
データの読み出し間隔は約2秒。 CRC値によるチェックを行い、不一致の場合通信エラーとして、’CRC Err’を表示する。
フリーズして処理が止まっていないか確認するため、1行目の8列目の表示を1秒周期で’*’を点滅させた。
まとめ
LCDとのI2C通信に手こずった。データシートどおりにシーケンスを組んだつもりであったが、思わぬところでハマって相当時間がかかった。
DHT22もスタート信号を2msでは、途中で起動しない(フリーズ)状態になりそれに気づくのに苦労した。
これとは、別に通常のLCD(HD4470)とDS18B20(1-Wire)を使用した温度計をブレッドボード上で作った。それと比較したのが下の写真です。
温度表示は、0.3-0.4度程度の差でした。
ソース