create 2010.09.26
update 2010.10.18

気圧計付き温湿度計を作る

    回路図
          メイン基板
          サブ基板

プロジェクトファイル一式
2010.10.18

更新履歴

システムファイル
2010.10.11

起動手順



なんとなく作ってみました・・・

 ホームセンターで売っている温度計には大抵、気圧計が付いていません。
 秋月の「気圧センサーモジュール(SCP1000)」が気になっていたので、試用を兼ねて温度計を作成してみました。
 今回は欲張って秋月の「シリアルRTCモジュールRTC-4543SA」を使用して時計の機能も搭載します。
 これは、今まで使用していた高精度クリスタルオシレーター「KTXO-18S」が入手不可能になってしまった為、時計として使用する際の代替品として精度的な問題が無いかを確認する意味で搭載しました。値段も250円とお手頃です。
  更に欲張って、ストロベリーリナックスで扱っている温度・湿度センサー「SHT11」を使用して湿度も扱う様にします。
 センサーだけでSHT11が2200円、SCP1000が1800円もしますので慎重に製作に取り掛かります。
 ベースになるシステムは、インターネットラジオを作るで使用したタッチパネルモジュールのバージョンアップ版を単体モードで使用します。


「RTC-4543SA」の制御に四苦八苦・・・

 最初にRTCの制御部から作成したのですが、今流行りのSPIやI2Cではなく、WR線でデータの方向を決めて、CLKの立ち上がりに合わせてデータを送受信する仕組みのICでした。
 AVRのハードウエアでは制御できませんので、I/Oをソフトで制御します。
 このRTCは、コマンドの概念が全く無く、単なるシフトレジスタの様に振舞います。データのプッシュとポップしか無いのですから・・・。
 恐ろしいことに、日付を設定する時には、曜日までマイコンで計算してRTCへデータを送信しなければなりません。
 本当に怠慢なRTCです。データシートを見ると、無効な日付データを設定した場合の動作保証はされない様です。
 更にデータフォーマットもLSBからデータの転送が始り、BCDデータが52ビットという変態データです。(そう思っているのは私だけかな・・・)
 なぜ、年・月・日までは8bitで処理されていながら、次の曜日のデータが4bitで残りの4bitをパッティングしてくれないのだろう。
 おかげで、時・分・秒の取得は、4bitズレたまま処理しないといけないのです。
 もっと簡単なRTCを探さないと・・・

 電源を投入して半月が経ちますが、基準となる電波時計に対して、約4秒進んでいます。
 やはり電波時計を内蔵したいですね。
 それか、もっと精度の高いRTCを探すか・・・


「SHT-11」でまたまた四苦八苦・・・

 SHT-11の信号線の名前から、I2Cで制御可能だろうと思っておりましたら、I2Cとは微妙にプロトコルが違うのです。
 これも、結局はソフトウエアでI/Oを制御して、データ通信を行いました。
 このICは電源電圧によって、温度を計算する際の係数を決めないといけませんが、データシートには3.3V駆動時の係数が記載されていません。
 画面上から係数を変更出来る様にして、適切な係数を後から設定出来る様にしてあります。
 このICは結構精度が高い様です。温度計はSCP1000にも付いていますが、これも画面上でどちらを使用するか選択出来る様にしてあります。
 SCP1000とSHT11の温度計の差は約0.3℃に収まっていますので、どちらも精度が高いと思われます。


「SCP1000」で四苦八苦はしない・・・

 SCP1000は普通にSPI接続で制御できます。とても素直な良いICです。
 簡単なコマンドを発行すると、気圧と温度を取得してきます。
 3つ続けて苦戦しなくて良かったです。


「4線式抵抗膜方式タッチパネル付きLCDモジュール」をバージョンアップ・・・

 単純に、モジュールの外に出している信号線が足りなくなったので、2本多く出しています。
 更に、SDカードをμSDから通常のSDカードに変更して、ソケットの電源の制御とSDカード挿入の認識機能を追加しました。
 細かい処では、LCDモジュールにWBX280V009を使用する際、IMO端子を手配線でVCCに接続していたので、基板上のパターンで接続する様にしました。
 何故か、このモジュールのバージョンは3です。(バージョン2は失敗しました・・・)
 今回は、この基板をメインモジュールとして使用します。

LCDモジュールはWBX280V009を搭載しました。
もちろん抵抗の位置を変えて8bit化しておきます。
部品面です。
相変わらずAVRはAtMega1281です。


