Электронный замок
Дело было вечером, когда на пороге офиса появилась настойчивая крупногабаритная женщина, предлагающая купить посуду известной марки. На следующий же день я получила от начальника (он же MayDay ) задание оградить его творческую натуру от нападок торговых представителей. Так появилась идея создания проекта под кодовым названием Hungry _ Wall . Конечно, сейчас существует множество служб, занимающихся контролем доступа в помещение. Но куда интереснее сделать электронный замок своими руками, особенно мне, начинающему программисту и электронщику.
Как говорится, главное правильно составить ТЗ, т.е.то, что мы хотим получить в результате.
- Создать систему распознавания ключей.
- Сравнивать ключ с базой, и при совпадении кода поднесенного ключа с одним из записанных в базе открывать замок.
- Снимать показания магнитного датчика, позволяющие идентифицировать состояние двери, и если дверь открыта, закрывать замок.
- Использовать таймер, по истечению которого замок закрывается, в том случае, если мы передумали входить/выходить. Это предусмотрено для того, чтобы “враги” не попали в секретное логово, воспользовавшись нашей переменой настроения.
- Обеспечить открытие двери с помощью кнопки, размещенной внутри помещения.
- Запись нового ключа в базу после поднесения ключа-мастера и, естественно, запись самого мастера.
- Удаление ключа из базы (feature).
- Система индикации для пущей привлекательности.
Полдела сделано, осталось самое малое – реализовать задуманное аппаратно и программно. Для этого необходимо:
- Электрический замок
- Считыватель прокси (em-Marin) карт "CP-Z" фирмы IronLogic
- Ключи или карточки для записи в базу
- Кнопка
- Блок питания 12 V
- Корпус (чтобы все было аккуратно и красиво)
- Электроника – микроконтроллер ATmega 8, «кроваткаХ28», стабилизатор КР1158ЕН5В, транзистор IRLU 024 N , 6 разъемов KLEM 2, 1 разъем WF 3 (COM-port), конденсатор, светодиоды и резисторы по вкусу.
Внутренности платы показаны на рисунке 1.
Блок замка включает в себя непосредственно электрический замок, таймер TimeOpen , позволяющий задать максимальное время открытого состояния замка, магнитный датчик, индицирующий открытие и закрытие двери. Входом блока замка является команда открыть замок (Open), поступающая от блоков уключины и кнопки. Блок уключины состоит из считывающего устройства, базы данных, таймера TimeMaster , задающего максимальное время на поднесение нового ключа для записи в базу. Вход в блок осуществляется поднесением ключа или мастера. Блок кнопки состоит из кнопки, которая может принимать 2 состояния (нажата/не нажата).
Для считки бесконтактных карт применяется "Считыватель прокси (em-Marin) карт "CP-Z" фирмы IronLogic его особенность в том, что он эмулирует iButton (1-wire) если к нему поднести проксикарту.. это позволяет упростить программирование замка. однако следует учесть что в данной версии считывателя имеются свои подводные грабли.
Принцип работы предельно прост. При поднесении ключа происходит считывание его кода и сравнение с базой. Если ключ найден в базе замок получает команду Open . Здесь необходимо учитывать особенность замка: открытие надо производить щелчками (открыть-закрыть-открыть). Это обеспечивает защиту от заклинивания замка. При поднесении мастера логика программы меняется. Его наличие никак не влияет на “настроение” замка. Он рассматривается как некий турецкий султан, готовый зарегистрировать (записать в EEPROM) очередную жену (ключ). Т.е. при поднесении ключа (если он ранее не был записан) его код записывается в EEPROM . Тут необходимо учитывать, что память микрухи нерезиновая, и, например, для ATmega 8 она составляет 512 байт, что позволяет записать максимум 255 ключей (если для хранения 1 ключа использовать 2 байта, как в нашем случае). В качестве мастера записывается самый первый поднесенный ключ. Нажатие кнопки также посылает замку команду Open . Система индикации делает наш проект более красочным и информативным. Если горит красный диод – проход блокирован,если зеленый – можно идти! При поднесении мастера горят оба светодиода.
Важно заметить, что замок открывается при подаче на него логической единицы (т.е. напряжения), и находится в закрытом состоянии,если напряжение не подается. Это позволяет блокировать проход, если вы забыли оплатить коммунальные услуги, и вам отключили электричество.
Скачать исходники можно здесь и конечно документация.
Разводка платы в P-CAdе прилагается.
Модернизированная версия замка позволяет использовать такие чудеса как дистанционное управление замком (с помощью ИК-приемника TSOP1736), дополнительная память для записи ключей, "пищалка" и все, на что хватит вашей фантазии. Для этих целей можно использовать микроконтроллер ATMEGA16, в моем случае в корпусе TQFP, следовательно для его внутрисхемного программирования необходим разъем (более подробно про разъемы можно почитать в статье “Разъемы для внутрисхемного программирования”). Программно нововведения еще не реализованы, но в скором времени все будет!
Документация , программа и версия в P-CADe прилагается.
Acknowledgements
Выражаю свою искреннюю благодарность MayDay за оказание материально-идейной базы, инженеру Сергею за помощь в установке устройств в дверь и офис-менеджеру Анастасу за периодическое подкармливание в процессе творческой деятельности!
Обсудить статью можно на форуме по AVR