- ベストアンサー
picを使った温度計を作ろう
- picと温度センサーを使用してLCDに温度を表示するための方法を探っています。
- 温度センサーの特性から、フルスケールでプログラム上で処理しやすい電圧値を考える必要があります。
- 小数点以下を四捨五入して範囲内で温度を測定し、部品の数を最小限に抑えたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
S-8100Bの出力電圧 Vout [V] と温度 t [℃] の関係は Vout = 1.748 - 0.008*t ですから、picで t = 218.5 - 125*Vout --- (1) を計算すれば温度が分かります。 分解能 n ビットのAD変換器の基準電圧を Vref [V] としたとき、測定できる電圧範囲は 0 ~ Vref*( 2^n - 1 )/2^n の範囲ですから、測定できる温度範囲(フルスケール)は、この電圧範囲を式(1)に入れたものになります。Vref = 5V、n = 10 なら -406℃~218.5℃ となります。S-8100Bの動作温度範囲は -40℃~100℃ですので、この温度範囲全体の測定ができることになります。 AD変換器の基準電圧が 5V、分解能が 10bit なら、電圧分解能はΔV = 5V/2^10 = 0.004883V なので、温度分解能 Δt は Δt =125*ΔV = 0.61℃ になります。温度分解能が中途半端なので、計算される温度は -0.006℃ → 0.604℃ → 1.215℃ というように0.61℃刻みになってしまいます。 温度分解能をちょうど 0.1℃ にしたい場合は、式(2)のΔt が 0.1℃ となるように、ΔV = 0.8mV とすればいいことになります。ΔV = 0.8mV とするためには、AD変換器の基準電圧 Vref を Vref = 2^10*ΔV = 0.8192V とします。この場合、温度測定範囲は 116℃~218.5℃ になってしまい、室温付近の温度は測定できません。温度分解能を 0.2℃としたとき(Vref = 1.6384V)の温度測定範囲は 13.9℃~218.5℃、温度分解能を 0.5℃としたとき(Vref = 4.096V)の温度測定範囲は -293℃~218.5℃ となります。 このように、S-8100Bの出力電圧をそのままAD変換器で測定する場合、室温付近を測定するには温度分解能を落とさなければなりません。温度分解能を細かくすると、逆に室温付近の温度が測定できません。しかし、pic外部で回路を組めば、温度測定範囲 0℃~102.4℃ 、温度分解能 0.1℃ とすることができます。pic内部では何も計算する必要もありません( t = Vout とすればいい)。「部品数を少なくしたいので電圧値がらみの計算は全てプログラム上でやる」とのことですが、pic外部で回路を組んで、ちょうど良い温度範囲で、なおかつ高い温度分解能で測定できるようにしたほうが良いと思います。オペアンプ1個と抵抗数本でできます。
その他の回答 (1)
- inara1
- ベストアンサー率78% (652/834)
>回路全体から発生する熱が増えてその熱をセンサーが拾ってしまう 温度センサはどこにあるのでしょうか。オペアンプの中には消費電流が0.1mA未満のものもあります。測定精度は、AD変換器の基準電圧 Vref の精度でが決まるので、資料 [1] のような基準電圧源を使ったほうがいいです。オペアンプを使った方法は、例えば資料 [2] のようなものになります。PICマイコンの型番と測定温度範囲が分かれば適切な回路を紹介します。 [1] 電圧リファレンス LM336-2.5 http://akizukidenshi.com/catalog/items2.php?q=%22I-00459%22&s=popularity&p=1&r=1&page=0&cl=1 [2] S-8100BとPICマイコンを使った温度計 http://www.ccad.sist.chukyo-u.ac.jp/~mito/ss/Embedded/webPic/sensor/Temp/index.htm
お礼
inara1さんの回答を参考にさせてもらって最終的にオペアンプとLM336-2.5を使って精度の良い温度計を作ることができました。ありがとうございました。
お礼
詳しい説明ありがとうございます。とてもわかりやすくて参考になりました。 やはり外部で回路を組んだ方が簡単で精度も良くなるんですね。 ただ、部品数を少なくと書いたのですが、部品数を増やすと室温が低い場合(0℃付近)抵抗やオペアンプを使うことによって回路全体から発生する熱が増えてその熱をセンサーが拾ってしまうんじゃないかという心配があったのであえて使わない方向でと思ったのですが考えすぎだったのでしょうか?