Микроконтроллерный электронный замок. Кодовый замок на микроконтроллере Этапы управления кодовым замком



Данный проект будет отличным вариантом для повторения новичками, в нем используется ЖКИ дисплей 1602, клавиатура 4х4 из кнопок и конечно же сам контроллер. Кроме того, применены реле, кнопка и разъемы питания, PLS штырьки, пару транзисторов ну и по мелочи. Кстати, яркость дисплея в проекте будет регулироваться по методу ШИМ.

Это устройство может быть использовано для защиты практически любых объектов, пользователь должен ввести правильный пароль для получения доступа. Плата уже спроектирована удобным образом, и остается изготовить только красивый корпус для него. Пароль вводится с помощью встроенной в клавиатуру матрицы 4×4. Основной модуль ЖК-дисплея используется для отображения сообщений пользователю и текущей информации. Как только будет введен правильный пароль – сработает реле. Об этом так же будет свидетельствовать светодиод, установленный рядом с реле. Для отключения реле нужно нажать соответствующую кнопку на клавиатуре.

После ввода четырехзначного пароля необходимо нажать кнопку "ОК" (S8). В любое время вы можете нажать кнопку "Отмена" (S12), чтобы очистить код (например, при вводе любых неправильных цифр).

Код блокировки можно легко изменить, для этого нужно ввести специальный пароль “0000”, как только вы введете этот пароль, устройство переключится в режим смены пароля. Здесь нужно ввести старый пароль, чтобы получить разрешение, а затем ввести новый пароль, все очень просто.

Подсветка ЖК-дисплея выключается автоматически, после того как система находится в режиме ожидания нескольких секунд. Затемнение подсветки происходит очень плавно, так же как например в мобильных телефонах. Дисплей можно заменить на любой аналогичный, с похожим контроллером или даже другого разрешения, главное советую обратить внимание на распиновку выводов, в некоторых моделях распиновка дисплеев может отличаться. Программа для контроллера написана в среде С++, исходники, а так же прошивка для контроллера прилагаются. Микроконтроллер можно применить с любым индексом, буква L означает пониженное энергопотребление.

Список используемых радиодеталей:

01 330 Ом резистор (2 шт), R3, R5

02 4.7 кОм резистор R2, R4, R6

03 200 Ом резистор R1

04 0.1мкФ керамический конденсатор C1, C3, C4, C5

05 1N4007 Диод (2 шт), D1, D3

06 5мм светодиоды любого цвета D4

07 Микроконтроллер ATmega8L U1

08 Стабилизатор напряжения 7805 U2

09 Разъем питания CON1

10 PCB реле RL1

11 Выключатель Вкл / Выкл SW1

12 DC гнездо X1

13 16×2 LCD дисплей LCD1

14 10 кОм подстроечный резистор RV1

15 28 PIN кроватка для микроконтроллера IC

16 BC548 транзистор (2 шт.) Q1, Q2

17 Кнопки (16 штук)

Файл печатной платы для изготовления методом ЛУТ находится ниже в архиве, печатную плату можно заметно уменьшить, если применить кнопки поменьше, или если вынести клавиатуру на отдельную плату. Цифровые клавиши можно взять от старой клавиатуры компьютера или ноутбука.

Скачать файл печатной платы, исходник и прошивку

Оригинал статьи на английском языке (перевод: Адвансед для сайта cxem.net)

Принципиальная схема двухуровневой системы охраны, которая построена применением AVR микроконтроллеров серии ATMega. 1-й уровень охраны - кодовый замок. 2-й уровень охраны - устройство охраны. Две функциональные платы, входящие в систему выполнены на базе микроконтроллеров ATmega 8535.

Структурная схема

Микроконтроллеры (семейства AVR, MCS-51 и др.) со своей архитектурой, программными и аппаратными ресурсами, как цифровые кубики идеально подходят для разработки различных устройств охраны, сигнализации, кодовых замков и пр.

Рис. 1. Структурная схема системы охраны.

В системе (рис. 1) имеется две основных составных части: кодовый замок А2, и устройство охраны А1. Устройство охраны А1 имеет 24 независимых входных линии к которым подключены концевые выключатели S1...S24. Данные выключатели контролируют состояние окон 01...05, двери Д1, люков Л1, Л2.

