2013-03-21 2 views
0

Мы используем датчик температуры LM35 с платой A0-A7 платы Arduino на самом деле. Проблема в том, что я не могу получить стабильное и точное значение в серийном окне в программном обеспечении Arduino. Ниже приведен код, я использую:Использование датчика температуры на борту 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 
} 
+2

Итак - что вы получаете? (В чем проблема) –

+0

На самом деле сэр я не получил точный темп. значение на серийном мониторе .... это было похоже на то, что 450C и все больше и больше ..........., и мы используем arduino Gboard. на самом деле сэр, я не получил должным образом, может ли дать мне коррекцию в моем коде .... – jalpan

+0

Я думаю, что это видео youtube имеет все типы обнаружения и преобразования базовой температуры с использованием LM35 Sensor и Arduino. Код этого видео достаточно хорош для обнаружения данных в реальном времени. Это видео протестировано с погодой google https://www.youtube.com/watch?v=Qbe9yAIK-Ao – 2016-04-12 08:38:00

ответ

1

Было бы хорошо, чтобы знать, какие вопросы, но здесь есть некоторые вещи, чтобы рассмотреть следующие вопросы:

  • Вы в среднем несколько образцов. Это хороший шаг.
  • Вы можете сделать усреднение маленьким лучше, сделав преобразование напряжения-температуры впоследствии, а не в самом цикле. В цикле просто добавьте значение analogRead к некоторому значению, а затем преобразуйте его в температуру перед печатью. Таким образом, вы избегаете некоторых ошибок округления с плавающей запятой.
  • Если вы не сделать это, по крайней мере, образцы хранят в float s
  • Убедитесь, что напряжение устойчивы, особенно если вы работаете на батарее. Имейте хороший большой байпасный конденсатор между силовым и заземляющим штырями Arduino.
  • Вы не показываете, как подключается LM35. Это может быть частью проблемы. Кроме того, если я правильно помню, он имеет очень ограниченную способность управлять емкостными нагрузками. Если ваши выводы на LM35 длинны, то сама проводка будет иметь некоторую емкость. Взгляните на LM35 datasheet, чтобы узнать, как соединение между LM35 и микроконтроллером можно сделать более надежным.
  • Если вы хотите получить более техническое, взгляните на this appnote о том, как повысить точность AVR ADC. Хотя в зависимости от того, какой Arduino вы используете, это может быть неприменимо.

Однако более серьезной проблемой может быть неотъемлемая точность вашей схемы. При 25 градусах выходы LM35 .25   V, который отображается как показание 51 на вашем АЦП, и при каждом изменении температуры на +1 градус вы получаете +2 показание от АЦП, поэтому АЦП точнее до 1/2 а степень. LM35 с точностью до 1/2 градуса при комнатной температуре, поэтому теперь вы достигаете + 1/-1 град. C, и это может быть причиной вашего дрожания. Если вы просто измеряете температуру ниже 100 градусов C, вы можете использовать ссылку 3.3   V для вашего АЦП (опять же в зависимости от того, какой Arduino вы используете), что даст вам лучшую точность.

Однако у вас всегда будет джиттер.

Смежные вопросы