Авторизация
Регистрация

Напомнить пароль

Очередной привод форточки. Проветриваем помещение правильно!

Проветривание очищает воздух, снижает концентрацию углекислого газа и микробов, улучшает самочувствие и делает дыхание более комфортным. Но в ручном режиме оно может быть нерегулярным, а в холодное время года даже небезопасным для здоровья. Для решения этой проблемы уже давно существуют приводы для форточек, но удовольствие недешевое. Тем временем в сети лежит множество DIY-проектов, которые намного дешевле и удобнее в кастомизации. А еще это просто интересно! Под катом рассмотрим занятный механизм, а также его адаптацию под то, что «валялось в ящике стола», и автоматизацию проветривания через умный дом.

Итак, я вдохновился проектом Window Chain Actuator, который лежит на Thingiverse. Проект представляет собой цепной привод, в котором используется шаговый мотор для одновременного движения цепи и ее протяжки внутри механизма. Это вполне промышленное решение, используемое во «взрослых» приводах. Оно позволяет механизму быть достаточно компактным в закрытом состоянии и удерживать любое положение даже при внешнем давлении.

Я использовал его Modified вариацию, в которой изменено передаточное число главной червячной шестерни в сторону увеличения скорости, а еще сделано удобное разделение корпуса на отсеки, благодаря чему проект можно легко адаптировать под практически любые моторы и электронику.

Воодушевившись, я распечатал необходимые детали и приступил к сборке.

Механизм

Корпус, а также шестерни и ролики распечатались без проблем, так что потребовалось просто собрать все воедино. По инструкции для роликов требовались металлические валы диаметром 2.4мм, которых у меня не оказалось. Но не зря же блог называется DIY? Вместо валов я нарезал гвозди подходящих диаметров. Для роликов — 2.4мм, для цепи — 1.7мм. В оригинале автор использует отрезки филамента для сборки цепи, но на мой взгляд это как-то слабовато.

 

 

 

 

 

 

 

Детали пришлось «разработать» и смазать, так как подходили они впритык. Для смазки червячного привода использовал PTFE-смазку, как советовал автор оригинала.

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

Проверить работу механизма без мотора не представлялось возможным (привод-то червячный), потому пришел черед «сердца» механизма.

Силовая часть

В оригинале используется шаговый мотор 28byj-48 12V stepper + ULN2003. В модифицированной версии движок тот же, но переделанный под биполярный драйвер A4988 (что дает дополнительную мощность). Мне же показалось, что скорость открытия черепашья, потому я было решил использовать другой подход.

Мне пришла в голову мысль использовать мотор-редуктор N20, и я даже распечатал перемоделированный вал и отсек мотора. В тот момент я хотел управлять устройством через радиосигнал.

Но, несмотря на все плюсы такого решения (мощность, простота управления), пришлось от него отказаться. Во-первых, мотор-редуктор, как оказалось, очень громкий, а во-вторых, точно регулировать положение без обратной связи невозможно (добавим к этому нестабильность радиосвязи). А переиначивать всю идею ради энкодера было лень… И тут я вспомнил, что у меня валялся униполярный шаговик, который изначально планировался к установке в жалюзи. Но тогда я обошелся другим движком, а шаговик с драйвером остался.

Этим шаговиком оказался 28byj-48 на 5В. Решение даже слабее того, что в исходном проекте. Но поскольку переделка движка на биполярный — дело пары минут, то я решил не заморачиваться и собирать как есть. И не зря! Вхолостую мотор заработал вполне неплохо, хотя, как и ожидалось, медленно. 

Но со скоростью я уже смирился, так что приступил к подготовке электронной начинки.

Электроника

В оригинале используется контроллер Wemos D1 на базе ESP8266 и датчик температуры, который и контролирует степень открытия. Делался проект для форточки на майнинг-ферме, так что неудивительно. Я же решил использовать контроллер, который выдрал из умной лампочки на прошивке ESPHome. Такой же я недавно запихнул в умную розетку. О том, что еще полезного было в умных лампочках по 100 рублей, тоже был отдельный опус.

Так что схема начала вырисовываться очень простая. Мотор с драйвером, да контроллер с линейным стабилизатором. И все это питается от 5 Вольт, которыми снабжает самодельная низковольтная розетка из компьютерного БП. Разве что драйвер чуть не влез в корпус, пришлось отпилить кусок платы.

Программа и последующая доработка привода

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

globals:
  - id: FULL_STEPS
    type: int
    initial_value: '29000'

stepper:
  - platform: uln2003
    id: motor
    pin_a: P7
    pin_b: P6
    pin_c: P26
    pin_d: P24
    max_speed: 150 steps/s
    acceleration: 200
    deceleration: 200
    sleep_when_done: true