Количество вышеуказанных объектов контроля может быть разным, и привязано к каждому конкретному помещению или охраняемому периметру.

Количество применяемых устройств охраны А1 и кодовых замков А2 тоже ничем не ограничено и определяется условиями охраны, степенью защиты, особенностями зданий, помещений и др. Понятно, что концевые выключатели S1...S24 могут контролировать и те двери, люки доступ к которым ограничен кодовым замком (или кодовыми замками) А2. Принципиальная схема кодового замка представлена на рис. 2.

Принципиальная схема

Рассмотрим работу устройства охраны. Внешними (выносными) элементами по отношению к устройству являются 24 концевых выключателя (S1...S24), которые позволяют контролировать состояние 24 объектов (например, дверь). Один концевой выключатель контролирует состояние одной двери. Если дверь закрыта - концевой выключатель разомкнут.

Пользователь (оператор, диспетчер) визуально состояние двери может проконтролировать по состоянию индикатора.

Если дверь открыта - концевой выключатель замкнут. Индикатор - периодически мигает. Если дверь закрыта - концевой выключатель разомкнут. Индикатор - не горит (погашен). Пусть концевой выключатель S1 установлен в двери № 1. Пусть концевой выключатель S2 установлен в двери № 2 и т. д.

Если открыта дверь № 1, то периодически мигает индикатор HL2 (если дверь № 1 закрыта индикатор HL2 - погашен). Если открыта дверь № 2, то периодически мигает индикатор HL3 (если дверь № 1 закрыта индикатор HL3 - погашен) и т. д.

Автор, не будет останавливаться на каком-то конкретном конструктивном исполнении установки концевого выключателя, а так же конструкции самого устройства. В интерфейс контроля и управления устройства входят: тумблеры SA1, SA2, индикаторы HL1...HL25. Конструктивно, все вышеуказанные элементы целесообразно разместить на отдельной панели управления.

Рис. 2. Принципиальная схема кодового замка для системы охраны.

Элементы интерфейса управления устройства имеют следующее назначение:

  • SA1 (ОХРАНА) - тумблер сигнализации. При установке данного тумблера в положение "ВКЛ" - устройство ставится под охрану. Устройство ставится под охрану, через ~ 10 сек. с момента установки тумблера SA1 в положение "ВКЛ" из положения "ВЫКЛ". После установки под охрану, сигнализация срабатывает через ~ 10 сек с момент замыкания любого концевого выключателя S1...SA24.
  • SA2 - тумблер выключения звука. Данный тумблер функционирует только в режиме контроля состояния дверей. Тумблер SA1 должен быть установлен в положении "ВЫКЛ". При установке тумблера SA2 в положение "ВКЛ" при открытии любой двери пьезоэлектрическим излучатель ВА1 сразу выдаст звуковой сигнал, длительностью ~ 2 сек. Если данный тумблер в положение "ВЫКЛ", то при открытии любой двери, будет периодически мигать только соответствующий индикатор, пьезоэлектрическим излучатель ВА1 - будет выключен.
  • HL1 - индикатор активации режима охраны. Если устройство находится в режиме "охрана", данный индикатор - горит, если в режиме " контроль состояния дверей" данный индикатор - погашен.

Сигнализация срабатывает - это значит: реле К1 - постоянно включено. Выводы 5 и 6, а так же 2 и 3 данного реле - замкнуты. Пьезоэлектрическим излучатель ВА1 - включается и выключается с периодом ~ 1 сек. Для выключения сигнализации необходимо тумблер SA1 установить в положение "ВЫКЛ".

Рассмотрим основные, функциональные узлы принципиальной схемы устройства. Основой устройства служит микроконтроллер DD1, рабочая частота которого задается генератором с внешним резонатором ZQ1 на 10 МГц.

Рис. 3. Принципиальная схема устройства охраны на микроконтроллере.

К порту PD микроконтроллер DD1 подключены выключатели SA1, SA2 пьезоэлектрическим излучателем ВА1, индикатор HL1, ключ на транзисторах VT1, VT2 для управления реле К1. К портам РВ, РА, PC микроконтроллера DD1 подключены концевые выключатели S1...S24 и индикаторы HL2...HL25.

