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

Тепловой насос воздух–вода на ESP32: оттайка, ЭРВ и панель Settings

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

Что на схеме

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

  • DS18B20 (термометр 1-Wire) «Всасывание» — ts, температура 8 °C
  • DS18B20 (термометр 1-Wire) «Нагнетание» — td, температура 80 °C
  • DS18B20 (термометр 1-Wire) «Змеевик» — te, температура 2 °C
  • DS18B20 (термометр 1-Wire) «Обратка» — tr, температура 28 °C
  • DS18B20 (термометр 1-Wire) «Подача» — tp, температура 33 °C
  • DS18B20 (термометр 1-Wire) «Улица» — to, температура 5 °C
  • Шаговый двигатель «ЭРВ» — eev
  • Потенциометр «Давл. высокое» — ph
  • Потенциометр «Давл. низкое» — pl
  • Переключатель «Проток пола» — fl
  • Кнопка «Пуск / сброс» — btn
  • Реле «Компрессор» — k1
  • Реле «Вентилятор» — k2
  • Реле «Насос пола» — k3
  • Реле «4-ход. клапан» — k4
  • Ввод 230 В «Ввод 230 В» — in
  • Автоматический выключатель «Цепи упр.» — qf1
  • Автоматический выключатель «Компрессор» — qf2
  • Контактор «Контактор» — km1
  • Двигатель однофазный «Компрессор» — mc
  • Двигатель однофазный «Вентилятор» — mf
  • Двигатель однофазный «Насос пола» — mw
  • Светильник 230 В «Катушка клапана» — la1

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

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

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

Элементов на плате меньше: шесть термометров вместо одиннадцати, один датчик протока вместо двух, один насос.

Что подключено

  • Четыре реле (модуль AC-DC-ESP32-Relay-x4): компрессор (через контактор), вентилятор блока, насос тёплого пола, катушка четырёхходового клапана. На схеме катушка показана лампой 20 Вт с подписью «Катушка клапана» (готовой детали-электромагнита в редакторе нет).
  • Два датчика давления фреона (высокое и низкое), ЭРВ на шаговом двигателе, кнопка, датчик протока.
  • Шесть DS18B20 на двух линиях: D4 — фреон (всасывание, нагнетание, змеевик наружного блока), D5 — вода и воздух (обратка, подача, улица).

Датчики температуры и адреса

DS18B20 отвечают по одному проводу, и на один вывод их вешают параллельно: у каждого свой 64-битный адрес. На каждую линию нужен один резистор 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»). Пока насос прогоняет воду перед пуском, вентиль открывается широко (eevPre, по умолчанию на весь ход): давления по обе стороны выравниваются, и компрессору легче стартовать против малого перепада. Сразу после включения компрессора вентиль встаёт на стартовое положение (220 шагов), через tEev секунд включается скоростной ПИ-регулятор: каждые 5 секунд шаг = Kp·(ошибка − прошлая) + Ki·ошибка·5 с. Границы хода (66–480 шагов), Kp, Ki и цель — в панели.

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

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

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

Решение «греть»: всегда (ручной режим), по подаче или по обратке тёплого пола, с гистерезисом. Погодозависимость: цель поднимается на wcSlope градусов на каждый градус мороза (цель 30 °C при 0 °C и 0,4 К/К дают 34 °C при −10 °C). При морозе ниже заданного (по умолчанию −20 °C) блок не запускается: у большинства наружных блоков это нижний предел.

Оттайка

Иней на змеевике — не авария, а рабочее состояние: он растёт, теплообмен падает. Скетч считает змеевик обмёрзшим, если он холоднее порога (−3 °C) и холоднее уличного воздуха на 8 К и больше, и так держится минуту (в симуляторе — 3 секунды). Раньше, чем через defrostEvery секунд после пуска или прошлой оттайки, оттайка не начинается.

Ход оттайки:

  1. компрессор останавливается, ЭРВ открывается на максимум — давления выравниваются;
  2. через tValve секунд переключается клапан (нагнетание идёт в змеевик), ещё через 3 секунды включается компрессор, вентилятор молчит;
  3. оттайка кончается, когда змеевик прогрелся до +10 °C; или вышло время defrostMax; или подача тёплого пола остыла ниже порога — оттайка забирает тепло у воды, и лучше прервать её, чем заморозить конденсатор;
  4. компрессор останавливается, пауза, клапан возвращается, компрессор и вентилятор включаются снова.

Три оттайки подряд, закончившиеся по времени, а не по теплу, — это авария «лёд не тает»: сломан клапан, датчик стоит не там или не хватает фреона. Пауза на выравнивание — главное, что защищает компрессор: без неё он запускается против давления и выбивает защиту.

Вода не должна замёрзнуть

Пока установка стоит, а вода в контуре остыла ниже 5 °C, включается насос тёплого пола и гоняет воду, пока она не согреется на 3 градуса. Это не заменяет антифриз в контуре и обогрев наружных труб, но спасает от глупой поломки при выключенной установке. Для уличной части контура применяйте незамерзающую жидкость.

Защиты

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

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

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

Панель Settings

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

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

  • поменять SIM_DEMO на 0 — вернутся реальные задержки (пауза 5 минут, выбег 1 минута, оттайка до 10 минут);
  • поставить драйвер ЭРВ и датчики давления с делителем;
  • реле — модуль AC-DC-ESP32-Relay-x4 с выводами 25, 26, 32, 33; если реле включаются низким уровнем, поменять RELAY_ON;
  • по схеме своего блока выбрать VALVE_HEAT_ON; вентилятор блока, если у него свой контроллер, можно оставить на родной плате блока и убрать реле 2;
  • контактор компрессора и его защиту по мощности подобрать по паспорту блока; в симуляторе это контактор на катушку 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() — поднимает собственную точку доступа

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

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

  1. Нажмите «Запустить». Плата найдёт по три датчика на каждой линии (в мониторе порта) и найдёт ноль ЭРВ. Сценарий сам переведёт ползунок протока fl вправо — «течёт»; без сценария сделайте это мышью, иначе установка не запустится.
  2. Нажмите кнопку на схеме: включится насос тёплого пола и катушка клапана, через несколько секунд — компрессор и вентилятор блока (реле k1 и k2, контактор на схеме).
  3. Откройте «Веб-интерфейс»: температуры шести датчиков, давления, кипение и конденсация по таблице R410A, перегрев, положение ЭРВ. Смените фреон на R22 — температуры кипения пересчитаются.
  4. Нажмите на деталь to («Улица») и задайте +1 °C, затем на te («Змеевик») — −8 °C. Через несколько секунд начнётся оттайка: компрессор встанет, клапан переключится (катушка погаснет), вентилятор замолчит, компрессор пойдёт на горячий газ. Поднимите te до +12 °C — оттайка закончится, всё вернётся.
  5. Переведите ползунок fl влево: через 3 секунды компрессор остановится, в журнале — «нет протока тёплого пола». Верните ползунок и долгим нажатием кнопки сбросьте аварию.
  6. Крутите ручку ph выше 80 % — сработает защита по высокому давлению; ph и pl ниже 5 % — обрыв датчика давления.

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

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

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

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

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