Безопасность является серьезной проблемой в нашей повседневной жизни, и цифровые замки стали важной частью этих систем безопасности. Один такой цифровой кодовый замок имитируется в этом проекте с использованием платы Arduino и матричной клавиатуры.
Составные части
- Ардуино
- Модуль клавиатуры
- Зуммер
- ЖК-дисплей 16x2
- BC547 Транзистор
- Резистор (1к)
- Хлебная доска
- Мощность
- Соединительные провода
В этой схеме мы использовали технику мультиплексирования для интерфейса клавиатуры для ввода пароля в системе. Здесь мы используем клавиатуру 4x4, которая содержит 16 клавиш. Если мы хотим использовать 16 ключей, нам понадобится 16 контактов для подключения к Arduino, но в методе мультиплексирования нам нужно использовать только 8 контактов для взаимодействия 16 ключей. Так что это разумный способ взаимодействия с модулем клавиатуры.
Метод мультиплексирования: метод мультиплексирования - очень эффективный способ уменьшить количество выводов, используемых микроконтроллером для ввода, пароля или чисел. В основном этот метод используется двумя способами: один - сканирование строк, а другой - сканирование двоеточия. Но в этом проекте на основе Arduino мы использовали библиотеку клавиатуры, поэтому нам не нужно создавать какой-либо код мультиплексирования для этой системы. Нам нужно только использовать библиотеку клавиатуры для ввода.
Описание схемы
Схема в этом проекте очень проста и содержит Arduino, модуль клавиатуры, зуммер и ЖК-дисплей. Arduino контролирует все процессы, такие как получение пароля из модуля клавиатуры, сравнение паролей, включение зуммера и отправка статуса на ЖК-дисплей. Клавиатура используется для ввода пароля. Зуммер используется для индикации, а ЖК-дисплей используется для отображения статуса или сообщений на нем. Зуммер управляется с помощью транзистора NPN.
Контакты Column модуля клавиатуры напрямую подключены к контактам 4, 5, 6, 7, а контакты Row подключены к 3, 2, 1, 0 на Arduino Uno. ЖК-дисплей 16x2 подключен к Arduino в 4-битном режиме. Управляющий контакт RS, RW и En напрямую подключены к контактам 13, GND и 12 Arduino. А контакт данных D4-D7 подключен к контактам 11, 10, 9 и 8 Arduino. И один зуммер подключен к выводу 14 (A1) Arduino через транзистор BC547 NPN.
За работой
Мы использовали встроенную EEPROM Arduino для сохранения пароля, поэтому, когда мы запускаем эту схему в первый раз, программа считывает данные мусора из встроенной EEPROM Arduino, сравнивает их с входным паролем и дает сообщение на ЖК-дисплее, что доступ запрещен, поскольку пароль не совпадает. Для решения этой проблемы нам нужно установить пароль по умолчанию в первый раз, используя программирование, приведенное ниже:
для (int j = 0; j <4; j ++) EEPROM.write (j, j + 49);
lcd.print ("Введите пароль:"); lcd.setCursor (0,1); для (int j = 0; j <4; j ++) pass = EEPROM.read (j);
Это установит пароль «1234» для EEPROM Arduino.
После первого запуска нам нужно удалить это из программы, снова записать код в Arduino и запустить. Теперь ваша система будет работать нормально. И второй раз используемый пароль теперь «1234». Теперь вы можете изменить его, нажав кнопку #, затем введите свой текущий пароль, а затем введите новый пароль.
Когда вы введете свой пароль, система сравнит ваш введенный пароль с тем паролем, который хранится в EEPROM Arduino. В случае совпадения на ЖК-дисплее отобразится сообщение «Доступ предоставлен», а если пароль неверен, на ЖК-дисплее отобразится сообщение «Доступ запрещен» и зуммер будет непрерывно издавать звуковой сигнал в течение некоторого времени. И зуммер также издает один звуковой сигнал, когда пользователь нажимает любую кнопку с клавиатуры.
Описание программирования
В коде мы использовали библиотеку клавиатуры для взаимодействия клавиатуры с Arduino.
#включают
const byte ROWS = 4; // четыре строки const byte COLS = 4; // четыре столбца char hexaKeys = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', ' 8 ',' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; byte rowPins = {3, 2, 1, 0}; // подключаемся к выводам строки байта клавиатуры colPins = {4, 5, 6, 7}; // подключаемся к выводам столбцов клавиатуры // инициализируем экземпляр класса NewKeypad Keypad customKeypad = Keypad (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
Мы включили ЖК-библиотеку для сопряжения с ЖК-дисплеем и для сопряжения с EEPROM, мы включили библиотеку EEPROM.h., А затем инициализировали переменную и определили контакты для компонентов.
#define buzzer 15 LiquidCrystal lcd (13,12,11,10,9,8); символьный пароль; char pass, pass1; int я = 0; char customKey = 0;
Затем мы инициализировали ЖК-дисплей и задали направление контактам в функции настройки.
void setup () {lcd.begin (16,2); pinMode (светодиод, ВЫХОД); pinMode (зуммер, ВЫХОД); pinMode (m11, ВЫХОД); pinMode (m12, ВЫХОД); lcd.print («Электронный»); lcd.setCursor (0,1); lcd.print («Блокировка клавиатуры»); задержка (2000); lcd.clear (); lcd.print ("Введите пароль:"); lcd.setCursor (0,1);
После этого читаем клавиатуру в функции цикла
customKey = customKeypad.getKey (); если (customKey == '#') change (); если (customKey) {пароль = customKey; lcd.print (customKey); beep (); }
А затем сравните пароль с паролем сохранения, используя метод сравнения строк.
если (я == 4) {задержка (200); для (int j = 0; j <4; j ++) pass = EEPROM.read (j); если (! (strncmp (пароль, пароль, 4))) {digitalWrite (led, HIGH); beep (); lcd.clear (); lcd.print («Пароль принят»); задержка (2000); lcd.setCursor (0,1); lcd.print ("#. Изменить пароль"); задержка (2000); lcd.clear (); lcd.print («Введите пароль:»); lcd.setCursor (0,1); я = 0; digitalWrite (светодиод, LOW); }
Это функция смены пароля и функция звукового сигнала зуммера
void change () {int j = 0; lcd.clear (); lcd.print («Текущий пароль UR»); lcd.setCursor (0,1); в то время как (j <4) {char key = customKeypad.getKey (); если (ключ) {пароль1 = ключ; lcd.print (ключ); void beep () {digitalWrite (зуммер, ВЫСОКИЙ); задержка (20); digitalWrite (зуммер, LOW); }