Страница 1 из 1

Урок 11. Кодовый замок на Ардуино с защитой от подбора кода

СообщениеДобавлено: 09 мар 2018, 20:38
-=dp=-
Урок 11. Кодовый замок на Ардуино с защитой от подбора кода

Для данного практического занятия нам понадобятся:
1 - плата контроллера Ардуино УНО
2 - матричная клавиатура
3 - бузер
4 - серводвигатель
5 - светодиоды 2 шт
6 - резисторы 560 ом 2 шт
7 - макетная плата
8 - монтажные провода
9 - кабель microUSB > USB

Подключаем все комплектующие по схеме на рисунке ниже:

Arduino UNO keylock.jpg
Кодовый замок на Ардуино с защитой от подбора кода

Re: Урок 11. Кодовый замок на Ардуино с защитой от подбора к

СообщениеДобавлено: 09 мар 2018, 20:45
-=dp=-
Скачиваем со страниц предыдущих уроков архивы с библиотеками для клавиатуры и серводвигателя:
Keypad.rar
Servo.rar

И устанавливаем их, если ранее вы их не устанавливали :ugeek:

Re: Урок 11. Кодовый замок на Ардуино с защитой от подбора к

СообщениеДобавлено: 09 мар 2018, 20:55
-=dp=-
Скетч кодового замка на Ардуино

Код: выделить все
// Урок 11. Кодовый замок на Ардуино с защитой от подбора кода

#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; 
};
}








После загрузки скетча кодовый замок готов к работе.
:!: Набираем установленный код 2548, серводвигатель должен повернутся на 90 градусов на 5 секунд и вернуться в исходное положение.
:!: Если это произошло, поздравляю, Вы собрали все правильно :!: , а если нет, проверяем работоспособность каждого компонента по отдельности.
:!: Для упрощения отладки программы необходимо пользоваться встроенным инструментом в Ардуино IDE, монитором порта.
Если запустить монитор порта при подключенной к ПК плате Ардуино со скетчем кодового замка, то при нажатии клавиш клавиатуры в мониторе порта будут появляться цифры нажатой клавиши.
Так же будет выводится суммарный код и другой текст для отладки.
:!: Например при вводе правильного пароля 2548 в мониторе порта должна появится надпись PASS OK

Re: Урок 11. Кодовый замок на Ардуино с защитой от подбора к

СообщениеДобавлено: 22 мар 2018, 11:26
-=dp=-
Smart Home 1.jpg
Кодовый замок на Ардуино с защитой от подбора кода