Использование датчика температуры с Arduino GBoard

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

person jalpan    schedule 21.03.2013    source источник
comment
Итак - что вы получаете? (В чем проблема)   -  person spring    schedule 21.03.2013
comment
на самом деле, сэр, я не получил точную температуру. значение на последовательном мониторе.... было примерно 450C и что-то все больше и больше.........и мы используем arduino Gboard. на самом деле, сэр, я не понял вас должным образом, можете ли вы исправить мой код ....   -  person jalpan    schedule 22.03.2013
comment
Я думаю, что в этом видео на YouTube есть все типы базового определения и преобразования температуры с использованием датчика LM35 и Arduino. Код этого видео достаточно хорош для обнаружения данных в реальном времени. Это видео проверено с помощью Google Weather youtube.com/watch?v=Qbe9yAIK-Ao   -  person    schedule 12.04.2016


Ответы (1)


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

  • Вы усредняете несколько выборок. Это хороший шаг.
  • Вы можете немного улучшить усреднение, выполняя преобразование напряжения в температуру позже, а не в самом контуре. В цикле просто добавьте показание analogRead к некоторому значению, а затем преобразуйте его в температуру перед печатью. Таким образом, вы избежите некоторых потенциальных ошибок округления с плавающей запятой.
  • Если вы не делаете этого, по крайней мере, храните образцы как floats
  • Убедитесь, что ваши напряжения стабильны, особенно если вы работаете от батареи. Установите хороший большой шунтирующий конденсатор между выводами питания и заземления Arduino.
  • Вы не показываете, как подключается LM35. Это может быть частью проблемы. Кроме того, если я правильно помню, у него очень ограниченная способность управлять емкостными нагрузками. Если ваши выводы к LM35 длинные, то сама проводка по своей сути будет иметь некоторую емкость. Взгляните на техническое описание LM35, чтобы увидеть, как связь между LM35 и микроконтроллер можно сделать более надежным.
  • Если вы хотите получить более подробную информацию, ознакомьтесь с этой заметкой о том, как увеличить AVR. Точность АЦП. Хотя в зависимости от того, какой Arduino вы используете, это может быть неприменимо.

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

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

person angelatlarge    schedule 21.03.2013