Как сделать замок на ардуино
Урок 10. Контроль доступа. RFID-rc522 + Servo + Arduino
В данном уроке мы научимся делать простую систему, которая будет отпирать замок по электронному ключу (Метке).
В дальнейшем Вы можете доработать и расширить функционал. Например, добавить функцию «добавление новых ключей и удаления их из памяти». В базовом случае рассмотрим простой пример, когда уникальный идентификатор ключа предварительно задается в коде программы.
В этом уроке нам понадобится:
Для реализации проекта нам необходимо установить библиотеки:
Сборка:
1) RFID-модуль RC522 подключается к arduino проводами Папа-Мама в следующей последовательности:
MFRC522 | Arduino Uno | Arduino Mega | Arduino Nano v3 | Arduino Leonardo/Micro | Arduino Pro Micro |
RST | 9 | 5 | D9 | RESET/ICSP-5 | RST |
SDA(SS) | 10 | 53 | D10 | 10 | 10 |
MOSI | 11 (ICSP-4) | 51 | D11 | ICSP-4 | 16 |
MISO | 12 (ICSP-1 ) | 50 | D12 | ICSP-1 | 14 |
SCK | 13 (ICSP-3) | 52 | D13 | ICSP-3 | 15 |
3.3V | 3.3V | 3.3V | Стабилизатор 3,3В | Стабилизатор 3,3В | Стабилизатор 3,3В |
GND | GND | GND | GND | GND | GND |
2) Теперь нужно подключить Зуммер, который будет подавать сигнал, если ключ сработал и замок открывается, а второй сигнал, когда замок закрывается.
Зуммер подключаем в следующей последовательности:
Arduino | Зуммер |
---|---|
5V | VCC |
GND | GND |
pin 5 | IO |
3) В роли отпирающего механизма будет использоваться сервопривод. Сервопривод может быть выбран любой, в зависимости от требуемых вам размеров и усилий, который создает сервопривод. У сервопривода имеется 3 контакта:
Arduino | Сервопривод |
---|---|
5V * | Красный (Центральный) |
GND | Черный или Коричневый (Левый) |
pin 6 | Белый или Оранжевый (Правый) |
Более наглядно Вы можете посмотреть, как мы подключили все модули на картинке ниже:
Теперь, если все подключено, то можно переходить к программированию.
Скетч:
Разберем скетч более детально:
Для того, что бы узнать UID карточки(Метки), необходимо записать данный скетч в arduino, собрать схему, изложенную выше, и открыть Консоль (Мониторинг последовательного порта). Когда вы поднесете метку к RFID, в консоли выведется номер
Полученный UID необходимо ввести в следующую строчку:
У каждой карточки данный идентификатор уникальный и не повторяется. Таком образом, когда вы поднесете карточку, идентификатор которой вы задали в программе, система откроет доступ с помощью сервопривода.
Видео:
Цифровой кодовый замок на Arduino
Безопасность играет важную роль в жизни современного общества, а цифровые кодовые замки являются важным элементом различных систем безопасности. Один из примеров реализации подобного цифрового кодового замка на плате Arduino и матричной клавишной панели мы рассмотрим в этой статье.
Необходимые компоненты
В представленном проекте мы будем использовать технологию мультиплексирования для подключения клавиатуры (с помощью которой и будет вводиться пароль) к плате Arduino Uno. Мы будем использовать клавиатуру 4х4 которая содержит 16 кнопок (клавиш). В обычном режиме для подключения 16 кнопок к плате Arduino нам бы понадобилось 16 контактов, но с использованием технологии мультиплексирования нам будет достаточно 8 контактов для подключения 16 кнопок. Более подробно об этом можно прочитать в статье про подключение клавишной панели к Arduino.
Технология мультиплексирования является простым и эффективным способом уменьшения числа используемых контактов микроконтроллера при взаимодействии с большим числом кнопок (клавиш). В основном в этой технологии используется два простых приема: сначала сканируются строки, а потом сканируются столбцы. Но поскольку в Arduino мы используем специальную библиотеку для работы с клавиатурой, используя технологию мультиплексирования, нам нет необходимости писать специальный код для реализации этой технологии, по сравнению, например, с подключением клавишной панели к микроконтроллеру AVR.
Схема устройства
Схема устройства представлена на следующем рисунке и содержит в своем составе Arduino, модуль клавиатуры, буззер (звонок) и ЖК дисплей. Плата Arduino управляет всеми процессами работы схемы: считывание пароля с модуля клавиатуры, сравнение паролей, включение/выключение буззера и передача статуса на ЖК дсиплей. Клавиатура используется для ввода пароля. Буззер используется для индикации, а ЖК дисплей используется для отображения статуса операции и различных сообщений. Буззер управляется с помощью NPN транзистора.
Столбцы модуля клавиатуры непосредственно подключены к контактам 4, 5, 6, 7, а строки – к контактам 3, 2, 1, 0 платы arduino uno. ЖК дисплей подключен к плате Arduino в 4-битном режиме. Управляющие контакты RS, RW и En подключены к контактам Arduino 13, GND и 12. Контакты данных ЖК дисплея D4-D7 подключены к контактам 11, 10, 9 и 8 arduino. Буззер подключен к контакту 14(A1) arduino с помощью NPN транзистора BC547.
Работа схемы
В нашем проекте мы будем использовать встроенную в плату Arduino память EEPROM для хранения пароля. Поэтому когда мы будем подавать питание на нашу схему первым делом программа будет считывать остаточные данные из памяти EEPROM, сравнивать их с введенным паролем и выдавать сообщение на ЖК дисплей что доступ запрещен (Access Denied) потому что пароли не совпадают. Для устранения этой проблемы нам необходимо установить пароль по умолчанию (default password) на первый раз (начальное включение) с помощью следующего кода:
Кодовый замок на Arduino
Кодовый замок на Arduino можно приспособить для различных целей. Это могут быть двери, шкатулки, сейфы или запуск какого-либо действия, например, запуск ракеты).
Техническое задание
Разработать кодовый замок на Arduino, который управляет электромагнитным реле. При правильном вводе 5-значного кода, срабатывает реле и загорается зеленый светодиод. Через 5 секунд реле приходит в изначальное состояние и зеленый светодиод гаснет. Если код введен неверно, то загорается красный светодиод в течение 5 секунд. Код можно вводить бесконечное количество раз.
Разработка
Давайте для начала смоделируем схему в Proteus
На схеме мы видим матрицу из кнопок, два светодиода и вместо катушки реле для удобства взят спикер, который при эмуляции начинает трещать. При правильном наборе кода загорается светодиод L_1 и трещит спикер LS1 в течение 5 секунд.
Описание кода
Для того чтобы мы могли обрабатывать, нажатия клавиш на нашей клавиатуре, мы могли бы написать сами с нуля, библиотеку обработки, но это заняло бы много времени, и в данном случае, программируя на Ардуино, на языке высокого уровня, в этом нет необходимости. Достаточно только подключить готовую библиотеку, которая идет в комплекте библиотек с нашей Arduino IDE.
В данном проекте, нам потребуется использовать три значения, которые мы будем использовать при написании нашего кода. Мы могли бы пойти стандартным путем и создать три переменные, присвоить им имена и значения, и затем просто использовать их. Но мы решили пойти немножко дальше, и показать, как можно еще более удобным способом решить данную задачу. Мы создаем 4 директивы, LED1, LED2 и RELAY, NUM_KEYS и присваиваем им постоянное значение, которое идет после названия директивы. После значения, точку с запятой, как мы привыкли, закрывать нашу строку, ставить не требуется.
Здесь мы знакомимся с новым типом массивов и переменных char, в котором помимо цифровых значений, могут храниться символьные, например буквы, и различные знаки. Итак, мы создаем массив myarraw, который содержит 5 знаков, (не забываем про создание директивы). В данный массив мы записываем 5 значений, которые содержатся в фигурных скобках. Они будут являться кодом, по которому будет открываться наш замок, их вы впоследствии сможете поменять на любые другие. Затем нам нужно создать еще один массив, также 5 знаков, в котором будут храниться значения, наших нажатых кнопок.
Здесь мы объявляем две переменные, к и s, и присваиваем им значение 0. В первой из них у нас будет храниться количество нажатий, а во второй количество совпадений, кода для открытия замка, который мы задали ранее в массиве, с кодом набранным на клавиатуре.
Здесь же, мы задаем 2 константы формата byte, в целях экономии памяти, нашего контроллера мы пользуемся форматом для хранения переменных byte, а не привычный многим формат int. В данном случае он будет избыточен, для наших задач.
Теперь же, нам нужно будет создать, таблицу соответствия, кнопок клавиатуры символам, которые будут сохраняться в наших массивах. Как мы видим, их расположение, совпадает с нанесенными значками на клавиатуре.
Ну а здесь, нам требуется создать два массива, по 4 знака каждый, соответственно по количеству строк и столбцов, и задать, к каким пинам ардуино они у нас будут подключены. Формат переменной, как и в прошлом случае, у нас выбран byte.
Здесь нужно остановиться подробнее: Библиотека Keypad, описывает класс работы с клавиатурой. Т.е. создает тип данных “клавиатура”, у этого типа данных свои параметры, которые мы указываем в скобках. Типа то, что клавиатура 4*4, к каким пинам подключены строки, к каким столбцы, и таблицу соответствия кнопок нашим символам. Т.е. Keypad это тип данных, наподобие int или char. Затем мы пишем имя своей переменной (создаваемого объекта) keypad с параметрами этой переменной в скобках. Как будто присваиваем значение этой переменной. И дальше работаем как с переменной, у которой можно менять параметры.
Умный цифровой замок на Arduino, распознающий стуки
Безопасность является одной из основных проблем в нашей повседневной жизни и цифровые замки стали важной частью различных систем безопасности. Существует много типов систем безопасности, доступных в настоящее время. К примеру, системы безопасности на основе датчиков движения, на основе радиочастотных меток, цифровые кодовые замки, замки управляемые со смартфона и т.д. В этой статье мы рассмотрим проект “умного” цифрового замка на основе платы Arduino, способного распознавать характер стуков в дверь. Замок будет открывать дверь только тогда, когда характер стуков будет соответствовать определенному образцу (шаблону). Для лучшего понимания работы проекта рекомендуется посмотреть видео, приведенное в конце статьи.
Необходимые компоненты
Работа схемы
Схема устройства представлена на следующем рисунке.
Как видите, схема нашего “умного детектора стуков” достаточно проста и содержит плату Arduino, управляющую всем процессом, кнопку, зуммер (buzzer) и сервомотор. Плата Arduino принимает пароль (образец стука) от зуммера (или датчика), сравнивает его с заданными шаблонами (образцами), дает команду сервомотору на открытие/закрытие двери и сохраняет образец (шаблон) стука.
Кнопка подключена к контакту D7 платы Arduino, второй контакт кнопки замкнут на землю. Зуммер при помощи параллельно включенного ему резистора на 1 МОм подключен к аналоговому контакту A0 платы Arduino. Сервомотор подключен к цифровому контакту D3 платы Arduino и будет управляться при помощи широтно-импульсной модуляции, доступной на данном контакте.
Запись образца стука в Arduino
В нашем проекте мы использовали зуммер или пьезоэлектрический датчик (Peizo Sensor) для обнаружения стука. Кнопка используется для считывания входа датчика и для сохранения образца стука в плату Arduino. Идея проекта похожа на код Морзе, но не в точности соответствует ему.
Мы использовали картонную коробку для демонстрации работы проекта. Чтобы считать значения с выхода зуммера мы должны стучать в коробку после нажатия кнопки. Анализируется время между стуками, большее или меньше 500 мс – это значение можно поменять в программе. Более подробно смотрите в видео в конце статьи.
Когда мы начинаем стучать плата Arduino начинает анализировать (мониторить) время от первого стука до второго стука и потом записывать это значение времени в массив. В нашем проекте мы использовали 6 стуков (можно поменять в программе), то есть мы будем считывать значения 5 временных промежутков.
Затем мы будем анализировать интервалы времени между всеми 6 стуками. Сначала мы проверим временной интервал между первым и вторым стуками и если он будет меньше 500 мс, то мы запишем в соответствующую переменную 0, а если больше 500 мс – то в эту переменную мы запишем 1. После этого мы будем проверять временной интервал между вторым и третьим стуками и т.д. В результате мы получим 5 цифр в двоичном формате (0 или 1).
Объяснение работы проекта
Сначала мы должны сохранить образец стука в системе (нашем замке). Для этого мы должны нажать и удерживать кнопку до тех пор пока не постучим 6 раз (можно изменить это количество стуков в программе). После 6 стуков плата Arduino сохраняет этот образец стука в EEPROM (энергонезависимую память). После этого, чтобы открыть замок с помощью стуков, мы должны быстро нажать и отпустить кнопку, после чего постучать 6 раз. Если образец (шаблон) наших 6 стуков совпадет с образцом, хранящимся в EEPROM, то плата Arduino откроет дверь.
Примечание : когда мы нажимаем или нажимаем и держим кнопку плата Arduino запускает 10-секундный таймер чтобы “принять” 6 стуков. То есть все стуки необходимо сделать в течение этого 10-секундного интервала. Для более детальной информации можно открыть монитор последовательного порта и посмотреть в нем лог событий.
Объяснение работы программы
В программе нам первым делом необходимо подключить заголовочные файлы, инициализировать входные и выходные контакты и объявить необходимые переменные – все это можно увидеть в полном тексте программы в конце статьи.
После этого в функции setup мы задаем направление работы используемых контактов и инициализируем сервомотор.
Электронный замок на основе радиочастотных меток (RFID) и Arduino
Наверняка многие из вас в отелях или где-нибудь в других местах уже встречались с электронными замками, которые можно открыть с помощью карты с радиочастотной идентификацией (RFID), без использования привычного механического ключа. Чтобы открыть такую дверь надо просто приложить карту к специальному считывающему устройству на двери – если код на карте разрешенный, то дверь откроется, если нет – дверь останется закрытой. В большинстве случаев механизм электронных замков в таких системах работает от напряжения 12 В, поэтому вы легко можете сконструировать такой замок для своего дома – и эта статья имеет целью научить вас делать это.
В этой статье мы рассмотрим создание электронного замка на основе платы Arduino и модуля считывания радиочастотных меток, который будет открывать дверь только если к нему поднесена правильная карта. Если карта будет неправильная, то замок не откроется и прозвучит предупреждающий сигнал зуммера. Если до этого вы никогда не сталкивались с радиочастотной идентификацией, то советуем вам прочитать статью о подключении к Arduino модуля радиочастотных меток.
Необходимые компоненты
Схема проекта
Схема электронного замка на основе радиочастотных меток (RFID) и Arduino представлена на следующем рисунке.
Модуль чтения радиочастотных меток EM-18 (RFID Reader)
Аббревиатура RFID означает Radio Frequency Identification и переводится как радиочастотная идентификация. Каждая карта с RFID имеет встроенный в нее уникальный идентификатор (ID), который можно считать с помощью модуля чтения радиочастотных меток. Модуль чтения радиочастотных меток EM-18 работает на частоте 125 кГц и имеет в своем составе встроенную в его чип антенну. Его можно запитать от напряжения 5 В. На своем выходе он обеспечивает последовательную передачу данных со скоростью 9600 бод/с, 8 бит данных и 1 стоповый бит. Диапазон действия модуля – 8-12 см.
На нашем сайте вы можете посмотреть следующие проекты, в которых использовалась радиочастотная идентификация:
На выход модуль EM-18 выдает данные в формате ASCII, 12 цифр. Первые 10 из этих 12 цифр представляют собой номер карты, а последние две цифры – результат выполнения операции XOR с номером карты. Они используются для проверки на ошибки.
Объяснение кода программы для Arduino
Полный код программы приведен в конце статьи, здесь же мы рассмотрим его наиболее важные фрагменты.
Как определить номер метки на вашей карте можно прочитать в обучающей статье по работе Arduino с RFID.
В следующем фрагменте кода мы устанавливаем режим работы (на вывод данных) используемых нами контактов и инициализируем последовательную связь со скоростью 9600 бод/с. Контакт 2 будет использоваться для управления реле, контакт 3 – для управления светодиодом красного цвета (он используется для индикации режима ожидания), а к контакту 4 подключен зуммер.
Если карта правильная, то флаг будет установлен в 1, в этом случае на контакт 2 будет подано напряжение высокого уровня (HIGH), а на контакт 3 – напряжение низкого уровня (low). Затем через 5 секунд на этих контактах будет восстановлено их исходное состояние. При подаче напряжения высокого уровня на контакт 2 сработает реле, которое откроет электронный замок, а через 5 секунд замок снова закроется.
Если вы поднесете к модулю чтения неправильную RFID карту, то флаг установится в 0, в результате чего начнет звучать сигнал зуммера.
Работа проекта
Наша система работы с радиочастотными (RFID) метками состоит из двух компонентов – из самих меток и модуля их чтения. Метка состоит из интегрированной в нее схемы и антенна. Схема служит для хранения данных, а антенна – для передачи данных модулю чтения меток. Когда радиочастотная метка оказывается в диапазоне действия модуля чтения меток, радиочастотный сигнал запитывает электронную схему метки и метка начинает последовательно передавать данные. Эти данные принимаются модулем чтения меток и затем в нашем проекте передаются в плату Arduino. В зависимости от номера принятой метки плата Arduino выполняет соответствующие действия.
В нашем проекте правильный номер метки мы уже заранее сохранили внутри программы. Поэтому когда к модулю чтения меток будет подноситься метка с этим номером будет срабатывать реле. В целях демонстрации работы проекта мы к выходу реле подключили светодиод, однако в реальных схемах его достаточно просто заменить на электронный механизм замка, которым и будет управлять реле.
Если к модулю чтения меток подносится карта с неправильным номером будет срабатывать зуммер. Открывающее напряжение на реле подается только на 5 секунд, после чего реле снова закрывается.