Схема защиты паролем с использованием клавиатуры 4 × 4 и Arduino

Попробуйте наш инструмент устранения неполадок





В этом посте мы собираемся построить схему защиты паролем, доступ к которой можно получить с помощью 6-значного пароля. Если быть более точным, это буквенно-цифровой пароль.

Оборудование для этого проекта

Мы собираемся использовать клавиатуру 4x4, которая состоит из десятичных значений от 0 до 9, двух специальных символов «#» и «*» и алфавитов от A до D. Комбинация этих символов может использоваться как пароль.



Arduino - это мозг системы, реле взаимодействует с Arduino для активации и деактивации при вводе правильного пароля. Здесь используются два светодиода для индикации состояния системы блокировки.

Если вы не знакомы с клавиатурой 4x4, обратитесь к моей предыдущей статье, в которой подробно обсуждались основы матричной клавиатуры 4x4



Предлагаемый проект имеет довольно минималистичный аппаратный дизайн. Он просто состоит из клавиатуры, реле, Arduino и пары светодиодов, и даже новичок в Arduino с легкостью справится с этим.

Единственная часть, которая немного сложна в этом проекте, - это кодирование, не беспокойтесь, код приведен в этом проекте. Программа должна быть написана таким образом, чтобы она была защищена от дурака и ни один угонщик не мог взломать систему.

Но будьте осторожны, если вы обнаружите, что оборудование или оборудование этого проекта легко доступно, реле можно легко взломать. Так что держите этот проект в хорошо защищенном шасси.

Как это устроено

Примечание: к базе транзистора должен быть подключен токоограничивающий резистор 4,7 кОм, который не показан на схеме.

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

Принципиальная электрическая схема

Схема блокировки пароля Arduino с использованием клавиатуры 4x4

Вот две иллюстрации, как взаимодействовать с клавиатурой и Arduino:

Результаты тестирования блокировки пароля Arduino

• Когда цепь включена, она запрашивает пароль, который вы можете видеть на мониторе последовательного порта (мониторинг последовательного порта не является обязательным, но может использоваться для целей тестирования).

• Введите пароль, который вы ввели в программу перед ее компиляцией.

• Пока вы нажимаете клавиши, зеленый светодиод мигает в течение одной десятой секунды, указывая на то, что пользователь нажал какую-то клавишу.

• После ввода 6-значного пароля нажмите «D» на клавиатуре, которая действует как «Ввод». Если пароль правильный, реле активируется, загорается зеленый светодиод.

• Чтобы отключить реле, нажмите «C» на клавиатуре. Когда это будет сделано, зеленый светодиод погаснет, и реле деактивируется. Никакой другой ключ не может деактивировать реле.

• Если пароль, введенный пользователем, неверен, то загорается красный светодиод, и пользователь должен подождать 30 секунд, чтобы ввести следующую попытку. По истечении 30 секунд красный светодиод гаснет, информируя пользователя о том, что система готова принять ввод от пользователя.

• Когда реле деактивируется после успешной активации, чтобы снова активировать реле, пользователь должен снова ввести пароль и нажать «D».

Вот частный случай:

• При вводе правильного пароля реле активируется, а после успешной деактивации, когда пользователь нажимает одно неверное нажатие клавиши (не весь пароль), программа распознает неправильный пароль, и пользователю необходимо подождать еще 30 секунд. Если это был угонщик, это задержит количество попыток, сделанных угонщиком.

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

• Девиз объясненной выше концепции - задержать количество попыток, совершаемых угонщиком.

Программный код:

