Текущее время: 25 сен 2018, 20:59

Город ХОББИ

Занятие любимым хобби - это путь к счастливой жизни!

Кодовый замок на Ардуино

Тут собраны различные проекты на Ардуино
Аватар пользователя
 
Сообщений: 686
Зарегистрирован: 27 мар 2013, 23:12

Re: Кодовый замок на Ардуино

Сообщение -=dp=- » 02 мар 2018, 00:59

Выкладываю новую версию скетча кодового замка.
Добавлено управление серводвигателем для открывания замка и защита от подбора кода, 5 неверных попыток и включается сирена.

Код: выделить все

#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
Библиотека управления серводвигателем
(27.03 KiB) Скачиваний: 55

Аватар пользователя
 
Сообщений: 686
Зарегистрирован: 27 мар 2013, 23:12

Re: Кодовый замок на Ардуино

Сообщение -=dp=- » 07 мар 2018, 16:37

Код: выделить все


#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
Зарегистрирован: 12 июл 2018, 13:39

Re: Кодовый замок на Ардуино

Сообщение Saming SZ » 12 июл 2018, 13:41

Очень бы хотелось прикрутить к этому проекту дисплей хотя бы 16/2 было бы просто отлично, дабы выдеть что твориться и делаешь ли все верно :D



Пред.

Вернуться в Проекты на Ардуино

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0