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

Скетч кодового замка на Ардуино

Код: выделить все // Урок 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 = {
{‘1′,’2′,’3′,’A’},
{‘4′,’5′,’6′,’B’},
{‘7′,’8′,’9′,’C’},
{‘*’,’0′,’#’,’D’}
};
byte rowPins = {9,8,7,6}; // строки клавиатуры
byte colPins = {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> Электромагнит 5В. 15кг для Arduino

Комплектация

  • 1x Электромагнит LS-P30/22;
  • 1x Винт М4;

Здравствуйте. Сегодня на очереди RFID-модуль.

Этот модуль служит для чтения и записи данных, хранящихся в RFID – метках. Подробно об этой технологии можно почитать, например, в википедии. Мы здесь занимаемся практикой – поэтому приступим.

Я располагаю модулем RFID-RC522. Он поставляется в комплекте с двумя ключами разного исполнения – картой и брелоком. Разницы, непосредственно, в работе нет никакой. Для работы модуля есть библиотека, её можно скачать по ссылке в в конце статьи.

Когда я готовил этот проект, я изучил несколько статей об RFID модуле, на основе представленных там данных (главным образом http://robocraft.ru/blog/3004.html) написал скетч.

Пока ключ не приближен к сенсору – контакты реле будут разомкнуты. Когда мы подносим к приемнику нужный ключ – включается контактная группа реле, и остается включенной, пока не убран ключ. Мой приемник слышит метки через фанеру – это позволяет сделать секретный выключатель.

Если скрытно смонтировать считыватель (например под столешницей), легко можно заблокировать включение компьютера или освещения.

Процесс сборки состоит из следующих этапов:

  1. Собрать прибор по предложенной схеме.
  2. Записать в процессорную плату скетч (ссылка в конце статьи).
  3. Подключить сборку к компьютеру и включить монитор последовательного порта.
  4. Поднести к считывателю ключ.
  5. Отредактировать 20 строку скетча с учетом кода ключа, который пришел в монитор последовательного порта.
  6. Записать отредактированный скетч в плату.
  7. Всё – у нас есть готовая одноранговая система контроля доступа.

Ссылка для скачивания скетча и библиотеки:/RFID_secret_lock.rar

Поделиться ссылкой:

ЭЛЕКТРОННЫЙ ЗАМОК СВОИМИ РУКАМИ

Данный проект является модульным, т.е. можно подключать/отключать разные элементы и получить разную функциональность. На картинках выше показан вариант с полной функциональность, а именно:

  • Запирающий механизм. Служит для ОТКРЫТИЯ и ЗАКРЫТИЯ двери. В этом проекте рассмотрено использование трёх разных механизмов:
    • Сервопривод. Бывают большие, бывают маленькие. Очень компактный, и вкупе с тяжёлым засовом – отличный вариант
    • Электропривод замка дверей автомобиля. Большая и мощная штука, но жрёт просто безумные токи
    • Соленоидная щеколда. Хороший вариант, так как сама захлопывается

    В настройках прошивки можно выбрать любой из трёх типов (настройка lock_type)

  • Кнопка внутри. Служит для ОТКРЫТИЯ и ЗАКРЫТИЯ двери изнутри. Может быть размещена на ручке двери (со стороны ладони или со стороны пальцев), на самой двери, либо на косяке
  • Кнопка снаружи. Служит для ЗАКРЫТИЯ двери, а также для ПРОБУЖДЕНИЯ из энергосбережения. Может быть размещена на ручке двери (со стороны ладони или со стороны пальцев), на самой двери, либо на косяке
  • Концевик на закрытие двери. Служит для автоматического закрытия замка при закрывании двери. Им может быть:
    • Тактовая кнопка
    • Датчик холла + магнит на самой двери
    • Геркон + магнит на самой двери
  • Секретная кнопка сброса доступа. Служит для сброса пароля/ввода нового пароля/запоминания нового ключа/комбинации и т.д. Может быть спрятана где-то в корпусе
  • Светодиод для индикации работы. Светодиод RGB, используются красный и зелёный цвета (при смешении дают жёлтый):
    • Горит зелёный — замок ОТКРЫТ. Горит чтобы не забыть закрыть дверь
    • Горит жёлтый — система проснулась и ожидает ввод пароля
    • Мигает красный — сел аккумулятор

Любой из этих элементов можно исключить из системы:

  • Убираем концевик. В прошивке в настройках тоже его отключаем (настройка tail_button). Теперь чтобы закрыть замок, нужно нажимать кнопку
  • Убираем наружную кнопку. В прошивке в настройках тоже её отключаем (настройка wake_button). Теперь систему не нужно будить, она просыпается сама (потребление энергии чуть больше). А также у нас теперь нет кнопки закрыть на передней части двери, и нужен концевик. Либо замок – щеколда
  • Убираем внутреннюю кнопку. Этот вариант годится для шкафов и сейфов. В настройках ничего менять не нужно
  • Убираем светодиод. В настройках ничего менять не нужно
  • Кнопку сброса доступа можно отпаять после первого использования, либо переписать код под себя