# ==========================================
# ИНТЕРФЕЙС В HOME ASSISTANT
# ==========================================

cover:
  - platform: template
    name: "Форточка"
    id: valve_cover
    has_position: true
    optimistic: true
    open_action:
      - stepper.set_target:
          id: motor
          target: !lambda 'return id(FULL_STEPS);'
    close_action:
      - stepper.set_target:
          id: motor
          target: 0
    stop_action:
      - stepper.set_target:
          id: motor
          target: !lambda 'return id(motor).current_position;'
    position_action:
      - stepper.set_target:
          id: motor
          target: !lambda 'return (int)(pos * id(FULL_STEPS));'

Допустим, окно начинает открываться на 20000 шагов, а на первой десятке тысяч гаснет свет. Тогда окно после возобновления энергоснабжения будет считать себя закрытым (0 шагов), cover будет работать некорректно, а вернуть его с помощью стандартной программы будет нельзя, ведь шагает-то мотор в одну сторону относительно нуля. Мне пришло в голову сделать дополнительное поле калибровки, чтобы уже вручную все регулировать. 

# Оставляем сырое поле управления на всякий случай для ручной отладки
number:
  - platform: template
    name: "Physical Target (Steps)"
    id: raw_step_target
    optimistic: true
    min_value: -50000
    max_value: 50000
    step: 10
    mode: box
    set_action:
      - stepper.set_target:
          id: motor
          target: !lambda 'return (int)x;'

Но ведь и это неудобно! Надо руками все подкручивать, проверять насколько плотно закрыто окно, дергать механизм... 

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

Но одно дело написать пару строчек кода, а другое дело установить датчик, которого нет на руках… Ждать не хотелось, потому я нашел в сети еще один проект, который и заменил мне покупку геркона.

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

Модель немного переделал под свои магнитики, плюс крепления изменил на боковые, в остальном оставил как есть.

С основной схемой соединил посредством разъема. В оригинале используется 2 симметричных разъема, чтобы можно было подключать питание с двух сторон. Я же для питания использовал разъем 5.5x2.1, а с другой стороны припаял 4.0x1.7 — для геркона. Это не позволит перепутать разъемы и спалить мозги приводу.

Схема изменилась не очень сильно.

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

esphome:
  name: automatic-window
  friendly_name: Automatic Window
  on_boot:
    priority: -100
    then:
      - script.execute: calibrate_stepper
script:
  - id: calibrate_stepper
    then:
      # ==========================================
      # ЭТАП 0: ПРОВЕРКА И ОТСКОК (Clearance)
      # ==========================================
      # Если геркон УЖЕ замкнут на старте - сначала выезжаем из его зоны
      - if:
          condition:
            binary_sensor.is_on: reed_switch
          then:
            # Отъезжаем на +1500 шагов от текущей точки
            - stepper.set_target:
                id: motor
                target: !lambda 'return id(motor).current_position + 1500;'
            # Ждем, пока мотор физически проедет эти 1500 шагов
            - wait_until:
                condition:
                  lambda: 'return id(motor).current_position == id(motor).target_position;'
            # Даем небольшую паузу механике успокоиться
            - delay: 200ms

      # ==========================================
      # ЭТАП 1: ПОИСК КРАЯ ГЕРКОНА
      # ==========================================
      # Теперь геркон точно отжат. Едем в глубокий минус искать его.
      - stepper.set_target:
          id: motor
          # Берем -32000 от ТЕКУЩЕЙ позиции, чтобы точно хватило хода
          target: !lambda 'return id(motor).current_position - 32000;'
      # Скрипт замирает и ждет прерывания (замыкания геркона)
      - wait_until:
          condition:
            binary_sensor.is_on: reed_switch
      # Геркон сработал! Мгновенно тормозим мотор.
      - stepper.set_target:
          id: motor
          target: !lambda 'return id(motor).current_position;'
      - delay: 200ms # Пауза на торможение
      # ==========================================
      # ЭТАП 2: ФИНАЛЬНЫЙ ДОВОД (-1300)
      # ==========================================
      - stepper.set_target:
          id: motor
          target: !lambda 'return id(motor).current_position - 1300;'
      # Ждем, пока мотор не доедет эти последние 1300 шагов
      - wait_until:
          condition:
            lambda: 'return id(motor).current_position == id(motor).target_position;'
      # ==========================================
      # ЭТАП 3: ФИКСАЦИЯ НУЛЕВОЙ ТОЧКИ И КАВЕРА
      # ==========================================
      # Жестко моем мозги шаговику: здесь теперь 0
      - stepper.report_position:
          id: motor
          position: 0
      - stepper.set_target:
          id: motor
          target: 0
      # Выставляем Cover в состояние "Закрыто".
      # В Home Assistant 0.0 - это закрыто (0%), а 1.0 - это открыто (100%).
      - cover.template.publish:
          id: valve_cover
          position: 0.0
