Система управление резервом воды и котлом отопления в квартире.

NickVectra
Offline
Зарегистрирован: 09.01.2020
Добрый день!
Решил в квартире сделать систему управления резервом воды и газовым котлом как элемент умного дома.
 
Вот, что из этого получилось:
Два резервных бака с водой суммарным объемом 400 л. расположены в треугольной закрытой нише 1х1 м высотой 1 м.
К выходу баков подключены  гидрофор с гидроаккумулятором на 80 л.
В случае отсутствия необходимого напора воды в водопроводе на входе квартиры включается гидрофор, который поддерживает давление во внутренней системе водопровода.
Рис. 1. упрощенная схема водопровода
 
 
Поступающая вода через обратный клапан 1 и управляемый мотором кран наполняет баки. На входе баков установлен автоматический запорный клапан по уровню (на схеме не показан). Для дополнительной подстраховки в верхней части бака имеется аварийный перелив в канализацию.
Раз в неделю, по воскресеньям, происходит автоматическое обновление воды в баках. При этом кран перекрывает воду наполняющую баки и включается гидрофор. Это позволяет расходовать воду из баков на протяжении дня. В конце дня гидрофор отключается, кран открывается и баки наполняются свежей водой.
Так как давление в водопроводе не превышает 1,5 бар, а гидрофор создает давление от 2,2 до 4,5 бар, при установленных обратных клапанах нет необходимости в перекрывании воды и установке дополнительных кранов. 
 
В зимнее время температура воды на входе может быть ниже 10-15 градусов, что приводит к конденсату на стенках баков. Для предотвращения образования избыточной влаги в нише, где расположены баки, осуществляется ее вентиляция, озонирование и осушение.
 
Первая версия устройства была выполнена на устройствах жесткой логики — реле (см. последние три фото). Уровень воды в баках измерялся  WP-T804. Согласно выставленных уровней происходило срабатывание реле гидрофора, открытие и закрытие  крана наполнения баков. Два независимых датчика показывали текущий расход воды и ее температуру. Управление  вентилятором, озонатором и осушителем было выполнено на реле Sonoff (модели Basic и TH16).
 
 
Знакомство с Arduino состоялось три месяца назад. За это время удалось реализовать данный проект от идеи до готового изделия.
 
Устройство управления собрано на NodeMCU ESP8266, которое по сети WiFi подключено к домашней сети и имеет выход в интернет.  На входе баков установлен расходомер, измерители температуры воды и давления. Аналогичные измерительные датчики установлены на выходе гидрофора.
Учет показаний расхода воды выполнен на основе обработки прерываний вызванных импульсами поступающими от расходомеров, которые поступают на ножки D5 и D6 NodeMCU. 
В датчиках температуры воды используются термосопротивления 50 кОм, напряжение на которых измеряется 16 разрядным АЦП ADS1115 (шина I2C). Дополнительно в каждом цикле опроса датчиков измеряется напряжения питания 5 В, которое участвует как опорное при расчете.
В качестве датчиков температуры и влажности воздуха применены AM2320 работающие по шине I2C. В связи с тем, что в системе имеется два одинаковых датчика, с адресом 0x5C, который не может быть изменен. Поэтому используется мультиплексор шины I2C TCA9548A, который подключен к ножкам D1 и D2 NodeMCU с уровнем 3,3 В. К мультиплексору также подключены два четырех канальных АЦП ADS1115 (0x48), расширитель MCP2317 (0x20), измеритель тока INA226 (0x40) и FRAM (0х50-0х57).
Измерение уровня воды в баках проводится с помощью датчика уровня дифференциального давления (гидростатический датчик уровня). Выходной сигнал датчика  токовая петля 4-20 мА соответствует уровню воды 0-5 м.  Для возможности точного измерения тока на выходе датчика применен модуль INA226, в котором стандартный шунт 0,01 Ом был увеличен в 10000 раз. Питания датчика уровня осуществляется преобразователем DC-DC MT3608 5 в 24 Вольта. Для управления гидрофора используется твердотельное реле на 100 А. Оказалось, что управляющего сигнала 5 В  было недостаточно для коммутации напряжения 220 В. Поэтому управляющее напряжение было повышено до 24 В через MOSFET IRL540NPBF.
Резервный источник питания выполнен на одном аккумуляторе 18650, контроллере заряда литиевого аккумулятора TP4056 и повышающем преобразователе MT3608.
Упрощенная структурная схема измерителя показана на рис.2.
 
