Рубрики
Схемы на Arduino

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

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

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

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

Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158

Работа схемы

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

Как видите, схема нашего “умного детектора стуков” достаточно проста и содержит плату 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).

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

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

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

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

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

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