Модуль цифровых вводов
Зачем нужен модуль цифровых вводов, я уже говорил. Что же он собой представляет в плане постановки задачи? Модуль должен иметь некоторое количество входов, каждый из которых может быть замкнут на общий провод или разомкнут. В ответ на запрос центрального управляющего устройства модуль передает состояние своих входов. К входам присоединяются датчики. Кроме уже упомянутых это могут быть датчики, регистрирующие состояние бытовой аппаратуры. Например, датчик состояния телевизора, регистрирующий, включен он или выключен. Применение подобного датчика особенно актуально, если телевизор, как это зачастую получается, управляется с помощью ИК-команд. Поясню.
Стандартная ситуация: систему можно построить таким образом, что управление будет происходить по времени суток. В час ночи, если вы ложитесь спать раньше, система может выключить все бытовые приборы, весь свет в доме (или квартире), всю аудио - и видеоаппаратуру, которые могли остаться включенными. Однако есть одно «но». ИК-сигнал выключения некоторых телевизоров, многих музыкальных центров и видеомагнитофонов полностью совпадает с сигналом включения. Если одна из команд прошла мимо системы, вместо выключения устройства вы включите его. Обычно в программе управления можно устанавливать флаги состояния. Каждое включение телевизора устанавливает флаг TV__ON, а выключение сбрасывает его. А если телевизор оказался выключен из сети? Флаг будет успешно устанавливаться и сбрасываться, не решая проблемы.
Можно применить релейный модуль, подключая телевизор, музыкальный центр и остальное оборудование к сети через контакты реле. Но хотелось бы иметь запасной вариант. Таким вариантом станет датчик, который фиксирует ток в проводах подключения бытовой техники. Лучше использовать, например, датчик Холла для определения тока в цепи, но можно применить и что-нибудь попроще. Об этом мы поговорим ниже, но подобный датчик подключить к системе разумнее всего с помощью модуля цифровых вводов или сам модуль сделать частью датчика.
Есть очень удобные и дешевые датчики, которые называют «герконовыми». Они удобны для установки на двери или окна. На основе такого датчика можно организовать автоматическое включение и выключение света в ванной или туалете При первом открывании двери свет включается, при втором выключается. «Герконовый» датчик, конечно, к системе подключается через модуль цифровых вводов. Если установить датчик на входную дверь, а в основной программе поставить счетчик, можно организовать подпрограмму определения момента, когда все покидают квартиру или дом. Этот момент может быть отправной точкой для принудительного отключения от сети всех электроприборов и перекрывания вводов воды во избежание протечек. Или включения системы имитации присутствия людей в доме, что используется, как часть подсистемы охраны. Позже, когда кто-то приходит домой, такой датчик можно использовать для организации сцены обслуживания, которую я описал в предисловии как «Возвращаюсь я с работы...». Таким образом, модуль цифровых вводов вполне можно отнести к базовым и обязательным модулям системы «Умный Дом».
Я хочу обсудить еще одно применение модуля цифровых вводов - в качестве интерфейса к клавишным устройствам управления. Имея 8 входов, подобный модуль может работать с устройством управления, снабженным 8 клавишами Этого достаточно для многих задач управления. Если же использовать матрицу 4x4 для построения клавиатуры, количество подаваемых команд увеличится до 16, а количество используемых выводов порта останется равным восьми.
Модуль цифровых вводов легко сделать из программы для релейного модуля. Перенаправим все выходы, предназначенные
для подключения реле, на вход. Будем отслеживать состояние всех входов и записывать их. Остается только передавать их состояние в ответ на запросы главной программы, как это было с системными ИК-командами в модуле приема ИК-кодов.
Присвоим командам модуля цифровых входов префикс, например D, и получим формат запроса:
Dxx$0S
Где хх - два символа номера модуля от 0 до 15, а 0 после $ - «заставка» для поддержки формата.
Формат ответа модуля тоже, очевидно, будет:
Dxxyyy
Где ууу - символьное представление десятичного числа, отображающего состояние входов (как это было сделано для приемника ИК-команд).