Питание на данные индикаторы поступает через ключ на транзисторе VТЗ, который управляется с вывода 21 микроконтроллера DD1. Резисторы R10...R17, R20...R27, R28...R35 - токоограничительные для индикаторов HL2...HL25. Резистор R8 - токоограничительный для индикатора HL1.

Реле К1 управляется соответственно с вывода 14 микроконтроллера DD1. Питающее напряжение +12 В и +5В поступает на устройство с соединителя XI. Конденсатор С5 фильтрует пульсации в цепи питания +5 В. Блокировочный конденсаторы С4 стоит по цепи питания микроконтроллера DD1.

В алгоритме работы устройства можно выделить два режима работы: режим контроля состояния дверей и режим охраны. Рассмотрим алгоритм работы устройства в режиме контроля состояния дверей. Пусть все двери охраняемого объекта закрыты. Тумблер SA1 в положении "ВЫКЛ".

Тумблер SA2 в положении "ВКЛ". После подачи питания на устройство, при инициализации во все разряды портов РВ, РА, PC микроконтроллера DD1 записываются лог. 1. Ключи на транзисторах VT1...VT2 закрыты, индикатор -HL1 - погашен.

Индикаторы HL2...HL25 -погашены. Концевые выключатели S1...S24 -разомкнуты. С вывода 21 микроконтроллера DD1 генерируется периодический сигнал (меандр) с периодом порядка 1 с. Если, открыть дверь № 1, включится концевой выключатель S5.

Индикатор HL2 будет периодически мигать с периодом ~ 1 сек. Пьезоэлектрический излучатель ВА1 выдаст звуковой сигнал длительностью ~ 3 сек.

Если, открыть дверь № 2, включится концевой выключатель S6. Индикатор HL2 будет периодически мигать с периодом ~ 1 сек. Пьезоэлектрический излучатель ВА1 выдаст звуковой сигнал длительностью ~ 2 сек и т. д. Если установить тумблер SA2 в положении "ВКЛ", то при замыкании любого концевого выключателя (при открывании любой двери) будет только мигать соответствующий индикатор.

Рассмотрим работу устройства в режиме охраны. Пусть все двери охраняемого объекта закрыты. Тумблер SA1 установлен в положении "ВЫКЛ".

Устройство переходит в режим охраны, через ~10 сек с момента установки тумблера SA1 в положении "ВКЛ". За это время необходимо закрыть все двери и покинуть охраняемый объект. Понятно если периметр охраняемого объекта достаточно большой и за 10 сек. невозможно закрыть все двери, то все двери необходимо закрыть до постановки объекта под охрану.

Если в режиме охраны включится любой из концевых выключателей S1...S24 (будет открыта любая дверь) при этом на соответствующем выводе портов РВ, РА, PC микроконтроллера DD1 будет присутствовать сигнал уровня лог.0. то через ~ 10 сек. включится звуковая сигнализация (пьезоэлектрический излучатель ВА1). При этом на выводе 14 микроконтроллер DD1 установит уровень лог.0 (Включится реле К1).

Если на охраняемый объект проникает "свой", то ему необходимо за ~ 10 сек и установить тумблер SA1 в положении "ВЫКЛ", иначе сработает сигнализация. Понятно, что доступ к выключателю SA1 должен быть ограничен.

Если на охраняемый объект (через вскрытую дверь) проникает "чужой", то ему необходимо за ~10 сек. найти выключатель SA1 и установить его в положении "ВЫКЛ". Сигнализация включится и в том случае если любой из концевых выключателей S1...S24 включится на короткое время (например, закрыть и тут же закрыть дверь). Контакты реле К1 можно использовать для замыкания цепей управления или питания различных исполнительных устройств, например для механизма блокировки дверей или для включения сирены (ревуна).

Разработанная программа на ассемблере занимает всего-то порядка 0,4 КБайт памяти программ микроконтроллера DD1. Незадействованные аппаратные (линии PD6, PD7) и программные (порядка 7,6 Кбайт) ресурсы микроконтроллера DD1 можно использовать для дополнительных опций.

Например, можно установить пару кнопок и добавить функцию постановки и снятия с охраны устройства через код доступа или управлять какими-то другими исполнительными устройствами. Разобравшись в программе можно заменить установленные программно параметры устройства:

  • период мигания индикатора HL1;
  • длительность звуковой сигнал пьезоэлектрический излучателя ВА1 в режиме контроля состояния дверей;
  • время постановки устройства под охрану, а так же время задержки на включение сигнализации.

