目次8章.機能が豊富なPICを使う(PIC16F88)>(5)温度計に仕上げる

温度計に仕上げる

更新日2008.3.29

前のページで作成した回路とプログラムに手を加えて温度計を作成します。

変更点は以下の点です。
(1)基準電圧を作る
(2)7セグメントLEDに10進数で表示する
(3)省電力化

基準電圧の作り方
今回必要な基準電圧は、1.023Vです。

一般的な方法は、ツェナーダイオードを使う方法ですが、ツェナーダイオードは有る程度電流を流しておかないと安定した電圧が取り出せません。
ですので、乾電池で長時間動作させる場合にはきついかなと思います。

そこで、ツェナーダイオードと同じくらい手軽に使える定電圧ICを使うことにします。
今回使用した定電圧ICは、ナショナルセミコンダクターのLM336−2.5と言うICで、以下のようなスペックです。
  出力電圧:2.490V
  動作電流:400μA 〜 10mA

左は、1.6Vツェナーダイオード
真ん中はLM336−2.5

どの程度安定しているか、以下の測定回路で実測して見ました。
結果は右の表です。

R(KΩ)Vdd(V)Vout(V)Idd(mA)
2.5124.472.4790.96
2.5125.042.4811.22
2.5128.992.4813.11
0.9914.472.4802.41
0.9915.042.4813.08
0.9918.892.4827.63

電源電圧が2倍変動したり、消費電流が8倍変化しても出力は安定しています。
このVoutを2本の抵抗で分圧して、1.023Vの基準電圧を作れます。

なぜ1.023Vか

基準電圧を1.023Vとした理由は、温度センサ(LM35D)の出力の最大が1Vである事と、PICのA/D変換の分解能が10ビットである事から来ています。
10ビットで表せる数は、10進数で0〜1023です。
従って、基準電圧を1.023Vにしておくと、A/D変換結果を丁度1mV刻みで識別可能になります。

実験回路
前のページとの違いは以下の点です。
・クロックを内部クロックにしてOSC1/OSC2をI/Oピンで使えるようにした
・MCLRを無効にしてI/Oピンで使えるようにした
・電源電圧が変動しても基準電圧が一定となるようにし、電源電圧に幅を持たせた
・NaPiOnで人の動きを検出できるようにした
・Cdsセルで明るさを検出できるようにした
・7セグ制御周りの抵抗値を大きくし、省電力化した
クロックは、内部クロックの8MHzを使用、OSC1/2はI/O(RA6,7)として使用できるようにしました。
同様に、MCLRもI/O(RA5)として使用できるようにプログラムで設定します。

RA4(AN4)はアナログ入力とし、温度センサ(LM35D)を接続して電圧(温度)を測定します。
RA3はA/D変換の基準電圧(Vref+)とし、1.023Vを入力します。

RB0〜6,RA7とRA0−2には7セグメントLEDを接続します。
7セグメントLEDの使い方については、こちらを参考にして下さい。

RB7はピン変化割込みに設定し、NaPiOnを接続します。
NaPiOnで人の動きを検出している間、7セグに温度表示し、動きが無い時はSLEEPモードで待機させます。

RA5にはCdsセルを接続し、暗い時は7セグも暗くして(PWM制御)省電力化します。

温度センサ,基準電圧IC,Cdsセルは、PICのRA6から電源供給し、SLEEP時はこれらの電源もOFFにして極力省電力化します。

ブレッドボードに組み込んだ状態

(クリックで拡大表示)

プログラムの仕様

RA4(AN4)に接続したLM35Dの電圧をA/D変換し、結果を3個の7セグメントLEDに10進数で表示させます。

人の動きがある時だけ表示し、動きが無くなって5秒たったら7セグを消灯して、NaPiOn以外のセンサ類も電源を切りSLEEPモードに移行します。
NaPiOnの出力は、PORTBピン変化割込みで検出できるようにし、SLEEPから抜けるためにも使います。

7セグの明るさは周りの明るさに連動し、2段階で表示します。(PWM制御)

6種類のタイマは、TMR0割込みにより作成します。

概略処理フローを載せておきます。

プログラム全体
プログラムはこちらです。
メモ帳などのテキストエディタに取り込んで、MPLABでアセンブル&PICライタでPICに書き込んで動かしてみて下さい。

RA4の電圧を測り、その値が7セグに表示されるようにRA3の可変抵抗を調整します。

感想
《その1》

消費電流は以下の通りでした。
電源電圧明るい時暗い時SLEEP
5.50V8.92mA4.04mA0.36mA

2008年3月9日12時より耐久試験を開始しました。(ニッケル水素充電池 エネループ4本)
条件はあまり過酷では無く、机に向かってパソコンなどを使っていても反応せず、体を大きく動かしたり手を振った時に反応する状況です。
大半の時間はSLEEPモードで待機し、1日10〜20分程度表示する条件になると思います。
この条件だと、約6ヶ月稼動できる計算です。

【2008.10.13】
2008.3.9から連続運転を開始し、1日20〜30分点灯する条件でまだ動作を続けています。
ですが、最近電圧が急速に低下しており(4.28V)、後1週間程度が限界だと思います。
エネループの耐久試験を兼ねて始めましたが、7ヶ月間使えれば実用に耐えられそうです。
時間があれば、ちゃんとしたケースに収めようと考えています。

【2008.10.18】
今朝、電圧降下によるリセットがかかるようになりました。
電圧は、2.73V(単三型エネループ4本)でした。過放電です。
過放電防止のために、電源電圧を測定して4.4V以下になったら機能を停止するような工夫も必要です。



《その2》

LM336-2.5の出力を固定抵抗2本で分圧する予定でしたが、半固定抵抗の方が良さそうです。
と言うのも、PICのA/D変換にも誤差があるため、AN4をテスターで測った値が7セグに表示されるよう微調整ができるためです。