binary_sensor:
  - platform: gpio
    pin: P8
    id: reed_switch
    name: "Герконный сенсор"
# Кнопка для ручного перезапуска скрипта калибровки прямо из интерфейса
button:
  - platform: template
    name: "Run Calibration Script"
    id: run_cal_btn
    on_press:
      - script.execute: calibrate_stepper

Финальные доработки и автоматизация

При монтаже устройства вылезли еще некоторые косяки. Во-первых, монтаж оригинального проекта производился на другой грани механизма (к верхней части над окном). В ремиксе проекта крепление верное, но, на мой взгляд, крайне хлипкое. Так что я взял оригинальное, и доработал его во FreeCAD.

Во-вторых, защелка окна оказалась слишком короткая. Из-за чего после полного открытия форточка не могла закрыться, упершись в корпус привода. Пришлось удлинить на 2 мм. 

Для фиксации защелки в оригинале используется винтик, но это неудобно, если нужно вручную открыть окно (помыть, например). Я просто вставил мини-отвертку в качестве фиксатора. Вытащил — и окно свободно открывается. Теперь удобно!

Плюс не хватало укладочных креплений для проводов. Нарисовал свои.

Наконец, чисто косметическая проблема горба на стыке двух половинок корпуса. Решил ее металлической пластиной, которую посадил на один из винтов корпуса.

После этого, наконец, основной проект был завершен. 

Осталось добавить органы управления на панель в HomeAssistant.

Поехали!

Естественно, ускорение сумасшедшее. Реальная скорость представлена на предыдущем гифе. Эх, чудес не бывает...

Напоследок решил сделать автоматизацию для завершения проветривания по температуре. Сейчас на улице достаточно холодно, а в комнате есть датчик в умной лампе, которую я тоже как-то собирал. С помощью автоматизаций я связал снижение температуры с кнопкой закрытия окна. Довольно кустарно, но это работает.

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

Финальные мысли

Уже прикупил датчик углекислого газа SCD40, планирую его разместить в другом умном устройстве, о котором пойдет речь в следующей статье. С его помощью я смогу в HomeAssistant полностью прописать  автооткрытие и автозакрытие. Наконец-то дома появится весенний свежий воздух! В целом, ради этого все и задумывалось.

По итогу, мне понравился и сам проект, и процесс его адаптации. По бюджету дороже всего вышла пластмасса. С учетом непропечаток и прочего — рублей 200-250. Контроллер я выдрал из лампочки за 100 рублей (все еще остались блок питания и светодиоды), мотор с драйвером стоил рублей 130. Гвоздей, наверное, рублей на 20 потратил. В общем, рублей 500 по материалам вышло :)

Конечно, и времени потратил достаточно, но зато с удовольствием! И хлама теперь поменьше валяется… Да, это не цельнометаллический механизм, и мотор без переделки не столь мощный и быстрый. Но устройство вполне удобное и законченное. Статья, тем временем, тоже подошла к концу. Спасибо за внимание! Ну и напоследок...

Добавить в избранное
+34 +43
свернутьразвернуть
Комментарии (25)
RSS
+
avatar
+2
  • Elk
  • 23 апреля 2026, 07:54
Закрыть бы этот диайвай общим кожухом.
+
avatar
+3
  • matis
  • 23 апреля 2026, 09:13
Кожух тут не поможет, только замена окна. Не дай никому бог такого диайвайщика в доме.
+
avatar
+3
Смущает, что запорный механизм не работает. Получается не плотное прилегание по периметру.
И, если первый этаж, с улицы открыть, думаю, не сложно будет.
+
avatar
+2
там перед окном сетка, если что…
+
avatar
+1
  • tans
  • 23 апреля 2026, 08:55
сетка срезается за 5 сек
+
avatar
+2
Сетка устанавливается снаружи. Снаружи и снять её можно.
+
avatar
+8
Жесть какая...

Лучше уж без него, чем лишать себя нормального управления окном и поганить все это таким колхозом, без обид.

На голубом сайте полно готвого и для откидывания и для открывания от 1.9к, причем в готовом виде и корпусе, смысл?

Ну и для уменьшения размера, конечно, просится актуатор.
+
avatar
0
  • tans
  • 23 апреля 2026, 08:58
