Кодовый замок представляет собой цифровое устройство предназначенное для разблокировки замка. Разблокировка замка осуществляется после того? как пользователь наберет на клавиатуре определенную комбинацию клавиш. В данной статье речь идет о простом кодовом замке на платформе Arduino. Код состоит из комбинации 6 цифр, который вводится с помощью клавиатуры. Введенное значение сравнивается с хранящимся в памяти значением.
Для того чтобы сделать кодовый замок нам понадобится:
- одна плата Arduino UNO или другая;
- матричная клавиатура 4х4;
- реле замка.
ринципиальна схема замка
"Строчные" линии R1-R4 подключены к выводам Arduino с 6-го по 9-й. Колоночне выводы C1-C4 подключены к выводам 10-10. Третий вывод настроен как выход, в цепь которого включена нагрузка, в нашем случае, для примера, это светодиод D1, последовательно к которому подключено сопротивление номиналом в 330 Ом. Оно необходимо для ограничения тока через светодиод. В настоящем кодовом замке подключатся электромагнит, управляющий положением защелки замка или реле. Если светодиод горит, то замок открыт.
int c[6]; // array for storing the input code
int n;
int a=0;
int i=0;
int lock=3;
int r1=6;
int r2=7;
int r3=8;
int r4=9;
int c1=10;
int c2=11;
int c3=12;
int c4=13;
int colm1;
int colm2;
int colm3;
int colm4;
void setup()
{
pinMode(r1,OUTPUT);
pinMode(r2,OUTPUT);
pinMode(r3,OUTPUT);
pinMode(r4,OUTPUT);
pinMode(c1,INPUT);
pinMode(c2,INPUT);
pinMode(c3,INPUT);
pinMode(c4,INPUT);
pinMode(lock,OUTPUT);
Serial.begin(9600); //sets the baud rate at 9600
digitalWrite(c1,HIGH);
digitalWrite(c2,HIGH);
digitalWrite(c3,HIGH);
digitalWrite(c4,HIGH);
digitalWrite(lock,LOW);
p[0]=1; //sets 1st digit of the password
p[1]=2; // sets 2nd digit of the password
p[2]=3; // sets 3rd digit of the password
p[3]=4; // sets 4th digit of the password
p[4]=5; // sets 5th digit of the password
p[5]=6; // sets 6th digit of the password
}
void loop()
{
digitalWrite(r1,LOW);
digitalWrite(r2,HIGH);
digitalWrite(r3,HIGH);
digitalWrite(r4,HIGH);
colm1=digitalRead(c1);
colm2=digitalRead(c2);
colm3=digitalRead(c3);
colm4=digitalRead(c4);
if(colm1==LOW)
{ n=1;
a=1;
Serial.println("1");
delay(200);}
else
{
if(colm2==LOW)
{ n=2;
a=1;
Serial.println("2");
delay(200);}
else
{
if(colm3==LOW)
{Serial.println("3");
n=3;
a=1;
delay(200);}
else
{
if(colm4==LOW)
{Serial.println("LOCKED");
digitalWrite(lock,LOW); //locks
i=0;
delay(200);}
}}}
digitalWrite(r1,HIGH);
digitalWrite(r2,LOW);
digitalWrite(r3,HIGH);
digitalWrite(r4,HIGH);
colm1=digitalRead(c1);
colm2=digitalRead(c2);
colm3=digitalRead(c3);
colm4=digitalRead(c4);
if(colm1==LOW)
{Serial.println("4");
n=4;
a=1;
delay(200);}
else
{
if(colm2==LOW)
{Serial.println("5");
n=5;
a=1;
delay(200);}
else
{
if(colm3==LOW)
{Serial.println("6");
n=6;
a=1;
delay(200);}
else
{
if(colm4==LOW)
{
if(c[0]==p[0]&&c[1]==p[1]&&c[2]==p[2]&&c[3]==p[3]&&c[4]==p[4]&&c[5]==p[5])
{digitalWrite(lock,HIGH); //unlocks
Serial.println("UNLOCKED");
c[5]=9;} //corrupts the code in array c
else
{Serial.println("WRONG PASSWORD");}
delay(200);}
}}}
if(a==1) // test whether a digit key is pressed
{
c[i]=n; // saves the current digit pressed to array c
i=i+1;
a=0;}
}
Как работает программа самодельного кодового замка
Наш пароль состоит из 6 цифр "123456", это значение хранится в массиве "p". Введенные нами значения последовательно записываются в массив "c". В коде программы происходит сравнение этих двух массивов, после того как будет нажата кнопка разблокировки. Если они совпадают, то посылаем на вывод 3 "положительный сигнал", а если не совпадают то "отрицательный".
int
p[6];
//array for storing the password
int
c[6];
// array for storing the input code
int
n;
int
a=0;
int
i=0;
int
lock=3;
int
r1=6;
int
r2=7;
int
r3=8;
int
r4=9;
int
c1=10;
int
c2=11;
int
c3=12;
int
c4=13;
int
colm1;
int
colm2;
int
colm3;
int
colm4;
void
setup()
{
pinMode(r1,OUTPUT);
pinMode(r2,OUTPUT);
pinMode(r3,OUTPUT);
pinMode(r4,OUTPUT);
pinMode(c1,INPUT);
pinMode(c2,INPUT);
pinMode(c3,INPUT);
pinMode(c4,INPUT);
pinMode(lock,OUTPUT);
Serial.begin(9600);
//sets the baud rate at 9600
digitalWrite(c1,HIGH);
digitalWrite(c2,HIGH);
digitalWrite(c3,HIGH);
digitalWrite(c4,HIGH);
digitalWrite(lock,LOW);
p[0]=1;
//sets 1st digit of the password
p[1]=2;
// sets 2nd digit of the password
p[2]=3;
// sets 3rd digit of the password
p[3]=4;
// sets 4th digit of the password
p[4]=5;
// sets 5th digit of the password
p[5]=6;
// sets 6th digit of the password
}
void
loop()
{
digitalWrite(r1,LOW);
digitalWrite(r2,HIGH);
digitalWrite(r3,HIGH);
digitalWrite(r4,HIGH);
colm1=digitalRead(c1);
colm2=digitalRead(c2);
colm3=digitalRead(c3);
colm4=digitalRead(c4);
if
(colm1==LOW)
{ n=1;
a=1;
Serial.println(
"1"
);
delay(200);}
else
{
if
(colm2==LOW)
{ n=2;
a=1;
Serial.println(
"2"
);
delay(200);}
else
{
if
(colm3==LOW)
{Serial.println(
"3"
);
n=3;
a=1;
delay(200);}
else
{
if
(colm4==LOW)
{Serial.println(
"LOCKED"
);
digitalWrite(lock,LOW);
//locks
i=0;
delay(200);}
}}}
digitalWrite(r1,HIGH);
digitalWrite(r2,LOW);
digitalWrite(r3,HIGH);
digitalWrite(r4,HIGH);
colm1=digitalRead(c1);
colm2=digitalRead(c2);
colm3=digitalRead(c3);
colm4=digitalRead(c4);
if
(colm1==LOW)
{Serial.println(
"4"
);
n=4;
a=1;
delay(200);}
else
{
if
(colm2==LOW)
{Serial.println(
"5"
);
n=5;
a=1;
delay(200);}
else
{
if
(colm3==LOW)
{Serial.println(
"6"
);
n=6;
a=1;
delay(200);}
else
{
if
(colm4==LOW)
{
if
(c[0]==p[0]&&c[1]==p[1]&&c[2]==p[2]&&c[3]==p[3]&&c[4]==p[4]&&c[5]==p[5])
{digitalWrite(lock,HIGH);
//unlocks
Serial.println(
"UNLOCKED"
);
c[5]=9;}
//corrupts the code in array c
else
{Serial.println(
"WRONG PASSWORD"
);}
delay(200);}
}}}
if
(a==1)
// test whether a digit key is pressed
{
c[i]=n;
// saves the current digit pressed to array c
i=i+1;
a=0;}
}