В устройстве использованы резисторы С2-ЗЗН-0.125, подойдут любые другие с такой же мощностью рассеивания и погрешностью 5 %. Конденсатор С5 типа К50-35. Конденсатор С1...С4 типа К10-17а. Конденсатор С4 устанавливаются между цепью +5V и общим проводником микроконтроллера DD1. Тумблеры SA1...SA2 типа МТД1.

Реле К1, типа РЭС48Б исполнения РС4.590.202-01. Данные реле, с рабочим напряжением 12 В (или с каким-то другим рабочим напряжением), для каждого конкретного случая, можно подобрать совершенно любые, учитывая при этом коммутируемые ток и напряжение подключаемого исполнительного устройства.

Концевые выключатели можно подобрать совершенно любые под каждый конкретный случай. Это может быть кнопка типа ПКН124, или например, влагозащищенный выключатель путевой типа ВПК2111. Пьезоэлектрический излучатель ВА1- НРМ14АХ.

Транзистор VT1 - КТ829А. Транзисторы VT2, VT3 -КТ3107Е. Индикатор HL1 - АЛ307АМ, красного цвета. Индикатор HL1 можно заменить на любой другой, желательно, с максимальным прямым током до 20 мА.

Рассмотрим работу кодового замка (далее замка) по рисунку 3. Алгоритм его работы достаточно прост: в режиме записи в EEPROM микроконтроллера заносится код, который состоит из 4-х десятичных цифр и набирается на 7- кнопочной клавиатуре. Далее, для проверки записанный код читается в режиме чтения. В рабочем режиме замок ждет ввода кода.

Вводимый код, микроконтроллер записывает в ОЗУ и побайтно сравнивает его с кодом, записанным в EEPROM. Если коды совпали, то микроконтроллер на пять секунд подает сигнал на включение механизма открывания замка.

Кроме того, процедура набора кода может открытой (набранный код индицируется на дисплее, каждой нажатой кнопке ставится в соответствие число на дисплее) и закрытой (при наборе кода на дисплее индицируются одинаковые, заранее определенные символы, каждой нажатой кнопке ставится определенный символ, например).

Для этого в замке есть отдельный переключатель. Для активации, индицируемого на дисплее 4-х разрядного кода в режиме записи и в рабочем режиме, достаточно нажать на клавиатуре любую кнопку.

В интерфейс устройства входят шкальный, знакосинтезирующий индикатор HG1, блок индикации (дисплей) из цифровых семисегментных индикаторах HG2...HG4, переключатель SA1, и клавиатура (кнопки S1...S8).

Кнопки S1...S7 обозначены цифрами от "1" до "7". Данные кнопки задают код ввода Кнопкой S8 (Р) задается, в цикле, один из трех режимов работы: "режим № 1", "режим № 2", "режим № 3". После режима № 3 включается режим №1.

Элемент №1 индикатора HG1 включен при работе в режиме №1", элемент №2 индикатора HG1 включен при работе в режиме № 2, и элемент №3 включен соответственно при работе в режиме №3. На 5-ти разрядном дисплее (сдвоенные цифровые индикаторы индикатор HG2, HG3 отображается вводимый код. Индикатор HG4 индицирует символы "3" (при закрытом замке) и "0" (при открытом замке).

Переключателем SA1 задается режим отображения кода на дисплее устройства. Если данный переключатель находится в положении "1", то код задаваемый с клавиатуры индицируется на дисплее устройства. Если в положении "2" (скрытый режим), то при наборе кода на дисплее устройства в каждом разряде индицируются символы

В режиме №1 (рабочий режим) замок готов к вводу кода для открывания замка (если конечно код был предварительно записан в EEPROM). Перед набором кода на дисплее индицируется код 0000. Элемент №1 индикатора HG1 включен (остальные элементы индикатора HG1 выключены).

Индикатор HG4 индицирует символ "3" (закрыто). Кнопками S1...S7 набирается 4-х разрядный код. Набранный код индицируется на дисплее. Микроконтроллер после нажатия любой из кнопок S1...S7 записывает полученный 4-х разрядный код в ОЗУ и начинает сверку кода записанного в ОЗУ и кода записанного в EEPROM. Коды сравниваются побайтно.

