温度センサーLM35DZを実用域で使う2017年09月25日 01時17分37秒

秋月通商などで手に入る安価な温度センサーにLM35DZというものがあります。
これをArduinoと組み合わせて使う記事は検索するといくつも出てくるのですが、ほとんど「コピペ」で有用な追加情報はほとんど得られない状況です。

そこで、いくつか実験も兼ねてテストしてみようと思います。
以下は実験風景です。
実験風景

多くの記事は基準となる温度計などとの測定値の比較をして検証を行うなどの基本的なことが行われていません。
また、データシートの読み込みが足りなかったりADCからの取得値のデータ処理の仕方の根拠説明がありません。

今回の実験では比較のために他の温度センサーでの観測値と市販のデジタル温度計の測定値を使います。
「他の温度センサー」としてはセンサーそのものがデジタル値を返すセンシリオンのSHT-11を使いました。これはADCによる変換処理の仕方の影響を排除するためです。

■動作電圧
LM35DZに印加する電圧範囲は広く、4V~20Vとなっています。
実験風景でオレンジ色はArduinoの5Vに接続しており、赤色は3.3Vに接続しているのですが、実は実験の結果、3.3Vで十分に動作することが分かったため、3.3Vで動作させることにしました。



■ADC基準電圧
ArduinoのデフォルトのADC基準電圧は5Vです。
一方でLM35DZを追加部品なしに使う場合は氷点下の測定はできず、10mV/℃という特性なので100℃の場合は1000mV、つまり1Vの電圧程度しか測る必要はないでしょう。このようなセンサーをADCで使う場合は基準電圧を下げるかアンプなどで増幅するなどしてフルスケールと基準電圧が近くなるようにします。
Arduinoはデフォルトの設定以外にもINTERNALという指定をすることにより機種ごとの異なる電圧をADCの基準電圧として使うことができます。
Arduino UNOの場合はその電圧は1.1Vです。
今回は1.1Vを基準電圧に設定します。
なお、通常の5Vが基準電圧の場合、生活環境での室温は明らかに他のセンサーの測定値よりも小さい値となりましたので、実用にならないことを確認しています。
スケッチは以下になります。
デフォルトと1.1Vの設定処理はマクロで切り替えるようにしていますのでどれ位値が変わるかは試してみると分かります。
ArduinoIDE上のスケッチ

■ADC基準電圧とプログラムの対応付け
5Vの基準電圧とか3.3Vの基準電圧とか1.1Vの基準電圧とかいろいろありますが、本当にそれらの電圧が基準電圧として正しいのでしょうか?
5Vのつもりが5.01Vであったり、4.98Vであったりします。
当然プログラム上はそれに合わせて実測値を採用しないと変換処理の誤差となります。
今回はそこまで実行していませんし、1.1Vの基準電圧の場合は外部から正確に測ることもできませんから、理論値として処理するしかありません。
また、これらの基準電圧そのものが温度によって変動する場合もありますので、センサーを使った測定というのはそれだけ奥が深いものだということを忘れないでいただきたいと思います。

■10bitADCでの換算について
10bitADCを使った変換処理で最近よく見かけるのは1024で割っている処理です。
ソフトウェアとしての前提条件とブラックボックスとしてのADCを扱う場合はこれは算数的には間違いです。
0Vの時に0が出力され、5V(1.1V)の時に1023が返るのですから、1024という数字はどこから出てくるのでしょうか?
例えば「10kmの距離を5時間かけて歩きました。時速は?」という問題を解くときに10km/6なんて計算しますか?しませんよね。
0~1023は1024段階だから1024?違います。
上記の時速の問題で0~5の6段階だから6で割る、ではないでしょう?
1024にする場合の理由はもちろんあるのですが、算数の問題の前提条件を無視するのは違います。
理屈は別の記事に譲ることにして、上記のスケッチでは両方試しています。

■他の温度センサーと温度計との比較
全部バラバラでした。
あえて近い組み合わせを選ぶとセンシリオンのセンサー出力値とADC基準電圧1.1Vで1023で割り算した値でした。とはいえ、1024で割ったものもそれ程差があるわけではありません。
単体の温度計の値は冒頭の写真を参考にしてください。HAKUBAの温度計は近い値を示しています。
センシリオンセンサーなどを使った他のシステムの出力
上記のデータはカンマで区切ってありますが、左から3番目の値がセンシリオンのSHT-11というセンサーを使った温度測定値です。
今回のスケッチでのシリアル出力結果
上記が今回試したスケッチでの実行結果です。

■Lチカの理由
上記のスケッチではLEDを点滅させていますが、これは他の負荷がある場合にADCへの影響があるかどうかを確かめるためです。
試しにA0に3.3Vを直結してAREFをデフォルトの5Vにしてみると分かります。
固定値のはずがふらついています。
もちろんこれはLチカの影響だけではありません。要はADCはセンサーと接続しない場合でも値がブレるということの確認です。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
このブログでは「組込み」と「組み込み」のどちらを使っている?

コメント:

トラックバック

このエントリのトラックバックURL: http://kumikomi.asablo.jp/blog/2017/09/25/8683356/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。