Микроконтроллеры в домашних условиях
 

Замок на ключах I-Button.

Общее описание

Схема устройства

Прошивка

Фото

Общее описание

Идея применения ключей I-Button возникала у меня по мере увеличения весо-габаритных характеристик общей связки в кармане. Когда живешь в частном доме, хочется, чтобы все замки открывались одним ключом. К сожалению, такое пока трудно достижимо. Но начинать с чего-то же надо.

Естественно, я решил начать с мало ответственного объекта - задняя дверь входа во двор. Хотя используется она довольно часто, но в случае какого-либо отказа всегда можно воспользоваться парадным входом.

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

Основные характеристики замка на ключах I-Button:

Наверх

Схема устройства

Замок I-Button схема

Рис. 1. Принципиальная схема

Основой устройства является контроллер PIC16F628A.

На микросхеме КРЕН5А выполнен стабилизатор напряжения.

Две контактные площадки для считывания кода ключа XS1 и XS2 подключены к разным выводам порта А (А2 и А3). Это необходимо для определения, с какой стороны приложен ключ (так как запоминание новых ключей возможно только с внутренней контактной площадки). На стабилитронах, резисторах и диодах 1N4148 выполнена защита входов.

Положение двери определяется по двум герконам - 1 и 2. На схеме рис. 1 показано закрытое состояние. Магнит, установленный в двери, находится напротив геркона 1. Герконы располагаются таким образом, чтобы при открывании двери магнит последовательно проходил через позиции 1=>2=>3=>4, показанные на рис. 2.

Положение магнита относительно герконов

Рис. 2

Геркон 2 используется для "отпускания" защелки после открывания двери, а также, для "втягивания" защелки при закрытии двери.

Динамик D1 (я использовал электромагнитный от китайской игрушки) включается через транзистор VT1.

Усилитель соленоида замка L1 выполнен на "дарлингтоне" TIP122. Для защиты от коммутационных бросков напряжения используется обратно включенный диод КД202.

На оптопаре PC817 выполнена схема контроля целостности цепи соленоида. Работает она следующим образом. При отсутствии управляющего сигнала на открытие замка транзистор VT2 закрыт. Ток течет через катушку L1 и светодиод оптопары. На входе B5 контроллера низкий уровень, что контролируется программой. При обрыве в цепи соленоида транзистор оптопары закрывается и на входе B5 появляется высокий уровень, который фиксируется для передачи соответствующего сигнала.

Следует отметить, что при подаче команды на открытие замка на входе B5 будет, также, высокий уровень, однако, программой он не фиксируется, так как время нахождение замка в открытом состоянии существенно меньше времени нахождения в закрытом.

Резистор Rк в цепи оптрона подбирается, в зависимости от выбранного соленоида, чтобы ток через светодиод был 10-20 мА.

Монтажную плату устройства в формате Sprint-Layout 5.0 скачиваем здесь.

Наверх

Прошивка

Файлы проекта в среде MPLab IDE можно скачать здесь.

Исходный код с описанием алгоритмов работы приведен ниже.

Микроконтроллер PIC16F628A использует внешний кварцевый резонатор 20 МГц. Сторожевой таймер включен на максимальный предделитель.

Прерывания по таймеру 2 используются для включения пищалки.

Основной цикл программы построен на таймере 1 и расположен в подпрограмме TIME_UP, которая выполняется с периодом около 0,1 сек.

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

В подпрограмме INIT осуществляется поочередный опрос считывателей (внешний и внутренний, в зависимости от флага IN_FLAG, 0). При установленном флаге ответа ключа (ANSWER_FLAG,0) выполняется процедура READ_CODE чтения кода ключа.

В процедуре READ_CODE поочередно считываются восемь байт данных с ключа (посредством подпрограмм WR_BYTE и R_BYTE организован обмен данными по шине 1-WIRE), после чего подпрограмма CHECK_CRC производит подсчет CRC (циклически избыточный код) первых семи принятых байт и сравнивает CRC с восьмым принятым байтом.

При несовпадении CRC происходит выход из процедуры READ_CODE, в противном случае считанные данные считаются достоверными и обрабатываются далее.

При выполнении процедуры CHECK_CODE проверяется соответствие считанного кода и сохраненного в EEPROM.

Хранение кодов ключей в EEPROM организовано следующим образом. Восемь байт первого ключа хранятся по адресам с 00h по 07h начиная с первого байта. По адресу 7Fh хранится значение следующего адреса EEPROM, свободного для записи следующего ключа (в данном случае - 08h). Ключ, код которого находится по адресам с 00h по 07h, является мастер-ключом и используется для активации режима сохранения кода последующих ключей. Запись кода следующего ключа (при активации режима сохранения) производится по адресам с 08h по 0Fh с занесением 10h в ячейку с адресом 7Fh. Таким образом, возможна запись до десяти ключей. Следует отметить, что для активации режима записи нового ключа необходимо наличие мастер-ключа. Поэтому код мастер-ключа должен быть занесен в ячейки с 00h по 07h (с записью 08h в ячейку с адресом 7Fh) на этапе прошивки контроллера.

