Несчастное жалюзи

zidi85
Offline
Зарегистрирован: 10.01.2016

Здравствуйте, уважаемые форумчане.
Хочется управлять открытием и закрытием жалюзи, но до сих пор не могу даже логически придумать как реализовать хотелки.
Есть 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 это не поможет.
Идея считать расстояние от окна до жалюзи, датчик расстояния расположить на подоконнике и так узнавать что они полностью закрыты. Тогда остаются непонятными проблемы с неполным открытием/закрытием.
Зависеть от освещённости вокруг тоже не хочется, это к слову о фоторезисторе.

Может у кого-то в голове выстроилась логика программы, а может какие-то модули ещё докупить надо?
Хочется предвидеть максимум ситуаций, которые с большой долей вероятности могут произойти.
Заранее благодарен.

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Концевые выключатели нужны, тогда все вопросы отпадут.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

zidi85 пишет:

5) Ситуация: Закрыл я жалюзи полностью GET-запросом(в принципе можно считать уже реализовано), далее я открыл жалюзи вручную. Получается, что у меня на флэш карте будет зафиксировано предыдущее положение жалюзи, а не текущее.

И какая разница, откуда исхрдит команда на открытие или закрытие?

Интерфейс - отдельно, исполнительные устройства отдельно. И совершенно не важно, с какой стооны пришла команда, она выполняетсмя единообразно (включая протоколирование) вне зависимости от источника.

Цитата:

6) Ситуация такая же, но уже не просто я вручную открыл, а при открытии жалюзи квартира была обесточена. То есть по большому счёту, надо знать всегда в каком положении(на сколько открыты или закрыты) жалюзи, как при ежедневной работе так и сразу же после перезагрузки Ардуино.

Была идея считать обороты двигателя, но в случае с ситуацией №6 это не поможет.

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

Я бы сделал примерно так:

- устройство отслеживает состояние жалюзи, храня данные в ОП,

- при перезагрузке устройства оно (в блоке setup) гонит жалюзи до концевика, "запоминая дорогу", после чего возвращает в прежнее (на момент включения) состояние.

zidi85
Offline
Зарегистрирован: 10.01.2016

Спасибо за высказанную идею по реализации.

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

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

Разумеется, для этого Ардуцина должна знать текущее положение жалюзи. Для этого следует где-то хранить текущее состояние, чтобы при перезагрузке (восстеновлении питания) его можно было считать. Например, на карте либо в EEPROM.

В этом случае, мне кажется, алгоритм работы должен быть примерно следующий:

1. При перемещении жалюзи:

1.1. Получили команду на перемещение.

1.2. Вычислили очередное значение уникального идентификатора.

1.3. Записали уникальный идентификатор в одно место.

1.4. Переместили жалюзи.

1.5. Записали текущее положение жалюзи в другое место.

1.6. Записали копию уникального идентификатора в третье место.

 

При включении (перезагрузке):

2.1. Сравнили идентификаторы из 1-го и 3-го мест.

2.2. Если совпали - прочитали текущее положение из второго места.

2.3. Если не совпали - бежим до концевика и обратно, после чего заново пишем текущие денные во все три места.