Умные устройства захватили мир, а вы и не заметили? Доброе утро! А вернее, вечер пятницы. Сегодня в программе умные жалюзи из подручного (и подножного) материала. Минимум усилий, минимум кода, максимум автоматизации.
Стоит рассказать предысторию (можно пропустить). Идея пришла в голову давным-давно. Тогда у меня не было видения или нужных навыков, но очень хотелось автоматизировать жалюзи. Я купил шаговый моторчик с драйвером и попытался пристроить его к управляющему положением жалюзи штырьку. Посмотрите на это…
Проект получился нелепый, переусложненный, мощности, конечно, не хватило, чтобы двигать эту кривую поделку, и я отложил идею в долгий ящик. Снова вспомнил о проекте я недавно. В один прекрасный день, ковыряя привод DVD из системного блока, я откопал вот это
И тут меня осенило…
Новое начало
Поясню ход моих мыслей. Жалюзи имеют два контура управления — поворот и сдвиг. Сдвиг происходит благодаря тяге за шнурок, который заклинивается роликом для фиксации положения. Поворот осуществляется осью, к которой прикреплены направляющие нити от жалюзи. Именно эта часть нас и интересует.
Если пристроить запчасть из DVD к валу жалюзи, можно регулировать их положение автоматически.
Итак, в моих руках оказался готовый мотор-редуктор для управления поворотной осью жалюзи, так что пора обрисовать задачи проекта:
- Ручное управление шторами в отсутствии электричества
- Дистанционное управление шторами
- Автоматическое управление шторами через различные сценарии
Для последних двух (особенно, третьей) необходим микроконтроллер. Следовательно, для проекта потребуются следующие материалы:
- Мотор-редуктор(в наличии)
- Блок питания
- Драйвер мотора
- Микроконтроллер
- Корпус
Творческий путь
Корпус был найден довольно быстро, им выступил какой-то зарядник для свинцовых АКБ. В его боку довольно грубо было проделано отверстие (для вывода вала редуктора к валу жалюзи).
Пластиковый корпус мотор редуктора был обрезан так, чтобы с усилием вставляться в корпус. Все равно лишняя пластмасса ему ни к чему…
В качестве микроконтроллера был выбран ESP8266 Wemos D1 Mini, парочка которых была куплена за 130 рублей/штука еще давно.
В качестве блока питания был применен какой-то старый ненужный зарядник на 5 вольт (выдавал около 6.2).
В качестве драйвера мотора выступил копеечный MX1508 (напряжение питания 3-10 вольт).
Данный драйвер построен по классической архитектуре H-Bridge.
Он рассчитан на управление двумя независимыми моторами (из которых мы используем лишь один).
Чтобы разместить все в корпусе, была применена проклятая некоторыми 3д печать. В данном проекте она, строго говоря, необязательна, но значительно упрощает жизнь. Внутреннее пространство корпуса было разделено на 3 части: редукторный блок, питающий блок и управляющий блок. Для управляющих плат (драйвер и макетка с микроконтроллером, который я туда впаял) был заботливо приготовлен слот.
С первого раза степень попадания в отверстия корпуса составила лишь 50%, но тратить пластик особо не хотелось, так что было решено: «И так сойдет». Зато в крепеж редуктора попадание было 100%. А поскольку деталь разрабатывалась впритык по размерам корпуса, ничего не осталось болтаться в воздухе.
Итак, оставалось лишь придумать способ соединения вала с шестеренками редуктора. Тут не скажу, что будет просто без 3д печати, но, думаю, вполне реально. Я же просто замерил шестеренку, расширил в ней отверстия и разработал вал под эти отверстия, который другим концом вставляется в вал жалюзи.
Однако, если подумать, как я это буду настраивать со всеми возможными перекосами?.. В общем, решил сделать вал гибким. Как? Ну, у меня валялся кусок обыкновенного троса в оболочке…
Кусок я обрезал, модель вала тоже, а затем сделал пазы под трос. Распечатав детали, я посадил трос на эпоксидный клей ЭДП. Думаете, не сработало? Еще как сработало!
После завершения основных работ я задумался, как бы организовать концевые датчики, чтобы прибор не перекручивал жалюзи слишком сильно. Я накидал насадку на вал и пазы под кнопки, и тут Остапа понесло. «А, собственно, почему бы не накидать побольше датчиков?» У меня были в наличии PIR-сенсоры движения, датчики температуры и влажности AM2320 и какой-то фоторезистор из дохлого ночника. Все это пошло в дело! Естественно, размещать в корпусе датчик температуры и влажности было глупо (как и датчик движения), так что я сделал навесную коробочку, исходя из отверстий в корпусе зарядника и модели PIR-датчика, взятой на просторах сети. Получилось неплохо.
Я вывел все провода через те же пазы, а на плату впаял разъемы под датчики. Решил не объединять сильно провода, чтобы проще было разобраться, если решу добавить еще датчиков.
На плате я распаял необходимые разъемы. Думаю смотреть на макетку не сильно интересно, в схеме всего один резистор для резисторного делителя фотодатчика, остальное просто провода от пинов микроконтроллера к датчикам и драйверу мотора. Для фоторезистора подключение такое.
Итак, финальный изделие приобрело примерно такой вид.
Дело оставалось за малым — повесить коробочку на стену. Для этого был разработан крепеж на один саморез (дырка под него осталась после снятия обычных штор). Чтобы по 10 раз не мерять в неудобной позе, я примерно прикинул по высоте и смоделировал рельсу, на которой будет уже крепиться крючок. Если что, крючок можно подвинуть, чтобы прибор висел ровно.
Теперь, когда все было собрано воедино, дело оставалось за малым — прошивкой. Почему за малым? Потому что для управления я использую сервер HomeAssistant, а для прошивки ESPHome. Это позволяет мне писать прошивку в виде конфигурации к пинам микроконтроллера, а автоматизации можно вообще оформлять в виде логических блоков в графическом интерфейсе HomeAssistant.
В результате проверки и мучений с датчиком влажности, было выявлено, что концевики не нужны (мотор просто проворачивает резиновый шкив в крайнем положении в худшем случае), а прошивка приобрела такой вид.
substitutions:
name: esphome-web-47f3af
friendly_name: Blinds
devicename: Blinds_actuator_d1
esphome:
name: ${name}
friendly_name: ${friendly_name}
min_version: 2024.6.0
name_add_mac_suffix: false
project:
name: esphome.web
version: dev
esp8266:
board: d1_mini
i2c:
sda: GPIO04
scl: GPIO05
scan: true
id: bus_a
# Enable logging
logger:
# Enable Home Assistant API
api:
# Allow Over-The-Air updates
ota:
- platform: esphome
# Allow provisioning Wi-Fi via serial
improv_serial:
wifi:
# Set up a wifi access point
ssid: #your_ssid
password: #your_pass
# In combination with the `ap` this allows the user
# to provision wifi credentials to the device via WiFi AP.
captive_portal:
dashboard_import:
package_import_url: github://esphome/example-configs/esphome-web/esp8266.yaml@main
import_full_config: true
# To have a "next url" for improv serial
sensor:
- platform: uptime
name: ${devicename}_uptime
id: uptime_sec
internal: true
- platform: wifi_signal
name: ${devicename}_WiFi_Signal"
update_interval: 60s
- platform: resistance
sensor: source_sensor
configuration: DOWNSTREAM
resistor: 10kOhm
name: Resistance Sensor
- platform: adc
id: source_sensor
pin: A0
- platform: am2320
temperature:
name: "Living Room Temperature"
humidity:
name: "Living Room Humidity"
update_interval: 60s
setup_priority: -100
text_sensor:
- platform: template
name: ${friendly_name}_uptime
lambda: |-
int seconds = (id(uptime_sec).state);
int days = seconds / (24 * 3600);
seconds = seconds % (24 * 3600);
int hours = seconds / 3600;
seconds = seconds % 3600;
int minutes = seconds / 60;
seconds = seconds % 60;
return { (String(days) +" д. " + String(hours) +" ч. " + String(minutes) +" мин.").c_str() };
icon: mdi:clock
update_interval: 113s
output:
- platform: esp8266_pwm
pin: GPIO14
frequency: "25000 Hz"
min_power: 1%
max_power: 100%
id: forward_actuator
- platform: esp8266_pwm
pin: GPIO12
id: backward_actuator
frequency: "25000 Hz"
min_power: 1%
max_power: 100%
binary_sensor:
- platform: gpio
pin:
number: GPIO16
name: "PIR Sensor"
device_class: motion
cover:
- platform: time_based
name: "Time-Based_Cover"
open_action:
- output.set_level:
id: forward_actuator
level: 70%
open_duration: 1.4s
close_action:
- output.set_level:
id: backward_actuator
level: 70%
close_duration: 1.4s
stop_action:
- output.turn_off: forward_actuator
- output.turn_off: backward_actuator
Для датчика влажности был выставлен приоритет инициализации, для мотор-редуктора был выбран модуль time-based (положение задается временем включения мотора), также я ограничил скорость вращения мотора с помощью ШИМ-модуляции 25кГц, чтобы минимизировать инерцию, сохранив крутящий момент. Жалюзи стали двигаться плавно и тихо.
Итоги
Для ручного управления была предусмотрена веревочка, поскольку механизм ручного открывания по умолчанию оказался червячный, и его пришлось выкинуть.
Для дистанционного открывания на панель умного дома был в два клика выведен переключатель. Также я вывел графики температуры, влажности и освещенности.
Для автоматизации в интерфейсе Home Assistant были реализованы два сценария — первый открывает шторы утром, второй закрывает шторы за несколько часов до заката ИЛИ когда освещение падает ниже комфортного уровня (датчик в приборе). Все это реализуется в два клика, хотя можно писать и более сложные конфигурации триггеров.
В дальнейшем хочу организовать автоматическое проветривание по датчику влажности и температуры (делаю привод окна), а также прикупить сенсор CO2 и, возможно, барометр. Почему бы и нет? Думал также реализовать более точное позиционирование штор через энкодер (возможно, от мышки). Но сейчас меня вполне устраивает точность и без него.
Итоговая смета проекта лежит в диапазоне 300 рублей, плюс немного ненужного хлама и пару часов на проектирование. Релевантно оно для вас или нет, решайте сами, но буду рад услышать конструктивную критику. Спасибо!
По поводу того, что Ваш последний не взлетел, 13к просмотров вполне неплохо.
Вот герой обзора наверное не один день сидел, собирал из проводов и старого CD эти жалюзи, а идею и того больше вынашивал. А потом ещё писать обзор часа 2..4, в зависимости от объёма.
Миллионы мух не могут ошибаться.Просто выбор сайта не совсем верный. На то, что я описывал последний раз, ушло пару месяцев (портирование FOC хака на чистые регистры, тестирование на паре разных плат). Я думаю, это паре человек тут интересно — и то не уверен. Итог очевиден — обзор в конце списка. А интерес в нем вызвал вообще какой-то пустяк.Пы.сы. Пару лет назад тут проскакивал неплохой проект жалюзей с MQTT и HA.
Спасибо за наводку.
А хотя загуглил. Действительно, очень простая процедура, одну борожку резануть
Про ваш конкретно не знаю. А так вроде тянет
Если кому надо пишите в личку. Отправлю сдеком до пвз за ваш счет.
Вообще, уж простит меня автор, проект взрывает массу вопросов, начиная от того зачем нужны именно жалюзи (а не двуслойные роллшторы, если уж освещённость регулировать) до того зачем такое количество бесполезных датчиков, но это мое имхо, есессно.
А почему не делали сценарий — «закрыть шторы при включении света»?
механизм такой или очень похожий
Выглядят так (фото из интернета)
«Разум — величина постоянная. А население растет!»
Пользуйтесь механикой, остановите отупление населения! Даешь стимпанк!)))
А зимой запитывать от центрального отопления, будет быстрее )))
Если у фоторезистора в даташите описана кривая сопротивления, то её прям фильтром лямбдой можно в конфиге запрограммировать.
Если нету, можно примерно откалибровать существующим сенсором, телефоном на худой конец и перевести в приблизительные Люксы c calibrate_polynomial.
Заодно и сглаживание измерений какое-нибудь настроить теми же фильтрами.
https://aliexpress.ru/item/32408565688.html
Ну или хотя бы таких
https://aliexpress.ru/item/1005002966608154.html
Плюс ко всему, потроха из другого заначенного зарядника могут и не подойти по габаритам
В 1997 делал практически также, только не жалюзи, а занавески, и от фотореле(утром открылись, вечером закрылись) чисто механика с концевиками! Пришлось повозиться конечно с настройкой, но всё работало практически год, пока в армию не забрали…
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.