Чтобы открыть этот электронный замок, не потребуется запоминать код и набирать его вручную, нажимая на кнопки. Достаточно вставить в «замочную скважину» замка «ключ» с микросхемой энергонезависимой памяти. Подсмотреть открывающий замок код невозможно. Его генерирует и записывает в память «ключа » сам замок.
Кодовые замки обычно работают по хорошо известному принципу. Замок хранит секретный код. Пользователь знает этот код и, чтобы открыть замок. набирает его. нажимая на кнопки. При совпадении набранного и хранимого кодов замок открывается. Такой алгоритм реализован, например, в микроконтроллерном устройстве [1].
Но в этом алгоритме есть слабые места. Простой код можно подобрать, было бы достаточно времени. Сложный код трудно запомнить и долго набирать. Набираемый код злоумышленник может подсмотреть. В предлагаемом замке кнопок набора кода нет, а сам код пользователь хранит в «ключе» — дешёвой микросхеме энергонезависимой памяти. Речь не идёт о таблетке iButton — дорого. Хотя в части соединения «ключа» с замком у таблеток есть преимущество в простоте и надёжности.
Замок выполнен на микроконтроллере ATtiny2313, что позволяет собрать на одной и той же плате без всяких переделок и лишних элементов любой из двух предлагаемых, различающихся лишь программой микроконтроллера варианта замка. Первый вариант — одноканальный. приводящий в действие лишь одно исполнительное устройство (запор). Второй вариант — девятиканальный. способный, в зависимости от кода во вставленном в него «ключе», открыть любой из девяти запоров В последнем случае не обязательно использовать все каналы, выбор их числа остаётся за пользователем.
В «ключах» применены микросхемы энергонезависимой памяти с интерфейсом I2С. Код, открывающий одноканальный замок, — двухбайтный. Его создаёт и записывает в «ключ» сам замок с помощью генератора псевдослучайных чисел, реализованного программно в микроконтроллере. Девятиканальный замок записывает в «ключ» три байта. Первый байт содержит условный номер канала, а следующие два — открывающий код для этого канала.
Схема замка показана на рис. 1. Тактовая частота микроконтроллера DD1 задана его внутренним RC-генератором и равна 8 МГц. Розетка XS1 — основная. Её устанавливают на двери и в неё вставляют «ключ», чтобы открыть замок. Розетка XS2 — вспомогательная. Её устанавливают на корпусе замка, расположенном в недоступном для посторонних месте. Эту розетку используют для записи и копирования кода в «ключ».
«Ключ», схема которого изображена на рис. 2, содержит микросхему памяти DS1 и разъем ХР1 для подключения к замку. Микропереключатель SF1 в замке установлен так, что при сочленении «ключа» с разъемом XS1 замка его контакты замыкаются и включают питание замка.
При совпадении кода, хранящегося в замке, с кодом в «ключе» программа устанавливает высокий уровень на выходе PD4 микроконтроллера. Если перемычка S1 установлена в положение 3-4, то этот уровень открывает транзистор VT1, в результате чего срабатывает реле К1, подавая питание на обмотку электромагнита, воздействующего на запорный механизм. Одновременно вторая пара замкнувшихся контактов реле блокирует микропереключатель SF1. Поэтому при извлечении «ключа» из разъёма питание замка остаётся включённым, а запорный механизм — открытым.
Если перемычка S1 установлена в положение 1-2, реле К1 не действует, а логический сигнал открывания запора поступает на контакт 3 колодки ХТ2, к которой можно подключить любое исполнительное устройство.
В девятиканальном замке при совпадении кодов активируется канал замка, соответствующий хранящемуся в «ключе» номеру. Выход первого канала и в этом случае, в зависимости от положения перемычки S1, управляет реле К1 или выведен на колодку ХТ2. Выходы остальных восьми каналов выведены на колодку ХТ5. Сигналы на колодках ХТ2 и ХТ5 имеют стандартные логические уровни: низкий — закрыто, высокий — открыто.
Питание на девятиканальный замок поступает постоянно, для чего вместо микропереключателя SF1 между контактами 1 и 2 колодки XT 1 должна быть установлена перемычка. Сам микровыключатель подключают вместо кнопки SB1. Когда в розетку XS1 вставляют «ключ», он выводит микроконтроллер из «спящего» режима.
Кнопку SB2 и светодиоды HL1, HL2 используют при копировании и записи созданных замком кодов в микросхемы памяти «ключей». В одноканальном варианте в этом процессе участвует и кнопка SB 1.
Печатная плата замка изображена на рис.3. Она рассчитана на установку любых резисторов мощностью 0,125 или 0,25 Вт, оксидных конденсаторов «TREC”, керамических конденсаторов типоразмера 1206 для поверхностного монтажа. Конденсатор С5 — КМ-6 или аналогичный импортный. Реле К1 — P2V23079A1001В301 с номинальным напряжением катушки 5 В и максимальным коммутируемым переменным током 2 А при напряжении 250 В. Можно использовать реле с катушкой и на более высокое напряжение, подав его от отдельного источника.
Для микроконтроллера DD1 на плате установлена двадцатигнёздная DIP-панель. Вместо микроконтроллера ATtiny2313V-10PU можно применить ATtiny2313-20PU.
Розетки XS1 и XS2 — USB-AF. Вилка ХР1 «ключа» — USB-AM. На ней закреплена изображённая на рис. 4 печатная плата с микросхемой DS1.
Микросхему AT24C08A-10PI можно заменить на другую серии 24С или 24LC с последующими цифрами: 01, 02, 04 или 08, например, 24LC01B-I/P. Эти микросхемы имеют разное число выведенных на выводы 1—3 адресных входов. Но на все эти входы в рассматриваемом устройстве следует подавать логически низкие уровни напряжения. Поэтому на печатной плате контактные площадки под выводы 1 —4 микросхемы DS1 соединены между собой.
Прилагаемый к статье файл Code_Lock.asm содержит исходный текст программы одноканального замка, а файл Code_L.ock.hex — её коды для загрузки в микроконтроллер. После выполнения инициализации эта программа читает двухбайтное слово кода из EEPROM микроконтроллера. Затем она выполняет цикл сравнения кода из «ключа» с кодом из EEPROM. При их совпадении программа записывает логическую 1 в четвёртый разряд выходного регистра порта D, чем открывает замок. Затем она ждёт извлечения «ключа” из разъёма (признак этого — несовпадение кодов), после чего запускает отсчёт времени удержания замка открытым. По завершении отсчёта заданного времени программа обнуляет четвёртый разряд выходного регистра порта D, а реле К1 не только размыкает цепь электромагнита, но и выключает питание замка до повторного присоединения к нему «ключа».
При записи или копировании кода в «ключ» программа переходит к выполнению соответствующей подпрограммы. Запись она выполняет в два этапа. Сначала записывает в микросхему памяти «пустое» слово $0000, а затем — двухбайтный код. Это позволяет добиться уверенной записи кода без многократного повторения процесса записи.
В программе предусмотрено формирование двух интервалов времени. Первый интервал длительностью около 0,5 с использован в процедуре подавления дребезга контактов кнопок. Второй интервал длительностью около 5 с — продолжительность удержания замка открытым после извлечения «ключа». В формировании обоих интервалов участвует таймер ТО микроконтроллера, генерирующий запросы прерывания с периодом 0,0327 с.
Подпрограмма генератора псевдослучайных чисел описана в [2, с. 124]. Первое число в их последовательности программа читает при каждом запуске из ячейки по адресу 2 в EEPROM микроконтроллера. Если содержимое EEPROM было стёрто, а запись в него ещё не производилась, это будет число 255.
Программная реализация интерфейса I2С взята из [3], где на с. 431 она описана применительно к микроконтроллерам семейства AT90S. В неё внесены изменения, позволяющие читать более одного байта.
Файл MultichanneLLock.asm содержит исходный текст программы девятиканального замка, а файл Multichannel. Lock.hex — её коды для загрузки в микроконтроллер. После инициализации микроконтроллера эта программа запускает отсчёт времени таймером Т1 и цикл поиска «ключа». Если в течение заданного времени «ключ» не обнаружен, программа переводит микроконтроллер в «спящий» режим. Подключённый «ключ» замыкает контакты микропереключателя SF1. Обнаружив установленный в результате этого низкий уровень на входе PD2, микроконтроллер «просыпается» и начинает чтение условного номера «ключа» и кода.
Следующее действие программы — чтение соответствующего условному номеру «ключа» кода из EEPROM микроконтроллера. Далее идёт проверка кодов на совпадение и выбор соответствующего «ключу» выходного канала. При положительном результате сравнения замок открывается. После извлечения «ключа» из разъёма следует выдержка длительностью 5 с. По её истечении программа устанавливает низкие уровни на всех выходах замка, запускает таймер Т1 и, отсчитав заданное время, переводит микроконтроллер в «спящий» режим.
Время до «засыпания» микроконтроллера задано в программе константами Time1L, Time1H и NumCyc. Если Time1L=Time1H=0 и NumCyc=1, длительность выдержки будет равна 8,4 с. Уменьшить её можно, присвоив константам Time1L и Time1Н значения, отличные от нуля, а увеличить — присвоить большее значение константе NumCyc. Например, при NumCyc=2 выдержка удвоится и станет равной 16,8 с.
Конфигурация микроконтроллера для обоих вариантов программы должна быть следующей:
EESAVE=0;
BODLEVEL=100;
CKSEL=0100;
SUT=00.
При исправных деталях и безошибочном монтаже устройство не требует налаживания. Нормальное функционирование одноканального замка проверяют до его монтажа на объекте записью кода в «ключ» или в несколько «ключей». Для этого «ключ» вставляют в розетку замка. При нажатии на кнопку SB2 должен включиться светодиод HL2. Программный генератор псевдослучайных чисел создаёт код, затем программа записывает этот код в микросхему памяти «ключа», в ОЗУ и в EEPROM микроконтроллера. В следующие «ключи» при нажатии на кнопку SB2 программа запишет код из ОЗУ микроконтроллера, не запуская генератор псевдослучайных чисел. После записи кода в первый «ключ» светодиод HL2 остаётся включённым, а после записи в следующие «ключи» он по окончании записи гаснет.
Во избежание случайного изменения кода кнопка SB2 установлена на печатной плате замка, доступ к которой дол жен быть ограничен. Если для записи и копирования кода «ключи» вставляют в розетку XS2, микропереключатель SF1 необходимо заблокировать в нажатом состоянии, чтобы подать на замок напряжение питания.
Записав код в один или несколько «ключей», проверяют работу замка в целом. Для проверки выключают питание замка. При его включении и присоединении содержащего правильный код «ключа» реле К1 должно сработать. Оно должно отпустить якорь через 5 с после извлечения «ключа».
Для копирования кода в дополнительный «ключ» предназначена кнопка SB1. Новый «ключ» присоединяют к замку и нажимают на эту кнопку. При этом включается светодиод HL1, код извлекается из EEPROM микроконтроллера и записывается в «ключ». Содержимое EEPROM остаётся прежним. Питание не выключают, пока код не будет записан во все необходимые «ключи».
Запись кодов в «ключи» для девятиканального замка производят в следующем порядке. «Ключ» присоединяют к замку. При нажатии на кнопку SB2 включаются светодиоды HL1 и HL2, а генератор псевдослучайных чисел создаёт код, который и будет записан в микросхему памяти, ОЗУ и EEPROM микроконтроллера. Вместе с кодом записывается и номер канала замка, к которому он относится.
Светодиод HL2 гаснет при выходе из подпрограммы записи, а светодиод HL1 — после записи кода в «ключи” всех каналов. Число рабочих канатов девятиканального замка задано в программе константой QuanCH, значение которой должно быть втрое больше этого числа. Каналы замка активируются через 5 с после записи кода в «ключ», что позволяет проверить соответствие канала и кода ключу. Во время записи кодов в «ключи» таймер Т1 не работает.
Коды во все необходимые «ключи» записывают в едином цикле, т. е. без выключения питания или аппаратной установки микроконтроллера в исходное состояние.
Скачать программу для микроконтроллера
ЛИТЕРАТУРА
- Шишкин С. Семиканальный электронный ключ. — Радио, 20)5, № 2, с. 39, 40.
- Мортон Д. Микроконтроллеры AVR. Вводный курс. — М.: Додэка-ХХ1, 2006.
- Трамперт В. AVR-RISC микроконтроллеры. — Киев: Микроконтроллер-Пресс. 2006
Автор: Н. САЛИМОВ, г. Ревда Свердловской области
Источник: журнал Радио №11, 2015