Если сравнение прошло успешно, микроконтроллер подает сигнал на исполнительный механизм открывания замка. На пять секунд включается элемент №4 индикатора HG1, индикатор HG4 индицирует символ "О" (открыто) и устанавливается лог. 0 на выводе 21.

Спустя пять секунд выключается элемент №4 индикатора HG1 на выводе 21 устанавливается лог. 1. На дисплее снова индицируется код 0000. Индикатор HG4 снова индицирует символ "3" (закрыто).

В режиме №2 (режим записи) осуществляется запись секретного кода в EEPROM. На дисплее индицируется код 0000. Элемент №2 индикатора HG1 включен. Индикатор HG4 индицирует символ "3" (закрыто). Кнопками SI...S7 набирается код. Набранный код индицируется на дисплее.

Микроконтроллер записывает в EEPROM индицируемый на дисплее 4-х разрядный код после нажатия любой из кнопок 51...57. После записи кода на дисплее снова индицируется код 0000.

В режиме №3 (режим проверки записанного кода) осуществляется проверка записанного секретного кода в EEPROM. Элемент №3 индикатора HG1 включен. Индикатор HG4 индицирует символ "3" (закрыто). Записанный код в EEPROM, индицируется на дисплее.

Понятно, что доступ к кнопке S8 и переключателю SA1 должен быть ограничен. Конструктивно это сделать не так уж и сложно.

Рассмотрим основные, функциональные узлы устройства (рис. 3). Основой устройства служит микроконтроллер DD1, рабочая частота которого задается генератором с внешним резонатором ZQ1 на 11.0592 МГц. Порт PD микроконтроллера DD1 управляет динамической индикацией.

Динамическая индикация собрана на транзисторах VT1...VT5, сдвоенных, цифровых, семисегментных индикаторах HG2, HG3 и одинарном цифровом индикаторе HG4. Резисторы R7...R14 - токоограничительные для сегментов индикаторов HG2...HG4. Коды для включения вышеуказанных индикаторов при функционировании динамической индикации поступают в порт PC микроконтроллера DD1.

Для функционирования клавиатуры задействован вывод 19 (PD5) микроконтроллера DD1. Элементы шкального индикатора HG1 подключены к выводам порта РВ микроконтроллера DD1. Резисторы R2...R5 - токоограничительные для элементов индикатора HG1.

Сразу после подачи питания на выводе 9 микроконтроллера DD1 через RC-цепь (резистор R1, конденсатор С3) формируется сигнал системного аппаратного сброса для микроконтроллера DD1. На дисплее индицируется код 0000. Элемент №1 индикатора HG1 -включен. Индикатор HG4 индицирует символ "3" (закрыто).

Питающее напряжение +5V поступает на устройство с соединителя XI. Конденсатор С5 фильтрует пульсации в цепи питания +5 В. Блокировочный конденсатор С4, стоит по цепи питания DD1.

Совсем коротко о программе. В программе используются два прерывания: Reset и прерывание таймера ТО, обработчик которого начинается с метки ТІМ0. При переходе на метку Reset инициализируются стек, таймер, порты, а так же флаги и переменные используемые в программе.

Таймер ТО генерирует прерывания по переполнению (в регистре TIMSK установлен бит TOIE0). Коэффициент предварительного деления тактовой частоты таймера установлен равным 64 (в регистре TCCR0 записано число 3).

В основной программе осуществляется включение элементов индикатора HG1. Включенные элементы данного индикатора, как уже упоминалось выше определяют текущий режим работы замка. В обработчике прерывания таймера ТО осуществляется: процедура опроса кнопок S1...S8, функционирование динамической индикации, запись секретного кода в EEPROM, чтение секретного кода из EEPROM, перекодировка двоичного числа в код для отображения информации на семисегментнных индикаторах устройства, а так же временной интервал длительностью пять секунд, необходимый для включения исполнительного устройства соленоида.

В ОЗУ микроконтроллера с адреса $61 по адрес $70 организован буфер отображения для динамической индикации. Ниже приведено подробное распределение адресного пространства в ОЗУ микроконтроллера.

  • $60 - адрес начала ОЗУ микроконтроллера.
  • $61...$64 - адреса, где хранится задаваемый код для открывания замка и символ "3". Эти адреса выводятся на индикацию в режиме №1 (буфер №1).
  • $66...$69 - адреса, где хранится код читаемый из EEPROM и символ "3". Эти адреса выводятся на индикацию в режиме № 3 (буфер №2).
  • $6С...$70 - адреса, где хранятся символы при скрытом наборе кода, и символ " 3". Эти адреса выводятся на индикацию в режиме № 1(буфер №3).

