Как сделать кодовый замок на ардуино

Обновлено: 30.06.2024

Многие люди всерьез задумываются о том, чтобы установить у себя на двери кодовый замок, который можно открывать без ключа. Конечно, можно купить уже готовый замок и установить его, но стоимость в этом случае будет довольно высокая. А если говорить за надежность, то можно найти варианты и лучше. В этой статье мы расскажем вам про кодовой замок на Ардуино и поговорим о том, как его подключить.

Кодовой замок на Ардуино: принцип работы

Что нужно для сборки

Собрать такой замок довольно проблематично, ведь нужно найти все комплектующие, которые далеко не всегда продаются в обычных магазинах. Итак, для стандартной сборки нам понадобиться:

  1. Пучок провод для бреборда, 30 штук будет более чем достаточно.
  2. Далее нужно купить две вилки и розетки RJ45.
  3. L293D.
  4. Актуатор центрального замка. Можно использовать с ВАЗа – это оптимально по цене и функциональности.
  5. Геркон – его можно взять со старого окна, здесь сложностей нет.
  6. Нам еще понадобиться блок питания от хаба D-LINK на 12 Вольт.
  7. Пульт управления от охранной сигнализации, его можно найти в любом магазине с электроникой.
  8. Arduino protoshield + breadboard.
  9. Arduino UNO.
  10. Также не обойтись без шпингалета. Он должен иметь внушительный размер, чтобы не сделать ошибку во время его выбора смотрите фото дальше.

Как правило, чтобы приобрести все эти детали, придется выложить 40-50 долларов. Вроде сумма небольшая, но решать вам, напрягаться с этим или установить уже рабочую модель. Чтобы установить и соединить между собой, придется потратить несколько часов при условии, если вы все будете делать правильно.

Программирование кодового замка

Мы рекомендуем использовать код с официального сайта разработчиков, выглядит он следующим образом:

Изначально покажем вам несколько фото о том, как его собирать и устанавливать.

кодовой замок на Ардуино подключение

Вот так выглядит кодовой замок в сочетании с актуатором.

блок питание кодогового замка

Подключаем блок питания.

шпингалет на кодовый замок

Шпингалет, который и будет закрывать всю нашу конструкцию.

Как подключить кодовый замок Arduino: видео

Также читайте: как спрятать провода от компьютера.

а зелёный погаснет, сервопривод установится на 0°. При вводе цифр на дисплее будут выводиться символы "*".


Если код введён неверно, то дисплей напишет "Enter cod.". Если код правильный, то прозвучит звуковой сигнал, серво привод повернётся на 180°, дисплей напишет "Open."


включится зелёный светодиод,


а красный отключится. После 3 секунд сервопривод вернётся в начальное положение, включится красный светодиод, а зелёный погаснет, дисплей напишет "Close.",

Проверка 5.

затем дисплей напишет "Enter code.".

Список элементов
Тип Номинал Количество Примечание
Плата Arduino Arduino Nano 3.0 1
Резистор 220 Ом 2 SMD
Светодиод АЛ102Г 1 Красный
Светодиод АЛ307Г 1 Зелёный
LCD-дисплей С I2C интерфейсом 1 Зелёная подсветка
Сервопривод SG90 1 180 градусов
Зуммер 1 Bu
Клавиатура 4x4 1 Матричная
Макетная плата 640 точек 1

Порядок сборки схемы

Сначала соединяем ардуино проводами с макетной платой (контакты питания).

Соединение ардуино с BreadBoard

Потом подключаем к контактам D9 - D2 матричную клавиатуру.

Матричная клавиатура.

Далее подключаем дисплей. Контакты питания к макетной плате, SDA - А4, SCL - А5.

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

Воспользуемся, прежде всего, тем, что на плате расширения, входящей в состав набора, установлен двухстрочный жидкокристаллический дисплей, а также 5 кнопок. Используем эти элементы для построения кодового замка.

Теперь подберем устройство, которое будет подавать на замок напряжение открывания. Это напряжение в соответствии с паспортом электромеханического замка, который мы и будем открывать, равно 12 вольтам при токе около 1 ампера. Плата расширения набора NR05 не может работать с такими напряжениями и токами, поэтому необходим дополнительный модуль коммутации. Такими модулями могут быть предлагаемые компанией Мастер Кит реле MP515 , или блоки реле MP2211 , MP4411 в зависимости от того, захотим ли мы управлять не только замком, но и другими устройствами, например, включить свет при открывании двери. Все эти устройства совместимы с уровнями управляющих сигналов Ардуино. В нашем конкретном случае используем MP2211 – модуль с двумя реле.