по ссылке в оригинале автор проекта ставил сверху, у него еще приклеен механизм с жалюзи, и без цветного «геркона», поэтому блок этот почти не заметен там.
+
avatar
0
Как-то громоздко выглядит. Не имеет значения или мельче делать нецелесообразно?
+
avatar
+2
  • kvarkk
  • 23 апреля 2026, 08:32
Откидывание окна выглядело бы более разумным в зимний период. А так круто, конечно.
+
avatar
+1
  • matis
  • 23 апреля 2026, 09:28
Это в принципе неразумно в зимний период. Только представьте, сидите вы за компом, никому ничего плохого не делаете, а тут внезапно открывается створка окна и сквозняк фигачит вам по спине.
+
avatar
0
  • hawkeye
  • 23 апреля 2026, 08:32
промышленность выпускает что-то такое?
+
avatar
+5
да. называется «бризер»
+
avatar
+1
А если ручку окна закрыть, кто победит? ;)
+
avatar
0
  • vik-q
  • 23 апреля 2026, 08:41
Хотел ещё спросить, что будет, если в щель засунуть руку. Но вспомнил, что автор писал про ускорение.
+
avatar
0
  • tans
  • 23 апреля 2026, 08:57
тоже хотел спросить. мне кажется окно победит пластиковые шестерни
+
avatar
+3
  • Taleks
  • 23 апреля 2026, 08:59
Ставишь окно на микропроветривание и вот, всегда работающая вентиляция. В тёплое время года и так всегда окна открыты.
+
avatar
0
  • Beer100
  • 23 апреля 2026, 09:09
Вот тот случай, когда HomeAssistant управляет не домом, а хозяином! )))

И, не в обиду автору, проект выглядит не как изделие, а как поделка. Хотя объем работ проделан не маленький…
+
avatar
+2
Не совсем понятно, для чего этот изврат. На мой взгляд куда логичнее установить бризер или его альтернативу. Плюсом можно хоть как-то фильтровать воздух, немного заглушить шум улицы и сетка за окном становится ненужной.
+
avatar
0
  • Lexaone
  • 23 апреля 2026, 09:15
То что, сделал автор выглядит немного топорно, явно не для всех,
но это реально весьма дешевая алтьтернатива например бризеру:
— сам бризер — 18-30 тыс рублей (а посмотрите, сколько tion стоят)
— подготовка места под него (отверстие в стене, диаметр 100-200 mm(sic!), подвод электричества) — думаю 6-10 тыс.
и это еще если повезет, и вы место под бризер подходящее найдете на стене!

а тут автор конечно лукавит, что 500 рублей поскольку:
— пластмасса (и принтер чтоб распечатать!!!)
— тихий шаговик
— одноплатник на esp
— сетевая инфраструктура ( wifi, HA)
— металические части(всякие шурупы) конечно нужно использовать неокисляемые и нержавеющие — иначе и без того, какой
видок, будут еще добавлены подтеки ржавчины через год-два.
— прямые руки
— смелость испоганить окно ( 8-) ) но окошко в конце концов несложно и восстановить, в отличии от громадной дырищи в стене!
но это никак не 24-40 тыс рублей! — тыс 4-5 максимум. ну и опыт — бесценно!

Нравиться мне все-таки DYI рубрика на PlusPda.
Очень вдохновляет!
+
avatar
0
  • matis
  • 23 апреля 2026, 09:34
— сам бризер — 18-30 тыс рублей (а посмотрите, сколько tion стоят)
Ну так и заколхозил бы бризер, из старого автомобильного вентилятора и набора ширпотребовских фильтров от авто/пылесоса. Культурный ящик из гипсокартона/фанеры/пластика вроде не сложно сделать.

Хотя тридцатка сейчас вообще ни о чем…
+
avatar
0
Ну а чего там такого дорогого то? У меня есть 3д принтер. Пластик стоит 800р за 1кг, там фигня по пластику. Если есть знакомый с 3д принтером, то он напечатает бесплатно все детали. Остальное ну рублей на 500, максимум 1000
+
avatar
0
Отслеживание температуры — это, конечно, хорошо (впрочем, зимой проветривание — это в первую очередь именно обновление воздуха, температуру-то я бы предпочёл не понижать). А осадки и ветер как контролировать будете?
+
avatar
0
  • Reverse
  • 23 апреля 2026, 09:31
А если в открытое окно кошка засунет моську? А она засунет обязательно!
Короче полная фигня долго, дорого, уродско, ненадёжно. ТС случаем не инженер АвтоТАЗа? Там тоже любят такие поделки вкорячивать.
+
avatar
0
  • iksser
  • 23 апреля 2026, 09:36
Комментарий ожидает проверки администрацией сайта. Подробнее...
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.