ESP32 DevKit v1 · pinport
готово
⋮

Тепловой насос вода–вода на ESP32: 11 датчиков DS18B20, ЭРВ и панель Settings

Контроллер теплового насоса вода–вода на базе наружного блока кондиционера: 11 термометров DS18B20 на трёх линиях 1-Wire, два датчика давления фреона, ЭРВ на шаговом двигателе с ПИ-регулированием перегрева, четыре реле (компрессор, насосы, авария), защиты и веб-панель на GyverLibs/Settings. Таблицы для семи фреонов.

Что на схеме

Плата ESP32 DevKit v1, к ней подключены:

  • DS18B20 (термометр 1-Wire) — tf1, температура 8 °C
  • DS18B20 (термометр 1-Wire) — tf2, температура 80 °C
  • DS18B20 (термометр 1-Wire) — tf3, температура 30 °C
  • DS18B20 (термометр 1-Wire) — tf4, температура 3 °C
  • DS18B20 (термометр 1-Wire) — tc1, температура 12 °C
  • DS18B20 (термометр 1-Wire) — tc2, температура 7 °C
  • DS18B20 (термометр 1-Wire) — tc3, температура 9 °C
  • DS18B20 (термометр 1-Wire) — th1, температура 30 °C
  • DS18B20 (термометр 1-Wire) — th2, температура 34 °C
  • DS18B20 (термометр 1-Wire) — th3, температура 22 °C
  • DS18B20 (термометр 1-Wire) — th4, температура 45 °C
  • Шаговый двигатель — eev
  • Потенциометр — ph
  • Потенциометр — pl
  • Переключатель — fc
  • Переключатель — fh
  • Кнопка — btn
  • Реле — k1
  • Реле — k2
  • Реле — k3
  • Реле — k4
  • Ввод 230 В — in
  • Автоматический выключатель — qf1
  • Автоматический выключатель — qf2
  • Контактор — km1
  • Двигатель однофазный — mc
  • Двигатель однофазный — mw
  • Двигатель однофазный — mf
  • Светильник 230 В — la1, тип: импульсный

Задействованы выводы платы: 3V3, GND, D4, D5, D23, D18, D19, D21, D22, D34, D35, D14, D27, D13, D25, D26, D32, D33. Всего соединений на схеме: 78.

Схема и что в ней написано

Установка вода–вода на базе наружного блока кондиционера «старт–стоп» (без инвертора): вода из скважины кипятит фреон в испарителе, компрессор его сжимает, в конденсаторе фреон отдаёт тепло воде тёплого пола, а электронный расширительный вентиль (ЭРВ) на шаговом двигателе дросселирует жидкость обратно к испарителю. Контроллер сам решает, когда пускать и останавливать, и следит за тем, чтобы установка не убила себя.

Датчики температуры: три линии, до пяти датчиков на одной

DS18B20 отвечают по одному проводу, и на один вывод платы их вешают параллельно: у каждого свой 64-битный адрес. Здесь три линии:

  • D4 — фреон: всасывание, нагнетание, жидкость после конденсатора, вход испарителя после ЭРВ;
  • D5 — скважина: вход и выход испарителя, улица;
  • D23 — тёплый пол: обратка и подача, помещение, корпус компрессора.

На каждую линию нужен один резистор 4,7 кОм между DATA и 3V3 (в симуляторе он есть всегда). Датчик, приложенный к трубе, крепят хомутом с термопастой и закрывают теплоизоляцией — иначе он меряет воздух в подвале.

Как датчики привязываются к ролям. Скетч не полагается на порядок опроса: у каждой роли есть поле с адресом (панель → «Адреса датчиков»). На новой сборке впишите адреса по одному: подержите датчик в руке и посмотрите, какой адрес в списке линии «потеплел». В симуляторе адреса уже вписаны — они заданы свойством «Адрес» у деталей на схеме.

Давление, кипение и перегрев

