Кодовый замок на Ардуино УНО.
Для изготовления кодового замка нам потребуется:
корпус - 1 шт
клавиатура - 1 шт
контроллер Ардуино УНО - 1 шт
Блок реле для контроллера Ардуино - 1 шт
Исполняющее устройство - электромагнит или электрозащелка - 1 шт.
Fox писал(а):классный проекту меня возник вопрос можно ли сделать смену пароля с клавиатуры так как в моем случае будет не возможно постоянно прошивать
хотелось бы как то использовать энергонезависимую память
я не очень селен в программирование а сделать такое устройство на мастерскую хотелось бы.
Fox писал(а):да возможно но я не селен в программировании и мне нужно пароль писать в памяти EERPOM он весит не много и менять каждый раз мне его не надо. и еще вопрос как мне сделать при в воде 5 не правильных паролев включалась сигнализация
#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9,8,7,6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5,4,3,2}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
String summ;
String keystr;
int shet=0;
void setup(){
Serial.begin(9600);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
//---------start tone------------
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
//-------stop tone------------
}
void loop(){
char key = keypad.getKey();
if (key){
Serial.println(key);
//---------start tone------------
digitalWrite(11, HIGH);
tone(10, 1440, 200);
delay(200);
noTone(10);
digitalWrite(11, LOW);
//-------stop tone------------
shet=shet+1;
if (shet==6){
summ="";
keystr="";
shet=0;
Serial.println("LONG");
//---------start tone------------
digitalWrite(12, HIGH);
tone(10, 600, 200);
delay(200);
noTone(10);
digitalWrite(12, LOW);
//-------stop tone------------
};
summ=summ+key;
Serial.println(summ);
keystr=String(key);
if (keystr=="#"){
summ="";
keystr="";
shet=0;
Serial.println("RESET");
//---------start tone------------
digitalWrite(12, HIGH);
tone(10, 600, 200);
delay(200);
noTone(10);
digitalWrite(12, LOW);
//-------stop tone------------
};
if (keystr=="*"){
summ="";
keystr="";
shet=0;
Serial.println("ENTER");
//---------start tone------------
digitalWrite(12, HIGH);
tone(10, 600, 200);
delay(200);
noTone(10);
digitalWrite(12, LOW);
//-------stop tone------------
};
if (summ=="83B12"){
Serial.println("PASS OK");
summ="";
keystr="";
shet=0;
//---------start tone------------
digitalWrite(13, HIGH);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
digitalWrite(13, LOW);
//-------stop tone------------
};
//---------------start pass 2 -----------------
if (summ=="94C3A"){
Serial.println("PASS OK");
summ="";
keystr="";
shet=0;
//---------start tone------------
digitalWrite(13, HIGH);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
digitalWrite(13, LOW);
//-------stop tone------------
};
//------------------stop pass 2---------------------
//---------------start pass 3 -----------------
if (summ=="A5D81"){
Serial.println("PASS OK");
summ="";
keystr="";
shet=0;
//---------start tone------------
digitalWrite(13, HIGH);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
tone(10, 300, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
digitalWrite(13, LOW);
//-------stop tone------------
};
//------------------stop pass 3---------------------
}
}
#include <Keypad.h> // библиотека матричной клавиатуры
#include <Servo.h> // библиотека управления серводвигателем
Servo myservo; // инициализация двигателя
// переменные счетчиков
int pos = 0;
int val = 0;
int alarm = 0;
int alar = 0;
const byte ROWS = 4; //строки клавиатуры
const byte COLS = 4; //столбцы клавиатуры
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9,8,7,6}; // строки клавиатуры
byte colPins[COLS] = {5,4,3,2}; // столбцы клавиатуры
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
String summ;
String keystr;
int shet=0;
// установочный цикл
void setup(){
Serial.begin(9600);
myservo.attach(13);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
// тест индикации и сигнализации
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
// звуковой сигнал , где tone(номер вывода, частота тона, длительность)
tone(10, 800, 200);
// задержка
delay(200);
// отключение звукового сигнала
noTone(10);
tone(10, 500, 200);
delay(200);
noTone(10);
tone(10, 600, 200);
delay(200);
noTone(10);
tone(10, 700, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
}
// основной цикл
void loop(){
if (val==0){
char key = keypad.getKey();
if (key){
Serial.println(key);
digitalWrite(11, HIGH);
tone(10, 1440, 200);
delay(200);
noTone(10);
digitalWrite(11, LOW);
shet=shet+1;
// считаем неверные вводы кода
if (shet==6){
summ="";
keystr="";
shet=0;
alarm = alarm +1;
Serial.println("LONG");
digitalWrite(12, HIGH);
tone(10, 600, 200);
delay(200);
noTone(10);
digitalWrite(12, LOW);
};
summ=summ+key;
Serial.println(summ);
keystr=String(key);
// сброс при ошибочном вводе кода
if (keystr=="#"){
summ="";
keystr="";
shet=0;
Serial.println("RESET");
digitalWrite(12, HIGH);
tone(10, 600, 200);
delay(200);
noTone(10);
digitalWrite(12, LOW);
};
// ввод, необязательно
if (keystr=="*"){
summ="";
keystr="";
shet=0;
Serial.println("ENTER");
digitalWrite(12, HIGH);
tone(10, 600, 200);
delay(200);
noTone(10);
digitalWrite(12, LOW);
};
// проверяем на соответствие верному коду
if (summ=="2548"){
Serial.println("PASS OK");
val=1;
summ="";
keystr="";
shet=0;
tone(10, 1200, 200);
delay(500);
noTone(10);
tone(10, 1200, 200);
delay(500);
noTone(10);
tone(10, 1200, 200);
delay(500);
noTone(10);
};
}
// включаем сирену при 5 неверных наборов кода
if (alarm>=5) {
for(alar = 0; alar <= 10; alar += 1)
{ tone(10, 500, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
} ;
alarm = 0;
alar = 0;
};
} else {
// открываем замок на 5 сек и закрываем
tone(10, 1500, 200);
delay(500);
noTone(10);
for(pos = 0; pos <= 90; pos += 1)
{ myservo.write(pos);
delay(10);
}
delay(5000);
tone(10, 1500, 200);
delay(500);
noTone(10);
for(pos = 90; pos>=0; pos-=1)
{myservo.write(pos);
delay(10);
}
delay(5000);
tone(10, 1500, 200);
delay(500);
noTone(10);
val=0;
};
}
#include <Keypad.h> // библиотека матричной клавиатуры
#include <Servo.h> // библиотека управления серводвигателем
Servo myservo; // инициализация двигателя
// переменные счетчиков
int pos = 0;
int val = 0;
int alarm = 0;
int alar = 0;
const byte ROWS = 4; //строки клавиатуры
const byte COLS = 4; //столбцы клавиатуры
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9,8,7,6}; // строки клавиатуры
byte colPins[COLS] = {5,4,2,3}; // столбцы клавиатуры
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
String summ;
String keystr;
int shet=0;
// установочный цикл
void setup(){
Serial.begin(9600);
myservo.attach(13);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
// тест индикации и сигнализации
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
// звуковой сигнал , где tone(номер вывода, частота тона, длительность)
tone(10, 800, 200);
// задержка
delay(200);
// отключение звукового сигнала
noTone(10);
tone(10, 500, 200);
delay(200);
noTone(10);
tone(10, 600, 200);
delay(200);
noTone(10);
tone(10, 700, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
}
// основной цикл
void loop(){
if (val==0){
char key = keypad.getKey();
if (key){
Serial.println(key);
digitalWrite(11, HIGH);
tone(10, 1440, 200);
delay(200);
noTone(10);
digitalWrite(11, LOW);
shet=shet+1;
// считаем неверные вводы кода
if (shet==6){
summ="";
keystr="";
shet=0;
alarm = alarm +1;
Serial.println("LONG");
digitalWrite(12, HIGH);
tone(10, 600, 200);
delay(200);
noTone(10);
digitalWrite(12, LOW);
};
summ=summ+key;
Serial.println(summ);
keystr=String(key);
// сброс при ошибочном вводе кода
if (keystr=="#"){
summ="";
keystr="";
shet=0;
Serial.println("RESET");
digitalWrite(12, HIGH);
tone(10, 600, 200);
delay(200);
noTone(10);
digitalWrite(12, LOW);
};
// ввод, необязательно
if (keystr=="*"){
summ="";
keystr="";
shet=0;
Serial.println("ENTER");
digitalWrite(12, HIGH);
tone(10, 600, 200);
delay(200);
noTone(10);
digitalWrite(12, LOW);
};
// проверяем на соответствие верному коду
if (summ=="2548"){
Serial.println("PASS OK");
val=1;
summ="";
keystr="";
shet=0;
tone(10, 1200, 200);
delay(500);
noTone(10);
tone(10, 1200, 200);
delay(500);
noTone(10);
tone(10, 1200, 200);
delay(500);
noTone(10);
};
}
// включаем сирену при 5 неверных наборов кода
if (alarm>=5) {
for(alar = 0; alar <= 10; alar += 1)
{ tone(10, 500, 200);
delay(200);
noTone(10);
tone(10, 800, 200);
delay(200);
noTone(10);
} ;
alarm = 0;
alar = 0;
};
} else {
// открываем замок на 5 сек и закрываем
tone(10, 1500, 200);
delay(500);
noTone(10);
for(pos = 0; pos <= 90; pos += 1)
{ myservo.write(pos);
delay(10);
}
delay(5000);
tone(10, 1500, 200);
delay(500);
noTone(10);
for(pos = 90; pos>=0; pos-=1)
{myservo.write(pos);
delay(10);
}
delay(5000);
tone(10, 1500, 200);
delay(500);
noTone(10);
val=0;
};
}
Вернуться в Устройства на Ардуино
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1