2012年3月24日土曜日

温度センサーを使ってみる

赤外線リモコンの受信し解析するスケッチを作っていますが、もう少し時間がかかりそうなので、今回は、温度センサーを使った実験の記事を書くことにしました。


今回使用する温度センサーは、LM35DZです。トランジスタのような形をしていますが、摂氏(℃)に比例した電圧を出力することができるICです。(参考:実物の写真)

 まずは、回路図から。




 接続としては、ものすごくシンプルです。Arduinoの+5Vラインを温度センサーLM35DZの左側へ配線、温度センサーの右側には、GNDラインを接続します。
検出した温度に応じた電圧を取得するために温度センサーの真ん中のピンをArduinoのAnalog0番ピンへ接続します。

赤ラインが+5V、黒いラインがGNDです。







この温度センサーLM35DZの仕様 は、0~100℃が計測可能で、温度係数:10.0mV/℃です。
つまり、0 ℃の時には0V、30℃の時には30×10mV = 300mVが出力されます。
0℃から100℃が計測できる温度の範囲なので、温度センサーが出力する電圧の範囲は、0V~1V(0mV~1000mV)となります。

ArduinoのAnalog入力は、5Vを最大値、0Vを最小値として、1024段階(0~1023)で取得できます。
温度センサーは、0V~1Vの範囲の電圧を出力するので、Arduinoは0~203(1024段階÷5V)の 値として入力を受けることになります。

Arduinoの基準電圧を+5Vとして、温度とArduinoの入力値の関係を式にすると、

公式 温度(℃)=(5×Arduino入力値)÷1024×1000÷10 となります。

たとえば、Arduino入力値が60の時、(5×60)÷1024×1000÷10=29.2(℃)となります。

スケッチは、つぎのようになります。
入力値に応じて、シリアルモニターへ表示することにします。

int Analog_in = 0; // アナログ入力ピン番号
int A_val; // アナログ入力値(0~203)
float tempC   = 0; // 摂氏値( ℃ )

void setup() {
  // シリアル通信速度
  Serial.begin(9600);
}

void loop() {
  A_val = analogRead( Analog_in );
  tempC = ((5 * A_val) / 1024) * 100;

  Serial.println( tempC );
  delay(1000);
}

スケッチの説明です。

Serial.begin(9600); シリアルモニターを使用するときに決まり文句です。
A_val = analogRead( Analog_in ); アナログ入力ピンから値を取得し、A_valへ代入しています。
tempC = ((5 * A_val) / 1024) * 100; 取得したA_valから温度(Temperature)を求める式です。

公式 温度(℃)=(5×Arduino入力値)÷1024×1000÷10

1000倍したあと、10で割っているので、スケッチでは、1度で済ますために、100倍しています。

こういった実験が1時間足らずで可能になるのはArduinoの使いやすさのおかげです。
やっぱり、Arduino最高!!

0 件のコメント:

コメントを投稿