Датчики давления 0,5–4,5 В на 5 В питания подключают к входам АЦП через делитель (10 кОм и 20 кОм) — АЦП ESP32 не переносит 5 В. На схеме вместо них потенциометры на 3,3 В; коэффициент делителя, шкалы (17,5 бар на низкой стороне, 45 на высокой) и порог обрыва (меньше 0,3 В) настраиваются в панели.

Давление — это температура насыщения фреона: таблица «давление → температура» для семи хладагентов (R22, R410A, R134a, R407C, R404A, R290, R600a) взята из прежнего проекта, между узлами интерполяция. Из неё получаются:

  • перегрев = температура на всасывании − температура кипения по низкому давлению. Цель — 4–7 К: меньше — в компрессор пойдёт жидкость, больше — испаритель работает не на полную;
  • переохлаждение = температура конденсации по высокому давлению − температура жидкости.

Для смесей (R407C, R404A) в таблице средняя температура между кипением и конденсацией: у них есть температурный глайд в 4–7 К, и перегрев по ним надо считать с оглядкой на него.

ЭРВ

Шаговый двигатель ведёт AccelStepper. На старте плата не знает положения вентиля, поэтому прогоняет его в «закрыто» с запасом в 20 шагов на упор (в журнале — «ЭРВ закрыт, положение 0»). Перед пуском компрессора вентиль открывается на стартовое положение (220 шагов), через tEev секунд после пуска включается скоростной ПИ-регулятор: каждые 5 секунд шаг = Kp·(ошибка − прошлая) + Ki·ошибка·5 с, ошибка = перегрев − цель. Границы хода (66–480 шагов), Kp, Ki и цель — в панели.

Подключение железа. На схеме двигатель ЭРВ подключён к плате напрямую — для симулятора этого хватает. Для настоящего ЭРВ нужен драйвер: ULN2003/ULN2803 для униполярного (5 проводов, 12 В), L298N или DRV8833 для биполярного. Порядок обмоток и число шагов на полный ход — из паспорта ЭРВ.

Пуск, работа, остановка

Плата держит пять состояний: стоп → запуск насосов → работа → выбег насосов → авария. Порядок пуска: включается насос скважины, через 2 секунды — насос тёплого пола, ждём проток по обоим контурам (не дождались — авария), выдерживаем tPumpBefore секунд, ЭРВ уже на стартовом положении — включаем компрессор. Стоп идёт обратным порядком: сначала компрессор (не раньше, чем через tMinRun с после пуска), ЭРВ закрывается, насосы работают ещё tPumpAfter секунд, чтобы унести тепло. Между двумя пусками компрессора выдерживается пауза tMinOff.

Как принимается решение «греть»: «всегда» (ручной режим), по температуре помещения, подачи или обратки тёплого пола, с гистерезисом.

Защиты

  • низкое давление — ниже порога дольше 5 с (не проверяется первые tGrace секунд после пуска);
  • высокое давление — выше порога дольше 1 с;
  • перегрев нагнетания — температура нагнетания или корпуса выше предела дольше 2 с;
  • промерзание испарителя — вода на выходе из испарителя холоднее порога дольше 5 с;
  • нет протока скважины или тёплого пола — при пуске и во время работы;
  • пропал датчик температуры (всасывание, нагнетание, жидкость, выход скважины) или датчик давления.

Часть аварий устраняется сама: через tRetry секунд плата пробует снова, до трёх попыток; сбросом счётчика служат 10 минут работы без аварий. Нагнетание, датчики давления и температуры — остаются до ручного сброса (кнопка на панели, долгое нажатие кнопки на плате, команда reset в порт). Реле 4 включено, пока идёт авария: к нему подключают лампу, сирену или вход котла.

Контроллер — не единственная защита. Для настоящего компрессора поставьте реле высокого и низкого давления, включённые последовательно в цепь катушки контактора: они отключат компрессор, даже если плата зависла или пропало питание датчика.

Панель Settings

«Сейчас» — состояние, авария, светодиоды реле и протоки. «Управление» — включение, режим, цель, гистерезис, фреон, сброс аварии и аварийный стоп. «Температуры» — все 11 датчиков. «Фреон и ЭРВ» — давления, температуры кипения и конденсации, перегрев, переохлаждение, положение вентиля. Дальше — защиты, задержки, ЭРВ, датчики давления, адреса датчиков и журнал. Настройки хранятся в NVS и переживают выключение.

