// Термометр 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 мВ на градус
Аналоговый датчик без библиотек и калибровки: напряжение на выходе в милливольтах, делённое на десять, и есть температура. Скетч усредняет шестнадцать замеров.
Что на схеме
Плата ESP32 DevKit v1, к ней подключены:
- Термометр LM35 —
lm1, температура 25 °C
Задействованы выводы платы: VIN, GND, D34. Всего соединений на схеме: 3.
Библиотеки
Дополнительных библиотек не нужно: всё делается ядром Arduino для ESP32, которое уже стоит в сборочном окружении.
Как это устроено в коде
Основное, чем пользуется скетч:
Serial.begin()— открывает монитор порта на заданной скоростиanalogRead()— измеряет напряжение на выводе через АЦПdelay()— пауза, на время которой ядро занято ожиданиемSerial.printf()— печатает в монитор порта с форматированием
В скетче 30 строк. Сам скетч открыт на соседней вкладке — его можно менять и запускать заново.
Что попробовать изменить
- Замените
delay()на счёт поmillis()— иloop()освободится для всего остального, что должно происходить одновременно. - Покрутите движок детали прямо во время работы — значение на входе меняется на лету, останавливать эмуляцию не нужно.
- Добавьте свои
Serial.println()в интересных местах — монитор порта здесь и есть отладчик. - Перенесите деталь на другой вывод — на схеме и в коде — и убедитесь, что пример работает так же.
Смотрите также
- Подключение термометра LM35 — Аналоговый термометр
- DHT22: температура и влажность — Однопроводный протокол с собственным таймингом. Библиотека читает датчик не чаще раза в две секунды — быстрее он не отве…
- DS18B20: цифровой термометр на шине 1-Wire — Один провод данных и подтяжка 4,7 кОм: библиотеки OneWire и DallasTemperature находят датчик по адресу и читают температ…
- Сигнал о перегреве — Порог с гистерезисом поверх датчика: светодиод и зуммер срабатывают, когда температура выходит за границу.
- Минимум и максимум за сеанс — Накопление статистики без массива: достаточно двух переменных и первого замера.
- Ультразвук: измерение расстояния — Импульс 10 мкс на TRIG, длительность ответа на ECHO. Расстояние — это время полёта, делённое пополам.
- Парктроник — Чем ближе препятствие, тем чаще писк. Расстояние превращается в период — приём, который работает и без дисплея.
схема проекта в виде текста — сюда же вставляется схема из Wokwi
Справка ↗
Схема
Сборка ещё не запускалась.
Печатайте в Serial числа — они станут графиком.
Serial.println(t); — один ряд,
Serial.printf("t:%.1f h:%.1f\n", t, h); — два с подписями.
Формат тот же, что понимает плоттер Arduino IDE.