LM35 выдаёт на выходе 10 мВ на каждый градус: при 25 °C — 0,25 В, при 100 °C — 1,0 В. Достаточно измерить напряжение и умножить на 100: температура = вольты × 100.
Датчик питается от 4 до 30 В, поэтому от 3,3 В он не работает. В базовой схеме он измеряет температуру от +2 °C до +150 °C: для отрицательных значений нужен отрицательный источник питания.
// Термометр LM35: на выходе 10 мВ на каждый градус Цельсия.
// 25 °C — 0,25 В, 100 °C — 1 В.
//
// Питание датчика — от 4 В, поэтому он стоит на VIN (5 В), а выход при
// этом остаётся в пределах 1,5 В и безопасен для входа ESP32.
//
// АЦП ESP32 шумит, поэтому берём среднее из шестнадцати замеров. На
// самых малых напряжениях (ниже 0,1 В, то есть ниже 10 °C) АЦП ESP32 ещё
// и нелинеен — для такого диапазона нужна калибровка.
const int LM35 = 34;
const float VREF = 3.3; // напряжение, которое АЦП считает полной шкалой
const int ADC_FULL = 4095;
void setup() {
Serial.begin(115200);
}
void loop() {
long sum = 0;
for (int i = 0; i < 16; i++) {
sum += analogRead(LM35);
delay(2);
}
float volts = (sum / 16.0) * VREF / ADC_FULL;
float celsius = volts * 100.0; // 10 мВ на градус
Serial.printf("%.3f В = %.1f °C\n", volts, celsius);
delay(1000);
}
// Термометр LM35: 10 мВ на каждый градус Цельсия.
//
// Питание от 5 В, выход - на A0. При опорном напряжении 5 В один
// отсчёт АЦП - это около 0,5 °C. Точнее можно, переключив опорное
// напряжение на встроенные 1,1 В (analogReference(INTERNAL)): шаг
// станет около 0,1 °C, но выше 110 °C шкала закончится.
const int LM35 = A0;
const float VREF = 5.0;
void setup() {
Serial.begin(9600);
}
void loop() {
long sum = 0;
for (int i = 0; i < 8; i++) {
sum += analogRead(LM35);
delay(2);
}
float volts = (sum / 8.0) * VREF / 1023.0;
float celsius = volts * 100.0;
Serial.print(volts, 3);
Serial.print(" В = ");
Serial.print(celsius, 1);
Serial.println(" °C");
delay(1000);
}
В железе
При напряжении ниже 4 В показания LM35 неточны. Выход при этом остаётся в пределах 1,5 В, поэтому на вход ESP32 можно подавать напрямую даже при питании от 5 В. Длинный кабель к датчику может возбуждать выход — в даташите приведена цепочка из резистора и конденсатора для этого случая. Горячий корпус сразу после включения — признак обратной полярности.
Частые ошибки
Питание от 3,3 В: на выходе непредсказуемые значения. Датчику нужны 5 В.
Перепутаны выводы TO-92: при обратной полярности датчик нагревается и выходит из строя.
Без усреднения показания «дрожат» на десятые доли градуса и больше: АЦП шумит, а на один градус приходится всего 10 мВ.
Попытка измерить температуру ниже нуля в базовой схеме: выход LM35 не уходит в отрицательную область.