Учитывая сказанное выше, нарисуем схему соединений используемых устройств:

Если внимательно посмотреть на маркировку платы расширения, то мы увидим, что зеленый канал RGB-светодиода GREEN и выход на реле CH3 подключены к одному выводу D9 Arduino Nano. В данном случае это допустимо, так вход управляющей схемы реле имеет достаточно высокое входное сопротивление, а вывод D9 используется только как цифровой выход. В общем случае следует проверять, не подключены ли используемые вами выводы платы к одному и тому же выводу Ардуино, и не допускать такой ситуации.

Замок во время срабатывания потребляет довольно большой ток, поэтому запитываем его и управляющую схему отдельно.

//-----------------------------------------------------------------------
// Эта функция будет выполнена после функции setup и будет бесконечное число раз повторятся после своего окончания.

void loop() // записываем текущее время (в миллисекундах), прошедшее с момента начала исполнения программы
currentTime = millis();
// проверяем, не достигнул ли таймаут на ввод кода
if (currentTime — oldTime 0) < // если кнопка нажата
codePressed[pressCount] = key; // записываем номер нажатой кнопки в массив
// короткий сигнал звукоизлучателя (50 мс)
digitalWrite(beep, HIGH);
delay(50);
digitalWrite(beep, LOW);
// печатаем на втрой строке звездочки, мигая синим светодиодом
lcd.setCursor(pressCount, 1);
lcd.print('*');
digitalWrite(blue, LOW);
delay(200);
digitalWrite(blue, HIGH);
pressCount++; // увеличиваем счетчик нажатий
// сбрасываем счетчик времени таймаута
oldTime = currentTime;
>
>
// если достигнут таймаут, сбрасываем частично набранный код
else pressCount = 0;
lcd.clear();
oldTime = currentTime;
>
// если весь код введен, сравниваем поэлементно два массива: codeOrigin и codePressed
if (pressCount == codeLength) int compareResult = 1;
for (int i = 0; i

//-----------------------------------------------------------------------
// Эта функция будет выполнена только когда ее вызвали из программы
// Функция читает значение с АЦП, куда подключена аналоговая клавиатура
// и сравнивает с калибровочными значениями, определяя номер нажатой кнопки
int get_key()
int input = analogRead(A6);
int k;
for(k = 0; k

Листинг скетча снабжен подробными комментариями, которые помогут вам разобраться в программе.
Тем не менее, обратим ваше внимание на некоторые ее особенности.
Как мы уже писали, в плате расширения применена схема подключение кнопок, использующий только один вывод Ардуино. Такая схема экономит выводы микропроцессора, но не позволяет обрабатывать одновременное нажатие нескольких кнопок одновременно, но в нашем случае это и не нужно. Обратите внимание на функцию get_key в конце скетча. Если ни одна кнопка не нажата, функция возвращает 0, если нажата, то номер нажатой кнопки.
Также посмотрите на реализацию сравнения двух массивов: эталонного и набранного кодов:

int compareResult = 1;
for (int i = 0; i

Вопрос об алгоритме такого сравнения довольно часто обсуждается на форумах по программированию, но каждый раз сводится к поэлементному сравнению, что и использовано в нашем случае. Переменная compareResult остается равной 1 в случае, если элементы массивов с одинаковыми индексами равны, и становится равной 0 в случае, если хотя бы одна пара элементов не совпадает.
Для вывода на дисплей символов кириллицы используется библиотека LiquidCrystalRus, разработанная Ильей Даниловым. Для корректной работы библиотеки в заголовке нашего скетча обязательно должны присутствовать три строки:

А инициализация дисплея должна выглядеть так:

LiquidCrystalRus lcd(A1, A2, A3, 2, 4, 7);

Длина вводимого кода задается предопределенной константой codeLength, например для кода из шести нажатий

Массив эталонных значений для кода длиной 6 нажатий задается следующей строкой:

const int codeOrigin[codeLength] = ;

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

Каждые 5 секунд программа сбрасывает набранные элементы кода. Если кнопка была нажата, то время нажатия запоминается, и отсчет пятисекундного интервала начинается снова. Это реализовано с помощью встроенной функций millis(), которая возвращает число миллисекунд, прошедших с момента начала выполнения скетча, и переменных oldTime и currentTime.

Приведем небольшой видеоролик, демонстрирующий работу кодового замка:

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

Или, опираясь на материал , посвященный взаимодействию Ардуино со смартфоном по Bluetooth, сделать замок, который открывается кодом, посылаемым этим самым смартфоном.

Можно также достаточно просто ввести в наше устройство беспроводной канал управления. Для этого достаточно воспользоваться двумя модулями: пультом-передатчиком MP910 и одноканальным приемником с релейным выходом MP911 , работающими на частоте 433 МГц. Контакты реле модуля MP2211 подключаются при этом параллельно кнопке пульта, а реле модуля приемника – к замку. Дистанция управления может быть до 100 м.

Изучайте Ардуино, изучайте микроконтроллеры и их программирование – и вы сможете создать немало умных и полезных электронных устройств!

Делись с друзьями, подписывайся на наш канал Мастер Кит DIY и жми лайк, чтобы не пропустить новые публикации.

Предлагаемый кодовый замок предназначен для установки в такие помещения, как лаборатория, офис, лестничная площадка в подъезде и т. д. Преимущество кодового замка с одной кнопкой от классического наборного поля в том, что его легче оформить в антивандальном исполнении (одна защищённая кнопка и два светодиода).

На страницах журнала "Радио" и в Интернете немало схем и конструкций кодовых замков, но большинство имеют наборное поле из кнопок с цифрами от 0 до 9 и некоторыми буквами. Планировалось сделать кодовый замок в антивандальном исполнении, но такое наборное поле самому изготовить непросто, а приобрести недёшево. Поэтому пришла идея сделать кодовый замок с одной кнопкой.

Схема устройства изображена на рис. 1, оно собрано на основе платы Arduino Pro Mini (подойдут и другие подобные модули - Uno, Nano и т. п.). Кнопка без фиксации SB1 "Ввод", два светодиода HL2, HL3 и акустический излучатель HA1 установлены в небольшом металлическом корпусе, закреплённом на двери. С помощью этой кнопки вводят код, который разделён на две части. Сначала в течение 1 с необходимо ввести первую часть кода. Продолжительность ввода части кода зависит от переменной time_for в скетче: чем больше чисел в коде, тем больше переменная. По умолчанию, в скетче эта переменная имеет значение 10, этого достаточно, чтобы сделать до четырёх нажатий на кнопку. После ввода первой части кода раздаётся звуковой сигнал частотой 1 кГц и вспыхивает светодиод HL3 красного свечения. Затем необходимо ввести вторую часть кода аналогично первой. Если обе части кода совпали с хранящимися в памяти микроконтроллера платы Arduino Pro Mini значениями, на выходе D11 появится напряжение высокого уровня, транзистор VT1 открывается, на электромагнит поступит питающее напряжение и он откроет замок на двери. При этом загорается светодиод HL2 зелёного свечения. Временной интервал, в течение которого на электромагнит поступает напряжение, задан переменной time_rele. Обычно, чтобы зайти в помещение и закрыть за собой дверь, хватает 4 с. Если коды не совпали, раздаются три коротких звуковых сигнала частотой 1 кГц, которые сопровождаются вспышками светодиода HL3.

Рис. 1. Схема устройства

Чтобы запрограммировать новый код, надо нажать на кнопку SB4 "Код". При этом в течение 1 с раздаётся сигнал частотой 1 кГц и вспыхивает светодиод HL2, после чего нужно нажать на кнопку SB1 "Ввод" требуемое число раз (это первая часть кода). Далее опять звучит сигнал и снова вспыхивает светодиод HL2, после чего нажатиями на кнопку SB1 вводят вторую часть кода. После записи кода в память микроконтроллера прозвучит третий звуковой сигнал и будет третья вспышка светодиода HL2.

Установка продолжительности открывания электромагнита происходит после нажатия на кнопку SB3 "Время", при этом в течение 1 с звучит сигнал частотой 1 кГц и вспыхивают светодиоды HL2 и HL3. После этого нужно нажать на кнопку SB1 "Ввод" нужное число раз (одно нажатие соответствует 1 с). После записи информации в память микроконтроллера прозвучит сигнал и в течение 1 с вспыхнут оба светодиода.

Кнопка SB2 "Выйти" расположена внутри помещения на двери и служит для ручного открывания замка. При этом время подачи питания на электромагнит привязано к переменной time_rele в скетче.

Замок может работать с двумя типами исполнительных механизмов: электромагнитом (с номинальным напряжением 27 или 12 В) или с электроприводом дверных автомобильных замков (номинальное напряжение питания - 12 В, закрыть - прямое подключение, открыть - инверсное подключение напряжения). В первом случае будут не нужны элементы R8, R9, VT2, VT3,VD4, VD5, K2 и K3, во втором - исключают элементы R7, VT1, VD3 и K1.

Электропитание устройства осуществляется от сети 230 В. Источник питания собран на трансформаторе Т1, выпрямительном мосте VD1 и одном или двух интегральных стабилизаторах напряжения в зависимости от используемого исполнительного механизма.

Код скетча разделён на пять частей. Первая - проверка условия открывания замка, вторая - смена цифр кода, третья - выход из помещения, четвёртая - смена продолжительности включения реле, пятая - ввод цифр кода с кнопки "Ввод". На рис. 2 приведена часть скетча для обслуживания кнопок.

Рис. 2. Часть скетча для обслуживания кнопок

Условие if (digital Read (KEY) == LOW) ждёт перепада напряжения с VCC до нуля (нажатие на кнопку), далее следует цикл for (int i=0; i i++), который запускает ещё один опрос этой же кнопки на ввод и увеличение значения первой части кода. Временная задержка delay (300); введена, чтобы исключить влияние дребезга контактов кнопки.

Функция digital Write (LED_RED, HIGH); включает светодиод красного свечения, комбинация tone (BUZ, F_tone);, delay (100); и noTone (BUZ); включает звуковой сигнал на время 100 мс. Переменной F_tone в начале скетча можно установить желаемую частоту сигнала. Функция digitalWrite (LED_RED, LOW); выключает светодиод красного свечения. Функция EEPROM. write (addr_1, counter_ uslo-vie_2); записывает значение переменной counter_uslovie _2 (при смене кода) в ячейку addr_1 памяти микроконтроллера, функция uslovie_2 = EEPROM.read (addr_1); считывает данные из ячейки addr_1 и записывает их в переменную uslovie_2.

Замок содержит четыре основных узла. Первый - панель ввода и индикации (рис. 3), в которой установлены светодиоды HL2, HL3 и кнопка SB1. Он установлен на двери охраняемого помещения, его корпус - металлический. Первая часть корпуса закреплена на деревянной двери шурупами длиной 25 мм, на второй части установлены светодиоды HL2 и HL3, которые могут быть любыми маломощными соответствующего свечения, и кнопка SB1, её тип - К-3, ПКН4-1 (с круглой гайкой, которую при установке лучше посадить на краску). Для установки непосредственно на железную дверь подойдёт импортная антивандальная кнопка PBS-28C(B) или PBS-12. Защитные колпачки для светодиодов использованы от старой советской аппаратуры.

Рис. 3. Панель ввода и индикации

Второй узел - блок управления (рис. 4 и рис. 5), который установлен на внутренней стороне двери. Для него использован пластмассовый корпус. Транзисторы КТ815А можно заменить транзисторами КТ961 (с любым буквенным индексом), BD165, TIP29. Охлаждение транзисторов не требуется, учитывая малое время нахождения в открытом состоянии (4.5 с) и многократный запас по току. Кнопка SB2 - ПКН6-1 или КМ1-1, кнопки SB3, SB4 - ПМ-2, МП-5, также подойдут любые импортные малогабаритные, так называемые тактовые кнопки (без фиксации). Диоды КД522Б можно заменить любыми маломощными выпрямительными или импульсными, например, серий Д220, КД503, 1N4148.

Рис. 4. Блок управления (внешний вид)

Рис. 5. Б лок управления с открытым корпусом

Кнопки SB4 "Код" (обозначена на рис. 4 буквой К) и SB3 "Время" (обозначена на рис. 4 буквой Т) защищены от случайного нажатия. Для этого они расположены внутри корпуса за отверстиями диаметром 1. 2 мм. Чтобы нажать на их толкатели, потребуется тонкий предмет, например, карандаш, скрепка или спичка. Для повышения помехозащищённости контакты каждой кнопки SB1-SB4 желательно зашунти-ровать плёночным или керамическим конденсатором (на схеме не показаны) любого типа ёмкостью 0,1. 0,33 мкФ.

Третий узел - источник питания (рис. 6). Он собран в пластмассовом корпусе произвольного размера с учётом размеров трансформатора Т1. На стенках корпуса установлены светодиод HL1, резистор R5, держатель плавкой вставки и выключатель питания. Трансформатор Т1 должен быть мощностью не менее 36 ВА с напряжением вторичной обмотки 19. 20 В. Тип реле зависит от исполнительного механизма. Для управления электромагнитом достаточно реле с одной контактной группой на замыкание с номинальным напряжением 5 В или 12 В. Для управления электроприводом потребуются двареле с двумя группами контактов на замыкание, так же на напряжение 5 или 12 В.

Рис. 6. Источник питания устройства

Стабилизаторы напряжения DA1, DA2 могут быть других типов, с допустимым выходным током не менее 1,5 А. Если в качестве исполнительного механизма планируется применить электромагнит с номинальным напряжением 27 В, от стабилизатора напряжения +12 В можно отказаться, оставив стабилизатор напряжения +5 В. В этом случае микросхема DA2 должна быть рассчитана на входное напряжение не менее 30 В, а номинальное напряжение реле - 5 или 27 В. Диодный мост VD1 может быть любым на ток до 2 А и обратным напряжением не менее 100 В.

В авторском варианте применён самодельный электромагнит (рис. 7) на напряжение 27 В с сопротивлением обмотки 40 Ом, хотя подойдёт любой на напряжение 27 или 12 В, с силой втягивания, достаточной для открывания дверной щеколды. В авторском варианте электромагнит закреплён на двери, хотя может быть установлен на стене или дверной коробке.

Рис. 7. Электромагнит

Монтаж устройства выполнен на макетных платах с применением навесного проводного монтажа. Часть деталей установленанавыводахдругихэле-ментов. Соединение узлов между собой выполнено экранированными проводами, при этом можно применить любые разъёмы, рассчитанные на соответствующий ток. Экраны проводов соединяют с минусовой линией питания. Например, между источником питания и блоком управления контакты разъёма должны быть рассчитаны на ток до 1,5 А, а для соединения панели ввода и блока управления подойдёт любой малогабаритный разъём. При удалении кнопки SB1 и светодиодов HL2, HL3 на расстояние более 100 мм их провода следует поместить в общий экран, который необходимо соединить с минусовой линией питания, при этом резистор R1 следует располагать рядом с платой Arduino, а не на кнопке SB1.

Замок можно усовершенствовать, введя функцию автоматического открывания двери. Для этого в блок управления, расположенный на внутренней стороне двери, дополнительно устанавливают ультразвуковой дальномер HC-SR04 под некоторым углом к ручке для открывания двери (рис. 8). При приближении руки к ручке двери замок будет открываться автоматически. Дальность срабатывания - 100. 200 мм. В этом случае ультразвуковой дальномер подключают к плате Arduino Pro Mini четырьмя проводами: Ucc - к линии питания +5 B; Trig - к контакту А1; Echo - к контакту А0; Gnd - к общему проводу. В Arduino Pro Mini загружают соответствующий скетч. Предварительно опытным путём определяется расстояние, при котором датчик не будет срабатывать в обычном состоянии. Измеренное расстояние в сантиметрах вносят в переменную int UZD_cm = 10;. Когда человек подносит руку к ручке двери, расстояние от датчика до руки становится меньше 10 см и замок открывается.

Рис. 8. Устройство в работе

Варианты скетчей для разных вариантов конструкции замка на Arduino Pro Mini находятся здесь.

Кодовый замок представляет собой цифровое устройство предназначенное для разблокировки замка. Разблокировка замка осуществляется после того как пользователь наберет на клавиатуре определенную комбинацию клавиш. В данной статье речь идет о простом кодовом замке на платформе Arduino. Код состоит из комбинации 6 цифр, который вводиться через клавиатуру. Введенное значение сравнивается с хранящимся в памяти значением.

  • одна плата Arduino UNO, или другие платы;
  • клавиатура ввода данных;
  • нагрузка.

О том что такое Arduino было сказано ранее.

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

Как сделать кодовый замок

"Строчные" линии R1-R4 подключены к выводам Arduino с 6-го по 9-й. Колонные выводы C1-C4 подключены к выводам C1-C4. Третий вывод настроен как выход в цепь включена нагрузка, в нашем случае это светодиод D1, последовательно к которому подключено сопротивление номиналом в 330 Ом. Оно необходимо для ограничения тока через светодиод. В настоящем кодовом замке подключаться электромагнит управляющий положением защелки замка. Если светодиод горит то замок открыт,если выключен то замок закрыт.

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

Как работает программа самодельного кодового замка

Наш пароль состоит из 6 цифр "123456" это значение храниться в массиве "p". Введенные нами значения последовательно записываются в массив "c". В коде программы происходит сравнение этих двух массивов,после того как будет нажата кнопка разблокировки. Если они совпадают то посылаем на вывод 3 "положительный сигнал", а если не совпадают то "отрицательный".

Мониторинг самодельного кодового замка

Теперь вы знаете как сделать настоящий кодовый замок, и сохранить все ваше имущество!)

Читайте также: