Цифровой кодовый замок на Raspberry Pi

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

Внешний вид цифрового кодового замка на Raspberry Pi

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

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

  1. Плата Raspberry Pi (с установленной SD картой) (купить на AliExpress).
  2. Модуль клавиатуры (Keypad Module) (купить на AliExpress).
  3. Зуммер (Buzzer) (купить на AliExpress).
  4. ЖК дисплей 16x2 (купить на AliExpress).
  5. Резистор 1 кОм (купить на AliExpress).
  6. Блок резисторов 10 кОм.
  7. Потенциометр 10 кОм (купить на AliExpress).
  8. Светодиод (купить на AliExpress).
  9. CD/DVD привод, который будет использоваться в качестве двери/ворот.
  10. Источник питания с напряжением 5 В.
  11. Батарейка на 12 В.
  12. Драйвер двигателя L293D (купить на AliExpress).
  13. Макетная плата.
  14. Соединительные провода.

Подключение клавиатуры 4x4 к Raspberry Pi

В данном проекте мы для подключения клавиатуры (клавишной панели) 4x4 к плате Raspberry Pi будем использовать технологию мультиплексирования. Суть ее заключается в следующем. Наша клавиатура 4х4 содержит 16 кнопок (клавиш). В обычном режиме нам для их подключения понадобилось бы 16 контактов, но с использованием технологии мультиплексирования мы задействуем для этой цели всего 8 контактов.

Внешний вид клавиатуры (клавишной панели) 4x4 Распиновка клавиатуры (клавишной панели) 4x4

Поэтому технология мультиплексирования является эффективным способом экономии выводов микроконтроллера. Основной принцип этой технологии заключается в том, что сначала сканируется строка, а затем столбец. В программе аналогичного кодового замка на Arduino мы использовали специальную библиотеку для работы с клавиатурой (#include <Keypad.h>), поэтому нам не нужно было заморачиваться с ручным (самостоятельным) программированием технологии мультиплексирования. Но в этом проекте мы не будем использовать никакой подобной библиотеки и вручную, "коротким" способом запрограммируем технологию мультиплексирования.

Схема проекта

Схема цифрового кодового замка на Raspberry Pi представлена на следующем рисунке.

Схема цифрового кодового замка на Raspberry Pi

Как видите, схема достаточно проста и содержит плату Raspberry Pi, модуль клавиатуры, зуммер, DVD/CD привод в качестве ворот и ЖК дисплей. В этой схеме плата Raspberry Pi управляет всеми процессами в схеме: ввода пароля с клавиатуры, сравнение паролей, включение/выключение зуммера, открытие/закрытие ворот и отображение статусных сообщений на ЖК дисплее. Клавиатура (Keypad) используется для ввода пароля. Зуммер используется для целей индикации. ЖК дисплей используется для отображения информации о состоянии замка.

Контакты столбцов клавиатуры непосредственно подключены к контактам GPIO 22, 23, 24, 25 платы Raspberry Pi, а контакты строк клавиатуры – к контактам 21, 14, 13, 12 платы. ЖК дисплей подключен к Raspberry Pi в 4-битном режиме. Контакты управления ЖК дисплеем RS, RW и En непосредственно подключены к контактам 11, GND и 10 платы Raspberry Pi. Контакты данных ЖК дисплея D4-D7 подключены к контактам GPIO 6, 15, 4 и 1 платы Raspberry Pi, а зуммер подключен к ее контакту 8. Драйвер двигателей L293D подключен к контактам 28 и 29 платы. Батарея 12 В подключена к контакту 8 микросхемы L293D.

Объяснение работы проекта

Принцип работы рассматриваемого нами цифрового кодового замка достаточно прост. После запуска программы на Raspberry Pi на экране ЖК дисплея показывается приветственное сообщение, после этого на нем в первой строке показывается сообщение “A- Input Password” (введите пароль), а на второй – “B- Change Passkey” (измените пароль). После этого пользователь должен нажать одну из кнопок на клавиатуре – A или B.

Теперь, если пользователь хочет открыть ворота/замок, он должен нажать ‘A’ на клавиатуре, после чего система попросит его ввести пароль. Пароль по умолчанию – “1234”. Пользователь вводит пароль и система проверяет корректен он или нет:

  1. Если пользователь ввел правильный пароль, то система открывает ворота/замок.
  2. Если пользователь ввел неправильный пароль, то включается зуммер и на экране дисплея высвечивается сообщение “Access Denied” (доступ запрещен).

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

Структурная схема взаимодействия элементов проекта кодового замка

Если пользователь хочет изменить пароль, то ему необходимо нажать на клавиатуре клавишу ‘B’, после чего система попросит его ввести текущий пароль (“Current Password” или “Current Passkey”). Пользователь вводит пароль и система проверяет его на корректность:

  1. Если пароль правильный, то система предложит пользователю ввести новый пароль (“New Password”).
  2. Если пароль неправильный, то включается зуммер и на экране ЖК дисплея показывается сообщение о неправильно введенном пароле (“Wrong Password”). После этого пользователь должен заново повторить весь процесс чтобы изменить пароль.

Открытие и закрытие ворот/замка в нашем проекте – это ничто иное как вращение двигателя по часовой и против часовой стрелки. Для простого проекта можно использовать обычный двигатель постоянного тока, также можно применить и сервомотор или шаговый двигатель, однако в этом случае понадобится немного изменить код программы.

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

Объяснение программы для Raspberry Pi

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Программа для данного проекта написана на языке C, поэтому она во многом похожа на аналогичные программы для плат Arduino. Для написания этой программы необходимо также установить библиотеку wiringPi для работы с контактами ввода/вывода (GPIO).

Первым делом в программе нам необходимо подключить используемые библиотеки и определить (задать) контакты, к которым подключены ЖК дисплей, зуммер, светодиод и микросхема драйвера двигателей.

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

Затем мы запрограммируем несколько функций для работы с ЖК дисплеем. Функция void lcdcmd будет использоваться для передачи команд на ЖК дисплей, функция void write – для передачи данных на ЖК дисплей, а функция void print – для передачи строки на ЖК дисплей.

Функция void setCursor используется для установки позиции курсора на экране ЖК дисплея.

Функция void clear() используется для очистки экрана ЖК дисплея, а функция void buzzer() – для включения сигнала зуммера.

Функции void gate_open(), void gate_stop() и void gate_close() используются для управления воротами/замком (CD приводом).

Следующая функция используется для инициализации ЖК дисплея в 4-битном режиме.

Функция void keypad() используется для подключения клавиатуры к плате Raspberry Pi по "упрощенному варианту".

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

К коду программы комментариев нет, но отдельные ее части подробно обсуждены в предыдущей части статьи.

(Проголосуй первым!)
Загрузка...
67 просмотров

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

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