В процедуре CHECK_CODE происходит последовательная проверка соответствия считанного кода и данных в EEPROM, начиная с большего адреса к нулевому.

По выходу из CHECK_CODE проверяется состояние флага EQUAL_FLAG, 0. Если он установлен (код совпал), то происходит открытие замка (процедура OPEN_LOCK), при этом, если совпал код мастер-ключа, считанного с внутренней контактной площадки, то происходит установка флага MASTER_FL, 0. Флаг MASTER_FL, 0 используется в подпрограмме LOCK_DRIVER, где по истечении 5 сек в случае неоткрытой двери происходит активация режима записи нового ключа (устанавливается флаг SAVE_FLAG, 0).

Если флаг EQUAL_FLAG, 0 по выходу из CHECK_CODE не установлен (нет совпадения кодов), то проверяется наличие включенного режима записи нового ключа (флаг SAVE_FLAG, 0). При включенном режиме и при условии считывания нового ключа с внутренней контактной площадки вызывается процедура SAVE_TO_EE, где происходит запись кода нового ключа (если не превышен лимит - 10 ключей).

На этом выполнение подпрограммы READ_CODE завершается и происходит переход во внешний цикл.

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

Теперь пробежимся по остальным процедурам, выполняемым в TIME_UP (с периодом 0,1 сек).

CHECK_N_CLR_SAVE проверяет наличие включенного режима записи нового ключа (флаг SAVE_FLAG, 0). При включенном режиме записи с помощью счетчика SAVE_COUNT производит отсчет времени (около 5 сек) до выключения режима при отсутствии считывания кода нового ключа (начальное значение заносится в SAVE_COUNT одновременно с установкой флага SAVE_FLAG, 0 в процедуре LOCK_DRIVER).

CHECK_HERCONS производит проверку состояния герконов контроля положения двери с фиксацией соответствующих режимов (флаги DOOR_OPEN, 0 и DOOR_H_OPEN, 0). Блок-схема алгоритма подпрограммы приведена на рис. 3.

Блок-схема алгоритма обработки состояния герконов

Рис. 3

CHECK_LOCK_CONT проверяет состояние входа PORTB, 5 (контроль цепи соленоида) когда замок не открыт и при необходимости устанавливает флаг ошибки LOCK_ERR, 0.

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

В LOCK_DRIVER при помощи счетчика LOCK_COUNT отсчитывается время открытого состояния замка в случае не открывания двери. По истечении 5 секунд замок закрывается во избежание перегрузок соленоида и цепи управления. Кроме того здесь производится установка флага SAVE_FLAG, 0 после считывания мастер-ключа.

В подпрограмме CHECK_TONE при помощи счетчика TONE_COUNT осуществляется отсчет времени в импульсах и интервалах пищалки с установкой флага FLAG_TONE, 0 в момент импульса. В зависимости от состояния замка используются следующие варианты включения звуковой сигнализации: импульсы и интервалы равны - дверь открыта или замок открыт; импульс с длинным интервалом - неисправность цепи соленоида; импульс без интервала - включен режим записи нового ключа.

В обработчике прерывания по таймеру 2 проверяется состояние флага FLAG_TONE, 0, и при его установлении на выходе PORTB, 4 генерируются импульсы с периодом 2 переполнения таймера.

 

прошивка 1 прошивка 2 прошивка 3 прошивка 4 прошивка 5 прошивка 6 прошивка 7 прошивка 8 прошивка 9 прошивка 10 прошивка 11 прошивка 12 прошивка 13 прошивка 14 прошивка 15 прошивка 16 прошивка 17 прошивка 18

 

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

Также во время эксплуатации при температурах ниже -20 градусов Цельсия наблюдалось замерзание герконов. На качество открывания двери, впрочем, это не повлияло - просто сделал отключение пищалки после некоторого промежутка времени. Поставил магнит помощнее: до - 40 градусов работает нормально.

Наверх

Фото

Фото 1

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

Фото 2

 

Фото 3

Доработка замка - присоединение тяги с пружиной.

Фото 4

Конструкция контактных площадок: корпус из сантехнических латунных пробок (резьба на 15 мм), центральный электрод изолирован резиновой вставкой.

Фото 5

Крепление устройства на месте. Замок вмонтирован в кусок доски.

Фото 6

Расположение герконов в торце доски. (Магнит установлен в двери - на фото не показан.)

Фото 7

Вид двери с улицы.

Фото 8

 

Фото 9

Установка окончена.

Фото 10

Внутренняя контактная площадка размещена снизу, от захлестывания дождя.

Наверх

Наверх