Зачем нужен модуль цифровых вводов, я уже говорил. Что же он собой представляет в плане постановки задачи? Модуль должен иметь некоторое количество входов, каждый из которых может быть замкнут на общий провод или разомкнут. В ответ на запрос центрального управляющего устройства модуль передает состояние своих входов. К входам присоединяются датчики. Кроме уже упомянутых это могут быть датчики, регистрирующие состояние бытовой аппаратуры. Например, датчик состояния телевизора, регистрирующий, включен он или выключен. Применение подобного датчика особенно актуально, если телевизор, как это зачастую получается, управляется с помощью ИК-команд. Поясню.
Стандартная ситуация: систему можно построить таким образом, что управление будет происходить по времени су¬ток. В час ночи, если вы ложитесь спать раньше, система мо¬жет выключить все бытовые приборы, весь свет в доме (или квартире), всю аудио- и видеоаппаратуру, которые могли ос¬таться включенными. Однако есть одно «но». ИК-сигнал выключения некоторых телевизоров, многих музыкальных центров и видеомагнитофонов полностью совпадает с сигналом включения. Если одна из команд прошла мимо системы, вместо выключения устройства вы включите его. Обычно в программе управления можно устанавливать флаги состояния. Каждое включение телевизора устанавливает флаг TV__ON, а выключение сбрасывает его. А если телевизор оказался выключен из сети? Флаг будет успешно устанавливаться и сбрасываться, не решая проблемы.
Можно применить релейный модуль, подключая телевизор, музыкальный центр и остальное оборудование к сети через контакты реле. Но хотелось бы иметь запасной вариант. Таким вариантом станет датчик, который фиксирует ток в проводах подключения бытовой техники. Лучше использо¬вать, например, датчик Холла для определения тока в цепи, но можно применить и что-нибудь попроще. Об этом мы поговорим ниже, но подобный датчик подключить к системе разумнее всего с помощью модуля цифровых вводов или сам модуль сделать частью датчика.
Любого из нас ошибки сердят, вызывают раздражение, могут подорвать веру в собственные силы. Не принято в книге,источнике знаний, делать множество ошибок. Но, если вдуматься, не наши ли ошибки, как наши глаза и уши, ведут нас к знаниям? Как палка слепого, они позволяют определять препятствия, заставляют задуматься, правильным ли путем двигаешься? Собственные ошибки запоминаются лучше и служат дольше. Когда я попадаю в безвыходную ситуацию, когда отсутствие решения подобно беспросветному мраку, мне помогает простой прием - я не пытаюсь найти правильное решение, я принимаю заведомо ошибочное. С ним я работаю до того момента, когда оно либо трансформируется в правильное решение, либо подсказывает путь к нему. Самое плохое, что поджидает меня в этом случае, - напрасно потраченное время. Но напрасно ли оно потрачено? Двигаясь неверным путем, я все-таки делаю многое, что позже применяю в других случаях, но в схожих ситуациях. Со временем, с накопленным опытом приходит интуитивное видение решений. Но это относится, в первую очередь, к узкой области деятельности. Стоит выйти за пределы этой области - и вашей интуиции понадобится тросточка, чтобы пройти весь путь без болезненных падений. Я не люблю ошибаться, не люблю признаваться в ошибках. Я вообще не люблю ошибки! Но понимаю их пользу, как необходимость и пользу горьких лекарств.
Прототип я делаю на той же макетной плате, на которой собирал релейный модуль. По этой причине я включаю фотоприемник на вход RB3. Для индикации приема ИК-команд дополнительно использую вывод RA0, к которому уже подключен светодиод. Когда устанавливается флаг прихода ИК-команды, светодиод включается. Флаг снимается - светодиод выключается.Я выделил добавленный фрагмент. У прототипа фотоприемник подключен к выводу RB3. Смысл добавленного фрагмента в том, что на сетевые запросы ответ будет, если модуль не занят приемом ИК-команд, то есть RB3 = 1.
Неплохо было бы защитить модуль от помех по RB3. При включении может «проскочить» короткий нулевой импульс (на чем я и споткнулся), и модуль перейдет в режим приема ИК-команды, которой нет. Поправил я это так:
start: if (RB3&0x01) // Нет ИК сигнала. {
PHOTOCOME = 0; RAO = 0x00;
break; }
if (!(RB3&0x01)) // Появился ИК сигнал.
{
for (k=0; k<30; ++k); // Поставим задержку.
if (!(RB3&0x0D) // ИК сигнал не пропал? {
PHOTOCOME = 1; RAO = 0x01;
}
} else {
Первый вопрос - зачем нам нужно что-либо, имеющее отношение к инфракрасным кодам?
Домашняя аппаратура - телевизоры, музыкальные центры и т.п. - управляется с помощью пультов дистанционного управления, излучающих команды в ИК-диапазоне. Чтобы управлять аппаратурой с компьютера (программно), нам потребуется излучатель ИК-кодов - модуль, который по команде компьютера будет излучать необходимые ИК-команды. Для работы этого модуля нам потребуется еще и считыватель ИК-кодов. Кроме того, пора подумать об устройствах управления в системе, причем хотелось бы иметь нечто достаточно дешевое.
Одним из устройств управления, как мы решили, станет компьютер. Можно подумать о создании устройства управле¬ния с использованием клавиатуры: нажатие клавиши отправ¬ляет в системную сеть команду управления.
Но и у компьютера, и у клавишного модуля есть небольшой недостаток: их удобно держать на стене или на столе, но не на кресле, где мы проводим достаточно много времени. Вопрос о клавишном модуле управления пока отложим и рассмотрим возможность управления с помощью старого пульта от видеомагнитофона или телевизора, которые давно отправились бы на свалку, если бы не завалялись на полке. В этом случае нам нужен модуль приема инфракрасных кодов.
Что собой представляют инфракрасные коды, излучаемые пультами управления?
Не вдаваясь в теоретические тонкости, можно сказать так: когда на пульте управления, положим, телевизором нажимается клавиша, установленный в нем светодиод (ИК-диапазо-на) начинает мигать. При этом он воспроизводит последовательность вспышек с некоторой частотой (от 20 до 400 кГц) и пауз, которые в совокупности и есть код управления. Каждая клавиша имеет свой набор вспышек и пауз. Клавиши разных пультов излучают разные коды управления, частота (несущая частота) вспышек также может различаться.
Функциональная схема модуля состоит из интерфейса, кон¬троллера и адресного селектора, образующих базу для пост¬роения остальных модулей, а отличительной особенностью данного модуля является использование реле (рис. 1.33). Реле я включил через транзисторный ключ. В зависимости от кон¬кретного реле, которое вы выберете, транзисторный ключ может оказаться лишним.Я не стал устанавливать реле на макетной плате. Реле - элемент достаточно дорогой, и нет нужды покупать его без твердого намерения использовать. Вместо него к выходам микроконтроллера были подключены красные светодиоды АЛ307. Как выяснилось позже, получилось очень полезное решение при наладке и разработке других модулей.Ориентировочная стоимость элементов - 558 руб В целях экономии я отказался от установки на макетную плату реле и переключателя для организации адресного селектора, распаяв соответствующие выводы, чтобы получить один адрес. На схеме показано одно реле, но их количество можно увеличить до 7-8, используя все свободные выводы портов А и В. Это определяется конкретными соображениями по применению модуля. Например, если вы планируете использовать релейный модуль в своей комнате для включения торшера или настольной лампы, достаточно одного реле. Для безопасного включения лампы я советую использовать закрытую розетку со стандартным сетевым проводом. Одна из жил этого провода должна разрываться контактами реле. Настольная лампа включается в розетку, которая, в свою очередь, подсоединяется к сети -220В. При замыкании контактов реле напряжение подается на лампу. Поскольку неизвестно, какой из проводов вы коммутируете: нулевой или фазный, все работы лучше производить без напряжения.
Релейный модуль. Получая команды центрального управляющего устройства, он включает и выключает соответствующее реле. С помощью контактов реле можно включать и выключать настольную лампу, торшер (и свет в комнате, установив модуль на место обычного выключателя, но я не советую делать это, если вы не профессиональный электрик), телевизор или музыкальный центр. Контактами реле может включаться и выключаться электрический чайник и утюг (возможно, понадобится добавить более мощный контактор). С его же помощью можно «перемещать музыку», подключая к музыкальному центру громкоговорители, установленные в разных помещениях. Одним словом, с помощью контактов реле можно включать и выключать все, что можно включать и выключать в принципе.