Текущее время: 25 май 2019, 12:15

Город ХОББИ

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

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

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

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

Сообщение -=dp=- » 25 сен 2014, 16:00

Кодовый замок на Ардуино УНО.

Для изготовления кодового замка нам потребуется:

корпус - 1 шт
клавиатура - 1 шт
контроллер Ардуино УНО - 1 шт
Блок реле для контроллера Ардуино - 1 шт
Исполняющее устройство - электромагнит или электрозащелка - 1 шт.


Вложения
1.jpg
Электронный кодовый замок
2.jpg
Кодовый замок на Arduino
3.jpg
Кодовый замок на Ардуино

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

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

Сообщение -=dp=- » 26 сен 2014, 13:01

Далее нам понадобиться кусок макетной платы для создания собственного шилда (модуля для Ардуино)

В макетную плату необходимо впаять штырьки для соединения с Ардуино, весь ряд цифровых выводов и нижнюю часть с выводами питания и общим .
Клавиатура у нас матричная, 4х4, очень удобно и экономично :D по отношению в цифровым выводам.
В Ардуино их всего 13.
Клавиатуру распаиваем тоже на штырьки, к цифровым выводам :
строки - 2,3,4,5
столбцы - 6,7,8,9.

К выводу 10 припаиваем резистор 100 ом и динамик - бипер от ПК второй вывод динамика на общий.
К выводам 11,12,13 припаиваем резисторы по 560 Ом, и провода к светодиодам, второй вывод на светодиодах припаиваем к общему.

Вывод 11 - синий светодиод - индицирует нажатие лубой клавиши.
Вывод 12 - Зеленый светодиод - индицирует правильный ввод кода и открытие кодового замка.
Вывод 13- красный светодиод, индицирует неправильный ввод кода, сброс, ошибку ввода.


Вложения
1.jpg
Кодовый замок на Arduino
2.jpg
Ардуино кодовый замок
3.jpg
Кодовый замок Ардуино

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

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

Сообщение -=dp=- » 26 сен 2014, 13:10

Затем подключаем наш собственный модуль к Ардуино, загружаем в Ардуино наш скетч и тестируем все функции.

Пароль я прописал в скетче, причем длина пароля 5 символов , цифры + буквы, попробуй подбери :D

Данный кодовый замок не обязательно использовать на входных дверях, его можно установить к примеру на шкаф, тумбочку, сейф, дверь в подсобку, туалет :D

Жду ваших замечаний , вопросов, предложений и т.д.


Вложения
4.jpg
Кодовый замок для шкафа
5.jpg
Ардуино клуб Калининград
6.jpg
Ардуино Калининград

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

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

Сообщение -=dp=- » 26 сен 2014, 13:12

Все вопросы по кодовому замку на Ардуино пишем в данную тему.
Библиотеки и скетч выложу по требованию.


Вложения
7.jpg
Кодовый замок для сейфа

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

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

Сообщение -=dp=- » 26 сен 2014, 13:57

Тут я выложил видео обзор кодового замка http://youtu.be/Ya23w7Yqu-g



 
Сообщений: 2
Зарегистрирован: 10 дек 2014, 21:16

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

Сообщение Fox » 10 дек 2014, 21:25