Флаги, задействованные в программе, находятся в регистрах R19 (flo) и R25 (flo1).

Разработанная программа на ассемблере занимает порядка 1,2 Кб памяти программ. Разобравшись в программе, при незначительных доработках принципиальной схемы, задействовав свободные аппаратные и программные ресурсы микроконтроллера DD1, можно например, увеличить число разрядов в дисплее и количество кнопок или добавить звуковую сигнализацию.

Применены резисторы типа С2-ЗЗН подойдут любые другие с такой же мощностью рассеивания и погрешностью 5 %. Конденсаторы С1...С4, типа - К10-17а, С5 - К50-35а. соединитель XI типа WF-4. Конденсатор С4 устанавливается между цепью +5V и общим проводником микроконтроллера DD2. Для отработки макета применялся выключатель SA1 типа ВДМЗ-8.

Для установки в блочный корпус, можно применить, например, переключатель типа МТДЗ. В дисплее выделен разряд, индицирующий символы "3", "О" (индикатор HG4) на фоне остальных разрядов интерфейса. Поэтому для данного разряда выбран семисегментный индикатор зеленого цвета HDSP-F501, индикаторы HG2, HG3 зеленого цвета DA56-11GWA.

Замок и устройство охраны не требуют никакой настройки и наладки. При правильном монтаже начинают работать сразу.

Исходный код и прошивки программ - Скачать (8 КБ).

Шишкин С. В. РК-07-16.

Литература:

  1. А. В. Белов Создаем устройства на микро-контроллерах.
  2. С. В. Шишкин. Кодовый замок на базе микроконтроллера. Р-10-2011.

Решил поиграться с давно заказанной с китая мембранной клавиатурой 3x4. Есть много видов и разновидностей данной клавиатуры, есть в пластмассовых корпусах, а есть пленочные. У моего вариант 3x4 7 контактов, распиновка клавиатуры 4x4 показана на схеме ниже, схема один к одному. Схема почти идентична с клавиатурой 3x4 за исключением того что отсутствует правый ряд клавиш "A,B,С,D".

Схема подключения клавиатуры 3x4:

Клавиатура 4x4 подключается аналогично, четвертый ряд "A, B, С, D " подключается к порту PD7 микроконтроллера.

Исходный код программы:

$regfile = "m8def.dat"
$crystal = 1000000

"конфигурация дисплея
Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5
Config Lcd = 20 * 4
Cursor Off
Cls

"конфигурация клавиатуры
Config Kbd = Portd , Debounce = 40 , Delay = 100

"переменные
Dim Key_char As Byte "номер нажатой клавиши
Dim Key_str As String * 1 "символ нажатой клавиши на клаивиатуре
Dim Result As String * 20 "результат нажатий на клавиатуру
Deflcdchar 1 , 32 , 14 , 10 , 31 , 27 , 27 , 14 , 32 "

Locate 1 , 4
Lcd Chr(1)

Result = ""

"Главный цикл программы
Do

Key_char = Getkbd() "когда клавиша не нажата функция возвращает переменной значение 16

If Key_char <> 16 Then "если переменная не равна 16, значит была нажата кнопка
Key_str = Lookupstr(key_char , Keyboard_data) "вытаскиваем из массива символ нажатой клавиши
Result = Result + Key_str
End If

Locate 2 , 3
Lcd Result "выводим на дисплей результат нажатий

Waitms 100

If Result = "123" Then
Locate 2 , 2
Lcd "UNLOCK"
Wait 1
Goto Pizdec
Else
End If

If Key_str = "5" Then
Locate 2 , 2
Lcd "RETURN"
Wait 1
Goto Pizdec
Else
End If

Loop

Keyboard_data:
Data "1" , "4" , "7" , "*" , "2" , "5" , "8" , "0"
Data "3" , "6" , "9" , "#" , "A" , "B" , "C" , "D"

Pizdec:
Return

