- Используемые компоненты:
- Подключение клавиатуры 4x4 к Raspberry Pi с использованием мультиплексирования:
- Описание схемы:
- Рабочее объяснение:
- Объяснение программирования:
Безопасность является серьезной проблемой в нашей повседневной жизни, и цифровые замки стали важной частью этих систем безопасности. Есть много типов технологий, доступных для защиты нашего места, например, системы безопасности на основе PIR, системы безопасности на основе RFID, лазерные охранные сигнализации, биоматричные системы и т. Д.
Ранее мы создали цифровой замок с паролем с использованием Arduino и 8051, здесь мы собираемся создать этот цифровой замок с помощью Raspberry Pi с пользовательским паролем. После установки пароля пользователь может получить доступ к двери только с правильным паролем.
Если вы не знакомы с Raspberry Pi, мы создали серию руководств для изучения Raspberry Pi с взаимодействием со всеми базовыми компонентами и некоторыми простыми проектами для начала, обязательно проверьте.
Используемые компоненты:
- Raspberry Pi (с загруженной SD-картой)
- Модуль клавиатуры
- Зуммер
- ЖК-дисплей 16x2
- 10к банк
- Комплект резисторов 10 кОм (подтягивающий)
- СВЕТОДИОД
- Резистор 1 кОм
- Хлебная доска
- CD / DVD тележка в качестве ворот
- Мощность 5 вольт
- Драйвер двигателя L293D
- Аккумулятор 12 В
- Соединительные провода
Подключение клавиатуры 4x4 к Raspberry Pi с использованием мультиплексирования:
В этой схеме мы использовали метод мультиплексирования для взаимодействия с клавиатурой для ввода пароля в системе. Здесь мы используем мультиплексную клавиатуру 4x4 с 16 клавишами. Обычно, если мы хотим использовать 16 ключей, нам нужно 16 контактов для подключения к Arduino, но в технике мультиплексирования нам нужно только 8 контактов для сопряжения 16 ключей. Так что это разумный способ взаимодействия с модулем клавиатуры. Узнайте больше о технике мультиплексирования и ее работе в этом цифровом замке с использованием 8051.
Метод мультиплексирования - очень эффективный способ уменьшить количество выводов, используемых микроконтроллером для ввода, пароля или чисел. В основном этот метод используется двумя способами: один - сканирование строк, а другой - сканирование столбцов. Если мы используем библиотеку клавиатуры (#include
Но здесь, в этом проекте, мы реализовали короткий способ кодирования той же клавиатуры без использования библиотеки клавиатуры. Пожалуйста, посмотрите это в разделе программирования ниже.
Описание схемы:
Схема этого цифрового дверного замка Raspberry Pi очень проста, он содержит Raspberry Pi 3, модуль клавиатуры, зуммер, тележку DVD / CD в качестве ворот и ЖК-дисплей. Здесь Raspberry Pi контролирует весь процесс, такой как получение пароля из модуля клавиатуры, сравнение паролей, включение зуммера, открытие / закрытие ворот и отправка статуса на ЖК-дисплей. Клавиатура используется для ввода пароля. Зуммер используется для индикации и управляется встроенным транзистором NPN. ЖК-дисплей используется для отображения статуса или сообщений на нем.
Контакты Column модуля клавиатуры напрямую подключены к контактам GPIO 22, 23, 24, 25, а контакты Row подключены к 21, 14, 13, 12 контактам WringPi Raspberry Pi. 16x2 ЖК - дисплей соединен с малиновым Pi в 4-битном режиме. LCD контролируют контактный RS, RW и Еп непосредственно связаны с GPIO штифтом 11, GND и 10. Данные Pins D4-D7 подключены к GPIO штифтов 6, 15, 4 и 1. Один зуммер соединен на GPIO штифтом 8. И Motor Driver L293D подключен к контактам 28 и 29 GPIO Raspberry Pi. 12 вольт батарея соединена на выводе 8 L293D по отношению к земле.
Рабочее объяснение:
Работа над этим проектом проста. Когда пользователь запускает код в Raspberry Pi, на ЖК-дисплее отображается приветственное сообщение, после которого отображается «A-Введите пароль», а во второй строке B-Change Passkey ». Теперь пользователь может сделать свой выбор, нажимая A и B на клавиатуре.
Теперь, если пользователь хочет открыть ворота, ему нужно нажать «А» на клавиатуре, после чего система запросит пароль. Пароль по умолчанию - «1234». Теперь пользователь должен ввести пароль, и после этого система проверит, действителен он или нет:
1. Если пользователь вводит правильный пароль, система откроет ворота.
2. Если пользователь вводит неправильный пароль, система отправит команду на зуммер, который подаст звуковой сигнал и покажет «Доступ запрещен» на ЖК-дисплее.
Теперь предположим, что пользователь хочет изменить пароль, ему нужно нажать «B» на клавиатуре, после чего пользователю будет предложено ввести «Текущий пароль» или «Текущий ключ доступа». Теперь пользователю необходимо ввести текущий пароль, затем система проверит его правильность и выполнит одну из заданных задач.
1. Если пользователь вводит правильный пароль, система запросит «Новый пароль», и теперь пользователь может изменить пароль, введя новый пароль.
2. Если пользователь вводит неправильный пароль, система включит зуммер и отобразит «Неверный пароль:» на ЖК-дисплее.
Теперь пользователю нужно повторить весь процесс еще раз, чтобы сменить пароль.
По сути, открытие и закрытие ворот - это не что иное, как вращение мотора по часовой стрелке и против часовой стрелки, чтобы открывать и закрывать дверь. Для небольшого проекта вы можете просто добавить двигатель постоянного тока, чтобы открывать и закрывать дверь. Мы также можем использовать сервопривод или шаговый двигатель, но нам нужно соответственно изменить код.
Кроме того, вы можете использовать правильный электронный дверной замок (легко доступный онлайн) вместо тележки для компакт-дисков. У него есть Электромагнит, который удерживает дверь запертой, когда через замок не проходит ток (разомкнутая цепь), а когда через него проходит ток, замок разблокируется, и дверь можно открыть. Код будет соответственно изменен, также проверьте этот общий обзор проекта: Дверной замок Arduino RFID
Объяснение программирования:
Программирование очень похоже на Arduino. Функция Arduino использует классы, но здесь мы сделали этот код, используя программирование на c, без классов. Мы также установили библиотеку wiringPi для GPIO.
Теперь, прежде всего, нам нужно включить необходимые библиотеки, а затем определить контакты для ЖК-дисплея, зуммера, светодиода и двигателя.
#включают
После этого определите контакты для строки и столбца клавиатуры и определите массив для хранения пароля и номеров клавиатуры.
char pass; char pass1 = {'1', '2', '3', '4'}; int n = 0; строка символов = {21, 14, 13, 12}; char col = {22, 23, 24, 25}; char num = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', ' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}};
После этого мы написали несколько функций для управления LCD:
Функция void lcdcmd используется для отправки команды на ЖК-дисплей, а функция записи void используется для отправки данных на ЖК-дисплей.
Функция void print используется для отправки строки на LCD.
void print (char * str) {while (* str) {write (* str); аннулировать печать (char * str) {while (* str) {write (* str); str ++; }}
Функция void setCursor используется для установки положения курсора на ЖК-дисплее.
void setCursor (int x, int y) {int set = 0; если (y == 0) установить = 128 + x; if (y == 1) set = 192 + x; lcdcmd (набор); }
Функция void clear () используется для очистки ЖК-дисплея, а void buzzer () используется для подачи звукового сигнала.
Функции void gate_open (), void gate_stop () и void gate_close () используются для управления воротами (тележка для компакт-дисков)
void gate_open () {digitalWrite (m1, LOW); digitalWrite (м2, ВЫСОКИЙ); задержка (2000); } void gate_stop () {digitalWrite (m1, LOW); digitalWrite (m2, LOW); задержка (2000); } void gate_close () {digitalWrite (m1, HIGH); digitalWrite (m2, LOW); задержка (2000); }
Данная функция используется для инициализации ЖК-дисплея в 4-битном режиме.
пустое начало (int x, int y) {lcdcmd (0x02); lcdcmd (0x28); lcdcmd (0x06); lcdcmd (0x0e); lcdcmd (0x01); }
Данная функция void keypad () используется для взаимодействия модуля клавиатуры с Raspberry Pi с помощью «короткого метода».
пустая клавиатура () {int i, j; int x = 0, k = 0; задержка (2000); в то время как (к <4) {для (я = 0; я <4; я ++) {digitalWrite (столбец, LOW); для (j = 0; j <4; j ++) {если (digitalRead (строка) == 0) {setCursor (x, 1);…………………
Проверьте все функции в полном коде ниже, код прост и не требует пояснений.