Электронный
замок с
ключом - таблеткой i-Button ( DS1990A )
на
микроконтроллере PIC16F84A
В интернете есть много схем замков, но все они меня не устраивали по
разным причинам: то были собраны на Atmel'ах, то не было индикации, то
еще чего-то хотелось, одним словом обычное дело, то что есть не
устраивает, вот тогда я и решил попробовать свои силы и сделать замок
самому. Сначала засел за шину 1-Wire, потом захотелось расширить базу с
ключами, засел за I2C (для внешней памяти 24СХХ). И вот что в
результате всего этого "родилось".
Схема электронного замка представлена на рисунке:
На фото показан окончательный дизайн печатной платы электронного замка,
под уже имеющуюся у
меня коробку :
Так как ЛУТ технологией сложно сделать двухстороннюю ПП, то недостающие
дорожки (расположенные со стороны деталей), а именно дорожки
от
регистров к индикаторам и от 10-го вывода ПИКа на выводы 3 регистров
можно сделать навесным монтажом.
Почему вместо более современного МК с большей EEPROM памятью
используется "дедушка" PIC16F84A? Как я уже говорил попутной задачей
было изучение протоколов 1-Wire и I2C, плюс использовать МК с
фиксированным объемом памяти это органичение к-ва ключей, в данном же
случае небольшой переделкой программы и заменой м/с памяти (например на
24С512) можно легко довести количество ключей до 8000 штук, при этом
сама печатная плата останется без изменений.
До монтажа в коробку дело так и не дошло, так что есть только
рисунок:
Описание
работы с электронным замком
При подаче питания издается краткий звуковой сигнал
Все звуки были скопированы со свободно распространяемого исходника
"Электронный замок с
ключём-таблеткой i-Button (DS1990A).", автор Дмитрий, сайт - http://www.shema.ru/12/ds1990a.zip
Звуковой сигнал свидетельствует о нормальной инициализации замка, после
чего замок
входит в режим поиска подключенного ключа. Если к считывателю
прикоснуться ключом занесенным в базу, то загорится зеленый светодиод,
раздастся звуковой сигнал "пользователь определен", на индикаторе
высветится порядковый номер ключа в базе и на 2 сек сработает реле
управляющее элекрозамком (в простейшем случае соленоид). Если
считывание произошло правильно (совпала контрольная сумма), но ключа в
базе нет, то загорится красный светодиод, прозвучит сигнал "вход
запрещен" и в течении 1 сек замок не будет считывать другие ключи
(реле, естественно, не срабатывает). Если код ключа был считан с
ошибкой (ошибка в контрольной сумме), то прозвучит сигнал "ошибка
считывания" и немедленно будет произведена попытка повторно считать
ключ, дальнейшее поведение будет зависеть от того есть ли ключ в базе,
или его там нет.
Для программирования ключа используется отдельное считывающее
устройство, так как в моем случае сама электронная часть была в
отдельном помещении (около 30 м от входной двери), было решено под
задачи программирования выделить отдельный вывод МК, с одновременной
блокировкой работы первого считывателя (есть вероятность что во время
программирования кто-то коснется считывателя другим ключем и т.д.).
Возможный вид считывающего устройства показан на рисунке:
Режим
программирования электронного
замка
Для
входа в режим программирования нужно нажать сначала клавишу "вниз", при
этом загорится зеленый светодиод и, через время не более 2-х секунд,
клавишу "вверх", загорится красный светодиод.
Дальше есть несколько
вариантов управления:
1. можно просто выбрать порядковый номер ключа в базе с помощью клавиш
"вверх"/"вниз". Выбранный номер начнет мигать в течении 2 сек, если во
время мигания нажать клавишу "вниз", то ключ будет вытерт с базы что
подтвердится двумя короткими "пиками" (реальная проверка наличия ключа
по данному номеру не производится, т.е. просто обнуляются ячейки памяти
данного порядкового номера). Если ничего не нажимать, то через две
секунды замок вернется в режим программирования.
2. можно коснуться ключем к считывателю программирования и, если ключ
есть в базе, начнет мигать его порядковый номер, дальше можно нажать
клавишу "вниз" и удалить его, или ничего не нажимать, т.е. вернуться в
режим программирования. Если данного ключа в базе нет, то на индикаторе
начнут мигать символы "UP" и по нажатию клавиши "вверх" данный ключ
будет занесен в базу, на индикаторе высветится его текущий порядковый
номер и прозвучит два коротких "пика". Если все доступная память уже
занята, прозвучит три "пика" и замок вернется в режим программирования.
Если с клавиатурой и ключами не производить никаких манипуляций в
течении около 5-и сек, будет осуществлен возврат в рабочий режим.
В случае если необходимо вытереть все ключи за один раз, надо отключить
питание, нажать обе клавиши и включить питание. В течении 5-и сек будут
издаваться короткие сигналы, после чего вся память будет очищена и
результат успешного завершения операции будет подтвержден двумя
"пиками", если хотя бы одна из клавиш будет отпущена раньше этого
времени, замок войдет в рабочий режим без вытирания памяти.
Данный замок без поломок работет в нашем офисе уже около трех лет, за
все это время небыло ни одного зависания или других "бяк".
Что не было сделано:
хотел сделать настройку времени срабатывания реле
(с шагом в 0,5 сек), для этого надо было оптимизировать код (моя первая
"серьезная" конструкция, ясное дело код далек от совершенства), но...
может как-нибудь и доделаю...
Если все собрано без ошибок, то устройство в наладке
не нуждается.