Как следует из названия, контроллер предназначен для управления рольшторами, привод которых выполнен на шаговом двигателе типа 28BYJ-48. Он позволяет реализовать команды «Поднять»,«Опустить» и «Стоп» как с радиобрелка (пульта дистанционного управления), так и с помощью радиомодуля, подключенного к системе домашней автоматизации на Raspberry Pi. Предусмотрена возможность получения подтверждения выполненной команды и положения шторы (закрыта, открыта, среднее положение) с отображением информации на web-странице, а так же «обучение» контроллера от разных радиобрелков.
Контроллер структурно состоит из трех готовых модулей – драйвера шагового двигателя, выполненного на микросхеме L298N, приемника и передатчика на частоту 315/433Мгц. Все модули подключаются к центральной схеме управления, выполненной на PIC контроллере 16F676 (рис.1)
Рис. 1
Микросхема DA1 предназначена для преобразования напряжения 12В в 5В для питания микроконтроллера, приемника и передатчика, а так же драйвера с шаговым двигателем. Так как ток потребления шагового двигателя довольно значительный, микросхему стабилизатора DA1 LM7805 желательно установить на небольшой теплоотвод.
Выключатели SF1 и SF2 – это магнитоуправляемые контакты (герконы), предназначенные для контроля крайнего верхнего и крайнего нижнего положения рольшторы. С целью уменьшения прокладываемых проводов от контроллера, применено их параллельное включение.
Нефиксируемая кнопка S1 служит для входа в режим обучения (программирования) контроллера от новых брелков. Светодиод VD1 указывает на работу контроллера в режиме обучения.
Конструктивно контроллер представляет собой печатную плату, на которую с помощью разъемов подключены модули приемника и передатчика, а так же установлена плата драйвера шагового двигателя (рис.2)
Рис. 2
Алгоритм работы контроллера. Предположим, что рольштора находится в неком среднем положении (т.е. ни один из герконов SF1, SF2 не замкнут). При нажатии кнопки брелка «Поднять» или «Опустить» двигатель начинает вращаться и штора поднимается (опускается). Достигнув крайнего верхнего (нижнего) значения, штора магнитом, закрепленным на ней, замыкает геркон и двигатель останавливается. После остановки двигателя команда на аналогичное действие будет заблокирована до тех пор, пока не разомкнется сработавший геркон. Другими словами, если вы подняли штору и она автоматически остановилась в крайнем верхнем положении, на следующую команду «Поднять» контроллер реагировать не будет, т.к. данная команда в такой ситуации лишена всякого смысла. Аналогично происходит и при положении шторы в крайнем нижнем положении – в данной ситуации контроллер не будет реагировать на команду «Опустить». В случае пропадания питания контроллера и его повторного включения, состояние положения шторы записывается в энергонезависимую память.
Для предотвращения аварийных ситуаций и защиты шагового двигателя, когда один из герконов по какой-либо причине не сработал, в программе предусмотрено временное ограничение работы электродвигателя. Это временное ограничение должно немного перекрывать время полного подъема или опускания шторы и устанавливается пользователем при программировании микроконтроллера.
Кроме автоматической остановки шторы в крайних положениях, пользователь может в любой момент остановить штору в нужном положении командой «Стоп» радиобрелка. Эта команда формируется нажатием и удерживанием более 1 секунды любой кнопки радиобрелка во время работы шагового двигателя.
Рассмотрим обучение (программирование) кнопок радиобрелка. Сразу хочу оговориться, что понятия «Поднять» и «Опустить» являются относительными, они зависят от того, как по отношению к рольшторе установлен шаговый двигатель. Поэтому условно здесь считаем, что опускание шторы - это вращение двигателя по часовой стрелке, подъем шторы – против часовой стрелки.
Вход в режим обучения (программирования). Нажать и удерживать кнопку S1. Светодиод будет последовательно по кругу мигать сериями из одной и двух вспышек.
Кнопка «Поднять». Отпустить кнопку S1 после одиночной вспышки светодиода. Нажать на брелке кнопку, которая отвечает за поднятие шторы. Светодиод погаснет - команда записана в память микроконтроллера.
Кнопка «Опустить». Отпустить кнопку S1 после двойной вспышки светодиода. Нажать на брелке кнопку, которая отвечает за опускание шторы. Светодиод погаснет - команда записана в память микроконтроллера.
Теперь перейдем к рассмотрению распределения памяти EEPROM микроконтроллера, так как некоторые из параметров нам туда необходимо записать вручную (рис.3)
Рис. 3
Область 1 служит для хранения кодов кнопок брелков. В этой области ничего не меняем, коды записываются автоматически при обучении брелков.
Область 2. Здесь хранится коды, передаваемые на сервер для позиционирования состояния шторы – «Поднято», «Опущено» и «Среднее положение». Их можно изменять под любые свои значения. Разумеется, аналогичные значения должны быть прописаны в радиомодуле Raspberry Pi.
Область 3 – резерв.
Область 4. Здесь хранятся служебные байты. Под них отведено три последние ячейки.
Ячейка 7F – адрес записи следующего кода кнопки брелка. Эту ячейку редактировать пользователю запрещается, иначе нарушится последовательность записи.
Ячейка 7E – флаги крайних положений. Редактирование ячейки так же запрещено.
Ячейка 7D – время работы шагового двигателя. Напомню, что этот параметр отвечает за ограничение времени работы двигателя в случае аварийной ситуации. Данная ячейка программируется пользователем. Значения, которые соответствуют времени работы шагового двигателя, ориентировочно можно взять из графика (рис.4)
Рис. 4
Допустим, у нас штора поднимается (опускается) 40 секунд. Следовательно, время работы двигателя можно ограничить до 45 секунд. Из графика видно, что значению времени 45 секунд (по оси Y) соответствует коэффициент 10 (по оси Х). Именно это значение и необходимо занести в ячейку 7D при программировании микроконтроллера.
В рассмотренном варианте контроллер позволяет управлять рольшторой как с радиобрелка, так и эмуляцией такого брелка с помощью радиомодуля, подключенного к системе домашней автоматизации на Raspberry Pi. Во втором случае используется стандартный web-интерфейс радиомодуля.
Однако недостатком такой системы является то, что контролировать положение рольшторы возможно только при управлении с брелка. При удаленном управлении через web-интерфейс отследить состояние шторы будет невозможно, и управление будет осуществляться «вслепую».
Если вас устраивает такой вариант, то в контроллер можно не устанавливать радиопередатчик, т.к. он в данной ситуации он не будет задействован. Но если вы все же хотите знать положение шторы при удаленном управлении, то для организации обратной связи контроллера с радиомодулем необходимо радиопередатчик оставить в схеме контроллера и добавить на сервер дополнительную web страницу для этого контроллера.
Внешний вид web-интерфейса, предназначенного для удаленного управления рольшторами, показан на рис. 5. Он позволяет организовать управление четырьмя контроллерами рольштор.
Рис. 5
На странице web-интерфейса «Роллеты», может отображаться три состояния шторы. С крайними положениями «Закрыто» и «Открыто» думаю все ясно. А вот «Среднее» следует понимать, что это необязательно именно такое положение, когда штора ровно наполовину поднята (опущена). Допустим, если рольштора находится почти в открытом или почти в закрытом положении, однако при этом оба герконы разомкнуты, то такое состояние отображается тоже как «Среднее». Разумеется, можно было бы установить дополнительные герконы и более точно определять позиционирование рольшторы. Но это прокладка дополнительных проводов и установка герконов на оконной раме, поэтому от такого варианта при разработке устройства решено было отказался.
Как вариант, точное положение можно было бы отслеживать по времени работы двигателя. Но опять же, это потребует индивидуальной тонкой настройки для каждой рольшторы. Кроме того, в результате возможных «проскальзываний» шагов двигателя будет накапливаться ошибка, которая в результате приведет к совершенно непредсказуемому результату. Исходя из этих соображений, и было принято решение ограничиться контролем только крайних положений, а «никакое» из этих положений считать как «среднее».
Работать через web-интерфейс можно посредством уже используемого радиомодуля. Но, во избежание различных коллизий, лучше добавить на шину RS485 ещё один радиомодуль, присвоив ему другой сетевой адрес.
Для удаленной работы через web-интерфейс, необходимо в область памяти датчиков радиомодуля записать коды сигналов подтверждения, которые формирует контроллер рольшторы. Соответственно, в область памяти брелков радиомодуля записываются коды, формируемые радиобрелками. Коды брелков (поднять, опустить) и коды сигналов подтверждения (открыто, закрыто, среднее) показаны на рис. 6.
ADMIN, повторил устройство. Записал коды двух кнопок радиобрелка, прочитанные сканером радиобрелков. не реагирует вообще. Записал коды двух кнопок самим устройством несколько раз одни и те же. Коды получаются разные. На радиобрелок хочет реагирует хочет не реагирует. Не проще ли было приемник радиобрелка поставить на плату. Коды как-то ненадежно читаются. Вобщем у меня это устройство не хочет почему-то работать. Пульты менял, контроллеры менял. Может у меня радиопульты не подходят?