アナログ温度計を使う(その1)


Arduinoでアナログ温度計を使った時に、色々試行錯誤したので紹介します。
使用する温度計はアナログ温度計としては一般的なLM35DZで す

多くのWEBページでは以下の回路が紹介されています。



これを以下のスケッチで実行します。
/*
 * Test Program for LM35DZ
 */
#define A_inPin A0  // アナログ入力ピン番号

float A_val;        // アナログ入力値
float tempC   = 0;  // 摂氏値( ℃ )

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  A_val = analogRead( A_inPin );
  Serial.print(A_val);
  Serial.print("-");
  tempC = ((5.0 * A_val) / 1024.0) * 100.0;
  Serial.print( tempC );
  Serial.println(" ");
  delay(1000);
}




実行するとこのように結構、読み込むアナログ値が変動します。
ちなみに読み込んだアナログ値を100回毎にサンプリングし、最大値、最小値をとると以下のようになります
/*
 * Test Program for LM35DZ
 */
int   A_inPin = A0;  // アナログ入力ピン番号
float A_val;        // アナログ入力値(0〜203)
float tempC   = 0;  // 摂氏値( ℃ )

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  int imax=0;
  int imin=100;
  for(int i=0;i<100;i++) {
    A_val = analogRead( A_inPin );
    if (A_val > imax) imax=A_val;
    if (A_val < imin) imin=A_val;
    delay(10);
  }
  Serial.print("imin=");
  Serial.print(imin);
  tempC = ((5.0 * imin) / 1024.0) * 100.0;
  Serial.print(" tempC=");
  Serial.print(tempC);
  Serial.print(" imax=");
  Serial.print( imax);
  tempC = ((5.0 * imax) / 1024.0) * 100.0;
  Serial.print(" tempC=");
  Serial.println(tempC);
  delay(1000);
}



最小値が54(26.37℃)、最大値が60(29.30℃)となり、ちょっと無視できないばらつきとなります。
そこで、LM35DZのOUTとGNDの間に、100マイクロ程度のバイパスコンデンサーを挟んでみます。





少しましになったかな...程度です。
そこで、次回はこのばらつきを解消する方法を紹介します。

続く....