ノキア5110グラフィックLCDで
気圧、温度、湿度の3つの表示をさせるには? その1


実は、2線式通信(I2Cとは異なる)の湿度センサーユニットが既に存在している事をパレットソフトさんから教えてもらいました。
▼Sensirion社(The Sensor Company) 製
http://www.sensirion.com/
SHT-11、SHT-71です。

株式会社ストロベリー・リナックスから、キャリーボードキャンペーン版のSHT-11
http://strawberry-linux.com/catalog/items?code=80001
を、早速購入しました。

なんと、これも気圧センサーユニットと同様に小さくて、てんとう虫程の大きさしか有りません。







この湿度センサーユニットの詳しい解説が、エレキジャックさんの所にあります。

駆動電圧によって、計測値の補正値の修正が必要ですので、バッテリー駆動をする場合には、3.3VのDC-DCコンバーターはこの回路では必須です。






元々の気圧、気温計測装置と、湿度センサー実験ボード。
この2台を1つにまとめなくてはなりません。

PIC 16F886による、ブレッドボード上での実験がうまくいきました。
カタログ上にも乗っている可動範囲内の電源電圧ですが、3.3Vでこの湿度センサーがどのくらい正常に動作するのかが心配でした。

そこで、身体を張って(?)気象観測実験です。
部屋の換気をかねて、クーラーを止め、窓全開で扇風機で戸外の空気を30分程家中に引き入れました。

その時の地元の気象観測所発表の気象データは、
32.0℃ 降水量0.0mm 南風 風速2m 日照時間1.0 湿度67% 気圧1013.1hPa

自宅の装置では、気圧 1012hPa、気温 31.7℃、湿度67%。ほぼ一致しました。暑ーい!
クーラー運転再開!!

元々気圧は、地元の気象観測所が近い事もあって良く一致していましたが、気温、湿度は部屋の環境に大きく左右されてしまいます。そこで、こうするしか方法がなかったのですが、こんなに近い値になるとは思いませんでした。

 

計測開始から指令から、全てのデータを取り込みまで320msかかっています。
湿度を12ビット、気温を14ビットで取り込んでいますから、カタログの通りですね。

ch1(黄色)がSCKでRC6、ch2(紫)がDATAでRC7です。
DATAラインだけ10Kで3.3Vへプルアップしています。

約10kHzでPICとSHTが通信している様です。


全てを一つにまとめました。まだ、湿度のグラフプロットができていません。
ハード回路はノキアのインターフェースの1カ所を、他の実験の都合で変更しています。(RC3に接続していたD/(INV)CをRC5へ変更しています。)

これは、プログラム容量が少なくなってきた為に、上位の18LF2550と共通化をする為です。
18LF2550にはRC3が存在せず、内部のVSUB電源になっています。ここに0.1uのコンデンサを介してGNDに繋ぎます。その他は全く共通にPICを差し替えて使用できます。
18LF2550はプログラムメモリーを16KW持ち、RAM容量も2KBあります。USB通信機能を持っています。12MbpsのUSBに対応する為に最大クロック周波数が48MHzと高速です。
「LF」タイプの場合は3.0V付近で16MHzで動作可能ですが、2.0Vまで直線的に4MHzまで下がります。(詳しくは、「その17 PICで気圧計 by 18LF2550 基礎実験その1」、または、マイクロチップ社発行のデーターシートを参照して下さい。)

18LF2550は、18F2550の使用可能電圧幅を広げた製品で、2.0Vから5.5Vまで動作可能で、3.3V系の駆動が可能なのですが、現在日本国内では残念ながら入手する事はできませんので、ご注意下さい。

私は訳あって、マイクロチップ社の海外ダイレクト通販で入手しましたが、航空便になるので送料がかなり割高になってしまい、相当数を購入しないと単価はそれほど高く無くても、結構高い買い物になってしまいます。また、購入手続きは全て英語となります。届くまでに、2週間程かかります。

現在、16F886で何処までプログラミング可能なのか調べています。でも、湿度センサーから通信で得られるA/D変換値データを物理量に変換するのには、浮動小数点演算が必須なのです。
その為内部が8ビットCPUの16F系では、どうしてもかなりのメモリー領域を浮動小数点演算で消費してしまいます。