классный проект ;) у меня возник вопрос можно ли сделать смену пароля с клавиатуры так как в моем случае будет не возможно постоянно прошивать :( хотелось бы как то использовать энергонезависимую память :?: я не очень селен в программирование а сделать такое устройство на мастерскую хотелось бы.



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

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

Сообщение -=dp=- » 11 дек 2014, 17:03

Fox писал(а):классный проект ;) у меня возник вопрос можно ли сделать смену пароля с клавиатуры так как в моем случае будет не возможно постоянно прошивать :( хотелось бы как то использовать энергонезависимую память :?: я не очень селен в программирование а сделать такое устройство на мастерскую хотелось бы.



Это легко можно реализовать подключив модуль SD карты http://newmar.ru/index.php?id_product=8 ... er=product. Пароли будут хранится в энергонезависимой памяти, и соответственно при вводе определенной команды их можно будет поменять, удалить или добавить.



 
Сообщений: 2
Зарегистрирован: 10 дек 2014, 21:16

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

Сообщение Fox » 12 дек 2014, 06:38

да возможно но я не селен в программировании и мне нужно пароль писать в памяти EERPOM он весит не много и менять каждый раз мне его не надо. и еще вопрос как мне сделать при в воде 5 не правильных паролев включалась сигнализация



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

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

Сообщение -=dp=- » 12 дек 2014, 08:56

Fox писал(а):да возможно но я не селен в программировании и мне нужно пароль писать в памяти EERPOM он весит не много и менять каждый раз мне его не надо. и еще вопрос как мне сделать при в воде 5 не правильных паролев включалась сигнализация


Запись пароля в EEPROM и счетчик неправильных вводов паролей легко можно сделать так:

#include <EEPROM2.h>
//подключаем заголовочный файл библиотеки EEPROM2

void setup()
{
unsigned long counter; //Здесь будем хранить счетчик
//unsigned long - тип данных, занимающий 4 байта,
//и хранящий значение от 0 до 4'294'967'295

//следующие 2 строчки нужны только при первом запуске,
//чтобы обнулить значение счетчика:
counter = 0;
EEPROM_write(0, counter);

//Инициализируем последовательный порт на 9600бит/сек:
Serial.begin(9600);

//Читаем счетчик из EEPROM:
EEPROM_read(0, counter);

counter++; // увеличиваем его на единицу

//Записываем значение счетчика
EEPROM_write(0, counter);

//Выводим счетчик в порт:
Serial.print("It's reset #");
Serial.println(counter, DEC);
}

void loop()
{
}

Библиотека для работы с EEPROM во вложении


Вложения
EEPROM2.zip
Библиотека для работы с EEPROM
(3.17 KiB) Скачиваний: 493

 
Сообщений: 2
Зарегистрирован: 31 июл 2015, 13:58

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

Сообщение Arrelov » 31 июл 2015, 14:23

Интересный проект, реквестирую скетч!
И ещё если нет пищалки с ПК, можно ли силами самого блока Arduino генерировать тональный сигнал (желательно различный для правильного кода и не правильного, который затем отправлять через усилитель на транзисторе на динамик?



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

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

Сообщение -=dp=- » 31 июл 2015, 15:08

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



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

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

Сообщение -=dp=- » 01 окт 2015, 22:18

Выкладываю скетч для кодового замка на Ардуино

Код: выделить все
#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---------------------

  }
}




и библиотеку для матричной клавиатуры 4х4


Вложения
Keypad.rar
библиотека для матричной клавиатуры 4х4
(15.98 KiB) Скачиваний: 670

 
Сообщений: 1
Зарегистрирован: 07 апр 2016, 12:11

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

Сообщение zdesi » 07 апр 2016, 12:49

Здравствуйте. Димон у вас есть готовый скеч с еепром, чтоб можно было менять пароль без прошивки контролера?



 
Сообщений: 2
Зарегистрирован: 31 июл 2015, 13:58

Кодовый замок на Ардуино с памятью

Сообщение Arrelov » 24 апр 2016, 22:01

zdesi писал(а):Здравствуйте. Димон у вас есть готовый скеч с еепром, чтоб можно было менять пароль без прошивки контролера?


Так получилось, что такой скетч есть у меня.
За основу взят скетч Димона, большое ему спасибо!

Собрано на китайском клоне платы NANO.

Мини-инструкция:
Пароль может состоять только из четырех символов.
Пароль НЕ может содержать знаков * и #.
Пароль НЕ может быть ABCD.

Если три раза набрать ложный пароль, звучит протяжный звуковой сигнал и замок не реагирует на нажатия (5 секунд в данной прошивке).
Чтобы прописать первоначальный пароль, нужно убрать знаки комментирования "//" после текста "чтобы задать пароль". Отключение питания НЕ сбрасывает пароль.
Для смены кода нужно набрать ABCD + предыдущий пароль. Допускается две ошибки, потом замок переходит в обычный режим.
Звуки желательно привести в более приличное состояние.


Код: выделить все
#include <EEPROM.h>
#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 4; //four 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 pass; //код по умолчанию
String summ; //введенный код
//String summnew; //введенный код для нового пароля
//String keystr; //строка для распознавания * и #
//String keystrnew; //строка для распознавания * и # при смене кода
int wrong=0; //считаем количество ошибочых вводов кода (для блокировки)
int shet=0; //считаем количество набранных символов
int shetch=0; //считем количество набранных символов для смены пароля
int change=0; //флаг проверки кода для смены пароля
int dochange=0; //флаг производится смена пароля

