Сигурността е основна грижа в ежедневието ни и цифровите брави се превърнаха във важна част от тези системи за сигурност. Една такава цифрова кодова ключалка се имитира в този проект с помощта на платка arduino и матрична клавиатура.
Компоненти
- Arduino
- Модул на клавиатурата
- Звънец
- 16x2 LCD
- BC547 транзистор
- Резистор (1k)
- Дъска за хляб
- Мощност
- Свързващи проводници
В тази схема сме използвали техника за мултиплексиране за интерфейс на клавиатурата за въвеждане на паролата в системата. Тук използваме клавиатура 4x4, която съдържа 16 клавиша. Ако искаме да използваме 16 клавиша, тогава ни трябват 16 пина за връзка с arduino, но в техниката на мултиплексиране трябва да използваме само 8 пина за взаимодействие с 16 ключа. Така че това е интелигентен начин за свързване с модул на клавиатурата.
Техника на мултиплексиране: Техниката на мултиплексиране е много ефективен начин за намаляване на броя на щифтовете, използвани с микроконтролера за предоставяне на вход или парола или номера. По принцип тази техника се използва по два начина - единият е сканиране на редове, а другият е сканиране на дебелото черво. Но в този проект, базиран на arduino, използвахме библиотека на клавиатурата, така че не е необходимо да правим мултиплексиращ код за тази система. Трябва само да използваме библиотека на клавиатурата за осигуряване на въвеждане.
Описание на веригата
Веригата на този проект е много проста, която съдържа Arduino, модул на клавиатурата, зумер и LCD. Arduino контролира цялостните процеси като вземане на парола от модула на клавиатурата, сравняване на пароли, задействане на зумер и изпращане на статус на LCD дисплей. Клавиатурата се използва за вземане на парола. Звуков сигнал се използва за индикации, а LCD се използва за показване на състояние или съобщения върху него. Зуммерът се задвижва с помощта на NPN транзистор.
Пиновете на колоната на модула на клавиатурата са директно свързани към щифтове 4, 5, 6, 7, а редовите щифтове са свързани към 3, 2, 1, 0 на arduino uno. LCD 16x2 е свързан с arduino в 4-битов режим. Контролният пин RS, RW и En са директно свързани към arduino пин 13, GND и 12. А пинът за данни D4-D7 е свързан към щифтове 11, 10, 9 и 8 на arduino. И един зумер е свързан на щифт 14 (А1) на ардуино през транзистор BC547 NPN.
Работещи
Използвахме вградения EEPROM на arduino, за да запазим паролата, така че когато стартираме тази схема, програмата за първи път чете данни за боклук от вградената EEPROM на arduino и ги сравнява с въведената парола и дава съобщение на LCD, което е отказан достъп, тъй като паролата не съвпада. За да разрешим този проблем, трябва да зададем парола по подразбиране за първи път, като използваме програмирането, дадено по-долу:
за (int j = 0; j <4; j ++) EEPROM.write (j, j + 49);
lcd.print ("Въведете Ur Passkey:"); lcd.setCursor (0,1); за (int j = 0; j <4; j ++) pass = EEPROM.read (j);
Това ще зададе парола „1234“ на EEPROM на Arduino.
След като го стартираме за първи път, трябва да премахнем това от програмата и отново да напишем кода в arduino и да стартираме. Сега вашата система ще работи добре. И за втори път използваната от вас парола вече е „1234“. Сега можете да го промените, като натиснете бутона # и след това въведете текущата си парола и след това въведете новата си парола.
Когато въведете вашата парола, системата ще сравни въведената ви парола с тази парола, която се съхранява в EEPROM на arduino. Ако се случи съвпадение, LCD ще покаже „достъпът е предоставен“ и ако паролата е грешна, тогава LCD ще „откаже достъп“ и зумерът ще издава непрекъснато звуков сигнал за известно време. Звуковият сигнал също се издава един път, когато потребителят натисне произволен бутон от клавиатурата.
Описание на програмирането
В кода използвахме библиотека на клавиатурата за взаимодействие на клавиатурата с arduino.
#include
const байт ROWS = 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);
Включихме LCD библиотека за взаимодействие с LCD, а за свързване с EEPROM включихме библиотека EEPROM.h. И след това инициализирахме променлива и дефинирани щифтове за компоненти.
#define зумер 15 LiquidCrystal lcd (13,12,11,10,9,8); char парола; char pass, pass1; int i = 0; char customKey = 0;
И тогава инициализирахме LCD и давахме посока на щифтовете във функцията за настройка
void setup () {lcd.begin (16,2); pinMode (led, OUTPUT); pinMode (зумер, ИЗХОД); pinMode (m11, ИЗХОД); pinMode (m12, OUTPUT); lcd.print ("Електронен"); lcd.setCursor (0,1); lcd.print ("Заключване на клавиатурата"); забавяне (2000); lcd.clear (); lcd.print ("Въведете Ur Passkey:"); lcd.setCursor (0,1);
След това четем клавиатурата във функция цикъл
customKey = customKeypad.getKey (); if (customKey == '#') change (); if (customKey) {парола = customKey; lcd.print (customKey); бипкане (); }
И след това сравнете паролата с паролата за запазване, като използвате метода за сравняване на низове
if (i == 4) {закъснение (200); за (int j = 0; j <4; j ++) pass = EEPROM.read (j); if (! (strncmp (парола, пропуск, 4))) {digitalWrite (led, HIGH); бипкане (); lcd.clear (); lcd.print ("Passkey Accepted"); забавяне (2000); lcd.setCursor (0,1); lcd.print ("#. Промяна на парола"); забавяне (2000); lcd.clear (); lcd.print ("Въведете парола:"); lcd.setCursor (0,1); i = 0; digitalWrite (led, LOW); }
Това е функция за промяна на паролата и звуков сигнал
промяна на празнотата () {int j = 0; lcd.clear (); lcd.print ("UR Current Passk"); lcd.setCursor (0,1); while (j <4) {char ключ = customKeypad.getKey (); ако (ключ) {pass1 = ключ; lcd.print (ключ); void beep () {digitalWrite (зумер, HIGH); забавяне (20); digitalWrite (зумер, LOW); }