Что заменить при сборке

  • поменять SIM_DEMO на 0 — вернутся реальные задержки (пауза 5 минут, выбег 1 минуту);
  • поставить драйвер ЭРВ и датчики давления с делителем;
  • реле — модуль AC-DC-ESP32-Relay-x4 с выводами 25, 26, 32, 33; если реле включаются низким уровнем, поменять RELAY_ON;
  • контактор компрессора и его защиту по мощности подобрать по паспорту блока; в симуляторе это контактор на катушку 230 В и автомат C16.

Что не так в симуляторе

Температуры и давления не связаны друг с другом: тепло от компрессора к воде модель не переносит. Значения задают руками — свойствами деталей и ручками потенциометров. Поэтому регулятор ЭРВ виден в работе (поднимите температуру всасывания — вентиль откроется), а результат его работы на температуру не влияет.

Библиотеки

Пример собирается с библиотеками:

  • WiFi
  • Preferences
  • LittleFS
  • OneWire
  • DallasTemperature
  • AccelStepper
  • Settings

Они уже установлены на сервере сборки — отмечать их в проекте вручную не нужно, список приезжает вместе с примером.

Как это устроено в коде

Основное, чем пользуется скетч:

  • Preferences — хранение настроек во flash, переживает перезапуск
  • Stepper — шаги двигателя по фазам
  • millis() — миллисекунды с запуска: на них строят работу без остановки
  • Serial.println() — печатает строку в монитор порта
  • digitalWrite() — выставляет на выводе высокий или низкий уровень
  • Serial.printf() — печатает в монитор порта с форматированием
  • analogRead() — измеряет напряжение на выводе через АЦП
  • constrain() — зажимает значение в границах
  • digitalRead() — читает уровень на выводе
  • WiFi.begin() — подключается к точке доступа виртуального Wi-Fi
  • delay() — пауза, на время которой ядро занято ожиданием
  • WiFi.softAP() — поднимает собственную точку доступа

В скетче 884 строки; свои функции: satTemp(), setDefaults(), saveSettings(), loadSettings(), note(), setRelay(), addrText(), parseAddr(); подключено заголовков: 7. Сам скетч открыт на соседней вкладке — его можно менять и запускать заново.

Что попробовать изменить

  1. Нажмите «Запустить». Плата найдёт датчики на трёх линиях (4, 3 и 4 — в мониторе порта), найдёт ноль ЭРВ и поднимет страницу. Сценарий сам переведёт ползунки протока fc и fh вправо — «течёт»; без сценария сделайте это мышью, иначе установка не запустится.
  2. Нажмите кнопку на схеме: установка включится. Насос скважины, через 2 секунды насос тёплого пола, затем компрессор — на схеме сработают реле и контактор, в панели загорятся светодиоды.
  3. Откройте «Веб-интерфейс»: температуры всех одиннадцати датчиков, давления, кипение и конденсация по таблице R410A, перегрев и положение ЭРВ. Смените фреон на R22 — температуры кипения пересчитаются.
  4. Нажмите на деталь tf1 (всасывание) и поднимите температуру: перегрев вырастет, и через несколько секунд ЭРВ откроется — вращение видно на схеме и в журнале.
  5. Переведите ползунок fc (проток скважины) влево: через 3 секунды компрессор остановится, реле аварии замкнётся, в панели — «нет протока скважины». Верните ползунок и долгим нажатием кнопки сбросьте аварию.
  6. Крутите ручку ph выше 80 % — сработает защита по высокому давлению; ph и pl ниже 5 % — обрыв датчика.

Смотрите также

← Все примеры галереи

Схема
Проект из галереи — запускать можно, менять нельзя.

      
Сборка ещё не запускалась.

    Печатайте в Serial числа — они станут графиком. Serial.println(t); — один ряд, Serial.printf("t:%.1f h:%.1f\n", t, h); — два с подписями. Формат тот же, что понимает плоттер Arduino IDE.