0

Arduino ボードのピン A0 から A7 を備えたLM35温度センサーを使用しています。問題は、Arduino ソフトウェアのシリアル ウィンドウで安定した正確な値を取得できないことです。以下は私が使用しているコードです:

int pin = 0; // analog pin
int tempc = 0, tempf = 0; // Temperature variables
int samples[8]; // Variables to make a better precision
int maxi = -100, mini = 100; // To start max/min temperature
int i;

void setup()
{
    Serial.begin(9600); // Start serial communication
}

void loop()
{
    for(i = 0; i <= 7; i++) { // Gets 8 samples of temperature
        samples[i] = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;
        tempc = tempc + samples[i];
        delay(1000);
    }

    tempc = tempc/8.0; // Better precision
    tempf = (tempc * 9)/ 5 + 32; // Converts to fahrenheit

    if (tempc > maxi) {
        maxi = tempc;
    } // Set max temperature

    if (tempc < mini) {
        mini = tempc;
    } // Set min temperature

    Serial.print(tempc,DEC);
    Serial.print(" Celsius, ");

    Serial.print(tempf,DEC);
    Serial.print(" fahrenheit -> ");

    Serial.print(maxi,DEC);
    Serial.print(" Max, ");
    Serial.print(mini,DEC);
    Serial.println(" Min");

    tempc = 0;

    delay(1000); // Delay before loop
}
4

2 に答える 2

1

問題が何であるかを知ることは良いことですが、考慮すべき点がいくつかあります。

  • いくつかのサンプルを平均しています。これは良いステップです。
  • ループ自体ではなく、後で電圧から温度への変換を行うことで、平均化を少し改善できます。ループでは、読み取り値をある値に追加し、analogReadそれを温度に変換してから印刷します。これにより、潜在的な浮動小数点の丸めエラーを回避できます。
  • そうしない場合は、少なくともサンプルをfloatsとして保存します
  • 特にバッテリーで動作している場合は、電圧が安定していることを確認してください。Arduino の電源ピンとグランド ピンの間に大きなバイパス コンデンサを配置します。
  • LM35 がどのように接続されているかは示されていません。それが問題の一部である可能性があります。また、私の記憶が正しければ、容量性負荷を駆動する能力は非常に限られています。LM35 へのリードが長い場合、配線自体には本質的にある程度の静電容量があります。LM35データシートを見て、LM35 とマイクロコントローラ間の接続をより堅牢にする方法を確認してください。
  • より技術的なことを知りたい場合は、AVR ADC の精度を上げる方法に関するこのアプリケーション ノートを参照してください。ただし、使用するArduinoによっては、これが当てはまらない場合があります。

ただし、より大きな問題は、回路の固有の精度である可能性があります。25 度で、LM35 は 0.25 V を出力し、ADC では 51 の読み取り値として表示されます。温度が +1 度変化するたびに、ADC から +2 の読み取り値が得られるため、ADC は 1/2 度の精度です。 . LM35 は室温で 1/2 度の精度であるため、現在は +1/-1 ℃ の精度であり、これがジッターの原因である可能性があります。100℃未満の温度を測定するだけの場合は、ADC に 3.3 V リファレンスを使用できます (使用する Arduino によって異なります)。これにより、精度が向上します。

ただし、常に多少のジッターが発生します。

于 2013-03-21T17:57:25.820 に答える