void setup()
{
   Serial.begin(9600);
   pinMode(11, OUTPUT);
   pinMode(12, OUTPUT);
   pinMode(13, OUTPUT);

//записываем исходный пароль в энергонезависимую память
//необходимо только при первоначальной прошивке чтобы задать пароль
//EEPROM.write(1, '1');
//EEPROM.write(2, '4');
//EEPROM.write(3, '8');
//EEPROM.write(4, '8');

   //присваиваем паролю значения из энергонезависимой памяти
   pass = "";
   pass = pass+char(EEPROM.read(1));
   pass = pass+char(EEPROM.read(2));
   pass = pass+char(EEPROM.read(3));
   pass = pass+char(EEPROM.read(4));
   
   //эти строки нужны только для отладки
   Serial.println(char(EEPROM.read(1))); //проговариваем первый знак пароля в порт
   Serial.println(char(EEPROM.read(2))); //проговариваем второй знак пароля в порт
   Serial.println(char(EEPROM.read(3))); //проговариваем третй знак пароля в порт
   Serial.println(char(EEPROM.read(4))); //проговариваем четвертый знак пароля в порт
     Serial.print("Pass "); Serial.println(pass); //проговариваем пароль в порт
 
  digitalWrite(11, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(13, HIGH);
 //---------start tone openlock------------
  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);
   //-------stop tone openlock------------
  digitalWrite(11, LOW);
  digitalWrite(12, LOW);
  digitalWrite(13, LOW);
}
 
