Умный обогреватель своими руками

Зима, конечно, не удалась в этом году (по крайней мере в центральной части России), но зная наши реалии, многие, я думаю, пользовались электрическими обогревателями.

Вот перед нами следующая картина: Вы включаете обогреватель и через какое-то время становится тепло, а если ещё чуть-чуть подождать, то уже жарко. Ну что ж, время выключить обогреватель, однако если у Вас плохо утеплена квартира, то в скором времени опять станет неприятно, и придется снова вставать включать источник тепла. Выход из этого круговорота есть: можно купить так называемый умный обогреватель, который будет поддерживать комфортную температуру. Но у него есть один существенный минус: это цена. Я думаю, многие уже догадались о чем сегодня пойдет речь. Да, именно о самодельном умном обогревателе. Итак, с чего бы начать? Давайте для начала рассмотрим общую схему работы.

Рис 1. Общая схема работы

Как же это всё работает

На самом деле довольно просто. У нас есть некое Web-приложение (не будет рассматриваться в рамках этой статьи), в котором пользователь выбирает режим работы обогревателя:

  1. Включен постоянно. В данном режиме установленная температура не передаётся
  2. Выключен. Установленная температура также не передаётся
  3. Автоматический режим. Собственно, ради него всё и затевалось. В данном режиме пользователь устанавливает желаемую температуру

После того как режим выбран, вся информация передаётся в MQTT брокер, который дополнительно принимает текущую температуру с  ZigBee датчика. Также данные о температура записываются с помощью скрипта в базу. Блок управления в свою очередь с определенным периодом подключается к MQTT и забирает оттуда данные об установленной и текущей температуре. Стоит пояснить один момент: ранее говорилось о том, что установленная температура передаётся только в одном из режимов. Всё так, но есть скрипт, который в соответствие режимам вкл/выкл устанавливает следующие температуры: для режима вкл — 100 градусов Цельсия, выкл — 0 градусов. Как итог в первом случае обогреватель будет работать на полную мощность постоянно, а во втором соответственно выключен. Также данный скрипт забирает данные о текущей температуры из базы и все это возвращает в брокер.  Перед тем как продолжить стоит рассказать о конечном количестве MQTT топиков, кто сколько насчитал? И так правильный ответ три. Давайте посчитаем:

  1. Первый топик. В него записывается режим, который выбрал пользователь.
  2. Второй топик. В него передаёт информацию о текущей температуре выше указанный ZigBee датчик. Вся информация из данного топика складывается в базу данных.
  3. Третий топик. Он же конечный для этой системы, в него пишет специальный скрипт, который забирает данные из первого топика и складывает их с данными о текущей температуре, которые лежат в базе. В конечном итоге к данному топику подключается блок управления обогревателем и отрабатывает согласно своему алгоритму, о котором Вы можете прочитать далее, если конечно всё ещё не потеряли интерес 🙂  

Блок управления

В качестве сердца блока управления выступает, я думаю, многим известная esp32. Да-да, я знаю, что кто-то скажет: «Можно же взять ардуино с Wi-Fi модулем или ещё проще Sanoff, у которого уже есть Wi-Fi и встроенное реле, так же подключить датчик температуры». Да это так, но мне было интересно реализовать всё самому. Плюс электромагнитное реле мне не подходит, но об этом позже. ESP32 была выбрана из-за возможности работать с MicroPython (на этом моменте где-то заплакал программист C++). Я знаю, что с точки зрения ресурсов контроллера это, наверное, не самый лучший вариант для реализации, но мне нравится Python и точка :). 

С сердцем определились. Что же будет включать и выключать наш обогреватель? Тут я рассматривал два варианта:

  1. Обычное электромагнитное реле
  2. Твердотельное реле

Первый вариант отпал довольно быстро, так как планировалось управлять обогревателем посредством ШИМ (Широтно-импульсная модуляция) и слушать постоянно щелкающее реле особенно ночью, то ещё удовольствие, поэтому было принято решение остановиться на втором варианте. Сказано — сделано. Поскольку у меня в наличии киловаттный обогреватель, было куплено твердотельное реле на 10А. После тестового включения стало ясно, что без дополнительного охлаждения оно перегреется и умрет. Поискав возможные варианты, остановился на небольшом радиаторе с вентилятором. С ним реле остается холодным, даже когда обогреватель кочегарит на полную. 

Выше упоминался какой-то там ШИМ. Зачем он мне вообще? На самом деле вопрос вполне закономерный, можно же просто включать и выключать. Конечно, можно, но что если попробовать регулировать температуру нагрева обогревателя? Это позволит более гибко управлять климатом в Вашем доме. Разве не круто? Теперь давайте рассмотрим более подробно всё это с блекджеком кодом и схемой

Рис 2. Функциональная схема

На самом деле практически вся функциональная схема была описана выше, за исключением N-канального полевого транзистора, который нужен для управления вентилятором охлаждения. В данном случае он работает в обычном ключевом режиме. Как только на его затворе появляется логическая единица, он открывается и подаёт +5 вольт на вентилятор.

Логика работы

Рис 3. Блок схема

Теперь давайте перейдем к алгоритму, он представлен на рис.3. Что тут происходит? Поскольку всю информацию мы берем из MQTT, то для начала необходимо подключиться к нему. Как только мы убеждаемся в том, что подключение случилось, переходим в бесконечный цикл, в котором происходит чтение из определенного топика текущей и установленной температуры. После необходимо вычислить дельту. На основании рассчитанной дельты вычисляется ширина импульса по следующей формуле :

1000 — 1000 / (math.exp(delta_temp)

Если полученное значение ширины больше нуля, то помимо формирования сигнала для управления обогревателем также необходимо включить вентилятор охлаждения. По сути с алгоритмом тоже всё. 

Заключение

На этом пожалуй всё, единственное, что я бы хотел оставить пару фото получившегося у меня устройства ну и конечно код.

Корпус находится все ещё на стадии доработки, я уверен, что у Вас получится лучше 😉

А вот так выглядит код, который заставляет работать всё это железо

Структура проекта

boot.py main.py config.json

boot.py

main.py

config.json

Оставлю так же полезные ссылки:

  1. ESP-32

https://aliexpress.ru/item/32864722159.html

  1. Радиатор с вентилятором

https://aliexpress.ru/item/32998837362.html

  1. Блок питания на 5 вольт

https://aliexpress.ru/item/32756064419.html

  1. Твердотельное реле

https://www.aliexpress.com/snapshot/0.html?spm=a2g0s.9042311.0.0.264d33edzOVAIN&orderId=705323612308665&productId=32295725401

  1. Документация на MicroPython

http://docs.micropython.org/en/latest/

6 комментариев к “Умный обогреватель своими руками”

  1. Я дилетант, во всем этом, поясните пожалуйста поподробнее про ШИМ. Зачем он все таки нужен? Реле ведь управляется логическими состояниями, и не может быть немного включено или чуть-чуть выключено.

    • Да, всё так, два состояния вкл и выкл. В статье я написал, что ШИМ нужен для регулировки нагрева обогревателя. Если копнуть поглубже, то происходит по моей версии это так. Из сети к нам приходит периодический сигнал с частотой 50Гц и соответственно длительностью одного периода около 20мс, а частота моего ШИМ сигнала около 10Гц (в моём случае) с длительностью периода 100мс, получается ШИМ сигнал перекрывает порядка 5 периодов сетевого. Это означает следующее, если ширина импульса равна допустим 1024 (максимальная ширина для esp32 с micropython на борту согласно официальной доке machine.PWM(machine.Pin(heater), freq=10, duty=1024)) то все 5 периодов дойдут до обогревателя и он будет кочегарить на полную, а при duty=512 около 2х периодов сетевого сигнала, в итоге обогреватель начнет греть слабее.

          • Полноте вам 🙂 Какие аргументы могут быть у дилетанта. Просто температура в помещении меняется не очень быстро, и я бы сделал включение/выключение по температуре. Можно обойтись ESP-01.
            Насшет ШИМа на переменке (вот тут я совсем не уверен), АС ведь синусоида, и 2 периода из 5 могут не дать 2/5 исходного напряжения. Не мерили что на выходе?

          • Ваше право, можно конечно просто выключать и включать по температуре) Смотрел осциллографом, понятно что итоговая мощность допустим при 512 будет примерно в два раза меньше и обогреватель будет греться в два раза слабее, дак за тем и затевалось) Но амплитуда синусоиды конечно не меняется при этом при всём.

Оставьте комментарий