В предыдущем материале на тему умных устройств мы собирали умные жалюзи «из того, что было». Продолжим традицию с обычными шторами. Не обошлось без 3д печати.
Совсем недавно на одном из маркетплейсов мне попалось на глаза вот такое устройство:
Что это? На вид напоминает причудливую голову робопса… На деле же выполняет функцию движения штор на дистанционном управлении.
На одном из каналов youtube был найден процесс разборки данного девайса.
Внутренности
Внутри обнаружился классический мотор-редуктор N20, плата управления и набор аккумуляторов. То есть в целом, конструкция примитивная. Еще снаружи есть ролики для скольжения по багете в виде ушек.
Поразмыслив, я выделил следующие конструктивные недостатки:
Подпружиненные ролики недостаточно надежны и достаточно сложны
Устройство предполагает периодическую подзарядку
Перезарядка чего-то, висящего в 1.5м от пола и периодически елозящего туда-сюда не слишком удобна
Поразмыслив еще, я понял, что повторять эту конструкцию мне не очень хочется, но полезные конструктивные особенности стоит оставить. Например, автономность. Я нашел другую схему автоматических штор для обычных багет.
Суть ее в движении фиксирующей детали по направляющей из нити. На просторах интернета я обнаружил такое же самодельное решение на основе шагового двигателя и обыкновенной веревки.
Решение достаточно интересное, хотя у меня штора одинарная, так что придется немного его упростить.
Штора обыкновенная, тяжеленная
Но использовать прецизионный дорогостоящий узел для управления обычными шторами?.. Что-то идея так себе. Покупать мотор-редуктор из Китая? Долго ждать, да и не дешево.
И тут я вспомнил, что у меня завалялся очередной DVD-привод. А как мы помним из этой моей статьи, там есть достаточно полезный редуктор. Собственно на основе него я и решил собрать автоматические шторы. Делайте ваши ставки, сможет ли он двигать эти тяжеленные шторы или нет.
Механика и корпус
Как мы поняли из видео, для движения штор нам нужна двойная катушка и ответный ролик. Катушку я решил распечатать на 3д принтере, а затем прикрутить к последней шестерне редуктора тремя винтами. Чтобы катушка печаталась без поддержек, я разделил ее на 3 части, которые необходимо скреплять винтом m3x50 с гайкой.
Ответный ролик состоит из пластмассового крепления к багете и собственно вращающегося цилиндра. Запчасти соединяются обыкновенным гвоздем 2мм, а к багете крепятся винтом m3. Позже винт я заменил на защелку для удобства размонтирования.
Однако проверив конструкцию в деле, я ожидаемо обнаружил, что во время вращения катушка вместе с шестерней слетает с хлипкого пластикового крепления на редукторе. Не беда! Здесь нам поможет ответный подшипник и корпус. С этой мыслью я смоделировал корпус с отверстием для подшипника и крышку с креплением редуктора.
Крышка фиксирует редуктор двумя винтами, а сама крепится к корпусу четырьмя. Также на ней я предусмотрительно оставил отверстия для будущего крепления к багете (просто наделал отверстий в случайных местах).
Ну и сам фиксатор катушки, выполненный в оригинальном стиле «Радиоактивная угроза».
Железо
Итак, с силовой установкой определились, теперь осталось питание и управление. Поскольку хотелось сделать автономный девайс, энергопотребление необходимо было минимизировать, так что пришлось воспользоваться Attiny13 в качестве управления и радиосвязь в качестве управляющего канала (а еще потому, что у меня завалялись smd-микросхемки Attiny и цифровые модули 433МГц). Мотором будет управлять драйвер TA6586.
Питание предполагалось от аккумулятора в случае автономной работы, и от БП 5 вольт в нормальном режиме. А чтобы мощность не падала по мере разряда аккумулятора, подключим повышающий преобразователь MT3608. Тут люди знающие справедливо возразят: «Преобразователь в холостом режиме потребляет столько, что никакой автономности там не будет». И в общем случае так и есть, но если посмотреть на схему…
Как видно, после небольшой переделки преобразователь можно включать прямо с микроконтроллера (необходимо отпаять ножку от плюса питания и припаять к преобразователю). Так что аккумулятор он уже не высадит. Кроме того, attiny подключается через защиту, так что и здесь ему ничего не угрожает. Да и ниже 3.3В приемник не должен работать, а без него схема потребляет микроамперы. Спаял я это чудо на макетке (да-да, и smd-микросхему тоже).
Припать такую микросхему на макетку несложно. Она паяется четырьмя выводами, а для электрических соединений я использую провода шлейфа IDE (у меня их валяется небольшой ящичек).
В принципе, все было готово, и даже клеевой пистолет уже почти разогрет, но я решил все-таки сделать покрасивее, и смоделировал такие вот крепления на базе аккумуляторов 18650.
Спаиваем провода.
Для крепления на багету была придумана вот такая дуга с двумя фиксаторами, которая обхватывает пластину, на которую и кладется багета.
Оставалось запихнуть в корпус! Но здесь я немного ошибся. Конструкция никак не влезала, ей мешал потенциометр преобразователя. Ну и ладно! Гравер в руки и делаем дырку. Именно дырку, «отверстием» это не назовешь.
С использованием двустороннего скотча и такой-то матери все это кое-как поместилось. Оставалось сделать вилку для питания и вешать на багету.
Но постойте! А прошивка? Да, стоит поговорить об этом отдельно.
Прошивка и интеграция
Для того, чтобы шторы открывались и закрывались сами, нужно продумать свой протокол обмена по радиосвязи. Или использовать классику. Была выбрана классика с библиотекой TinyRF и EV1527. Рассказывать про нее я особо не буду, на сайте есть статья разработчика. Несмотря на то, что мы уже можем передавать данные, надо определиться, что передавать.
Я придумал вот такую надстройку над стандартным протоколом EV1527.
00001000 00011110 11110111
char addr ~addr ~char
Первый байт отводится под знаковый char — число от -127 до 127. Оно обозначает время и направление работы привода. Последний байт просто инвертированный первый. Второй байт содержит одновременно адрес устройства и его инверсию. Адрес состоит из 4 бит, что эквивалентно числам от 0 до 15.
Приемник (шторы) сначала проверяет адрес, затем корректность — соответствие прямых битов инверсным, затем интерпретирует команду. Включает преобразователь напряжение, двигатель в нужном направлении, отсчитывает время, выключает двигатель, выключает преобразователь. Полный код прилагаю.
#define F_CPU 1200000UL // Clock speed 1.2 MHz (-Ulfuse:w:0x6A:m)
#define TRF_RX_PIN PB3 // Receiver on Pin 5
#define TRF_DATA_SIZE 3 // Command size 3 bytes
#define TRF_TX_DISABLED // Exclude transmitter code to preserve space
#define DC_DC_PIN PB0
#define FRW_MOTOR_PIN PB2
#define BKW_MOTOR_PIN PB1
#define DEVICE_ADDR 1
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include "TinyRF.h"
//Output pins init
#define init_output_pins() DDRB |= (1 << DC_DC_PIN) | (1 << FRW_MOTOR_PIN) | (1 << BKW_MOTOR_PIN)
//Output pins control
#define set_output_pin(pin, state) ((state) ? PORTB |= (1 << (pin)) : PORTB &= ~(1 << (pin)))
int main(void)
{
// Initialize timer and ports
trf_init();
init_output_pins();
while (1)
{
// If a new command is available
if (trf_has_received_data()) {
// Get received data
uint8_t data_buffer[TRF_DATA_SIZE];
trf_get_received_data(data_buffer);
uint8_t addr = data_buffer[1]>>4;
//Address check
if (addr==DEVICE_ADDR) {
//CRC check
if ((data_buffer[0] == (uint8_t)(~data_buffer[2]))
&& ((addr & (~data_buffer[1])) == addr)) {
//No interrupts when working
cli();
//Power saving off
set_output_pin(DC_DC_PIN, 1);
_delay_ms(10);
//Direction check
byte pin = ((char)data_buffer[0]>0)?FRW_MOTOR_PIN:BKW_MOTOR_PIN;
//Motor on
set_output_pin(pin, 1);
//Working cycle
for (int i=0; i<abs((char)data_buffer[0]);i++) {
_delay_ms(1000);
}
//Motor off
set_output_pin(pin, 0);
//Power saving on
_delay_ms(10);
set_output_pin(DC_DC_PIN, 0);
//Interrupts re-enable
sei();
}
}
trf_reset_received();
}
}
}
Код довольно простой, занимает 60% (618 байт) памяти устройства(1 Кбайт). Во время работы штор команды не принимаются. Отсчет времени в цикле обусловлен экономией памяти.
Для управления нужен хаб на esphome (с передатчиком) или пульт rf433. В хабе прописываем передачу сигнала руками (позже сделаю скрипт).
Данный код шлет 8 секунд на закрытие и -7 на открытие (закрывать сложнее). Это дает нам выключатель в HomeAssistant.
К шторам можно прикрутить, например, автооткрытие и автозакрытие по времени.
Установка
Для установки нам нужно повесить привод на багету, зафиксировав шпеньками.
Нужно трижды отмерить размер багеты нитью, намотать на катушку треть и привязать ее к кольцам штор (продев через ролик, т.к. ролик инвертирует движение нити, то есть при смотке катушки штора будет ехать к приводу).
Далее нужно привязать конец нити ко второй катушке.
Чтобы шторы открывались равномерно, рекомендую связать кольца леской.
А теперь проверим!
Заключение
Итак, шторы работают и свои функции выполняют. Однако попользовавшись ими некоторое время, я обнаружил пару недостатков. Во-первых, 127 секунд для времени работы — многовато, а точность отсчета в секунду не позволяет нормально установить время движения штор (то не доезжают, то мотор упирается в конце движения и едет на месте). Во-вторых, иногда от соседей прилетает залетный сигнал, и шторы вдруг оживают сами (ума не приложу, что там прилетает). Так что для дачи (вдали от городской суеты) с большим окном, конечно, сойдет. А вот для дома не очень. Кроме того нет защиты от злоумышленников.
Все это вполне можно решить прошивкой — я вообще думаю поменять логику работу устройства, сделав 4 команды: Left, Right, Set, Reset (это уменьшит число значащих бит и вероятность случайного приема). Оно будет запоминать время открытия и закрытия, которое можно будет сбросить. Далее следует кое-как вкорячить динамические коды (rolling code) Keeloq в attiny для защиты от людей недобросовестных, а в esphome — их генерацию.
Кроме всего прочего, система с доработками схемы и более мощным приводом вполне потянет откатные ворота или пластинчатую гаражную дверь. Конечно, намного удобнее реализовать систему на esphome напрямую, но для этого нужен хороший сигнал Wi-fi (или заморачиваться с протоколом ESP-NOW). Радиосвязь же достаточно дальнобойна и не создает помех для передачи-приема данных внутри локальной сети 2.4 ГГц.
Но в техническом плане проект работает хорошо — он не очень шумный, а мощности там с запасом. В автономном режиме его хватит где-то на месяц, что в целом неплохо. Да и выглядит устройство, на мой взгляд, вполне прилично. В интерьер вписывается. А по комплектующим он мне вышел в сущие копейки — около 100 рублей, не считая еще сотки на пластик. 3д принтер + умный дом = любовь, как-то так :) Единственно, долго пришлось разбираться со связью, но это уже совсем другая история. В любом случае, опыт интересный. А вот интересный ли он для повторения, хотелось бы услышать в комментариях. Спасибо за внимание!
Неужели так трудно, если позволяет здоровье (возраст), открыть и закрыть шторы?
Или это частный дом (особняк) где миллион комнат и штор. Тогда другое дело.
1) хочется просыпаться от, собственно, света из окна.
2) под окном что-то стоит, и к нему подходить неудобно
3) автоматическое закрывание штор, кода темнеет
4) эмуляция присутствия
5) банальный вау-эффект
6) с женщиной дело идёт к кровати, чтобы не отвлекаться — тут голосовой команды хватит
7) с утра совсем из кровати вылезать лень, пнул шторы открыться — чтобы хоть солнечный свет таки разбудил
Концевики вам скорее нужны, а не таймеры шаманить. На штору или нитку магнит, по обоим концам герконы, по их замыканию и определите что доехали до конца. Ну, или кнопки с таким же эффектом.
Не будет зависеть от скорости движения, да и вручную можно штору спокойно открывать-закрывать, контроллер потом лишнего не будет тянуть.
Либо как вариант определять что на мотор повысилась нагрузка и он стал жрать больше, это будет означать что он упёрся. Именно так работает соноффовский вариант.
Кстати, ещё у него можно своровать и идею питаться от солнечной батарейки, на окне это вполне может работать.
У меня он был, но не понравилось как сам в себе запутывается с двойной шторой и пока я его отправил в кладовку.
Идея хороша, но не совсем понятно, зачем автономность. Потому что если без неё, то сразу избавляемся от преобразователя (или не избавляемся, если нет БП на 3.3) и радиомодуля и всех связанных с ним проблем, а тупо пихаем какую-нибудь esp8266 и драйвер. Это ж шторы, а не насос в скважине, ну не откроются — и хрен с ними.
Я бы, кстати, поставил один концевик — возле мотора, и магнит на катушку прицепил и датчиком Холла обороты считал. То есть в одну сторону до концевика, в другую — подсчётом, чтобы на второую сторону окна электричество не мостить.
чтобы на второую сторону окна электричество не мостить
Так вот как раз и причина почему нужна автономность. Ну, точнее почему приходится делать автономно.
Розетки под потолком у окна не ставят если при ремонте сразу шторы не закладывали, а тащить кабель через пол комнаты так себе затея.
Вот второй концевик можно поставить на верхней половине нитки, она идёт в обратную сторону от шторы, тогда оба геркона/кнопки будут у активной стороны, хоть и появится погрешность натяжения нити.
Питание предполагалось от аккумулятора в случае автономной работы, и от БП 5 вольт в нормальном режиме
То есть автономное питание — на какие-то нештатные случаи. Собственно, это меня и удивило — это же шторы, зачем тут так заморачиваться ради нештатных ситуаций.
Во-вторых, иногда от соседей прилетает залетный сигнал, и шторы вдруг оживают сами (ума не приложу, что там прилетает).
Если есть домашние животные, то это их сигналы! Сегодня есть люди, которые не только могут декодировать эти сигналы, но и осуществить их сохранение с дальнейшим переносом:
Или это частный дом (особняк) где миллион комнат и штор. Тогда другое дело.
1) хочется просыпаться от, собственно, света из окна.
2) под окном что-то стоит, и к нему подходить неудобно
3) автоматическое закрывание штор, кода темнеет
4) эмуляция присутствия
5) банальный вау-эффект
6) с женщиной дело идёт к кровати, чтобы не отвлекаться — тут голосовой команды хватит
7) с утра совсем из кровати вылезать лень, пнул шторы открыться — чтобы хоть солнечный свет таки разбудил
Не будет зависеть от скорости движения, да и вручную можно штору спокойно открывать-закрывать, контроллер потом лишнего не будет тянуть.
Либо как вариант определять что на мотор повысилась нагрузка и он стал жрать больше, это будет означать что он упёрся. Именно так работает соноффовский вариант.
Кстати, ещё у него можно своровать и идею питаться от солнечной батарейки, на окне это вполне может работать.
У меня он был, но не понравилось как сам в себе запутывается с двойной шторой и пока я его отправил в кладовку.
Я бы, кстати, поставил один концевик — возле мотора, и магнит на катушку прицепил и датчиком Холла обороты считал. То есть в одну сторону до концевика, в другую — подсчётом, чтобы на второую сторону окна электричество не мостить.
Розетки под потолком у окна не ставят если при ремонте сразу шторы не закладывали, а тащить кабель через пол комнаты так себе затея.
Вот второй концевик можно поставить на верхней половине нитки, она идёт в обратную сторону от шторы, тогда оба геркона/кнопки будут у активной стороны, хоть и появится погрешность натяжения нити.
То есть автономное питание — на какие-то нештатные случаи. Собственно, это меня и удивило — это же шторы, зачем тут так заморачиваться ради нештатных ситуаций.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.