Показать меню

Необычный кодовый замок на Arduino

23.10.2018
122

Схема кодового замка на ардуино. Принцип работы необычного замка, а также код, с помощью которого он будет работать.


Arduino является лучшей системой для копирования какого-либо оборудования. Большинство идей не смогли бы воплотиться без нее. Давно существует такая мысль: создать специальный кодовый замок на ардуино. Для его открытия необходимо зажатие определенной клавиши. При этом замок не должен открываться, даже если знать нужную кнопку. Чтобы его отрыть необходимо выдержать определенные интервалы, используя мышечную память. Такое преступник не сможет совершить. Но это все лишь теория.

Чтобы его собрать нужно воспользоваться специальным прибором прямоугольных импульсов, а также несколько счетчиков и ворох. Но готовое устройство имело бы большие габаритные размеры и его неудобно было бы использовать. Как правило, такие мысли не дают покоя. Первым этапом при воплощении мечты стало создание программы под Arduino. Именно она будет служить в качестве кодового замка. Для того чтобы открыть его понадобится нажать не одну клавишу, а несколько, причем делать это одновременно. Готовая схема выглядит таким образом:



Качество картинки не лучшее, но подключение выполняется к земле, D3, D5, D7, D9 и D11.

Код представлен ниже:


const int ina = 3; const int inb = 5; const int inc = 9; const int ledPin = 13; int i = 1000; byte a = 0; byte b = 0; byte c = 0; byte d = 0; unsigned long time = 0;              //не забывайте всё, что принимает значение millis() unsigned long temp = 0;              //хранить в unsigned long byte keya[] = {  0, 0, 0, 0, 0, 0, 0, 0};   //коды собственно byte keyb[] = {  1, 1, 1, 1, 0, 1, 0, 0}; byte keyc[] = {  1, 0, 1, 0, 1, 1, 1, 0}; byte k = 0;   void setup() { pinMode(ina, INPUT_PULLUP);   //3 входа, подключаемые к кнопкам pinMode(inb, INPUT_PULLUP); pinMode(inc, INPUT_PULLUP); pinMode(ledPin, OUTPUT);      //встроенный светодиод на 13-ом пине pinMode(7, OUTPUT); pinMode(11, OUTPUT); digitalWrite(7, LOW);           //заменяют землю digitalWrite(11, LOW); time = millis();                //нужно для отсчёта времени }   void blinktwice() { //двойное мигание светодиодом digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); delay(100); digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); delay(200); }   void loop() { if(k==0) { blinktwice(); //приглашение ввести код } if (k == 8) { digitalWrite(ledPin, HIGH); delay(3000); k = 0; } a = digitalRead(ina);       //считываются уровни сигналов с кнопок - нажата/не нажата b = digitalRead(inb); c = digitalRead(inc); delay(100);  //следующий if - защита против ложных срабатываний, можно не использовать if((digitalRead(ina) == a)&&(digitalRead(inb) ==b)&&(digitalRead(inc)==c)) { if (a == keya[k]) { if (b == keyb[k]) { if (c == keyc[k]) {   k++; } } } } if (k==1) { if (d ==0) { time = millis (); d++; } } temp = millis(); temp = temp - time; if (temp > 10000) { k= 0; d=0; time = millis (); } }


Чтобы не возникало лишних вопросов по коду, следует разъяснить некоторые моменты. Функция setup используется для назначения портов. Следующая функция – Input_Pullup, которая необходима для увеличения напряжения пина на 5 В. Это осуществляется с помощью резистора. Благодаря этому не будут возникать различные короткие замыкания. Для большего удобства рекомендуется применять функцию blinktwice. Вообще при создании различных программ нужно пробовать другие функции.

После назначения функций происходит считывание сигнала с портов. Если кнопка нажата, то это будет обозначаться цифрой 1, а если нет – 2. Далее, происходит анализ всех значений. Например, появилась такая комбинация, как 0,1,1. Это означает, что первая клавиша нажата, а остальные две нет. Если все значения выполняются верно, то условие 8 тоже верно. Об этом свидетельствует загоревшийся светодиод на передней панели. Далее необходимо вписать определенный код, который будет служить для открывания двери.

Последние элементы кода служат для сбрасывания значений счетчика. Такая функция выполняется, если после последнего нажатия клавиши прошло более 10 секунд. Без этого кода можно было перебрать все возможные варианты, хоть их достаточно много. После создания данного устройства необходимо его протестировать. Еще проекты на Arduino.

 

Нравится
Необычный кодовый замок на Arduino
0)Не нравится
0)
Еще по этой теме:
14 основных поломок кофемашин и способы их устранения
17:20, 23 октябрь
14 основных поломок кофемашин и способы их устранения
Узнайте, как самостоятельно отремонтировать кофемашину в домашних условиях, имея под рукой отвертку и расходные материалы!
Как заменить проводку в панельном доме — пошаговая инструкция
03:15, 23 октябрь
Как заменить проводку в панельном доме — пошаговая инструкция
Технология замены электропроводки в квартире панельного дома. Способы замены старой проводки.
12 советов, благодаря которым вы сможете выбрать хорошего электрика
02:00, 23 октябрь
12 советов, благодаря которым вы сможете выбрать хорошего электрика
Как выбрать электрика для замены электропроводки или устранения аварийной ситуации. Где лучше всего искать электрика, чтобы сразу был понятен уровень профессионализма исполнителя!
Выбираем диммер — на что обратить внимание?
00:30, 23 октябрь
Выбираем диммер — на что обратить внимание?
Как выбрать мощность диммера, а также подходящий тип исполнения для светодиодных ламп, люминесцентных, галогенных либо лампочек накаливания.
Для чего нужна термоусадочная трубка и как ее использовать?
19:00, 22 октябрь
Для чего нужна термоусадочная трубка и как ее использовать?
Назначение и область применения термоусадочных трубок. Каких размеров бывают термоусадки для проводов и как выбрать подходящий диаметр. Правила пользования трубкой ТУТ.
Комментарии:
Добавить комментарий
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Личный кабинет
Опрос
Оцените работу сайта

Календарь
«    Сентябрь 2020    »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
282930