При удержании клавиши символы начинают повторяться, программу можно слегка доработать если добавить в конец первого в примере строки:

Key_char = Getkbd()
If Key_char <> 16 Then
Goto 1
End If

То мы избегаем повторения символов при удержании клавиши. Можем хоть минуту давить на кнопку, а символ будет один.

При включении прибора на верхней строке высвечивается иконка "замок", на нижней строке отображаются вводимые символы.


По умолчанию в исходнике код "123", как только мы введем этот код (как только нажмем третью правильную кнопку) на нижней строке выйдет надпись "UNLOCK".

Думаю принцип работы программы вам понятен, остается программу чуть дописать, указать порты на срабатывание при вводе правильного кода.

Видео работы кодового замка:

Файлы проекта с исходным кодом (~15кб.)

Готовая версия кодового замка:

Ниже представлена готовая рабочая схема кодового замка с настроенными портами для подключения электропривода и светодиодов. Электропривод можно подключить автомобильный, так называемый привод замка дверей.

При верном вводе PIN кода привод сработает на 1 секунду, этого времени достаточно для работы механизма замка (открывания двери)? привод подключается через транзистор к порту PORTB.4. Если же при попытке ввести PIN код ошиблись цифрой, нажимаете кнопку "решетка" и можно начать ввод кода заново...

При правильном вводе PIN кода открывается замок, а на дисплее выводится надпись "UNLOCK".

Проект в Proteus и прошивка лежат ниже в архиве, PIN код замка указан в архиве в названии файла прошивки.

По материалам сайта avrproject.ru

проект Proteus и файл прошивки (~16кб.)

Исполнительным механизмом в электронном замке, схема которого показана на рис. 1, служит электромеханический замок ЗНЭМ-1-2, открывающийся при подаче на встроенный в него электромагнит Y1 постоянного напряжения 12 В. Логическая часть электронного замка построена на микроконтроллере PIC16F630-I/R Кнопки SB1 и SB2 предназначены для ввода открывающего его кода. Светодиоды HL1—HL3 разного цвета свечения сигнализируют о состоянии и режиме работы. Полевой транзистор VT1 по сигналу, формируемому микроконтроллером на выходе РСЗ, управляет электромагнитом Y1.

Рис. 1

Устройство питается от гальванической или аккумуляторной батареи напряжением 12 В. Такое напряжение необходимо для надёжного срабатывания электромагнита Y1. Его можно подавать как от гальванической или аккумуляторной батареи, так и от сетевого блока питания. Батарея гарантирует возможность открыть замок при отсутствии напряжения в сети, но придётся постоянно следить за её заряженностью.

Напряжение 5 В {требующееся для питания микроконтроллера) получается из 12 В с помощью интегрального стабилизатора DA1. Если использовать исполнительное устройство на другое напряжение или отдельный источник его питания, напряжение, подаваемое на вход стабилизатора, может быть уменьшено до 7 В или увеличено до 15 В.

Ток, потребляемый замком, когда он закрыт, очень невелик и не превышает нескольких миллиампер. В процессе набора кода он возрастает до десятков миллиампер в зависимости от числа включённых светодиодов, а при срабатывании электромагнита — приблизительно до 1 А.

Рис. 2a. Вид со стороны компонентов

Рис. 2b. Вид со стороны дорожек

Замок собран на печатной плате. Расположение элементов и чертёж печатных проводников на ней показаны на рис. 2. Светодиоды HL1—HL3 и кнопки SB1, SB2 установлены отдельно на раме запираемой замком двери. Открывающему замок человеку светодиоды должны быть видны, а кнопки доступны для нажатия. Светодиоды, типы которых указаны на схеме, имеют диаметр корпуса 10 мм и повышенную яркость. Однако можно применить и другие, подходящих цветов свечения.

Программа микроконтроллера создана в среде "PIC Simulator IDE v6.91". Открывающий код представляет собой комбинацию из восьми нажатий в определённом порядке на кнопки SB1 и SB2. В программе нажатие на кнопку SB1 представляется логическим нулём в соответствующем порядковому номеру нажатия разряде ячейки памяти, а нажатие на кнопку SB2 — логической единицей в таком разряде. Общее число возможных комбинаций — 256.
Нажатие на любую кнопку подтверждается включением светодиода HL1, что позволяет визуально их контролировать. Набирая код, нельзя нажимать на обе кнопки одновременно. Это приведёт к отмене попытки набора и блокировке замка на 4 с. В случае слишком продолжительной паузы между нажатиями на кнопки или слишком длительного (более 3 с) удержания кнопки нажатой программа включает свето-диод HL3 и также отменяет попытку ввода, блокируя замок на 4 с.

