Разработка контроллера управления доступом с ключами iButton DS1990 и с функцией управления освещением.
Необходимость в разработке такого контроллера возникла при условии обеспечить доступ в гараж разным людям – рабочим гаража (водителям, слесарям, кондукторам, кочегарам и пр.). При этом нужно было контролировать, кто пришел, и кто ушел и при необходимости ограничивать доступ некоторым личностям. Несмотря на то, что чипы DS1990 не самое современное решение, решено было использовать именно их по причине наличия такого чипа у каждой «домохозяйки». Следовательно, можно без проблем обеспечить доступ вновь пришедшим на работу специалистам и не снабжать их дополнительными чипами типа RFID и не зашивать им под кожу скрытые датчики.
Естественно в интернете полно подобных готовых решений, тем более полно недорогих заводских устройств типа популярного Z-5R и мы, конечно же, начали с них. Пара схем, собранных из интернета вполне работали, но одна из них не обеспечивала нужной функциональности, другая была собрана на PIC-контроллере, со всеми отсюда вытекающими проблемами – периодическое стирание ключей из памяти, зависания и ложные срабатывания. Потом пробовали пару заводских контроллеров Z-5R, которые устраивали почти во всем, кроме того, что сгорали после каждой грозы, отчего утром никто не мог попасть на работу. Кроме всего у всех опробованных устройств был один важный недостаток – добавление ключей производилось в слепую, точнее по кругу. Поэтому невозможно было угадать какой ключ перезапишется следующим, какие ключи уже есть в памяти и сколько их, а стереть нужный ключ вообще не возможно – только все вместе. К тому же, чтобы добавить ключ, нужно было разбирать контроллер, переставлять перемычки, искать мастер-ключ и т.п. Короче, не хватало полноценного дисплея с меню. Кроме того хотелось в будущем наладить общение контроллера с охранной системой «умного дома» по UART. В итоге получилось как в поговорке: «Хочешь сделать, что-то хорошо – делай это сам!».
Вот и взялся я за разработку принципиально нового устройства со всеми необходимыми функциями. Чтобы не ограничивать себя на этапе разработки за основу устройства был выбран МК ATmega8A, да так там по сей день и остался потому, что плюсов от его применения (производительности, запаса ресурсов) больше чем разница в цене с МК нижнего уровня. Микроконтроллер тактируется от внутреннего генератора на 8МГц. Этого достаточно, чтобы получить по UART минимальное количество ошибок.
Для индикации применен 2-строчный дисплей по 20 символов в строке типа 1602А на контроллере совместимом с HD44780. Т.к. к дисплею не предъявляется никаких требований кроме «показывать» он подключен к МК по упрощенной 4-битной схеме. Контрастность на дисплее регулируется подстроечным резистором, а яркость регулируется автоматически, в зависимости от внешней освещенности. Так в темное время суток дисплей «притухает», чтобы не привлекать внимание, а днем яркость включается почти на максимум.
Дополнительно в программе МК пришлось инициализировать дисплей командой «Initlcd» при уходе «вглубь» меню. Обычного оператора «Cls» оказалось недостаточно и если долго не инициализировать дисплей, то он начинал показывать «кракозяблы».
О состоянии освещенности МК узнает при помощи простейшего датчика на фоторезисторе. Уровень освещенности на который реагирует МК регулируется делителем на подстроечном резисторе.
Немного необычно в программе опрашивается АЦП – измерение уровня входного напряжения производится 10 раз, но берется только последнее значение. Дело в том, что при внезапном единичном измерении АЦП в «мега8» он «подвирает», т.е. первые пара-тройка замеров немного отличаются от истины (например, вместо значения 500 сначала будет 503, потом 502, потом 501 и только последующие показания будут верны). Не знаю, с чем это связано (возможно, с какой-то внутренней емкостью, скорее всего паразитной), но обмануть это удалось простым повтором измерений.
Вход для считывателя по линии 1-Wire подтянут к плюсу питания и зашунтирован стабилитроном. Именно такое решение позволило повысить надежность входной линии и избежать выхода из строя входа МК при «непереносимых» наводках и статическом электричестве. Опрос считывателя производится непрерывно в основном цикле стандартным для 1-Wire способом – сбросом линии. После чего, если линия ответила, валим в подпрограмму обработки принятой информации. На выходе из подпрограммы получаем строковую переменную со значением считанного ключа в шестнадцатиричной системе. Примечательно, что полученное число не совпадает с числом, напечатанном на чипе. Почему так, не знаю, не вникал, возможно неверный порядок считывания данных.
Считанный код чипа сравнивается с одним из хранящихся в памяти и если совпадает, то замок обесточивается на 5 сек. В роли замка применен обычный «домофонный» электромагнит соответствующей мощности. В моем варианте исполнения устройства применены два считывателя – один снаружи, другой внутри помещения. Это нужно, что бы контролировать, кто, когда вошел и во сколько вышел. При необходимости есть возможность внутри помещения установить скрытую кнопку открытия замка. Она обесточивает замок на 30 сек. Но стоит учесть, что как правило про скрытую кнопку через неделю знают все. Также предусмотрена возможность установить снаружи кнопку звонка. При нажатии на нее встроенный в схему 12-вольтовый зуммер подтверждающий нажатия кнопок издаст пачку коротких «пик-ов», напоминающих домашний звонок.
Дополнительно микроконтроллер следит за внешним освещением и в темное время суток включит лампу освещения подъезда или площадки перед дверью на 5 мин. В светлое время суток освещение не включается.
Часть схемы, предназначенная для управления электромагнитным замком на первый взгляд излишне усложнена, но именно такой способ управления N-канальным MOSFET-ом позволяет ему полностью открыться. Т.е. когда сопротивление перехода становится практически равным «0». Это позволяет подключать к нему довольно мощные электромагниты (можно даже два параллельно) без использования дополнительного радиатора. Можно было конечно применить MOSFET управляемый логическим уровнем, но такой транзистор нужно покупать, а обычных полно в старой «материнке» от ПК. Также в этой части схемы имеется встроенная в устройство индикация включенного состояния электромагнита и возможность подключить внешние светодиоды на считывателях. Для них, возможно, придется добавить токоограничивающие сопротивление соответствующее типу светодиода.
Всего в прилагаемой версии прошивки реализовано запоминание 10 ключей, но при необходимости их количество можно увеличить самостоятельно. Для удобства управления переменными ключей и сокращения исходного текста программы переменные ключей объединены в массивы. Вообще исходник хорошо прокомментирован, без «сложностей» типа ассемблерных вставок или выебонов с «непопулярными» решениями, поэтому разобраться и что-то изменить в нем не составит труда.
Обработка нажатия кнопок производится оператором «Debounce«. С одной стороны это очень удобный способ бороться с дребезгом контактов кнопок, а с другой – лишняя головная боль потому, что в результате срабатывания условия оператора нужно обязательно перейти на подпрограмму. В итоге, при неосмотрительном использовании этого оператора, может образоваться большое количество подпрограмм, что не всегда эффективно при прочтении текста исходника.
На данный момент реализованы не все задуманные возможности экранного меню. Заказчик поторапливает, поэтому придется дорабатывать позже. Существующее экранное меню позволяет удобно и наглядно управлять ключами и содержит вложенные меню. Управляется все двумя кнопками SEL и OK. Для входа в меню нужно нажать кнопку SEL, вы перейдете в подпрограмму выбора ячейки памяти для ключа, с которой нужно работать.
Если в ячейку сохранен номер ключа, он будет показан. Если ячейка пуста, то вместо номера ключа показываются «черные квадраты». Если в течении 5 сек. не нажать не одну из кнопок программа вернется в основной цикл. Также происходит выход из всех подменю. Повторное нажатие кнопки SEL выберет следующую ячейку памяти. Для работы с выбранной ячейкой памяти нужно нажать OK – вы перейдете в меню выбора действий с ключом, в котором можно стереть существующий или добавить новый ключ в память.
При нажатии OK происходит переход в подменю добавления нового ключа в память. Пока на дисплее показывается надпись «Touch Reader» нужно коснуться чипом считывателя. Программа метнется в подпрограмму считывания чипов и сохранит полученное значение в ранее выбранной ячейке памяти.
Стирание значения ключа из выбранной ячейки памяти происходит в два этапа – сначала нужно подтвердить намерение стереть ключ. И только если нажата кнопка OK вместо значения ключа в соответствующей ячейке памяти будет записано слово «DELETE», а на дисплее вместо него будут «черные квадраты».
Первая версия контроллера собрана и налажена на макетной плате из Китайского фольгированного гетинакса. Все примененные детали для поверхностного монтажа. Неиспользуемые выводы микроконтроллера сконфигурированы на выход и на них программно установлен лог. «0». Подключение внешних элементов к контроллеру идентично общепринятому (как у заводских контроллеров). На первый взгляд может показаться, что в схеме много «лишних» компонентов. Дело в том, что в системе контроля доступа очень важна надежность, поэтому ни один «необязательный» компонент в такой схеме не является лишним. Все узлы схемы спроектированы с таким расчетом, чтобы защитить помещение от проникновения при любых условиях. Даже если микроконтроллер сгорит огнем ничего не случится – электромагнит замка будет по прежнему включен, свет самопроизвольно не включится.
После очередного обновления в январе 2017 «движок» сайта WordPress запретил загружать на сервер архивы *.rar, *.zip или им подобные под предлогом заботы о нашей с вами безопасности. После похода на их русскоязычный, но все же вражеский сайт стало ясно, что это теперь дополнительная опция за которую, естественно, нужно доплатить. Пришлось обходить «защиту» вручную, поэтому если возникнут проблемы с скачиванием архива — напишите, вышлю на почту или на ЯндексДиск. Плюсом еще исчезли нужные кнопки из текстового редактора и появилось ограничение на количество символов. Короче, не обновление, а жопа — закончился бесплатный сыр. А пока все, продолжение здесь.