воскресенье, 9 декабря 2018 г.

Domoticz. Управление КИВ-125

Добавим возможность удаленного управления клапаном КИВ-125 для автоматизации простой и не дорогой вентиляции.
По моим расчетам, в двухэтажном доме будет стоять по одному клапану на комнату итого 6-7 КИВов. Это ж сколько раз надо вставать и дёргать за шнурок, если кому-то "задуло"?!

Есть два варианта подключения
На каждый КИВ вешать по Wemos D1 mini (или любой другой ESP8266) и сервопривод SG90. Потребуется всего один провод питания, но увеличится количество подключений по Wifi, так как у каждого ESP8266 свой IP-адрес.
Сделать центральный узел с Wemos D1 mini и подключить к нему расширительную плату PCA9685. От каждого КИВа тянуть по одному 3х жильному кабелю для коммутации сервопривода SG90 к PCA9685.

Так как провода тянуть придётся по-любому, выбрал второй вариант с центральным Wemos. 

Программная подготовка.
При прошивке Wemos D1 mini, надо добавить поддержку драйвера PCA9685 в my_user_config.h
Будем считать, что сервер MQTT уже установлен и настроен. Прописываем настройки сервера либо в my_user_config.h сразу, либо через веб-морду управлением Wemos позже.
После прошивки, подключаем Wemos к PCA9685 по схеме
5V -> VCC
G-> GND
D1 -> SCL
D2 -> SDA

Через веб-морду, правим настройки портов D1 и D2
Осталось подключить сервопривод SG90 к плате PCA9685 к одному из 15 портов и подключаем питание 5V2A к PCA9685 и 5V2A к Wemos. 
Внимание! В документации к PCA9685 указано, что ёмкость конденсатора должна выбираться из расчета 100мкф на 1 SG90. В моём случае, мне пришлось перепаять штатный конденсатор 10V 470мкф на более ёмкий 10V 1000мкф, так как я планирую подключить до 10 сервоприводов.

Управление поворотом сервопривода осуществляется через http-запрос, MQTT или через консоль с веб-морды Wemos. Я назначил устройству статический IP-адрес, и буду посылать команды через http. Список команд описан на вики Tasmota
Нас интересуют 
http://ip-address/cm?cmnd=driver15%20pwm,1,400
Где 1 - это номер порта PCA9685, к которому подключен сервопривод
А 400 - длина импульса.
Подбирать длину импульса (читай угол поворота привода) пока бесполезно, так как все положения изменятся после установки привода в КИВ.

Теперь поработаем руками.
Потребуется жёсткая пластина ~140*35мм в которой будет возможно сделать посадочное отверстие для SG90. Мне попалась текстолитовая пластина, толщиной 3мм. Отрезаем шпильку и прикручиваем по центру к шестеренкам пластиковую лопасть из комплекта SG90 чтобы сервопривод был ровно по центру. Закрепляем сервопривод на пластине, и шпильками прикручиваем к корпусу КИВа.

После того, как всё ровно и крепко держится - переходим к настройкам поворота лопастей. Подбираем параметр xxx и записываем, при каких лопасти полностью закрыты, открыты и приоткрыты.
http://ip-address/cm?cmnd=driver15%20pwm,1,xxx
Осталось добавить все это в Domoticz. Создадим новое устройство Настройка > Оборудование > Тип Dummy
Жмём Создать виртуальные датчики
Тип датчика Переключатель селекторный
Переходим в Переключатели, ищем свой КИВ-125 и жмём Редактировать.
Создаём 3 уровня переключателя и 3 действия в зависимости от подобранных параметров.
Тесты показали, что при длине витой пары около 5 метров, сигнал на сервопривод не теряется, и задержки никакой нет. Я переживал что из-за просадки напряжения на длинном проводе, сервы будут отваливаться.

!!!UPD 10.2019
Режим отладки. Никак не могу придумать как красиво подключить к витухе
Запустил наконец в продакшн в детской КИВ-125 и подключил по витой паре. Расстояние до сервера wemos примерно 8-9 метров. Выскочил неприятный момент. После отправки команды на любое действие (pwm 300, pwm 500 или любой другой), действие совершается, но затем SG90 начинает мерзко дёргаться (см. видео).

Вероятно потому, что сервопривод не навсегда удерживает свое положение, импульсы позиционирования должны повторяться, информируя сервопривод о сохранении положения. Если отправить pwm 4096, то серв замирает. Поэтому после отправки команды на любое действие, следом тут же следует отправлять 4096. В Меню Domoticz'a "Действия переключателя" не возможно отправить несколько команд следом и мне пришлось набросать по одному простенькому скрипту на каждое действие следующего содержания:
#!/bin/bash
# Control your KIV-125 over weemos d1 with ip 10.0.0.205.
# Current script - send OPEN command to kiv and poweroff
curl -i --silent http://10.0.0.205/cm?cmnd=driver15%20pwm,7,320
sleep 0.5
curl -i --silent http://10.0.0.205/cm?cmnd=driver15%20pwm,7,4096
Скачать три скрипта можно тут. ИМЕЙТЕ ввиду, что значение PWM для каждого уникально (зависит от того, в каком положении зафиксирован SG90 и шестерня клапана КИВа). Да, и IP адрес wemos-сервера тоже.
Кладём все в папку domoticz/scripts и делаем их исполняемыми
chmod +x kiv-*.sh
Демонстрация корректной работы

Взял в руки клеевой пистолет, монтажную коробку, 4 монтажных разъема RJ45 и собрал наконец wemos-сервер с PCA9685 в одну коробку. Замудохался припаивать по 3 проводульки к RJ45, но зато теперь можно быстро подключить\отключить КИВ. Ничего не выпадает. Остальные 5 проводов можно использовать под датчики температуры\влажности, если их примастить у КИВа, или рядом с ним. Мне показалось это излишним, но возможность я эту оставил.


2 комментария :

  1. Это конечно интересно, но нафига? =) Через этот клапан проходит мало воздуха, тем более в частном доме. Его открывать-закрывать понадобиться, когда отопление не включено, а на улице осенью-весной очень холодно. Но это если нет своего отопительного котла..Лучше туда воткнуть на включение вентилятор канальный silentub 100, но тогда нужен корпус шумоглушащий новый делать

    ОтветитьУдалить
    Ответы
    1. Открываю клапана когда становится душно. Сейчас с открытого окна дует довольно прохладно, а клапана находятся вдали от кресел\диванов и движения холодного воздуха не чувствуется.
      Вижу применение в нескольких случаях. Открывать совместно с вытяжкой в санузле. Закрывать когда открывается входная\террасная дверь (от сквозняков). Открывать для проветривания пока нет никого дома.
      Интересно конечно посмотреть уровень СО2, чтобы поддерживать его в норме открытием\закрытием.

      Удалить