Если код набран до конца, но не совпал с хранящимся в памяти микроконтроллера образцом, замок блокируется на 4 с, но светодиод HL3 при этом мигает. Три неверных набора кода заблокируют замок на минуту, что сопровождается включением всех трёх светодиодов. До окончания произошедшей по любой причине блокировки нажатия на кнопки не дают никакого эффекта.

Образцовая кодовая комбинация хранится в EEPROM микроконтроллера по адресу 1. В начале своей работы программа читает содержимое этой ячейки и присваивает его переменной code. Первоначально код заносят в EEPROM на этапе программирования микроконтроллера. Средства для этого имеются в программном обеспечении любого программатора. Например, в главном окне среды программирования "PIC Simulator IDE v6.91" достаточно перед загрузкой программы в микроконтроллер открыть пункт меню "Tools-* EEPROM Memory Editor" и в окне с образом EEPROM записать нужный код в ячейку по указанному выше адресу. Содержимое памяти здесь представляется в шестнадцатеричной системе счисления, поэтому, например, код 00110011 выглядит как 33.

В процессе эксплуатации замка можно сменить код, не перепрограммируя микроконтроллер. Для этого следует включить замок и правильно ввести код, действующий на данный момент. Должен включиться светодиод HL2, а замок — открыться. Пока он открыт, нажмите на обе кнопки одновременно.

Светодиод HL2 начнёт мигать, a HL3 включится. Отпустите кнопки и после того, как светодиод HL3 погаснет, начинайте ввод новой комбинации- Если требования к длительности нажатий на кнопки и пауз между ними при вводе не нарушены, светодиод HL2 продолжит мигать, а светодиод HL3 снова будет включён- После того как светодиод HL3 вновь погаснет (для этого обе кнопки должны быть отпущены), наберите ту же комбинацию ещё раз. Если она идентична первой, программа её примет и запишет в EEPROM.

Приложенный к статье исходный текст программы на языке BASIC содержит описания всех используемых переменных и комментарии к наиболее важным строкам. Таймер TMR0 микроконтроллера сконфигурирован так, что переполняется с периодом около 65,5 мс, каждый раз формируя запрос прерывания. Обрабатывая эти запросы, микроконтроллер определяет состояние кнопок и отсчитывает необходимые интервалы времени. Например, приблизительно минутная блокировка замка основана на отсчёте 1000 прерываний. Их счёт в данном случае ведётся в переменной den_p. Поскольку она имеет тип long, занимая четыре байта памяти, то может принимать значения от 0 до 232-1 (4294967295). Если, например, задать предельное значение результата счёта равным 3600/0,0655^56000, продолжительность блокировки увеличится до часа.

В различной радиолюбительской литературе можно обнаружить множество вариантов электронных кодовых замков.

Особенностью данной схемы кодового замка на микроконтроллере является принципиально новый метод считывания нажатия клавиш, используя всего лишь один порт микроконтроллера PIC12F675. Эта особенность может быть реализована только с микроконтроллерами в составе которого имеется модуль аналого-цифрового преобразователя (АЦП), к примеру как наш микроконтроллер PIC12F675.

Данный микроконтроллер снабжен 10 битным АЦП с диапазоном преобразования от 0 до 1023. Суть метода в том, что клавиатура представляет из себя, по сути, делитель напряжения на резисторах R1-R12 и при нажатии определенной кнопки клавиатуры на вход 7 микроконтроллера поступает напряжение, величина которого характерна только для данной кнопки.

Работа кодового замка на PIC12F675

Для записи 4 цифр секретного кода сперва необходимо нажать кнопку “CODE” и удерживать ее до того момента когда загорится светодиод LED. Затем поочередно нужно набрать 4 цифры секретного кода. По завершению ввода, данный код будет записан в энергонезависимую память микроконтроллера.

Теперь если набрать данный код на клавиатуре произойдет включение реле на 5 секунд. При десятикратной неверно набранном секретном коде прозвучит сигнал тревоги.