Датчики температуры DS18В20 OneWire контролируют температуру на твердотельном реле включения гидрофора, контроллере заряда литиевого аккумулятора резервного источника питания и элементе Пельтье в осушителе. Предотвращая перегрев реле гидрофора и контроллера и соответственно образования льда на радиаторе элемента Пельтье.
Датчик протечки следит за протечкой воды и в случае срабатывания отключает гидрофор, перекрывает кран наполнения баков и отправляет  E-mail с предупреждением пользователю.
Для хранения данных программы используется FRAM FM24CL16, которая подключена по шине I2C. Преимуществом использования данного типа памяти, является высокая скорость работы и практически неограниченное число циклов чтения/записи.
Положение крана перекрытия воды наполнения баков отслеживается с помощью аналогового датчика Холла и кругового магнита с диаметральной намагниченностью.
При превышении уровня влажности в нише выше заданного включается осушитель выполненный на элементе Пельтье. Конденсат собранный осушителем накапливается в резервуаре 0,7 л, при наполнении которого мембранный насос по таймеру выкачивает жидкость в канализацию.
Периодически два раза в день, в соответствии с установленными таймерами, включается вентиляция воздуха в нише. Утром в будние дни срабатывает таймер озонирования, вырабатываемый озон дополнительно очищает пространство в нише. После озонирование происходит вентиляция.
В качестве интерфейса взаимодействия с пользователем использовано приложение Virtuino. С целью сокращения объема передаваемой информации обновление данных происходит только на выбранной  странице управления. Планшет Samsung Tab 10.1 2014 Android 5.1.1 SM-P601 использован в качестве панели управления.
Примеры страниц панелей управления представлены на рисунках ниже.
 
 
 
Для обновления программного обеспечения используется режим по воздуху через HTTP Update Server.
Считывание данных выполняется каждую секунду. Контроль наличия связи с планшетом осуществляется каждые 5 секунд. 
В первоначальных версиях программы данные коэффициентов хранились во внутренней EEPROM ESP8266. В библиотеке INA226 также был задействована этот вид памяти. С целью избежания конфликтов использование EEPROM в библиотеке INA226 было исключено для ESP8266.
Применение в качестве внешней памяти для хранения данных AT24C256 приводило к сбоям программы. Это было вызвано тем, что суммарные данные показаний расходомеров записывались в AT24C256 по срабатыванию таймера на основе библиотеки Ticker. Стандартная библиотека AT24C256 имела задержку на 20 мс при записи. Для предотвращения сбоев в работе устройства - запись в память можно было проводить не по прерыванию, а в цикле loop. Позже память AT24C256 была заменена на FM24CL16. 
Для предотвращения ложного срабатывания реле управления исполнительными устройствами (гидрофор, вентилятор, озонатор, кран) введена первоначальная задержка на 60 секунд при старте.
В качестве библиотеки по отправке E-mail была выбрана Gsender, как имеющая наименьшую задержку.
Оперативную коррекцию данных датчиков можно, при необходимости, осуществить через установку нужных коэффициентов в приложении, значения которых будут перезаписаны в памяти.
В программе используются стандартные библиотеки:
ESP8266WiFi.h
ESP8266WebServer.h
ESP8266HTTPUpdateServer.h
VirtuinoCM.h
Adafruit_AM2320.h
Adafruit_MCP23017.h
Adafruit_ADS1015.h
OneWire.h
Wire.h
Ticker.h
EEPROM.h
При компилировании программы в среде Arduino IDE сделаны дополнительные следующие установки: Flash size 4M(3M SPIFFS) и IwIP Variant v1.4 Higher Bandwidth. При этом обеспечивается стабильная работа устройства.
Цикл чтения данных с датчиков DS18B20 (измерение около 750 мс) начинается со считывания, а затем отсылается команда запуска измерения для всех датчиков одновременно. Это позволяет получать данные со всех датчиков практически без задержки с периодичностью 1 сек.
В связи с тем, что применен мультиплексор I2C TCA9548A при обращении к модулям и датчикам, обязательным является предварительная установка нужного порта мультиплексора.
Библиотека FM24CL16 переписана и встроена в проект. Память FM24C16 имеет 8 страниц (адреса 0x50-0x57), в каждой по 256 байт. В библиотеке убрано разбиение на страницы и все пространство памяти доступно сплошной адресацией, а функции read и write позволяет сохранять любые данные и структуры.
Также встроены в проект библиотеки по работе с расходомерами и термосопротивлениями. 
Для дистанционного включения гидрофора, например, из ванной - используется радио-выключатель. Для этого в блоке установлен обучаемый приемник RX480E-4 433 МГц EV1527. 
Для защиты от сбоев по питанию смонтирован ИБП на чипе TP4056 (контроллер заряда), DW01 (схема защиты) и ML8205A (сдвоенный ключ MOSFET), повышающем  преобразователе на MT3608 и аккумуляторе 18650. Информация об уровне заряда передается в приложение.
Фото устройства приведено ниже. На последних трех фотографиях - блок управления первой версии. 
 
Датчики температуры DS18В20 OneWire контролируют температуру на твердотельном реле включения гидрофора, контроллере заряда литиевого аккумулятора резервного источника питания и элементе Пельтье в осушителе. Предотвращая перегрев реле гидрофора и контроллера и соответственно образования льда на радиаторе элемента Пельтье.
Датчик протечки следит за протечкой воды и в случае срабатывания отключает гидрофор, перекрывает кран наполнения баков и отправляет  E-mail с предупреждением пользователю.
Для хранения данных программы используется FRAM FM24CL16, которая подключена по шине I2C. Преимуществом использования данного типа памяти, является высокая скорость работы и практически неограниченное число циклов чтения/записи.
Положение крана перекрытия воды наполнения баков отслеживается с помощью аналогового датчика Холла и кругового магнита с диаметральной намагниченностью.
 
29/12/2019 Дополнено управлением газового котла.
Упрощенная структурная схема измерителя показана на рис.3.
 
В случае понижения температуры в комнате ниже установленной, которая измеряется датчиком температуры в комнате DS18B20 (контакт D5 - шина OneWire) происходит срабатывание реле (контакт D6), которое переводит котел в режим отопления. Датчик температуры в комнате подключен по двум проводам и запитывается через диод Шотке и конденсатор 10 мкФ. 
Датчик наружной температуры подключен по трех проводной схеме.
Энергометр PZEM-004T производит измерение показателей сети и параметров потребления котлом. Энергометр подключен по UART D7 Rx D8 Tx работающий в режиме программного серийного порта. Для возможности программирования и загрузки выход D8 включен через PNP транзистор.
Дополнительно показания температуры выводятся на LCD1602 (рис. 4), который подключен к процессору по шине I2C (D1 - I2C SDA, D2 - SCL) через преобразователь уровней.
С помощью кнопок + и — можно задать требуемую температуру в комнате. Кнопки подключены к резистивной матрице, выход которой подключено к A0.
 
В случае использования аппаратного порта UART для обмена с энергометром вместо программного - для вывода информации можно использовать D4 выход Serial1 подключаемый через отдельный переходник USB-TTL к компьютеру. Для согласования применен преобразователь логических уровней.
 
Во внутреннем EEPROM сохраняется значение установленной температуры, коррекция датчика температуры в комнате, гистерезис управления котлом по датчику температуры и коррекция датчика температуры на лице.
 
Обмен с сервером Virtuino происходит по каналу WiFi.
 
 
 
 
 
 
 
NickVectra
Offline
Зарегистрирован: 09.01.2020
Внешний вид устройства управления газовым котлом представлен на фото ниже
 
Код основной программы

 

Код программы управления газовым котлом

 

 

Ссылки на остальные тексты программ
https://drive.google.com/open?id=13i1B7 … nIwDIfkgXI

https://drive.google.com/open?id=1jvYK4 … dc-yMX0mTX

Решил опубликовать - может кто-то найдет что-то для себя полезное.
Сильно не ругайте - если случайно нарушил правила форума.
Всем удачи

 

 
 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Тоже хочу :(

alex_r61
Offline
Зарегистрирован: 20.06.2012

 Монтаж - жесть(опять рука за молотком тянется :)

NickVectra
Offline
Зарегистрирован: 09.01.2020
Учитывая то, что устройство управления газовым котлом выполнено на NodeMCU (процессор имеет достаточно мощности) и  эксплуатация в течении двух недель показали целесообразность построить отдельный сервер Virtuino на этом процессоре. 
Благодаря этому скорость реакции на нажатие клавиш в приложении увеличилась, что сделало систему более информативной и дружественной. Также это было возможным так, как приложение Virtuino может одновременно быть подключенным к нескольким серверам (один виртуальный и два реальных). 
Новый скетч для устройства управления газовым котлом приведен ниже.
inspiritus
Offline
Зарегистрирован: 17.12.2012

Нодэмцу не подвисает?

NickVectra
Offline
Зарегистрирован: 09.01.2020

Я выше писал

При компилировании программы в среде Arduino IDE сделаны дополнительные следующие установки: Flash size 4M(3M SPIFFS) и IwIP Variant v1.4 Higher Bandwidth. Без этого иногда вылетала с ошибкой extension.

Для контроля  перегрузки каждый раз сохраняю номер запуска и передаю его по e-mail. После последнего моего перезапуска работает 14 дней.

Считаю это стабильная работа

jack
Offline
Зарегистрирован: 15.09.2013

монтаж конечно жесть, но идея и реализация супер!

NickVectra
Offline
Зарегистрирован: 09.01.2020

jack пишет:
монтаж конечно жесть, но идея и реализация супер!

Ещё одна идея по считывания данных со счетчика представлена в теме "Очередная система считывания данных счетчика". Монтаж чуть аккуратнее кажется. Несколько фото