Показания LM35 нестабильны
Мой сын только что закончил проект Love-o-meter в стартовом наборе Arduino. Однако показания датчика температуры LM35 сильно различаются. Ниже приведён пример. В чём может быть проблема?
Sensor Value: 217, Volts: 1.06, degrees C: 105.96
Sensor Value: 587, Volts: 2.87, degrees C: 286.62
Sensor Value: 125, Volts: 0.61, degrees C: 61.04
Sensor Value: 320, Volts: 1.56, degrees C: 156.25
Sensor Value: 445, Volts: 2.17, degrees C: 217.29
Sensor Value: 141, Volts: 0.69, degrees C: 68.85
Sensor Value: 510, Volts: 2.49, degrees C: 249.02
Sensor Value: 247, Volts: 1.21, degrees C: 120.61
Sensor Value: 168, Volts: 0.82, degrees C: 82.03
Sensor Value: 595, Volts: 2.91, degrees C: 290.53
Sensor Value: 125, Volts: 0.61, degrees C: 61.04
Sensor Value: 206, Volts: 1.01, degrees C: 100.59
Sensor Value: 606, Volts: 2.96, degrees C: 295.90
Sensor Value: 125, Volts: 0.61, degrees C: 61.04
Sensor Value: 290, Volts: 1.42, degrees C: 141.60
Sensor Value: 487, Volts: 2.38, degrees C: 237.79
Вот код:
const int sensorPin = A0;
const float baselineTemp = 25.0;
void setup(){
Serial.begin(9600); // открыть последовательный порт
for(int pinNumber = 2; pinNumber<5; pinNumber++){
pinMode(pinNumber,OUTPUT);
digitalWrite(pinNumber, LOW);
}
}
void loop(){
int sensorVal = analogRead(sensorPin);
Serial.print("Sensor Value: ");
Serial.print(sensorVal);
// преобразовать показания АЦП в напряжение
float voltage = (sensorVal/1024.0) * 5.0;
Serial.print(", Volts: ");
Serial.print(voltage);
Serial.print(", degrees C: ");
// преобразовать напряжение в температуру в градусах
float temperature = (voltage) * 100;
Serial.println(temperature);
if(temperature < baselineTemp){
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
}else if(temperature >= baselineTemp+2 &&
temperature < baselineTemp+4){
digitalWrite(1, HIGH);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
}else if(temperature >= baselineTemp+4 &&
temperature < baselineTemp+6){
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
}else if(temperature >= baselineTemp+6){
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
}
delay(1);
}
GND подключается к самому левому разъему LM35, A0 — к среднему, а питание — к самому правому разъему.
1 ответ
Я осмотрелся и заметил это:
https://electronics.stackexchange.com/questions/117970/почему-мой-аналоговый-температурный-датчик-сигнала-настолько-нестабилен
Вкратце, проблема может заключаться в недостаточной стабильности напряжения 5 В на Arduino, поэтому его необходимо отключить. Похоже, на этот раз питание от батареек было бы лучшей идеей.
Я также видел сообщения о том, что между землей LM35 и землей должен быть резистор сопротивлением 500 Ом. Кажется, в техническом описании указано 499 Ом.
И в качестве последнего средства я видел, что «регистр направления данных» влияет на аналоговые выводы. Если он настроен на цифровой выход, это может привести к нестабильным показаниям АЦП. По сути, это означало, что нужно установить аналоговые выводы в режим pinMode (A0, выход). Но я действительно не думаю, что это сработает
- Сопряжение LM35 и MQ2 с Arduino
- Объединение кода для нескольких датчиков в одной программе
- Какова работа pulseIn?
- Сколько датчиков может поддерживать один модуль Arduino?
- Как использовать триггерный контакт ультразвукового датчика и зачем он нужен?
- Какой тип разъема использует система GROVE?
- Как получить данные о весе с датчиков стеклянных электронных весов для ванной?
- DS18B20 дает высокие показания. Как заставить его вернуть правильную температуру?
Может быть, вы неправильно набрали код? Неправильно подключили? Нам нужна дополнительная информация., @Nick Gammon
Либо человек не может определиться, влюблён он или нет, либо проблема с питанием (может, с батарейкой?), либо проводка неисправна, либо вы слишком быстро считываете показания, либо заземление плохое. Можно ли опубликовать код и фотографию вашей установки?, @Code Gorilla
Ссылка на этот проект может помочь, или скопируйте и вставьте код., @Nick Gammon
Пункт 1 - Не используйте D0 и D1 (первые два), потому что они являются портами Rx и Tx для последовательной линии, в лучшем случае она не будет работать., @Code Gorilla
Я переместил его с D3 на D5, но показания датчиков остались прежними, т.е. сильно различаются., @Kaveenga Wijayasekara
Если посмотреть на http://www.ti.com/lit/ds/symlink/lm35.pdf (страница 3, корпус LP) и на то, как расположен датчик на рисунке, то схема расположения выводов следующая: 5 В, сигнал, земля, но вы поменяли местами 5 В и землю? (в этом случае обратной полярности вы, вероятно, уже сожгли свой датчик.), @Maximilian Gerhardt