実験的には16F886で、湿度センサー自身で温度を計測するのは可能でしたが、プログラム容量的に他のプログラムとの共存が無理な事と、温度計測サイクルに320msも時間がかかるので止めました。

その為、計測湿度値に温度補正をかけていませんが、補正をかけなくても殆ど日常仕様する範囲であれば差はありません。

ソースリストは、ただ今、グラフ表示の修正実験中です。
今しばらく、お待ち下さい。(Jul. the 24th 2010)

3種混合プロットができる様になりましたが、RS232Cへ湿度の情報を載せる事を忘れていました。

うーん、3種混合プロット表示はどうもゴチャゴチャして、とても見やすいとは言えない。

3段分離式プロット表示に換えようかなと思っているのですが・・
16F886のメモリー残量が10%を切ってしまい残り少なくて。
湿度の情報をRS232Cへ文字情報として転送する事ができてから考えようと思います。
(Jul. the 25th 2010)

湿度データのRS232Cへの文字情報での転送が可能になりました。

しかし、プログラムメモリーが残り僅かとなり、現在7895バイトで、全容量8192バイトの96.4%にまで達しています。このまま個別グラフの表示をプログラミングするのは、混合プロット用の判定ルーチンが減ったとしても難しいのではないかと思います。

下記リンクより、プロジェクトファイル一式をダウンロードできます。(直したい所だらけですが・・)

16886prrh04.zip
(このソースには、混合表示でバグが有る事が判りました。修正中です!Aug. the 1st 2010)

※ご注意 本プロジェクトは HI-TECH C for the PIC10/12/16 v9.81 以前のバージョンにて作成されています。 HI-TECH C for the PIC10/12/16 v9.81 以降のバージョンでそのままコンパイルすると、コンパイルエラーが発生いたします。これを解消するには、下記をご参照下さい。

HI-TECH C for the PIC10/12/16 v9.81リリースとその注意点!
http://ohta.no-ip.com/Pages/templan/index60.html
(Mar. the 1st 2011)

PICC Pro Lite により書かれています。
気圧センサー部分を含むプログラムの根幹は全て、パレットソフトさんのプログラムを利用しています。

ノキア5110表示用のライブラリー部分は、
CQ出版の「トランジスタ技術2006年3月号」に掲載された、
R8C/15付録マイコン基板活用企画 
第9回 小型グラフィック液晶表示器で作る簡易温度計 山本 秀樹氏 のR8C/15用ソフトウエアをPICC Lite用に移植して使用しています。

湿度センサーSHT-11とのインターフェース部分は、海外のサイトのプログラムを利用しています。
作者と連絡する方法が解りません。リンクを表記しておきます。

http://www.edaboard.com/ftopic398316.html
上記ページの一番下のソースを利用しています。 (Jui. the 28th 2010)

ただ今、ここまでのソフトウエア全体の見直しをして、プログラムソースのダイエット化を薦めています。眺めれば眺める程、無駄や、要らない変数宣言等、他人のプログラムを切った張ったをしてきた残骸が観られました。無駄な変数の宣言を減らすと、そこそこメモリーの節約になるようです。

また、特定のI/O2ビット分を占有してしまうので私はあまり好きでは無いのですが、16F系はUSART機能をもっているので、RS232Cについてはビットのパタパタ通信を止めて、PIC内部のUSARTを使ってみました。でも、思った程のメモリーの節約にはなりませんでした。

そして、何よりも節約に効果が有るのは、浮動小数点関係の変数宣言や、計算を減らす事です。実数から整数にキャスティング(型変換)する事も、なるべく一回で済む様に、今、関数の共通部分をまとめています。じっくり見直すことで、7895バイトだったプログラムサイズが、7200バイト位まで減らす事ができました。もう少し減らす事ができれば、分離表示方式等のプロットがプログラミングできるかもしれません。

例によっていつになる事やら!(Aug. the 1st. 2010)

注意事項
General disclaimer
トッ プページへ

なお、当ホームページで公開しているデーター(写真、音声)等を個人の枠を超えて複製・転用する事はご遠慮下さいませ。
ご意見/苦情/ご感想はこちらまで