Безпека є головною проблемою у нашому повсякденному житті, і цифрові замки стали важливою частиною цих систем безпеки. Один з таких блокувань цифрового коду імітується в цьому проекті за допомогою плати arduino та матричної клавіатури.
Компоненти
- Ардуїно
- Модуль клавіатури
- Зумер
- РК-дисплей 16x2
- BC547 Транзистор
- Резистор (1k)
- Хлібна дошка
- Потужність
- Підключення проводів
У цій схемі ми використовували техніку мультиплексування для інтерфейсу клавіатури для введення пароля в систему. Тут ми використовуємо клавіатуру 4x4, яка містить 16 клавіш. Якщо ми хочемо використовувати 16 клавіш, то для підключення до arduino нам потрібно 16 пінів, але в техніці мультиплексування нам потрібно використовувати лише 8 пінів для взаємодії 16 ключів. Так що це розумний спосіб взаємодії з модулем клавіатури.
Техніка мультиплексування: Техніка мультиплексування - це дуже ефективний спосіб зменшити кількість контактів, що використовуються з мікроконтролером для введення, пароля чи цифр. В основному ця методика використовується двома способами - одним є сканування рядків, а іншим - сканування товстої кишки. Але в цьому проекті на базі arduino ми використали бібліотеку клавіатури, тому нам не потрібно створювати будь-який код мультиплексування для цієї системи. Нам потрібно лише використовувати бібліотеку клавіатури для забезпечення введення.
Опис ланцюга
Схема цього проекту дуже проста, що містить Arduino, модуль клавіатури, зуммер та РК-дисплей. Arduino контролює цілі процеси, такі як отримання пароля у формі модуля клавіатури, порівняння паролів, водіння зумера та надсилання стану на РК-дисплей. Клавіатура використовується для введення пароля. Звуковий сигнал використовується для індикацій, а РК-дисплей - для відображення стану або повідомлень на ньому. Зуммер приводиться в дію за допомогою транзистора NPN.
Виводи стовпця модуля клавіатури безпосередньо підключені до висновків 4, 5, 6, 7, а штифти рядків - до 3, 2, 1, 0 ардуїно-уно. РК-дисплей 16x2 підключений до arduino в 4-розрядному режимі. Керуючий штифт RS, RW та En безпосередньо підключені до висновків arduino 13, GND та 12. А контакт D4-D7 підключений до висновків 11, 10, 9 та 8 arduino. І один зумер підключений на висновку 14 (А1) ардуїно через транзистор NPN BC547.
Працює
Ми використовували вбудований Arduino's EEPROM для збереження пароля, тому, коли ми запускаємо цю схему, програма вперше читає дані про сміття з вбудованого EEPROM Arduino та порівнює їх із вхідним паролем і видає на РК-екрані повідомлення "Доступ заборонено", оскільки пароль не відповідає. Для вирішення цієї проблеми нам потрібно вперше встановити пароль за замовчуванням, використовуючи програмування, подане нижче:
для (int j = 0; j <4; j ++) EEPROM.write (j, j + 49);
lcd.print ("Введіть ключ доступу:"); lcd.setCursor (0,1); for (int j = 0; j <4; j ++) pass = EEPROM.read (j);
Це встановить пароль "1234" для EEPROM Arduino.
Після першого запуску нам потрібно видалити це з програми і знову записати код в arduino і запустити. Тепер ваша система буде працювати нормально. І вже вдруге використовуваний пароль - це "1234". Тепер ви можете змінити його, натиснувши кнопку #, а потім введіть поточний пароль, а потім введіть новий пароль.
Коли ви введете свій пароль, система порівняє ваш введений пароль з тим паролем, який зберігається в EEPROM arduino. Якщо збіг відбувся, тоді на РК-дисплеї відображатиметься «Доступ надано», а якщо пароль помилковий, тоді РК-дисплей «Доступ заборонено», а звуковий сигнал постійно подаватиметься протягом деякого часу. Звуковий сигнал також подається один раз, коли користувач натискає будь-яку кнопку з клавіатури.
Опис програмування
У коді ми використовували бібліотеку клавіатури для взаємодії клавіатури з arduino.
#включати
const байт РЯДКИ = 4; // чотири рядки const байт COLS = 4; // чотири стовпці char hexaKeys = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', ' 8 ',' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; байт rowPins = {3, 2, 1, 0}; // підключення до рядкових розпіровок байту клавіатури colPins = {4, 5, 6, 7}; // підключаємося до розпінов колонок клавіатури // ініціалізуємо екземпляр класу NewKeypad Клавіатура customKeypad = Keypad (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
Ми включили РК-бібліотеку для взаємодії з РК-дисплеями, а для взаємодії з EEPROM ми включили бібліотеку EEPROM.h., А потім ініціалізували змінну та визначені висновки для компонентів.
#define зумер 15 рідкий рідкий кристал (13,12,11,10,9,8); пароль char; char пас, пас1; int i = 0; char customKey = 0;
А потім ми ініціалізували РК-дисплей і надали напрямок штифтам у функції налаштування
void setup () {lcd.begin (16,2); pinMode (led, OUTPUT); 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 (); if (customKey == '#') change (); if (customKey) {пароль = customKey; lcd.print (customKey); звуковий сигнал (); }
А потім порівняйте пароль із паролем збереження, використовуючи метод порівняння рядків.
if (i == 4) {затримка (200); for (int j = 0; j <4; j ++) pass = EEPROM.read (j); if (! (strncmp (пароль, пропуск, 4))) {digitalWrite (led, HIGH); звуковий сигнал (); lcd.clear (); lcd.print ("Пароль прийнято"); затримка (2000); lcd.setCursor (0,1); lcd.print ("#. Змінити ключ доступу"); затримка (2000); lcd.clear (); lcd.print ("Введіть пароль:"); lcd.setCursor (0,1); i = 0; digitalWrite (led, LOW); }
Це функція зміни пароля та звуковий сигнал
void change () {int j = 0; lcd.clear (); lcd.print ("UR Current Passk"); lcd.setCursor (0,1); while (j <4) {char key = customKeypad.getKey (); якщо (ключ) {pass1 = ключ; lcd.print (ключ); void beep () {digitalWrite (зумер, HIGH); затримка (20); digitalWrite (зумер, LOW); }