2015年06月06日

温度センサー -第4回:改良(温度の表示、分解能向上)

前回はArduinoのアナログ入力ピンに温度センサーを接続し、温度センサー出力電圧を読み取りました。今回はこれを改良します。


1. 温度の計算、表示

前回はアナログ入力のデジタル値を電圧に変換して表示していました。電圧表示だとわかりにくいので、次の2つを行います。
  1. 温度表示にする
  2. 単位をつける

温度表示にするにはデジタル値の計算式を変えればよいです。
電圧表示の計算式は次の通りです。sensorValueがデジタル値、voltageが電圧です。
voltage = sensorValue × (5.0 / 1023.0)

デジタル値は5[V]を0から1023までに分割して表示していますので、デジタル値に5/1023をかければ電圧がわかります。
温度センサーLM35の1[℃]当たりの出力電圧は10[mV]です。ですので、電圧を10[mV]で割れば温度がわかります。温度をtempとすると計算式は次の通りです。
temp = sensorValue × (5.0 / 1023.0) / 0.01

式を整理するとこうなります。このように計算すればアナログ入力のデジタル値から温度がわかります。
temp = sensorValue × (500.0 / 1023.0)

次に単位などを表示します。表示には前回と同様にシリアル通信を使います。
シリアル通信とはデータをやり取りするための方法です。低速ですので簡単なデータを送ることに向いています。
Arduinoには標準でシリアル通信の機能がついていますので、Serial.println()関数Serial.print()関数を使えばデータを送ることができます。

シリアル通信を使って電圧と温度を表示するためのスケッチを以下に記します。上から順に電圧、電圧の単位、温度、温度の単位です。
Serial.print(voltage);   //電圧の表示
Serial.print("[V], ");   //電圧単位の表示
Serial.print(temp);      //温度の表示
Serial.println("[cel]"); //温度単位の表示、改行

表示したい内容を括弧の中に入れます。数値(voltageやtemp)だったらそのまま、文字([V]や[cel])だったら""で囲みます。
シリアル通信でデータを送る機能はSerial.println()関数Serial.print()関数の2つがありますが、この2つの違いは改行するかしないかです。前者が改行あり、後者が改行なしです。今回は最後の温度単位の箇所で改行をしています。

以上で表示の改善ができました。


2. 分解能の向上

次に分解能を良くします。
A/D変換を行うと、アナログの値をデジタルの値で表現できます。このときデジタル値の1当たりでアナログ値をどこまで細かく表現できるかの能力を分解能といいます。
例えばデジタル値1当たりが10[mV]のA/D変換と1当たり1[mV]のA/D変換を比較すると、後者は分解能が10倍良いです。

分解能を向上させる方法は主に2つです。
  1. 分割する数を増やす
  2. アナログ入力の範囲を狭くする

1番はA/D変換の分割数を増やすという方法です。例えば10[V]を100分割するA/D変換を1000分割に変更すると、分解能が0.1[V]から0.01[V]へ向上します。
2番はA/D変換のアナログ値の範囲を狭くするという方法です。例えば10[V]を100分割するA/D変換があるとして1[V]を100分割に変更すると、分解能が0.1[V]から0.01[V]へ向上します。

ArduinoのA/D変換ではanalogReference()関数でアナログ入力の範囲を変更することができますので、2番の方法で分解能を向上させることができます。analogReference()関数に引数INTERNALを与えるとアナログ入力の範囲は1.1[V]になります。
標準では5Vを1024分割していますので、分解能は4.88[mV]=0.49℃です。一方、1.1[V]ですと分解能は1.07[mV]=0.11℃に向上します。
温度センサーの出力電圧は最大1.5Vですが気温を測れればいいのでアナログ入力の範囲は0.5[V]以上あれば十分です。ですので、アナログ入力の範囲を1.1[V]へ狭めても問題ありません。

元々は5[V]を1024分割していたため1項の計算式で良かったですが、範囲を1.1[V]にしたため式は次のようになります。
voltage = sensorValue × (1.1 / 1023.0)
temp = sensorValue × (110.0 / 1023.0)

これで分解能が約5倍向上しました。


3. 動作確認

実際に動かした画面がこれです。電圧と温度を表示でき、温度は約0.11[℃]ずつ変化しています。
05_温度センサーRef1V1.png


これで温度センサーは完成です。次回もアナログ入力機能を使った何かを作ろうと思います。


スケッチ

作成したスケッチを以下にアップロードしています。
本当は拡張子が「.ino」ですが、「.txt」に書き換えています。


Arduinoで計る,測る,量る [ 神崎康宏 ]

価格:3,024円
(2015/6/6 10:55時点)







posted by ました at 10:56| Comment(0) | TrackBack(0) | 電子工作の実践 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。