LM35DZを使う

温度センサーであるLM35DZをArduinoに接続する。

IMG-0230IMG-0231IMG-0232

赤ラインを5Vに,黒ラインをGNDに,白ラインをA0に接続する。

プログラム一式

注:現在LM35DZは入手性が悪くなっています。代替品(TMP36GT9Z)を使用する際は、「電圧を温度に変換(TMP36GT9Z)」行のコメントアウトを外して利用してください。


LM35DZ1
単純に温度を表示する。シリアルモニタ,シリアルプロッタで表示してみよう。

double vol,temp,gain;

void setup() {
  Serial.begin(9600);             // シリアル通信の初期化
  analogReference(INTERNAL);      //参照電圧を1.1vVに設定し感度拡大
  gain=(double)1.1/(double)1024;  //1.1Vリファレンス用のゲイン;
}

void loop() {
  vol = analogRead(0)*gain;
  temp=vol*100;        //電圧を温度に変換(LM35DZ)
  //temp=vol*100-50;     //電圧を温度に変換(TMP36GT9Z)
  Serial.print(vol);   //電圧表示
  Serial.print(",");
  Serial.print(temp);  //温度表示
  Serial.println();
  delay(100);
}

LM35DZ2
1000サンプルの平均温度を表示する。

double vol,temp,gain;
double sum,average;

void setup() {
  Serial.begin(9600);        // シリアル通信の初期化
  analogReference(INTERNAL);    //参照電圧を1.1vVに設定し感度拡大
  gain=(double)1.1/(double)1024;  //1.1Vリファレンス用のゲイン;
}

void loop() {
  sum=0;
  for(int i=0;i<1000;i++)
  {
      vol = analogRead(0)*gain;
      sum=sum+vol;
  }
  average=sum/(double)1000;  //1000回計測し平均を計算
  temp=average*100;        //電圧を温度に変換(LM35DZ)
  //temp=average*100-50;     //電圧を温度に変換(TMP36GT9Z)
  Serial.print(average);  //電圧表示
  Serial.print(",");
  Serial.print(temp);  //温度表示
  Serial.println();
  delay(50);
}

LM35DZ3
1秒間隔でできるだけ多くサンプルし平均温度を表示する。

double vol,temp,gain;
double sum,average;
long t,t0,cnt;

void setup() {
  Serial.begin(9600);             // シリアル通信の初期化
  analogReference(INTERNAL);      //参照電圧を1.1vVに設定し感度拡大
  gain=(double)1.1/(double)1024;  //1.1Vリファレンス用のゲイン;
  cnt=sum=0;
}

void loop() {
  t0=t;
  t=millis(); //現在時刻をms単位で取得
  vol = analogRead(0)*gain;
  sum=sum+vol;
  cnt++;
  if(t0/1000 !=t/1000){       //1秒(1000ms)毎に平均算出
    average=sum/(double)cnt;  //平均を計算
    temp=average*100;         //電圧を温度に変換(LM35DZ)
    //temp=average*100-50;      //電圧を温度に変換(TMP36GT9Z)
    Serial.print(cnt);        //サンプル数表示
    Serial.print(",");
    Serial.print(average);    //電圧表示
    Serial.print(",");
    Serial.print(temp);       //温度表示
    //Serial.print(",35,25");   //25度と35度を表示
    Serial.println();
    sum=0;cnt=0;
  }
}

コメントを残す