Температура LM35 снижается при нагревании

У меня есть вопрос относительно LM35. Предполагается, что датчик имеет значения, которые должны быть прямо пропорциональны. Но вместо того, чтобы температура повышалась, значения датчиков уменьшались.

Это моя настройка ниже. Кажется, это стандартная настройка на разных страницах учебника LM35.

LM35 Breadboard configuration

const int sensor= A0; // Назначение аналогового вывода A0 переменной 'sensor'

void setup() {
  pinMode(sensor,INPUT); // Настройка контакта датчика в качестве входного сигнала
  Serial.begin(9600);
}

void loop() {

  float reading=analogRead(sensor); //Считывание значения с датчика
  float vout= (reading*5000)/1024;
  float temp= vout/10;
  
  Serial.print("in DegreeC= ");
  Serial.print(temp);
  Serial.println("");
  
  delay(500); // Задержка 1 секунда для удобства просмотра 
  
}

Таковы результаты. От комнатной температуры я применил тепло с помощью зажигалки, и оно стало ниже, а не выше.

Heat up results

Я где-то читал, что это как-то связано с питанием, подаваемым Arduino. Однако, когда я использовал источник питания 12 В для питания Arduino, показания стали очень неустойчивыми и нестабильными.

ОБНОВЛЕНИЕ:

Я наконец-то вернулся из города (это заняло много времени из-за карантинных ограничений) и привез 3 LM35 из другого магазина. Все 3 новых LM35 работали по назначению и не снижали показания температуры при воздействии тепла (при той же конфигурации). Я мог бы исключить эти возможности относительно причины, по которой LM35 не работал.

1. Производственный дефект - все три LM35 работали не так, как предполагалось. У всех них температура понижалась под воздействием тепла. В производственном процессе может быть дефект, потому что он работает не так, как рекламируется. (Склоняясь к этому)

2. Статическое электричество - я помню, как получил LM35 в пластиковом пакете, упакованном в магазине. Возможно, на него подействовало статическое электричество и повредило внутреннюю цепь (хотя на всех трех?). LM35s, который я недавно получил, был упакован в эту упаковку для защиты от электростатического разряда, так что это, вероятно, могло способствовать этому? Мне нужно больше информации об этом, и я прошу прощения за то, что не смог правильно сформулировать это.

Там могло бы быть и больше, но это самое большее, к чему я мог бы прийти в качестве вывода.

, 👍1

Обсуждение

Не настраивайте аналоговый вывод в качестве цифрового входного вывода. Если вы хотите использовать его в качестве аналогового вывода.вам не нужна никакая настройка. lm35 похож на сложный стабилитрон. Возможно, это поможет подключить резистор (скажем, 10 Ком) от Vout к GND, чтобы стабилизировать выходное напряжение LM35. Всего две догадки., @Peter Paul Kiefer

@PeterPaulKiefer Я добавил 10 Ком, однако показания температуры стали 0 по Цельсию. Сменил резистор на 1 Ком, по-прежнему 0 по Цельсию. Изменен на 100 Ком, по-прежнему 0 по Цельсию. Я также установил свой код и удалил "pinMode", однако результат остался тем же. Температура всегда снижается при воздействии тепла (даже с моими 3 другими запасными LM35, но они из того же магазина). Завтра я пойду и куплю конденсатор, чтобы провести дополнительные испытания датчика., @fireblazer10

Если GND с резистором 10 Ком приводит к нулевому напряжению, то LM35 не выдает никакого напряжения. Он может быть сломан. (Все три сломаны?; возможно, из магазина поддельных запчастей;- ( ). Существует (действительно низкая) вероятность того, что аналоговые порты arduino сломаны. Если у вас есть два простых резистора (> = 1000 Ом), вы можете соединить их последовательно, добавить VCC и GND каждый на конце и подключить середину (где соединены резисторы) к аналоговому порту. Если оба резистора имеют одинаковое значение, это должно привести примерно к 512 +- 20., @Peter Paul Kiefer


1 ответ


1

Вы читаете A5, но на своей диаграмме вы показываете, что он подключен к A0:

Измените свой код на этот, и я верю, что он будет работать:

const int sensor= A0; // Назначение аналогового вывода A0 переменной 'sensor'

void setup() {
  pinMode(sensor,INPUT); // Настройка контакта датчика в качестве входного сигнала
  Serial.begin(9600);
}

void loop() {

  float reading=analogRead(sensor); //Считывание значения с датчика
  float vout= (reading*5000)/1024;
  float temp= vout/10;
  
  Serial.print("in DegreeC= ");
  Serial.print(temp);
  Serial.println("");
  
  delay(500); // Задержка 1 секунда для удобства просмотра 
  
}

Данные, которые вы читаете из A5, неопределенны и просто уменьшаются с увеличением A0.

================================================================================ ОБНОВЛЕНИЕ:

Итак, вы исправили себя и считываете правильный контакт, несмотря на то, что показывает ваша схема. Пожалуйста, объясните это:

float vout= (reading*5000)/1024;
float temp= vout/10;

Я думаю, вы хотите:

float vout = (reading/1024.0) * 5000.0;
float temp = vout/10.0;

Вы небрежно смешиваете математику с плавающей запятой и целочисленные числа.

,

Мне очень жаль, что я забыл изменить код на A0, но результат все тот же. Температура понижается при воздействии тепла: (, @fireblazer10

У вас есть вольтметр? Ваш следующий шаг - определить, что делает напряжение на выводе 2 LM35 при подаче тепла. Если он действительно выйдет из строя, то у вас, вероятно, плохой LM35. Если он работает так, как должен, значит, у вас проблема с вашим Arduino или кодом., @jwh20

Я обновлю информацию, как только завтра выйду на улицу, чтобы купить себе мультиметр. Дело в том, что у меня есть еще 3 запасных LM35, и все они ведут себя одинаково. Однако они из того же магазина, поэтому я думаю, что завтра найду другой LM35 в местном магазине и сравню., @fireblazer10