В данной статье описана разработка и сборка кодового замка от принципиальной схемы до работоспособного устройства. Несмотря на то, что такие замки утрачивают свою актуальность, они по-прежнему пользуются спросом. Поэтому стояла задача создания устройства, которое не уступало бы конкурентам, а в отдельных моментах превосходило. Поэтому добавлены функции и возможности, которые выделяют данный кодовый замок на фоне остальных. Надеюсь, кому-нибудь будет интересно его повторить или улучшить) Возможно, пригодятся наработки по созданию платы, корпуса или прошивки. Все исходники закреплены.
Описание
Кодовый замок состоит из дисплея, двух индикаторов и двенадцати кнопок. На дисплее выводится информация, которая помогает управлять устройством. Два индикатора уведомляют пользователя о режимах работы устройства. С помощью двенадцати кнопок вводится комбинация цифр.
Отличительными особенностями разрабатываемого электронного кодового замка являются:
- показатели температуры с датчиков ds18b20 (можно подключить до 3 датчиков)
- показатели количества открытий, включений замка, входов в режим администратора
- возможность его программирования во время работы
Это осуществимо с помощью мастер-кода, который в отличие от обычных кодов (которых может быть записано в памяти МК до 124 штук) записан в памяти МК в единственном экземпляре. При правильно набранном мастер-коде открывается режим программирования замка с высвечивающимися подсказками на дисплее. В режиме программирования доступно 4 основных функции:
- добавить новый код
- удалить старый код
- просмотреть список записанных в памяти кодов
- изменить существующий мастер-код
Технические характеристики
Питание выполнено с помощью кабеля USB 2.0 Type A - B от адаптера питания с напряжением 5 В и током не менее 300 мА. Предусмотрена возможность перепрограммирования микроконтроллера электронного кодового замка с помощью программатора и кабеля USB 3.0 Type A - B
Характеристики охранного устройства:
- напряжение питания 5 В
- в включенном состоянии ток потребления не более 300 мА
- в режиме ожидания ток потребления не более 150 мА
- коммутация тока до 2 А
- время коммутации 15 с
В выключенном состоянии не потребляет ток. Включается и выключается замок с помощью кнопки питания. В включенном состоянии после 40 секунд бездействия переходит в режим ожидания.
Разработан корпус, который обеспечивает надежную защиту электронной ячейки от несанкционированного доступа.
Принципиальная схема
MCU1 – микроконтроллер, в котором зашита основная программа управления
LCD1 – дисплей для вывода введенных комбинаций
R1, R2 –токоограничивающие резисторы для светодиодов VD1-VD2
R3, R4- токоограничивающие резисторы для базы VT1
R5- дополнительное сопротивление между цепями Vcc и RESET для избавления от ложных срабатываний схемы сбросы
С1- конденсатор для сглаживания кратковременных импульсных помех, вызванных работой внутренних схем микроконтроллера
C2- конденсатор, определяющий отсутствие логического значения на неиспользуемом выводе AREF, предназначенный для улучшения качества опорного напряжения АЦП
VT1- транзисторный ключ
RL1- коммутирующее реле
VD3- защита RL1 и VT1 и MCU1 от всплесков самоиндукции, происходящих от реле
P1- потенциометр, регулирующий контрастность ЖКИ
SB1, SB2- переключатели, соединяющие цепь питания с LCD1 и RL1
S1-S12- тактовые кнопки, которые задают режимы работы и комбинации
XS1, XS2- разъемы питания
Описание работы принципиальной схемы
Для работы D1 все выводы питания и все выводы земли МК должны быть соединены с контактами +5В и GND разъема XS1 соответственно. Для улучшения работы D1 между цепями GND и +5В ставится конденсатор C1 емкостью 100нФ для уменьшения импульсных помех в цепи питания, вызванных работой цифровых схем внутри МК. Конденсатор C2 такой же емкости нужен на выводе AREF МК для отсутствия на нем логического значения, для улучшения внутреннего опорного напряжения АЦП. Также необходим резистор R2 номиналом 10кОм между выводами RESET и VCC МК для предотвращения частых сбросов схемы из-за недостаточного сопротивления этой цепи внутри D1. С помощью четырех выводов MISO, MOSI, SCK, RESET по интерфейсу XS1 можно программировать МК, не демонтируя его, что существенно усложняется жестким паянным соединением на ПП.
С помощью клавиатурного поля S1-12 вводится комбинация чисел, которая высвечивается на индикаторе D2 и которую МК сравнивает с правильной комбинацией чисел, записанной в его памяти. В случае совпадения на индикаторе D2 появляется оповещение, также начинает светиться светодиод HL1, уведомляющий о правильно набранном коде. Светодиод HL2 предупреждает о случае изменения или удаления цифры введенной комбинации. Светодиоды HL1, HL2 подключены к выводам микроконтроллера через токоограничительные резисторы R1, R4.
Потенциометр P1 позволяет регулировать контрастность индикатора D2.
При правильно набранном коде микроконтроллер подает значение логической единицы на базу транзистора VT1 и он переходит в режим насыщения. Для ограничения тока на базе ставится резистор R3. Резистор R5 необходим для надежного закрытия транзистора VT1, когда он находится в режиме отсечки.
На коллекторе транзистора находится реле RL1 с параллельно соединенным диодом VD1. Он необходим для сглаживания импульсов самоиндукции RL1 при открытии транзистора VT1, когда на реле подается +5В питания и оно срабатывает, и при закрытии, когда на реле перестает идти напряжение. При срабатывании реле RL1 замыкаются контакты, соединенные с выводами клеммника XS2, к которому можно подключить соленоид.
Настройка прошивки в Proteus
ПО написано на языке Си в программном комплексе Atmel Studio 7.
Этапы работы в Proteus
1) Выставить настройки МК в соответствии со настройками на скриншоте в папке Codelock --> Proteus модель
2) Первоначально необходимо очистить память МК.
В Proteus жмем Debug --> Reset Persistent Model Data --> Yes
3) Используем проект GccApplication3.
В нем лежит файл GccApplication3.hex.
Это основной файл прошивки, зашиваем его в МК.
4) Дальше необходимо настроить память МК.
Используем кнопку сброса (RESET) для настройки памяти:
- Нажатие кнопки на 1 с. очищает количество входов в режим администратора
- Нажатие кнопки на 5 с. очищает количество включений, и количество открытий замка
- Нажатие кнопки на 15 с. сбрасывает пароль администратора на 1111
- Нажатие кнопки на 30 с. стирает все записанные в памяти коды, кроме кода администратора
Для первоначальной настройки необходимо выполнить все шаги.
Работа прошивки в Proteus
Проверка работоспособности прошивки проводилось в программе Proteus.
После включения замка на дисплее высвечивается приветственная анимация в виде смайлика и цифрами по бокам. Левое верхнее число показывает количество включений замка. Левое нижнее показывает количество открытий замка, то есть, сколько раз были набраны правильные коды. Правое верхнее показывает количество входов в режим администратора, то есть сколько раз был набран мастер-код. Приветственная анимация длится 3 секунды.
Дальше высвечивается основная заставка, на которой отображаются значения температур в зависимости от того сколько вы подключите. Максимально можно подключить до трех датчиков. Если не подключить ни одного датчика показателей температуры просто не будет.
Для открытия или администрации замка необходимо ввести код из четырех цифр. Удалить последнюю набранную цифру можно с помощью символа #. При неправильно введенном коде ничего не произойдет, поле просто очистится.
При правильно введенным коде замок открывается на 15 секунд, начинает светить зеленый светодиод и высвечивается заставка:
При правильно введенном мастер-коде открывается режим администратора. С помощью * можно просмотреть список кодов. С помощью # можно добавить, удалить код или изменить мастер-код.
Чтобы добавить, удалить код или изменить мастер-код необходимо набрать код из 4 цифр и нажать соответствующую цифру или символ. Здесь также можно удалить последнюю набранную цифру с помощью #.
После добавления нового кода высвечивается заставка:
После удаления старого кода высвечивается заставка:
После изменения мастер-кода высвечивается заставка:
Если в режиме администратора выбран список кодов, то на дисплее поочередно будут высвечиваться записанные в памяти коды.
Для просмотра следующего кода необходимо нажать *.
После просмотра всех кодов высвечивается заставка, показывающая количество всех записанных в памяти кодов. Если в памяти записано много кодов (максимальное количество до 124 кодов) и необходимо узнать только их количество, то вместо * для просмотра следующего кода необходимо нажать # и сразу высветится данная заставка:
После 40 секунд бездействия МК отключает дисплей, и включает красный светодиод, то есть замок переходит в режим ожидания. Чтобы его снова включить, необходимо его сначала выключить, отжав кнопку питания SB1, и потом включить, нажав кнопку питания SB1.
В режиме ожидания дисплей не потребляет ток, но МК потребляет. Поэтому этот режим весьма затратен, если устройство подключено к автономному питанию. Только в выключенном состоянии (когда кнопка питания SB1 отжата) устройство не потребляет ток.
Печатная плата
Проводящий рисунок печатной платы создан в САПР «Altium Designer». Разработанная печатная плата представляет собой двусторонюю печатную плату с КМО. Все компоненты монтируются в отверстия, что удобно для самостоятельной пайки с помощью обычного паяльника.
UPD
Для корректной работы добавил резистор R9 рядом с кнопкой сброса. Скриншот платы сверху актуальный. Подправил прошивку, проект в Atmel Studio, модель в Proteus и плату в Altium. Архивы обновил в закрепе. Потому что неправильно была подсоединена кнопка RESET. Вывод PB0 назначил входом. На нем должен быть логический 0, для этого надо соединить его через резистор к минусу питания. Вовремя нажатия кнопки RESET на выводе будет логическая 1, и сработает команда сброса.
Ячейка
Все компоненты устанавливаются на плату без зазора.
Особое внимание стоит уделить установки дисплея. Закрепляется он с помощью двух крепежных отверстий. Устанавливается дисплей на штырьки, поэтому необходимо приподнять дисплей над платой с помощью гаек. Для обеспечения оптимальной высоты необходимо установить между платой и дисплеем по две гайки М2,5×1,9 на каждое из двух крепежных отверстий. Фиксируется дисплей с помощью еще одной гайки М2,5×1,9 под платой и винта М2,5×12 на каждое из двух крепежных отверстий.
На кнопки, для их защиты, крепятся колпачки:
- на кнопки S1-S12, колпачок круглый А-07
- на кнопку SB1, колпачок цилиндрический А-04
Настройка кодового замка, прошивка
Для прошивки МК использовалась программа avrdude3.3_6.1 и программатор с шлейфом и переходником:
- USBASP ISP программатор IVR
- Переходник USB 3.0 - DIP (9 pin)
Для того чтобы соединить шлейф от программатора к разъему USB 3.0 Type B использовались переходник:
- Atmel ISP переходник AVR 10 пин - 6 пин
- Штырьки для переходника USB 3.0 - DIP (9 pin)
И кабели:
- Кабель USB 3.0 A - USB 3.0 B
- Макетные провода
Этапы работы в avrdude_prog v3.3
1) Первоначально необходимо правильно выставить фьюзы и ОБЯЗАТЕЛЬНО нажать программирование. Какие фьюзы выставить представлено на скриншоте. Он также лежит в папке Codelock --> Atmel Studio прошивка.
2) Дальше необходимо очистить память МК.
Выбираем модель МК, жмем стереть все.
Дальше читаем колебровочные ячейки.
Если все ок, то продолжаем дальше.
3) Дальше можно использовать проект GccApplication3.
В нем лежит файл GccApplication3.hex.
Программируем память flash, память eeprom не нужно программировать.
Необходимо выбрать путь к файлу GccApplication3.hex и нажать программирование.
ЕСЛИ ВСЕ ОК, НА ЭТОМ ПРОШИВКА ЗАКОНЧЕНА.
4) Дальше необходимо настроить память МК.
Используем кнопку сброса (RESET) для настройки памяти
- Нажатие кнопки на 1 с. очищает количество входов в режим администратора
- Нажатие кнопки на 5 с. очищает количество включений, и количество открытий замка
- Нажатие кнопки на 15 с. сбрасывает пароль администратора на 1111
- Нажатие кнопки на 30 с. стирает все записанные в памяти коды, кроме кода администратора
Для первоначальной настройки необходимо выполнить все шаги.
Корпус и изделие в сборе
Создание сборки проводилось в САПР «Solidworks». Были созданы 3D модели элементов корпуса: крышка, основание, винты, защитное стекло. После моделирования элементы корпуса вместе с ячейкой были собраны в единую сборку.
Корпус устройства состоит из двух основных деталей – основания, в которое крепится собранная ячейке, и крышки. На крышке предусмотрены специальные отверстия под кнопки и дисплей.
Особое внимание стоит уделить установке защитных стекол и установке заглушки, чтобы предотвратить вытаскивание стекол из паза. Толщина устанавливаемого защитного стекла 4 мм, что обеспечивает хорошую стойкость к ударам.
Центральная внутренняя часть крышки чуть толще чем остальная основная толщина крышки. Сделано это для того чтобы колпчаки, которые устанавливаются на кнопки нельзя было снять. Колпачки выступают из крышки буквально на 1 мм, этого достаточно для хода кнопок, и так их сложнее повредить.
Для двух светодиодов в крышке предусмотрены две трубки, чтобы не терять яркость свечения.
Итоговый вид устройства:
Итоговая стоимость устройства
- Покупка элементной базы у меня составила около 1 тысячи рублей. Дисплей, МК, реле обошлись дороговато. Покупал в популярной розничной сети, у китайцев вышло бы намного дешевле
- Винты, гайки около 100 рублей
- Плату заказывал у китайцев, обошлось в 800 рублей за 5 штук
- Программатор стоил 300 рублей
- Изготовление защитного оргстекла, обошлось в 300 рублей за 5 штук
- И на печать корпуса из ABC пластика пришлось потратить 2 тысячи рублей. Возможно, где то есть дешевле(
- Также купил запорный механизм закрытого типа за 1 тысячу рублей
- Адаптер питания для замка и блок питания для механизма имелись в наличии.
В итоге потратил около пяти тысяч рублей. Достаточно дорого вышло, но если выбирать магазины получше или все необходимое есть в наличии, то и выйдет дешевле.
Закрепленные файлы
Atmel_Studio_proshivka.zip - Проект в Atmel Studio и файл прошивки с расширением .hex
Proteus_model.zip - Проект в Proteus и файл прошивки с расширением .hex
Altium_plata.zip - Проект в Altium Designer и архив Project Outputs for PCB_Project1 для создания заказа на изготовление платы на сайте производителя
Solid_yacheyka.zip - Сборка ячейки в SolidWorks
Solid_korpus.zip - Сборка корпуса в SolidWorks и 3D модели деталей корпуса (основание, крышка, заглушка) в формате .STL для печати
Собранное устройство
По итогу кодовый замок был собран. Полностью работоспособен. Он полностью совпадает с разработанной 3D моделью. Прошивка в железе работает также как моделирование в Proteus. Воплощение этого проекта принесло много опыта. Надеюсь, он принесет еще кому-нибудь пользу)
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот | |
---|---|---|---|---|---|---|---|
Детали | |||||||
Плата | PCB Altium | 1 | Поиск в магазине Отрон | ||||
Основание | 3D модель SolidWorks | 1 | Поиск в магазине Отрон | ||||
Заглушка | 3D модель SolidWorks | 1 | Поиск в магазине Отрон | ||||
Крышка | 3D модель SolidWorks | 1 | Поиск в магазине Отрон | ||||
Защитное стекло | 83х34х4 | 1 | Поиск в магазине Отрон | ||||
Защитное стекло | 21х14х4 | 1 | Поиск в магазине Отрон | ||||
Стандартные изделия | |||||||
Винт Ячейка | М2.5х12 | 2 | Поиск в магазине Отрон | ||||
Гайка Ячейка | М2.5-1.9 | 6 | Поиск в магазине Отрон | ||||
Винт Корпус | М3х8 | 4 | Поиск в магазине Отрон | ||||
Винт Корпус | М3х10 | 6 | Поиск в магазине Отрон | ||||
Диоды | |||||||
VD3, VD4 | Диод | КД243А | 2 | Поиск в магазине Отрон | |||
Кнопки | |||||||
S1-S12 | Кнопка | KLS7-TS601-13.0 | 12 | Поиск в магазине Отрон | |||
Конденсаторы | |||||||
C1, C2 | К73-17 | 0.22 мкФ±5% - 63 В | 2 | Поиск в магазине Отрон | |||
Микросхемы | |||||||
MCU1 | МК AVR 8-бит | ATmega8-16PU | 1 | Поиск в магазине Отрон | |||
LCD1 | ЖКИ | WH-1602-NYG-CT 16x2 | 1 | Поиск в магазине Отрон | |||
Переключатели | |||||||
SB1 | Переключатель | KLS7-P8.5 | 1 | Поиск в магазине Отрон | |||
SB2 | Кнопка | TS-A1PV-130 | 1 | Поиск в магазине Отрон | |||
SB3 | Переключатель | DIP DS 1040 | 1 | Поиск в магазине Отрон | |||
Потенциометры | |||||||
P1 | Потенциометр | 3296Y-1-103LF | 1 | Поиск в магазине Отрон | |||
Разъемы | |||||||
XS1 | Разъем | USB 3.0 Type B | 1 | Поиск в магазине Отрон | |||
XS2 | Клеммник | KLS2-301R-5.00-02P-2S | 1 | Поиск в магазине Отрон | |||
XS3 | XS3 | DG350-3.5-03P | 1 | Поиск в магазине Отрон | |||
Резисторы | |||||||
R1, R2, R3, R6, R9 | С1-4 | 1 кОм±5% - 0.125 Вт | 5 | Поиск в магазине Отрон | |||
R4, R5, R7 | С1-4 | 10 кОм±5% - 0.125 Вт | 3 | Поиск в магазине Отрон | |||
R8 | С1-4 | 4.7 кОм±5% - 0.125 Вт | 1 | Поиск в магазине Отрон | |||
Реле | |||||||
RL1, RL2 | Реле | 1393219-6 (PE014012) | 2 | Поиск в магазине Отрон | |||
Светодиоды | |||||||
VD1 | Светодиод | АЛ307ЛМ красный | 1 | Поиск в магазине Отрон | |||
VD2 | Светодиод | АЛ307ЛМ зеленый | 1 | Поиск в магазине Отрон | |||
Транзисторы | |||||||
VT1, VT2 | Биполярный транзистор | КТ3102БМ | 2 | Поиск в магазине Отрон | |||
Колпачки для кнопок | |||||||
Колпачок | Круглый А-07 | 12 | Поиск в магазине Отрон | ||||
Колпачок | Цилиндрический А-04 | 1 | Поиск в магазине Отрон | ||||
Кабели | |||||||
Кабель | USB 3.0 A - USB 3.0 B | 1 | Поиск в магазине Отрон | ||||
Переходники | |||||||
Переходник | USB 3.0 - DIP (9 pin) | 1 | Поиск в магазине Отрон | ||||
Переходник | Atmel ISP переходник AVR 10 пин - 6 пин | 1 | Поиск в магазине Отрон | ||||
Программатор | |||||||
Программатор | USBASP ISP программатор IVR | 1 | Поиск в магазине Отрон | ||||
Скачать список элементов (PDF)
Прикрепленные файлы:
- Atmel_Studio_proshivka.zip (278 Кб)
- Proteus_model.zip (154 Кб)
- Altium_plata.zip (6300 Кб)
- Solid_yacheyka.zip (6863 Кб)
- Solid_korpus.zip (7580 Кб)
Комментарии (11) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация
Ну и мне, как начинающему в альтиум, интересно, зачем столько слоев механикал? Какую функцию они у вас выполняют?
[Автор]
Розовые контуры с штриховкой это 3D модели дисплея, МК и разъема USB 3.0 B в формате .step, которые импортировал в проект платы, потому что их посадочные места (Footprints) не имели моделей. Правильнее было бы добавить модели в библиотеку, а не на плату, тогда такой штриховки бы не было.
Плату делал в Altium Designer 18.
Не уточнил про модель ячейки в статье.
Для этого экспортировал плату как .step в SolidWorks 2018 чтобы добавить гайки, винты, колпачки на нее и сохранить как сборку ячейки. Потом добавил ячейку в одну сборку с корпусом.
Можно было бы гайки, винты, колпачки импортировать в альтиум и ячейка была бы сделана уже в альтиуме, без солида, но в солиде удобнее.
Ссылка на диск с библиотеками https://disk.yandex.ru/d/AVLWXPO22rcCFA
[Автор]
Пользовался только одним механикал 1.
Имеются вопросы:
- Что происходит при одновременном нажатии нескольких кнопок;
- Как шифруются хранимые значения введённых паролей;
- Где можно посмотреть исходный текст программы.
Заранее благодарю.
[Автор]
А дальше МК будет ждать, когда будет отжата кнопка с наименьшим порядковым номером и значением цифры (так как номер и цифра совпадают, кроме номеров 10, 11, 12), чтобы ввести еще одну цифру.
Все произойдет так, потому что:
- МК проверяет нажатие кнопки, начиная с номера 1 и заканчивая номером 12, то есть по возрастанию номера.
- МК проверяет была ли отжата кнопка.
2) В нынешней версии прошивки никак не шифруются. Не подумал об этом.
Это ведь необходимо, только в случае если злоумышленник получит физический доступ к замку с внутренней стороны, что должно быть исключено.
Но для повышения безопасности стоит реализовать это.
3) Atmel_Studio_proshivka - GccApplication3 - GccApplication3 - main.c
Есть мысль улучшить прошивку в дальнейшем. Сделать так, чтобы из режима ожидания (когда дисплей отключен) замок выходил с помощью нажатия на любую кнопку, а не на кнопку питания, так как МК продолжает работать и может проверять нажатия кнопок.
И подумать над шифрованием, лишь бы у атмеги8 хватило флеш памяти.
[Автор]