void loop()
{
   char key = keypad.getKey();
   if  (key)
 {
   Serial.println(key);
    //---------start tone key------------
     digitalWrite(11, HIGH);
     tone(10, 1440, 100);
     delay(100);
     tone(10, 2000, 200);
     delay(200);
     noTone(10);
     digitalWrite(11, LOW);
    //-------stop tone key------------
     shet=shet+1; //увеличиваем на единицу счет количества символов
      summ=summ+key;
      Serial.print("Pass "); Serial.println(summ);
 
     switch (dochange) //ветвление на ввод нового пароля (case 1) и остальной код (case 0)
  {
   
    case 0: //блок для обычной работы - проверка правильности ввода пароля
   
      if (key=='#')
  {
    summ="";
    shet=0;
    Serial.println("# for RESET");
    //---------start tone reset------------
    digitalWrite(12, HIGH);
    tone(10, 600, 200);
    delay(200);
    noTone(10);
    digitalWrite(12, LOW);
    //-------stop tone reset------------
  };

    if (key=='*')
  {
    summ="";
    shet=0;
    Serial.println("* for ENTER");
    //---------start tone enter------------
    digitalWrite(12, HIGH);
    tone(10, 600, 200);
    delay(200);
    noTone(10);
    digitalWrite(12, LOW);
    //-------stop tone enter------------
  };

    if (summ==pass  && change==0) //если правильный код и не было запроса на смену кода
  {
    Serial.println("PASS OK");
    summ="";
    shet=0;
    wrong=0;
    //---------start tone open------------
   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 open------------
  };

    if (summ=="ABCD") //комбинация для смены кода
  {
    Serial.println("Change pass go test");
    summ="";
    shet=0;
    wrong=0;
    change=1;
    //---------start tone change------------
   digitalWrite(12, HIGH);
   tone(10, 400, 200);
    delay(200);
    noTone(10);
    tone(10, 1500, 200);
    delay(200);
    noTone(10);
      tone(10, 400, 200);
    delay(200);
    noTone(10);
        tone(10, 1500, 200);
        digitalWrite(12, LOW);
    delay(200);
    noTone(10);
        tone(10, 400, 200);
    delay(200);
    noTone(10);
      tone(10, 1500, 200);
    delay(200);
    noTone(10);
      tone(10, 400, 200);
    delay(200);
    noTone(10);
        tone(10, 1500, 200);
        digitalWrite(12, HIGH);
    delay(200);
    noTone(10);
        tone(10, 400, 200);
    delay(200);
    noTone(10);
      tone(10, 1500, 200);
    delay(200);
    noTone(10);
      tone(10, 400, 200);
    delay(200);
    noTone(10);
        tone(10, 1500, 200);
    delay(200);
    noTone(10);
        tone(10, 400, 200);
    delay(200);
    noTone(10);
    digitalWrite(12, LOW);
    //-------stop tone change------------
  };

    if (summ==pass  && change==1) //если правильный код и был запрос на смену кода
  {
    Serial.println("Pass ok go change pass");
    summ="";
    shet=0;
    wrong=0;
    dochange=1;
    key = keypad.getKey();
    //---------start tone change------------
    digitalWrite(12, HIGH);
      tone(10, 400, 200);
  delay(200);
  noTone(10);
      tone(10, 1500, 200);
    delay(200);
    noTone(10);
     tone(10, 400, 200);
    delay(200);
    noTone(10);
      tone(10, 1500, 200);
      digitalWrite(12, LOW);
    delay(200);
    noTone(10);
      tone(10, 400, 200);
    delay(200);
    noTone(10);
      tone(10, 1500, 200);
    delay(200);
    noTone(10);
     tone(10, 400, 200);
    delay(200);
    noTone(10);
      tone(10, 1500, 200);
      digitalWrite(12, HIGH);
    delay(200);
    noTone(10);
      tone(10, 400, 200);
    delay(200);
    noTone(10);
      tone(10, 1500, 200);
    delay(200);
    noTone(10);
      tone(10, 400, 200);
    delay(200);
    noTone(10);
      tone(10, 1500, 200);
    delay(200);
    noTone(10);
      tone(10, 400, 200);
    delay(200);
    noTone(10);
    digitalWrite(12, LOW);
    //-------stop tone change------------
  };

    if (wrong==0 && shet==4  && change==1) //для смены пароля - если введено полное количество знаков кода и он ошибочный формируем звуковой сигнал
  {
    summ="";
    shet=0;
    wrong=wrong+1;
    Serial.println("Wrong_Pass");
    //---------start tone error------------
    digitalWrite(12, HIGH);
    tone(10, 600, 200);
    delay(200);
    noTone(10);
    digitalWrite(12, LOW);
    //-------stop tone error------------ 
  };


    if (wrong==1 && shet==4  && change==1) //для смены пароля - если два раза ошибочный код формируем два звуковых сигнала
  {
    summ="";
    shet=0;
    wrong=wrong+1;
    Serial.println("Attention!_2xWrong_Pass for change pas");
    //---------start tone error------------
    digitalWrite(12, HIGH);
    tone(10, 600, 200);
    delay(200);
    noTone(10);
    digitalWrite(12, LOW);
    //-------stop tone error------------ 
    //---------start tone error------------
    digitalWrite(12, HIGH);
    tone(10, 600, 200);
    delay(200);
    noTone(10);
    digitalWrite(12, LOW);
    //-------stop tone error------------ 
  };
 
   if (wrong==2 && shet==4  && change==1) //для смены пароля - если три раза ошибочный код выходим из режима смены пароля
  {
    summ="";
    shet=0;
    wrong=0;
    change=0;
    Serial.println("Attention!_3xWrong_Pass for change pas - cancel change pass");
    //---------start tone error------------
    digitalWrite(12, HIGH);
    tone(10, 600, 200);
    delay(200);
    noTone(10);
    digitalWrite(12, LOW);
    //-------stop tone error------------ 
    //---------start tone error------------
    digitalWrite(12, HIGH);
    tone(10, 600, 200);
    delay(200);
    noTone(10);
    digitalWrite(12, LOW);
    //-------stop tone error------------ 
    //---------start tone error------------
    digitalWrite(12, HIGH);
    tone(10, 600, 200);
    delay(200);
    noTone(10);
    digitalWrite(12, LOW);
    //-------stop tone error------------ 
  };

 
    if (shet==4  && change==0) //если введено полное количество знаков кода и он ошибочный формируем звуковой сигнал
  {
    summ="";
    shet=0;
    wrong=wrong+1;
    Serial.println("Wrong_Pass");
    //---------start tone error------------
    digitalWrite(12, HIGH);
    tone(10, 600, 200);
    delay(200);
    noTone(10);
    digitalWrite(12, LOW);
    //-------stop tone error------------ 
  };

    if (wrong==2  &&  shet==0  && change==0) //если два раза ошибочный код формируем два звуковых сигнала
  {
    Serial.println("Attention!_2xWrong_Pass");
    delay(50);
    //---------start tone attention------------
    digitalWrite(12, HIGH);
    tone(10, 600, 200);
    delay(200);
    noTone(10);
    digitalWrite(12, LOW);
    //-------stop tone attention------------
  };

    if (wrong==3  &&  shet==0  && change==0) //если три раза ошибочный код формируем три звуковых сигнала
  {
    Serial.println("Attention!_3xWrong_Pass");
    delay(50);
    //---------start tone attention------------
    digitalWrite(12, HIGH);
    tone(10, 600, 200);
    delay(200);
    noTone(10);
    digitalWrite(12, LOW);
    delay(50);
    digitalWrite(12, HIGH);
    tone(10, 600, 200);
    delay(200);
    noTone(10);
    digitalWrite(12, LOW);
    //-------stop tone attention------------
  };
 
    if (wrong==4  && change==0) //если четыре реза ошибочный код блокируем замок на 5 секунд
   {
    summ="";
    shet=0;
    wrong=0;
    Serial.println("Block!_4xWrong_Pass");
    //---------start tone block------------
    digitalWrite(12, HIGH);
    tone(10, 600, 5000);
    delay(5000);
    noTone(10);
    digitalWrite(12, LOW);
    //-------stop tone block------------ 
   };

  break;
 
    case 1: //ВТОРАЯ ЧАСТЬ блок для смены пароля
            //начало блока для смены пароля и его записи в энергонезависимую память
    if  (key=='#') //если введен символ # сбрасываем код
  {
    shetch=0;
    summ="";
    Serial.println("# is not an option, reset");
    //---------start tone reset------------
    digitalWrite(12, HIGH);
    tone(10, 600, 200);
    delay(200);
    noTone(10);
    digitalWrite(12, LOW);
    //-------stop tone reset------------
  }

   else if (key=='*')  //если введен символ * сбрасываем код
  {
    shetch=0;
    summ="";
    Serial.println("* is not an option, reset");
    //---------start tone enter------------
    digitalWrite(12, HIGH);
    tone(10, 600, 200);
    delay(200);
    noTone(10);
    digitalWrite(12, LOW);
    //-------stop tone enter------------
  }
 
  else if  (shetch==0 && (key))
 {
      //начинаем менять пароль 1й символ
      Serial.print("NewPass_symbol_one "); Serial.println(key);

       //---------start tone newpasskey------------
      digitalWrite(11, HIGH);
      tone(10, 300, 100);
     delay(100);
     tone(10, 600, 200);
     delay(200);
      noTone(10);
      digitalWrite(11, LOW);
      //-------stop tone newpasskey------------
      shetch=1; //увеличиваем на единицу счет количества символов нового пароля
      EEPROM.write(1, key);

      Serial.println(char(EEPROM.read(1))); //проговариваем второй знак пароля в порт
 }
 
    else if (shetch==1 && (key)) //начинаем менять пароль 2й символ
 { 
    Serial.print("NewPass_symbol_two "); Serial.println(key);
    EEPROM.write(2, key);
     //---------start tone newpasskey------------
     digitalWrite(11, HIGH);
    tone(10, 300, 100);
    delay(100);
    tone(10, 600, 200);
    delay(200);
    noTone(10);
    digitalWrite(11, LOW);
    //-------stop tone newpasskey------------
    shetch=2; //увеличиваем на единицу счет количества символов нового пароля

    Serial.println(char(EEPROM.read(2))); //проговариваем первый знак пароля в порт
 }
 
    else if (shetch==2 && (key)) //начинаем менять пароль 3й символ
 { 
    Serial.print("NewPass_symbol_three "); Serial.println(key);
    EEPROM.write(3, key);
    //---------start tone newpasskey------------
    digitalWrite(11, HIGH);
    tone(10, 300, 100);
    delay(100);
    tone(10, 600, 200);
    delay(200);
    noTone(10);
    digitalWrite(11, LOW);
    //-------stop tone newpasskey------------
    shetch=3; //увеличиваем на единицу счет количества символов нового пароля

    Serial.println(char(EEPROM.read(3))); //проговариваем третий знак пароля в порт
 }
 
    else if (shetch==3 && (key)) //начинаем менять пароль 4й символ
{
    Serial.print("NewPass_symbol_four "); Serial.println(key);
    EEPROM.write(4, key);
    //---------start tone newpasskey------------
    digitalWrite(11, HIGH);
    tone(10, 300, 100);
    delay(100);
    tone(10, 600, 200);
    delay(200);
    noTone(10);
    digitalWrite(11, LOW);
    //-------stop tone newpasskey------------

    Serial.println(char(EEPROM.read(4))); //проговариваем четвертый знак пароля в порт

   String passnew = ""; //вводим переменную, содержащую новый введенный код
   passnew = passnew+char(EEPROM.read(1));
   passnew = passnew+char(EEPROM.read(2));
   passnew = passnew+char(EEPROM.read(3));
   passnew = passnew+char(EEPROM.read(4));

   if (passnew==pass) //если новый код равен старому
 {
    shetch=0; //запрашиваем другой новый код
    summ="";
    Serial.println("NewPass equal old pass, Reset");
    //---------start tone enter------------
    digitalWrite(12, HIGH);
    tone(10, 600, 200);
    delay(200);
    noTone(10);
    digitalWrite(12, LOW);
    //-------stop tone enter------------
 }
   else if (passnew=="ABCD") //если новый код равен комбинации для смены пароля
 {
    shetch=0; //запрашиваем другой новый код
    summ="";
    Serial.println("NewPass equal ABCD, Reset");
    //---------start tone enter------------
    digitalWrite(12, HIGH);
    tone(10, 600, 200);
    delay(200);
    noTone(10);
    digitalWrite(12, LOW);
    //-------stop tone enter------------
 }

  else {

   //присваиваем паролю значения из энергонезависимой памяти
   pass = "";
   pass = pass+char(EEPROM.read(1));
   pass = pass+char(EEPROM.read(2));
   pass = pass+char(EEPROM.read(3));
   pass = pass+char(EEPROM.read(4));
   
   //вывод в порт пароль для отладки
   Serial.println("Pass read test: ");
   Serial.println(char(EEPROM.read(1))); //проговариваем первый знак пароля в порт
   Serial.println(char(EEPROM.read(2))); //проговариваем второй знак пароля в порт
   Serial.println(char(EEPROM.read(3))); //проговариваем третй знак пароля в порт
   Serial.println(char(EEPROM.read(4))); //проговариваем четвертый знак пароля в порт
   Serial.print("Pass "); Serial.println(pass); //проговариваем пароль в порт
   
   //далее выходим из цикла "case 1"
   dochange=0;
   change=0;
   shet=0;
   shetch=0;
   summ="";
   
    //---------start tone change------------
    digitalWrite(12, HIGH);
    tone(10, 400, 200);
    delay(200);
    noTone(10);
    tone(10, 1500, 200);
    delay(200);
    noTone(10);
      tone(10, 400, 200);
    delay(200);
    noTone(10);
        tone(10, 1500, 200);
        digitalWrite(12, LOW);
    delay(200);
    noTone(10);
        tone(10, 400, 200);
    delay(200);
    noTone(10);
      tone(10, 1500, 200);
    delay(200);
    noTone(10);
      tone(10, 400, 200);
    delay(200);
    noTone(10);
        tone(10, 1500, 200);
        digitalWrite(12, HIGH);
    delay(200);
    noTone(10);
        tone(10, 400, 200);
    delay(200);
    noTone(10);
      tone(10, 1500, 200);
    delay(200);
    noTone(10);
      tone(10, 400, 200);
    delay(200);
    noTone(10);
        tone(10, 1500, 200);
    delay(200);
    noTone(10);
        tone(10, 400, 200);
    delay(200);
    noTone(10);
    digitalWrite(12, LOW);
    //-------stop tone change------------
    break;
  }
};
    //конец блока для смены пароля и его записи в энергонезависимую память
 } 
}
}


Вложения
IMG_20160424_234703.jpg
Макет

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

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

Сообщение -=dp=- » 12 май 2016, 21:54

Вот , проектик кодового замка ожил :D
Хорошо получилось, молодца!
Для управления электромагнитом рекомендую использовать модуль реле, транзисторные ключи горят от обратного всплеска индуктивности, даже защитный диод не помогал :(



След.

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

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

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