//---------------------------------Program Developed by R.Girish--------------------------//
#include
const byte ROWS = 4
const byte COLS = 4
char pass[] = '123ABC' // 6 digit password only (no less or no more)
int OP=10
int green=12
int red=11
char key1
char key2
char key3
char key4
char key5
char key6
char dumpkey
char keyOK
char ok[]='D'
char offkey
char off[]='C'
int z
char keys[ROWS][COLS] =
{
{'D','#','0','*'},
{'C','9','8','7'},
{'B','6','5','4'},
{'A','3','2','1'}
}
byte rowPins[ROWS] = {6,7,8,9} //connect to the row pinouts of the keypad
byte colPins[COLS] = {2,3,4,5} //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS )
void setup()
{
Serial.begin(9600)
pinMode(OP,OUTPUT)
pinMode(green,OUTPUT)
pinMode(red,OUTPUT)
digitalWrite(OP,LOW)
}
void loop()
{
top:
Serial.println('')
Serial.println('[Press D = Enter]')
Serial.print('Enter the password: ')
key1=keypad.waitForKey()
if(key1 == pass[0])
{
digitalWrite(green,HIGH)
delay(100)
digitalWrite(green,LOW)
{
z=1
Serial.print('*')
goto A

}
}
еще
{
goto dump
}
К:
key2 = keypad.waitForKey ()
если (ключ2 == пройти [1])
{
digitalWrite (зеленый, ВЫСОКИЙ)
задержка (100)
digitalWrite (зеленый, НИЗКИЙ)
{
г = 2
Serial.print ('*')
goto B
}
}
еще
{
goto dump
}
B:
key3 = keypad.waitForKey ()
если (key3 == пройти [2])
{
digitalWrite (зеленый, ВЫСОКИЙ)
задержка (100)
digitalWrite (зеленый, НИЗКИЙ)
{
г = 3
Serial.print ('*')
goto C
}
}
еще
{
goto dump
}
C:
key4 = keypad.waitForKey ()
если (key4 == пройти [3])
{
digitalWrite (зеленый, ВЫСОКИЙ)
задержка (100)
digitalWrite (зеленый, НИЗКИЙ)
{
г = 4
Serial.print ('*')
перейти D
}
}
еще
{
goto dump
}
D:
key5 = keypad.waitForKey ()
если (key5 == пройти [4])
{
digitalWrite (зеленый, ВЫСОКИЙ)
задержка (100)
digitalWrite (зеленый, НИЗКИЙ)
{
г = 5
Serial.print ('*')
goto E
}
}
еще
{
goto dump
}
ЯВЛЯЕТСЯ:
key6 = keypad.waitForKey ()
если (key6 == пройти [5])
{
digitalWrite (зеленый, ВЫСОКИЙ)
задержка (100)
digitalWrite (зеленый, НИЗКИЙ)
{
г = 6
Serial.print ('*')
goto ok
}
}
еще
{
goto dump
}
Ok:
keyOK = клавиатура.waitForKey ()
если (keyOK == ok [0])
{
digitalWrite (OP, HIGH)
digitalWrite (зеленый, ВЫСОКИЙ)
Serial.println ('')
Serial.println («Реле активировано, нажмите« C », чтобы деактивировать.n»)
}
еще
{
Serial.println ('')
Serial.println («Нажмите« D », чтобы войти»)
goto ok
}
выключенный:
offkey = keypad.waitForKey ()
если (offkey == off [0])
{
digitalWrite (OP, LOW)
digitalWrite (зеленый, НИЗКИЙ)
Serial.println ('Реле деактивировано.n')
перейти наверх
}
еще
{
Serial.println ('Нажмите' C ', чтобы отключить')
уйти
}
свалка:
если (z == 0)
{
digitalWrite (зеленый, ВЫСОКИЙ)
задержка (100)
digitalWrite (зеленый, НИЗКИЙ)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
ошибка перехода
}
если (z == 1)
{
digitalWrite (зеленый, ВЫСОКИЙ)
задержка (100)
digitalWrite (зеленый, НИЗКИЙ)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
ошибка перехода
}
если (z == 2)
{
digitalWrite (зеленый, ВЫСОКИЙ)
задержка (100)
digitalWrite (зеленый, НИЗКИЙ)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
ошибка перехода
}
если (z == 3)
{
digitalWrite (зеленый, ВЫСОКИЙ)
задержка (100)
digitalWrite (зеленый, НИЗКИЙ)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
ошибка перехода
}
если (z == 4)
{
digitalWrite (зеленый, ВЫСОКИЙ)
задержка (100)
digitalWrite (зеленый, НИЗКИЙ)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
ошибка перехода
}
если (z == 5)
{
digitalWrite (зеленый, ВЫСОКИЙ)
задержка (100)
digitalWrite (зеленый, НИЗКИЙ)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
ошибка перехода
}
ошибка:
Serial.println ('')
Serial.print ('Неверный пароль, подождите 30 секунд.')
digitalWrite (красный, ВЫСОКИЙ)
задержка (10000)
задержка (10000)
задержка (10000)
digitalWrite (красный, НИЗКИЙ)
перейти наверх
}
// --------------------------------- Программа разработана Р.Гиришем --------- ----------------- //

ПРИМЕЧАНИЕ: Чтобы установить пароль: char pass [] = '123ABC' // только 6-значный пароль (ни меньше, ни больше)
Замените «123ABC» на свой собственный пароль в кавычках.

Убедитесь, что установленный в программе пароль ТОЛЬКО 6-значный, не меньше или не больше, но ровно 6-значный. В противном случае программа не будет работать правильно.

Если у вас есть какие-либо дополнительные сомнения относительно объясненной схемы защиты паролем, пожалуйста, не стесняйтесь размещать их в своих комментариях.




Предыдущая: Светодиодная схема симулятора восхода и заката Далее: Схема контроллера двигателя Bluetooth