Как-то раз я искал в сети различные конструкции кодовых замков, помню, еще много лет назад видел в журнале “Радио” необычный вариант кодового замка, вместо стандартного блока цифровой клавиатуры там использовались только две кнопки. Код представлял собой не что иное, как двоичная последовательность, то есть одна кнопка это “0”, другая “1”. Кроме этого, я встречал и другие варианты замков, например, только с одной кнопкой ввода, а в одном экзотическом замке для набора кода надо было постукивать по двери.
У меня возник вопрос, а какие еще варианты кодового замка можно придумать?
И тут мне вспомнились сейфы с лимбовым замком, то есть с вращающейся круглой ручкой “крутилкой”, почему бы не сделать электронный вариант такого замка? В качестве устройства ввода можно поставить переменный резистор с цифровой шкалой и считывать с него напряжение, вот так появился еще один вариант кодового замка, по крайней мере, я не встречал подобных конструкций в сети.
В качестве микроконтроллера был выбран PIC12F675-I/P, который содержит в себе встроенный модуль 10-битного аналого-цифрового преобразователя (АЦП). Переменный резистор используем как делитель напряжения, средний вывод цепляем на вход АЦП, и при помощи несложного алгоритма производим считывание цифрового кода.
В устройстве используются два пятизначных кода, первый код (КОД1) – для открытия замка, и второй (КОД2) – необходим для смены первого кода. Эти два кода необходимо обязательно записать при программировании микроконтроллера. В EEPROM память, в ячейки с адресами от 0x00 до 0x04 записывают первый код, а в ячейки с адресами 0x05 – 0x09 записывают второй код.
Цифровая шкала состоит из восьми цифр от 0 до 7. Цифра 0 используется для запуска подпрограммы ввода кода, а также для сброса и возврата замка в исходное состояние, в случае неправильного ввода кода. КОД1 и КОД2 могут состоять только из цифр от 1 до 7.
В исходном состоянии, после подачи питания горит светодиод HL2, красного цвета свечения, индицирующий закрытое состояние замка. Светодиод HL1, зеленого цвета свечения не горит. Для набора кода сначала, вращением ручки переменного резистора, на шкале устанавливаем цифру 0, если ручка изначально была установлена на этой цифре, то устанавливаем любую другую цифру, а затем возвращаем ручку обратно на цифру 0, после чего появится звуковой сигнал высокого тона продолжительностью в одну секунду, который сопровождается свечением светодиода HL1. Такая светозвуковая индикация сигнализирует о запуске подпрограммы ввода кода. Далее следует установить первую цифру кода, через определенный промежуток времени прозвучит короткий звуковой сигнал высокого тона, сопровождающийся вспышкой светодиода HL1, который означает, что цифра введена. Затем устанавливаем вторую цифру кода, после очередного короткого светозвукового сигнала, подтверждающего ввод цифры, устанавливаем третью цифру кода, и так вводим все 5 цифр кода, таким образом подпрограмма ввода кода автоматически, через равные интервалы времени, производит измерение напряжения на линии 0 порта GPIO. После каждого измерения подается светозвуковая индикация.
Длительность паузы между измерениями, то есть паузу между вводом соседних цифр, можно задать при программировании микроконтроллера. Для этого в EEPROM память, в ячейку с адресом 0x0A (десятая ячейка) необходимо записать число от 1 до 5, которое соответствует длительности паузы в секундах, по умолчанию пауза составляет 2с.
Если введенный код правильный, включится звуковой сигнал высокого тона, зажжется светодиод HL1, погаснет светодиод HL2, на линии 0 порта GPIO появится высокий логический уровень, что приведет к открытию транзистора VT2 и срабатыванию электромагнита Y1. Через определенный промежуток времени, замок возвращается в исходное состояние, электромагнит Y1 обесточивается, звуковой сигнал прекращается, гаснет светодиод HL1 и зажигается светодиод HL2.
Если введенный код неправильный, прозвучит звуковой сигнал низкого тона длительностью в одну секунду, во время звучания сигнала светодиод HL2 гаснет, после чего устройство возвращается в исходное состояние.
Длительность открытого состояния замка задается при программировании микроконтроллера. В EEPROM память, в ячейку с адресом 0x0B (одиннадцатая ячейка) нужно записать число от 1 до 9, что соответствует длительности паузы в секундах, по умолчанию пауза составляет 3с.
Для смены основного первого кода, вводим КОД2, вышеизложенным способом. После его ввода прозвучат три коротких сигнала высокого тона, в такт к которым, будет вспыхивать светодиод HL1. Эта индикация сигнализирует о запуске подпрограммы записи нового кода. Вращением ручки переменного резистора устанавливаем первую цифру, дожидаемся короткого светозвукового сигнала, подтверждающего ввод цифры, далее устанавливаем следующую цифру. После ввода последней пятой цифры, инициализируется внутренний процесс записи нового кода в EEPROM память. После окончания записи прозвучат два сигнала высокого тона, каждый, длительностью в одну секунду, в такт к которым вспыхивает светодиод HL1. Такая индикация свидетельствует об успешной записи нового кода. Если по каким либо причинам во время записи кода в EEPROM память, произойдет ошибка, прозвучат два сигнала низкого тона, каждый, длительностью в одну секунду, во время звучания сигнала светодиод HL2 гаснет.
Если во время набора кода была допущена ошибка, в том числе и при записи нового кода, есть возможность сброса текущего набора. Для этого устанавливаем цифру 0, после чего прозвучит короткий звуковой сигнал низкого тона, сигнализирующий о сбросе, после чего устройство возвращается в исходное состояние. Чтобы начать новый набор кода, необходимо установить любую другую цифру, а затем снова установить цифру 0.
Переменный резистор необходимо снабдить шкалой из цифр от 0 до 7. Сначала подбираем подходящую цилиндрическую ручку, с хорошо видимым указателем в виде стрелки, черты или точки. Указатель необходим для определения положения движка переменного резистора относительно шкалы. Переменный резистор устанавливаем на место крепления и надеваем ручку. Вокруг ручки наносим окружность, на которой отмечаем крайние положения ручки. В устройстве используется восемь цифр, следовательно, полное сопротивление переменного резистора делим на восемь, тогда для резистора сопротивлением 2,2 кОм получим 275 Ом. С помощью мультиметра измеряем сопротивление переменного резистора между средним выводом и выводом, подключенным к общему проводу. Крайнему левому положению ручки (устанавливается вращением ручки против часовой стрелки до упора) должно соответствовать нулевое сопротивление, начиная с этого положения, вращая ручку по часовой стрелке, через каждые 275 Ом на окружности делаем небольшие отметки. Первая отметка (не считая крайнюю) через 280 Ом, вторая через 560 Ом и т.д. В итоге вся дуга между крайними положениями ручки будет разделена на восемь отрезков. В середине каждого из них делаем отметку и рядом ставим соответствующую цифру.
В устройстве применены резисторы МЛТ, вместо динамической головки 0,5ГДШ-2 можно использовать другие малогабаритные динамические головки с сопротивлением 8 Ом. Взамен транзистора КТ829А можно использовать КТ827А, его необходимо установить на теплоотвод. Переменный резистор СП3-4аМ, также подойдет СП-1, но обязательно с линейной характеристикой изменения сопротивления от угла поворота, иначе у нас получится неравномерная шкала. Его сопротивление может быть не менее 1 кОм и не более 10 кОм. Соединение среднего вывода переменного резистора с микроконтроллером, для исключения наводок, желательно выполнить с помощью экранированного провода. В качестве электромагнита Y1 можно применить любой подходящий, с рабочим напряжением 12 В, который будет создавать достаточное усилие, чтобы привести в движение ригель механического замка, сжимая его пружину. Питают устройство от нестабилизированного сетевого блока питания напряжением 12 В, который обеспечивает ток, достаточным для срабатывания электромагнита. Чтобы обеспечить работу устройства при отсутствии сетевого напряжения необходимо применить резервную аккумуляторную батарею напряжением 12В.
В микроконтроллере включен сторожевой таймер WDT, который выполнит сброс микроконтроллера в случае его зависания.
Статья опубликована в журнале “Радио” №7 2011г. под названием “Кодовый замок без кнопок.
А Вам не кажется, что тоже самое, но на энкодере будет проще сделать?
В принципе можно и на энкодере сделать, но программа будет сложнее, измерять напряжение с помощью АЦП намного проще, чем анализировать вращение энкодера.