Умный цифровой замок на Arduino, распознающий стуки

Безопасность является одной из основных проблем в нашей повседневной жизни и цифровые замки стали важной частью различных систем безопасности. Существует много типов систем безопасности, доступных в настоящее время. К примеру, системы безопасности на основе датчиков движения, на основе радиочастотных меток, цифровые кодовые замки, замки управляемые со смартфона и т.д. В этой статье мы рассмотрим проект “умного” цифрового замка на основе платы Arduino, способного распознавать характер стуков в дверь. Замок будет открывать дверь только тогда, когда характер стуков будет соответствовать определенному образцу (шаблону). Для лучшего понимания работы проекта рекомендуется посмотреть видео, приведенное в конце статьи.

Внешний вид умного цифрового замка на Arduino, распознающего стуки

Необходимые компоненты

Плата Arduino Uno
Кнопка
Зуммер (Buzzer)
Резистор 1 МОм
Источник питания
Соединительные провода
Коробка
Серводвигатель (сервомотор)

Работа схемы

Схема устройства представлена на следующем рисунке.

Схема умного цифрового замка на 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 мы задаем направление работы используемых контактов и инициализируем сервомотор.

После этого мы считываем образец стука и сохраняем его значение в массив.

После этого мы декодируем входной образец стука.

После этого сохраняем его если кнопка все еще нажата.

А если кнопка уже не нажата, то плата Arduino будет сравнивать входной образец стуков с сохраненным образцом.

Если образцы стуков (пароли) совпадают, то плата Arduino дает команду сервомотору открыть ворота (дверь), иначе ничего не происходит, но результат этого все равно можно посмотреть в окне монитора последовательной связи (serial monitor).

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

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

Видео, демонстрирующее работу схемы

(1 голосов, оценка: 5,00 из 5)
Загрузка...
52 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *