Умные шторы своими руками
Однажды, после тяжелого рабочего дня, я пришел домой и понял, что хочу отдохнуть, а не ходить и закрывать шторы. Хочется увидеть их закрытыми вечером и открытыми утром, при этом не выделывать танцы перед окном. Погуглив разные решения, было принято решение сделать все самому.
По многочисленным просьбам, выкладываю все свои наработки по переделке обычных рулонных штор в автоматизированные с удаленным управлением. Осторожно, много фотографий!
Для начала про рулонные шторы:
- Плюсы: рулонные шторы визуально расширяют пространство, красивые и недорогие. Очень простой монтаж. Можно каждым окном управлять отдельно. Высвобождается место на подоконнике.
- Сложности: вручную открывать 5 окон уже занимает долго времени. Открыть полностью угловое окно мешает сам механизм (пример: механизм вверху балконной двери упирается в стену и не дает открыть проход полностью). Из-за этого необходимо вешать шторы с наружной стороны окна. Цена даже на китайские моторизированные шторы начинаются от 2000 рублей, умножаем на 5 и уже сразу же думаем, как сделать все подручными средствами.
Немного про задачи:
Необходимо добавить к обычным рулонным шторам из строительного магазина удаленное управление и подключить к умному дому на openSource платформе Home Assistant. И еще необходимо сохранить обычное управление за веревочку.
Если все автоматизировать, то скорость не играет роли, поэтому можно применять двигатели с редуктором. Коллекторные двигатели дешевые, но не самая надежная вещь для ежедневного применения. Сервомашинки тоже имеют коллекторные двигатели и плюс не стабильные при постоянном вращении. Отличным вариантом выглядят шаговые двигатели. Бесшумные, можно контролировать положение, стоят копейки. В итоге, комплект из 5 двигателей 28BYJ-48 с драйвером ULN2003 обошелся мне в 10$
Про двигатель 28BYJ-48:
Подробно о нем можно почитать здесь.
Были вопросы о мощности этого двигателя. Опасения что он будет слабым, не оправдались. Вернее так — если использовать полношаговый режим, то двигатель очень хилый, если использовать полушаговый, то вал уже голыми руками не остановить. Кому будет мало мощности, в интернете много статей как приподнять напряжение, превратить его в биполярный и прочие улучшения.
Так как у нас осталось ручное управление, и мы не хотим впустую гонять двигатель, то необходимы датчики положения штор. Минимум необходим один датчик на одном конце, но лучше два. Можно использовать любой концевой, оптический и т.д., но я лично выбрал герконовый, т.к. приклеить неодимовый магнитик с другой стороны очень просто и работать должен стабильно и долговечно. Сами герконы я выбрал для эстетики уже в корпусе. Плюс предусмотрел настройку по расстоянию от вала. По высоте можно регулировать проставками.
Про конструкцию крепления:
Задача была спроектировать корпус максимально простой для изготовления на 3д принтере с минимальными доработками. Моделировал в Fusion 360. Комплектное крепление цепляется за верх окна, но такую конструкцию на FDM принтере будет трудно сделать с нужными требованиями по прочности, поэтому была придумана конструкция с одним винтом для регулировки.
Итого получилось три детали для 3д-печати. Ссылка для скачивания 3д-моделей.
thingiverse
Основная часть для двигателя, платы управления на ULM2003, креплением герконов, двигателей, лески для стабилизации штор, и регулировочного винта.
Крышка для закрытия всего этого безобразия. Зажим или по-другому крюк.
Сама конструкция штор содержит несколько пружин, которые работают как тормоз если тянуть за шторы(пружина затягивается) или отпускает если крутить за веревку.
При сборке надо сделать одну доработочку: кусачками сломать ободок, который прикрывает веревку, т.к. теперь у нас есть свой неподвижный ободок, который не дает выпасть веревочке.
Управлять шаговым двигателем будет NodeMCU на ESP8266. Он выбран из-за дешевизны, наличия резервного канала wi-fi и на нем достаточно легко написать нужные скрипты. Если нужно больше чем две шторы или дополнительные датчики, то ножек микроконтроллера уже не хватит, можно посмотреть в сторону ESP32. (на фото esp32 не приведена, т.к. она в распределительной коробке)
Среда разработки может быть любая. ESP32 может программироваться через Arduino IDE. Но я для себя выбрал Visual Studio Code из-за скорости, модульности и бесплатности. В этой среде можно разрабатывать почти под любые платформы (не только железо). Можно даже подключить IAR ARM.(но это уже совсем другая тема)
Задача программы простая:
Подключиться по Wi-fi
Подключиться к MQTT брокеру
Подписаться на топик
Управлять скоростью двух моторов
Следить за состоянием концевых датчиков
Отправлять брокеру текущие шаги
Исходники можно взять отсюда.(осторожно это самый первый быдлокод для пробы штор). В коде надо указать свой логин и пароль от wi-fi. А также параметры MQTT-брокера.
Заливаем программу и пробуем отправить первые данные через MQTTBox. Все работает! Как добавить шторы в систему home-assistant я напишу отдельную статью, если будет интересно всем.
Небольшое видео как это делалось:
Плюс выступление на какой стадии находится у меня умный дом.
Всем пожелаю расслабиться дома!
UPD: Ссылка на скачивание файлов для печати на 3д-принтере
Источник
Изготовление и установка электропривода на рулонные шторы
Электропривод выполнен на базе миниатюрного 4-х фазного шагового двигателя 28BYJ-48-12V . Двигатель имеет редуктор с передаточным числом приблизительно 64:1, что обеспечивает достаточно приличный крутящий момент для такого размера двигателя и скорость вращения
Схема фаз двигателя 28BYJ-48-12V
Передаточное число редуктора двигателя 28BYJ-48-12V составляет примерно 64:1.
Контроллер
В качестве мозга электропривода использован микроконтроллер Atmega328. Он общается с внешним миром через шину RS485, по протоколу ModBus, шина выполнена на микросхеме MAX485. Шаговый двигатель подключается через транзисторную сборку Дарлингтона — ULN2003. В качестве датчика нулевой точки использован датчик Холла A3144, он служит для определения верхней нулевой точки (Zerro) положения шторы. Еще один датчик Холла (Mode) припаян непосредственно на самой плате и выполняет следующие функции:
- Активация режима обучения
- Аварийный останов двигателя
- Сброс контроллера на заводские установки
Дополнительно на плате контроллера предусмотрены входы для фоторезистора (например vt90n) и герконового датчика открытия окна.
Схема электрическая принципиальная электропривода рулонных штор на шаговом двигателе 28byj-48
Код прошивки микроконтроллера написан в среде Arduino IDE и находится в открытом доступе на моей странице GitHub.
Принцип работы
После подачи питания устройство несколькими миганиями светодиода, установленного на плате, сигнализирует о включении. После включения питание на двигатель не подается, штора находится в неподвижном состоянии.
Для того чтобы контроллер знал текущее положение шторы его необходимо обучить. Для этого в ручную опускаем штору в нижнее положение на необходимую длину, подносим кратковременно магнит к датчику Mode на контроллере (датчик установлен в районе светодиода), при этом светодиод начнет мигать, сигнализируя активацию режима обучения, на двигатель подается управляющий сигнал и штора начинает двигаться вверх до верхней нулевой точки где останавливается по сигналу от датчика Холла установленного в креплении корпуса контроллера. Контроллер при этом запоминает количество шагов двигателя и сохраняет это значение в энергонезависимой памяти EEPROM микроконтроллера.
Если к датчику Mode поднести кратковременно магнит во время движения шторы, то контроллер сразу остановит движение.
Для сброса контроллера на заводские установки необходимо поднести магнит к датчику Mode не менее чем на 5 секунд, при этом светодиод начнет быстро мигать, контроллер перезагрузится и установит все значения параметров на заводские.
Для управления положением шторы используется регистр set_position, положение задается значением от 0 до 100, где 0 — открыто, штора находится в верхней точке, а 100 — полностью закрыто, штора находится в нижнем положении.
Если в конфигурации контроллера активировать функцию «Определение текущего положения шторы после подачи питания» — регистр check pos flag (0- выключено, 1 — включено), то сразу после подачи напряжения на контроллер, штора начнет движение вверх до верхней точки, в этот момент контроллер запоминает количество шагов и по достижении верхней нулевой точки, штора возвращается в положение в котором находилась до момента подачи питания. Эта функция служит для определения положения шторы например когда отключили электричество. Если эта функция отключена, то при подачи питания штора остается в текущем положении до момента подачи команды set_position, как только контроллер получит первую, после подачи питания, команду он сначала запустит функцию определения текущего положения шторы и только после этого выставит положение шторы поступившее командой set_position.
Таблица данных регистров ModBus
Стандарт ModBus предусматривает отдельную таблицу для каждого типа данных, в контроллере же все данные хранятся в одном массиве в виде перекрывающихся таблиц. Значение всех регистров и адресов представлены в таблице:
Корпус контроллера
Корпус для устройства был спроектирован в программном комплексе Autodesk Fusion 360 и распечатан на 3D принтере из ABS пластика. Точность печати меня не устроила, поэтому детали корпуса были зашпатлеваны, отшлифованы, загрунтованы и окрашены акриловой краской из баллончика, это скрыло все изъяны 3D печати. После чего была изготовлена силиконовая форма и корпуса были отлиты из жидкого полиуретана. Про изготовление корпусов методом литья жидкого полиуретана в силиконовые формы постараюсь описать отдельной статьей.
Корпус спроектировал в программе Autodesk Fusion 360
Доработка механизма рулонной шторы
Внешний вид механизма рулонной шторы. Нам необходимо обрезать козырек над шестерней цепочки
Нажимаем плоскогубцами защелку
Снимаем верхнюю втулку
Выступ во втулке служит механизмом стопора, при попытке размотать штору за полотно, выступ упирается в пружины и тем самым сжимает их на валу не позволяя втулке вращаться.
Полностью разобранный механизм
Сначала откусываем козырек бокорезами
Зажимаем в патрон шуруповерта
На крупнозернистой наждачной бумаге немного стачиваем край по окружности до нужного диаметра
Должно получиться примерно вот так
Примеряем, проворачиваем вал и смотри чтобы ничего не задевало и не подклинивало
Собираем все в обратной последовательности
Идеально
Немного про организацию моего подключения контроллеров электропривода рулонных штор
У меня в каждом окне стоит «комнатный» контроллер построенный на Arduino UNO + Ethernet Shield W5100, в задачи которого входит сбор показаний температуры воздуха в приточном клапане вентиляции, температуры радиаторов отопления (DS18B20), температуры и влажности помещения (DHT22), передача сигнала датчика движения (DSC LC-101) и датчика открытия окна (геркон), а так же управление сервоприводом приточной вентиляции.
Я решил добавить в него еще и функцию прослойки между шиной RS485 рулонных штор и сервером IoBroker, данные в который передаются по протоколу MQTT. Таким образом у меня на этот «комнатный» контроллер легли функции мастера сети ModBus. Все контроллеры штор одного окна подключены по шине RS485 к мастеру, он с периодом 2 секунды опрашивает подчиненных (контроллеры штор) и отдает текущие данные по протоколу MQTT на сервер умного дома IoBroker.
Так же мастер принимает команды по MQTT от сервера и отправляет их подчиненным. Так как подчиненных несколько и мастер не может одновременно отправить управляющие команды сразу всем, а по MQTT практически одновременно может поступить несколько команд (например команда открыть 1,2 и 3 штору) то мастер отработает только первую. Чтобы команды не терялись на мастере был организован буфер, что то подобное FIFO (англ. first in, first out — «первым пришёл — первым ушёл»). пришедшие данные по MQTT записываются в массив после чего мастер по в общем цикле программы проверяет свободность шины RS485 и отправляет команду ModBus из нулевого элемента массива очереди, сдвигает данные команд массива влево и цикл повторяется пока в массиве очереди есть данные.
Подключение электропривода
Для подключения контроллера используется всего 4 провода, 2 из них это +-12 В — питание контроллера и двигателя, и 2 провода для шины RS485.
Верхняя плата (левый)
Нижняя плата контроллера (левый)
Источник