スタック基板(サブ)を作る・・・

 Arduinoで言えばシールド基板となる子亀基板を作成します。
 この基板には、3.3Vの3端子レギュレータ、SHT11接続端子、SCP1000、RTC等が搭載されています。
 メイン基板にドッキングして使用します。

RTC電源バックアップ用のコンデンサが存在感があります。 裏面にはSCP1000が乗っています。
高価なモジュールですのでICソケットに挿入しています。
SHT-11も高価なICですので、別基板に実装します。


画像公開・・・

メイン基板をケースに装着します。
今回は基板上に用意されているSDカードソケット用パターンに実装しないで、リード線で延長して使用します。
サブ基板を乗せて、SDカードソケットをホットボンドで固定します。
少々、ケースのサイズが大きかったかな?
     
メイン画面 メインメニュー画面 時計合わせ画面
     

 折角グラフィック液晶を使用しているので、気圧変化等をグラフ表示したい処ですが、今回はここまでです。

 掲示板で「yingshu」様よりご要望の有った「容積絶対湿度」の表示に対応しました。
 この数値が11以下になるとインフルエンザに感染しやすい環境の様ですので注意が必要です。
 「気圧」と「容積絶対湿度」は画面の中央付近をタッチすると交互に表示が切り替わる様にしました。

 天気予報モドキは付いていますが正常に動作しているかはまだ未検証です。
 過去6時間の気圧の変化分布から1次回帰線を計算し、傾きを画面に矢印と数値で表示します。
 この傾きを用いて、天気予報点数なるものを増減させて天気の状態を予測しております。
 まさか、20年前に勉強した一次回帰がここで使われるとは・・・

 SDカードに過去1年分のログデータをCSV形式で出力することができます。
 ログデータには、日時、気温、湿度、気圧、容積絶対湿度を出力します。
 このデータはCSVファイルなのでエクセルで読み込んで、グラフ表示等が行えます。

温度係数設定及び、使用センサー選択画面 別の温度計の表示。本機の表示と近い値を示しています。
   
気圧表示モード 容積絶対湿度表示モード
やばい数値です。インフルエンザに注意!
     
img017.png  エクセルにログデータを読み込ませてグラフを表示した例です。
 過去6時間分のデータをグラフ化してみました。
 気圧のデータは確かに下方に推移しているのがわかります。
↑クリックすると原寸大の画像が開きます


最後に落とし穴が・・・

 使用している部品の中には発熱するものが含まれます。
 それは3端子レギュレータとLCDモジュールのバックライトLEDです。
 これらの温度も、使用しているセンサーでは見事に捉えてしまいますので、最小限の発熱に抑える必要があります。
 3端子レギュレータに入力する電圧はDC5.0V、LCDバックライトの輝度はPWM制御で50%に抑えます。
 最初これに気付かなかった時は、「不良品なのかな?」と思ってしまいました。危なく恥をさらす処でした。

 2010.10.11追記
  3端子レギュレータと逆接続防止用ダイオードを外し、直接3.0Vの直流電源を接続した処、大幅な発熱の減少が確認できました。
  暫く、この状態で使用してみます。
  使用した電源は秋月スイッチングACアダプターです。


仕様です・・・

 1.現在の日時の表示
 2.現在の温度の表示(SCP1000/SHT11の何れかのセンサーを選択可能)
 3.現在の湿度の表示
 4.現在の気圧又は、容積絶対湿度の表示
 5.超適当な天気予報機能(予報のアルゴリズムを何方か教えて下さい)
 6.10分毎にデータを内蔵フラッシュメモリにロギング(最大1年)
 7.内蔵フラッシュメモリのログをSDカードにCSVファイルとして出力(Excelで開けます)
 8.周囲の明るさに応じてバックライトの輝度を調整。(2段階)


参考サイト

 本機械の製作にあたり、下記サイトのソフトウエア・データ・アルゴリズムを使用させて頂きました。
 作者の方々にお礼申し上げます。

  ・ファイルシステム
    Electronic Lives Mfg.

  ・アイコンデータ
    Human-O2 - Iconset

  ・フォントデータ
    Font Silo (フォント・サイロ)

  ・SHT11関連
    SHT11を使いこなそう!
    SHT11を使った温度計・湿度計の製作

  ・「容積絶対湿度」の計算方法
    OWL.Diary_TestType ~ 熾火研究所跡地・裏庭 ~



【HOME】