Несчастное жалюзи
- Войдите на сайт для отправки комментариев
Здравствуйте, уважаемые форумчане.
Хочется управлять открытием и закрытием жалюзи, но до сих пор не могу даже логически придумать как реализовать хотелки.
Есть Arduino UNO/MEGA. На неё кладём слой шилда на базе w5100. Далее подключил драйвер шагового двигателя tb6560, ну и сам двигатель nema17(4 провода у него, может вращаться по часовой и против часовой стрелки). Перечисленные компоненты уже приобретены.
Хотелки:
1) GET запросом открывать или закрывать жалюзи (основная хотелка)
2) Физической кнопкой открывать или закрывать жалюзи
3) Открывать или закрывать жалюзи с помощью ИК передатчика и приёмника
Нюансы:
0) управление жалюзи через ИК (это скорее всего финальная часть)
1) надо иметь возможность через web открывать/закрывать НЕ полностью жалюзи (например на 1/10 часть, на 6/10 части)
2) закрывать полностью одним GET запросов, открывать другим. (Уже реализовано. Для защиты от повторного раскручивания жалюзи на случай повторного случайного нажатия на кнопку я на флеш карте создаю файлики, которыми фиксирую текущее состояние жалюзи на случай перезагрузки Ардуино)
3) иметь возможность открывать/закрывать вручную
4) хочется физическую кнопку у окна, которая будет откр и закр жалюзи
5) Ситуация: Закрыл я жалюзи полностью GET-запросом(в принципе можно считать уже реализовано), далее я открыл жалюзи вручную. Получается, что у меня на флэш карте будет зафиксировано предыдущее положение жалюзи, а не текущее.
6) Ситуация такая же, но уже не просто я вручную открыл, а при открытии жалюзи квартира была обесточена. То есть по большому счёту, надо знать всегда в каком положении(на сколько открыты или закрыты) жалюзи, как при ежедневной работе так и сразу же после перезагрузки Ардуино.
Была идея считать обороты двигателя, но в случае с ситуацией №6 это не поможет.
Идея считать расстояние от окна до жалюзи, датчик расстояния расположить на подоконнике и так узнавать что они полностью закрыты. Тогда остаются непонятными проблемы с неполным открытием/закрытием.
Зависеть от освещённости вокруг тоже не хочется, это к слову о фоторезисторе.
Может у кого-то в голове выстроилась логика программы, а может какие-то модули ещё докупить надо?
Хочется предвидеть максимум ситуаций, которые с большой долей вероятности могут произойти.
Заранее благодарен.
Концевые выключатели нужны, тогда все вопросы отпадут.
5) Ситуация: Закрыл я жалюзи полностью GET-запросом(в принципе можно считать уже реализовано), далее я открыл жалюзи вручную. Получается, что у меня на флэш карте будет зафиксировано предыдущее положение жалюзи, а не текущее.
И какая разница, откуда исхрдит команда на открытие или закрытие?
Интерфейс - отдельно, исполнительные устройства отдельно. И совершенно не важно, с какой стооны пришла команда, она выполняетсмя единообразно (включая протоколирование) вне зависимости от источника.
6) Ситуация такая же, но уже не просто я вручную открыл, а при открытии жалюзи квартира была обесточена. То есть по большому счёту, надо знать всегда в каком положении(на сколько открыты или закрыты) жалюзи, как при ежедневной работе так и сразу же после перезагрузки Ардуино.
Была идея считать обороты двигателя, но в случае с ситуацией №6 это не поможет.
Честно говоря, зачем нужна карта, не совсем понятно, если возможны случаи несовпадения протокола с действительностью.
Я бы сделал примерно так:
- устройство отслеживает состояние жалюзи, храня данные в ОП,
- при перезагрузке устройства оно (в блоке setup) гонит жалюзи до концевика, "запоминая дорогу", после чего возвращает в прежнее (на момент включения) состояние.
Спасибо за высказанную идею по реализации.
Попробую повозиться с концевиком, хотя идея крутить туда-сюда жалюзи и не ичень красивая, но за неимением своей и любой другой, попытаюсь реализовать ту, что есть.
Ну, совсем без концевика, я думаю, не обойтись, но можно свести случаи его использования практически к нулю.
Разумеется, для этого Ардуцина должна знать текущее положение жалюзи. Для этого следует где-то хранить текущее состояние, чтобы при перезагрузке (восстеновлении питания) его можно было считать. Например, на карте либо в EEPROM.
В этом случае, мне кажется, алгоритм работы должен быть примерно следующий:
1. При перемещении жалюзи:
1.1. Получили команду на перемещение.
1.2. Вычислили очередное значение уникального идентификатора.
1.3. Записали уникальный идентификатор в одно место.
1.4. Переместили жалюзи.
1.5. Записали текущее положение жалюзи в другое место.
1.6. Записали копию уникального идентификатора в третье место.
При включении (перезагрузке):
2.1. Сравнили идентификаторы из 1-го и 3-го мест.
2.2. Если совпали - прочитали текущее положение из второго места.
2.3. Если не совпали - бежим до концевика и обратно, после чего заново пишем текущие денные во все три места.