Кодовый замок на Ардуино УНО.
Для изготовления кодового замка нам потребуется:
корпус - 1 шт
клавиатура - 1 шт
контроллер Ардуино УНО - 1 шт
Блок реле для контроллера Ардуино - 1 шт
Исполняющее устройство - электромагнит или электрозащелка - 1 шт.
					 
					
				 
					
				 по отношению в цифровым выводам.
  по отношению в цифровым выводам. 
					
				 
  
  
					
				 
					
				 
					
				Fox писал(а):классный проекту меня возник вопрос можно ли сделать смену пароля с клавиатуры так как в моем случае будет не возможно постоянно прошивать
хотелось бы как то использовать энергонезависимую память
я не очень селен в программирование а сделать такое устройство на мастерскую хотелось бы.
 
					
				Fox писал(а):да возможно но я не селен в программировании и мне нужно пароль писать в памяти EERPOM он весит не много и менять каждый раз мне его не надо. и еще вопрос как мне сделать при в воде 5 не правильных паролев включалась сигнализация
 EEPROM2.zip
 EEPROM2.zip 
					
				 
					
				#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---------------------
  }
}
 Keypad.rar
 Keypad.rar 
					
				 
 
 
					
				
#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;  
};
}
 Servo.rar
 Servo.rar 
					
				
#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;  
};
}
Вернуться в Робототехника на Ардуино
Сейчас этот форум просматривают: ClaudeBot и гости: 0