Кодовый замок на Arduino за 20 минут



Предыстория


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

Порывшись на китайских барахолках и ebay я ничего дешевого и более-менее серьезного не нашел и решил сделать его своими руками. Оговорюсь сразу, что платформа Arduino была выбрана за свою простоту, так-как опыта общения с микроконтроллерами не было вообще.

Идея


На двери с внешней стороны двери должна располагаться клавиатура, на которой вводится пароль, с внутренней стороны закреплена остальная конструкция. Для контроля полного закрытия двери используется геркон. Выходя из кабинета человек нажимает на клавиатуре «*» и не дожидаясь пока дверь закроется доводчиком идет по своим делам, когда дверь будет полностью закрыта, геркон замкнется и замок будет закрыт. Открывается дверь с помощью ввода 4х значного пароля и нажатием на «#».

Комплектующие


Arduino UNO = $18
Arduino protoshield + breadboard = $6
L293D = $1
Пучок проводов 30шт для бредборда = $4
2 розетки RJ45 = $4
2 вилки RJ45 = $0.5
актуатор центрального замка = 250 руб.
Геркон = бесплатно оторван от старого окна.
Шпингалет металлический гигантских размеров = бесплатно
Корпус от старого хаба D-LINK из полуторамиллиметрового железа = бесплатно
Блок питания от того же хаба D-LINK на 12 и 5в = тоже бесплатно
Куча винтов и гаечек для крепления всего этого добра к корпусу = 100руб.
Пульт управления от охранной сигнализации = бесплатно.

Итого: $33,5 и 350руб.

Не так уж и мало, скажете вы, и будете, определенно правы, но ведь за удовольствие надо платить! А собрать, что-то своими руками всегда приятно. К тому-же конструкцию можно сильно удешевить, если использовать голый МК без Arduino.

Подготовка к сборке


Хочется несколько слов сказать о покупке ключевого элемента конструкции актуатора. В местном авто-магазине мне предложили актуаторы двух видов: «с двумя проводами и с пятью». Со слов продавщицы они были абсолютно одинаковыми и различие в количестве проводов не значило абсолютно ничего. Однако, как оказалось позже, это не так! Я выбрал девайс с двумя проводами, он питался от 12в. В конструкции с пятью проводами установлены концевые выключатели, что позволяет контролировать движение рычага. Понял, что купил не тот я только когда разобрал его и менять его было поздно. Ход рычага оказался слишком коротким, чтобы нормально задвинуть щеколду, поэтому, необходимо было немного его доработать, а именно удалить две резиновые шайбы укорачивающие ход рычага актуатора. Для этого корпус пришлось распилить вдоль обычной ножовкой, потому, что вторая шайба находилась внутри. Синяя изолента нам, как всегда помогла нам в дальнейшем при сборке его назад.
Для управления мотором актуатора был использован драйвер моторов L293D, который выдерживает пиковую нагрузку до 1200 мА, у нас при остановке двигателя актуатора пиковая нагрузка вырастала всего до 600 мА.
Из пульта управления от охранной сигнализации были выведены контакты с клавиатуры, динамика и двух светодиодов. Пульт и основное устройство предполагалось соединить с помощью витой пары и RJ45 разъемов

Программирование.


Так, как опыта программирования Arduino у меня не было до сих пор. Я воспользовался чужими наработками и статьями с сайта arduino.cc. Кому интересно, может поглядеть этот безобразный код :)

Фото и видео



Ардуино и актуатор


Блок питания


Клавиатурка


Шпингалет (соединен с актуатором металлической спицей и на которую надета термоусадка для красоты)

Видео процесса работы устройства:


Использованные источники


www.youtube.com/watch?v=eJ46wRyT-ZA
arduino.cc

Послесловие


Про 20 минут это конечно была шутка, я лично делал его месяц (спасибо почте России), он мне очень надоел, но я рад что довел его до конца.
Поделиться публикацией
Комментарии 92
    +5
    Советую в будущем задуматься над электромагнитным запором (постоянный магнит притягивает дверь, управляется через полупроводниковое реле) и при отключении электропитания дверь будет отперта, а в вашем случае — заперта «насмерть».
      +2
      Не постоянный магнит, а электромагнит, конечно же.
        +1
        Эх, куда мир катится. ;) Про вариант самого обычного механического кодового замка забыли. А ведь ему пофиг на всякие отключения элетропитания, да и держит как хорошая щеколда.
        –1
        Такие двери стоят в большинстве московских подъездов. Когда я забываю ключ, то я просто дергаю дверь посильнее… А потом бабуськи жалуются, что на дверь скидывались, а она не помогает нифига.

        Лучше поставить аккумулятор малой ёмкости и при отключении питания автоматически открывать щеколду. В общем, я за щеколду однозначно!:)
          +22
          Посмотрите, может у Вас магнит в подъезде стоит с перекосом. Так его «рекламщики» «дорабатывают» молотком, чтобы потом входить без ключа и «спам» рассовывать по почтовым ящикам.

          Магнит сам могучий — мы однажды дергали в несколько рук — только ручку оторвали.
            +6
            Магнит этот держит несколько сот килограмм, если исправен или нормально установлен. Но некоторые нехорошие люди лепят на магнит слой изоленты или жгутиков для проводов. Контакт магнита с дверью нарушается и его можно открыть рукой. У себя в подъезде я несколько месяцев такие диверсионные приспособления срывал. Потом вешать прекратили.
              +1
              Электромагнитные замки отличаются по усилию, которое необходимо к ним приложить, чтобы открыть. Можно спакойно найти с усилием до 500 кг.
                0
                Открою небольшой секрет: установщики домофонов любят ставить слабые и дешевые магниты с усилием отрыва около 200 кг. Т.е. если на двери хорошая ручка, достаточно упереться ногой в соседнюю створку и правильно дернуть, открывается на-раз. Приходилось пользоваться таким вандальным способом в нескольких домах города…
                  +2
                  Неопытные установщики часто косячат, притягивают болтом ответную часть магнита намертво, чего нельзя делать согласно инструкции. Эту деталь нужно устанавливать с небольшим люфтом на тлстую мягкую прокладку, которая как правило идет в комплекте с замком.
                    0
                    Кстати да, чаще всего прикручивают именно намертво.
                    0
                    200 кг в рывке? Ну ты силен :-)
                      0
                      Силы в общем то не надо, главное хорошо упереться и дернуть, масса в 90 кг делает свое дело.
                        0
                        Т.е. рывок делается не руками а телом.
                          +5
                          Главное перед тем, как дёрнуть, проверить, не открыта ли дверь.
                            –1
                            Золотые слова :)
                        0
                        Т.е. если на двери хорошая ручка...
                        Однажды попалась плохая ручка. Пришлось самому потом делать как надо.
                        0
                        то что при отключении или любой поломке все намертво виснет — всю идею убивает.

                        0
                        Электромагнитный запор конечно лучший вариант, но с ним вышло бы еще дороже.
                          –3
                          Правильно звучит замок электромагнитный, а не запор.
                            +1
                            На этот случай есть ещё более весёлая идея. У слесарей КИП когда-то подсмотрел. У них на двери в дежурку стоял самодельный электрический кодовый замок, который, в случае падения питания, можно открыть и обычным ключом. Ключ хранится на вахте.
                            Насколько я разглядел, они использовали обычный дверной замок (из тех что вешаются поверх двери, а не внутрь). С внутренней стороны к ручке-защёлке открывающей замок (не знаю как оно называется) был приделан самодельный актуатор из мощного реле. Соответственно открытие изнутри по кнопке.
                            +1
                            Как раз лучше, так иначе «супер замок» при обесточивании превратится в формальность. Для открывания в аварийном случае можно предусмотреть питание от внешнего источника (например размещение скрытых клемм непосредственно в корпусе пульта).
                              +1
                              Тогда лучше поставить «гаражную» пружинную щеколду (дополнительный врезной замок), которая через тягу сможет оттянуть щеколду электронного замка. Ключ можно отдать охране — на всякий пожарный случай.
                                0
                                Да, я об этом тоже подумал, на крайний случай от «Кроны» можно всегда со стороны «улицы» запустить замок.
                                  0
                                  Лучше прямо в конструкцию эту «Крону» встроить как-нибудь, ну или аккумулятор какой-нибудь.
                                  +4
                                  У нас в университете стоит вход в аудитории по картам. Доступ — только у преподавателей.
                                  Так вот, стоят обычные замки. Как реализовано — не знаю. Внешне — замок, к которому подходит провод.
                                  Нет питания, или карточки — всегда можно открыть обычным ключем. ИМХО идеальный вариант на случай отключения питания.
                                    0
                                    Ригель замка оттягивается электромагнитом. И на нём есть насечки, позволяющие сдвигать его ключом.
                                      0
                                      Даже несколько иначе — ригель оттягивается пружиной, которая взводится дополнительным ригелем, упирающимся в косяк. Ключом же (как механическим, так и электронным) освобождается фиксатор пружины.
                                      +1
                                      Замок электромеханический
                                    +3
                                    Шаг 2: АВР на основе Arduino
                                      +3
                                      Можно поподробнее по поводу клавиатуры? Что за зверь, каким образом с ним общаться, сколько стоит, где купить?
                                        +1
                                        Клавиатуру я не покупал, а взял готовый блок от охранной сигнализации, испорченный естественно.
                                        В нем кроме клавиатуры присутствует pic микроконтроллер, куча светодиодов и динамик.
                                        Там я просто подпаялся к нужным контактам клавиатуры, паре светодиодов и динамику.
                                          0
                                          На счет где купить даже предположить не могу, находил подобные блоки на ebay, там они стоят 20-30 баксов б\у + доставка из штатов.
                                            0
                                            Ясно. Думал что это что-то вроде универсального блока с последовательным интерфейсом. Поискаю тогда что-то похожее у китайцев.
                                            +1
                                              0
                                              такие я в интернетах видел. В огромном количестве лежат. Я в поисках именно недорого красивого корпуса с кнопками и дисплеем.
                                            0
                                            20 минут — это не шутка, 20 минут — это «утка»
                                              0
                                              Предлагаю 20 минут убрать из названия
                                              +3
                                              О_О
                                              Я почти такую же статью сегодня-завтра хотел написать, вчера фотографии травления платы делал — у меня это как курсовой проект выбран
                                                0
                                                Ну дак у меня ведь все гораздо проще, без травления плат и т.п.
                                                Уверен ваша статья будет интереснее!
                                                  0
                                                  Я просто очень удивлён, что идеи витают в воздухе, даже активатор похожий :)
                                                  В вашем случае оно реально применяться будет, у меня же для учебных целей — очень большой минус моего, что на 6 кнопках всего, у вас клавиатурка красивая)
                                                  Статья обязательно будет, сейчас вот курсовик сижу дописываю — как сдам на проверку всё тут распишу как мы делали)

                                                  p.s.: если хотите, то в личку могу исходный код свой скинуть — он у меня хорошо прокомментирован, можете какие-нибудь идеи для своего устройства позаимствовать, пока его не повесили)
                                                    0
                                                    Завтра поставлю на дверь в кабинете, корпус закрою конечно, чтоб людей не пугать, фотки в статью добавлю.
                                                    А код ваш было бы интересно посмотреть тоже!
                                                      0
                                                      «активатор похожий», они походу все одинаковые, а на корпусе написано ВАЗ-2108? ))
                                                    0
                                                    Все равно пишите статью!
                                                    –1
                                                    а если в него стрельнуть, то дверка откроется как в фильмах? х)
                                                      +1
                                                      В фильмах предполагается (хотя вряд ли у сценаристов хватает на это знаний), что электропривод замка управляется трехпозиционным реле (закрытие-off-открытие). Если коротнуть блок управления, то реле может и переключиться на «открытие».
                                                        +4
                                                        А может и не переключится. Но, видимо, у положительных героев всегда прокачана удача.
                                                      0
                                                      Перед приходом пожарной инспекции рекомендую демонтировать ваше творчество.
                                                        0
                                                        Зачем? Это устройство не блокирует путей эвакуации, а из помещения, как я понял, возможно открыть рукой при необходимости.
                                                          –2
                                                          Ну оно возможно не совсем пожаробезопасно, на что намекают его торчащие в разные стороны проводки.
                                                        0
                                                        На дилэкстриме раньше был готовый вариант автоматической щеколды, цена в районе 10 баксов.
                                                        Конечно без пульта и МК, просто сама щеколда с 2я контактами.
                                                          0
                                                          Только конечно же не $10
                                                          www.dealextreme.com/p/electronic-dead-bolt-door-lock-6372
                                                            0
                                                            Да именно оно, с ценой ошибся, давно смотрел.
                                                            0
                                                            Не примите за рекламу, но мне больше понравился ригельный электромеханический замок серии «Шериф» отечественного производства www.itc-promix.ru/index.php?id=414 сам ставил «Шериф-2 лайт» и «Шериф-3В». Там есть и нормально открытые и нормально закрытые (как раз для запирания при отсутствии электричества).
                                                              0
                                                              Правда стоимость, конечно, у него побольше будет.
                                                            +1
                                                            А как его открывать изнутри? Не будет же замок висеть кишками наружу, корпус придется закрыть крышкой…
                                                              0
                                                              Само собой крышка от корпуса имеется, а изнутри его открывать не нужно, так задумано.
                                                              Когда кто-то есть внутри, его не зачем закрывать — в этом все дело.
                                                                +4
                                                                А если случайно? А если «пошутит» кто-то? А если кто-то посторонний снаружи нажмет кнопку?
                                                                Согласитесь, неприятно обнаружить себя запертым. Обязательно сделайте кнопку отпирания изнутри, «на всякий пожарный».
                                                                  0
                                                                  Щеколда легко сдвигается рукой, так что нестрашно.
                                                              +3
                                                              image
                                                              Smart Security Access Control за $10.16 (доставка бесплатно)

                                                              Пришло давно, но никак не поставлю. Открывает по RFID брелокам\картам и по паролю. Программируется легко. Щеколду тоже думаю использовать от сигнализации (магнитный замок дороговат).
                                                                0
                                                                А брелок хоть один в комплекте есть?
                                                                  0
                                                                  К сожалению нет. Заказывал дополнительно там же.
                                                                  0
                                                                  Хм, весь блок наружу торчит? Отрываешь его от стены, и вот тебе напрямую провода к активатору, осталось подать напругу с соседней клеммы?
                                                                    0
                                                                    Ага. Там еще очень понятная маркировка на клеймах есть.

                                                                    P.S. $10.16 же стоит.
                                                                  0
                                                                  Надежное решение! Сразу видно
                                                                    +17
                                                                    Кажется, нашел уязвимость. Вот кусок кода библиотеки password.cpp, а именно, из функции Password::evaluate():
                                                                    for (byte i=1; i<MAX_PASSWORD_LENGTH; i++){
                                                                    		//check if guessed char is equal to the password char
                                                                    		if (pass==STRING_TERMINATOR && guessed==STRING_TERMINATOR){
                                                                    			return true; //both strings ended and all previous characters are equal 
                                                                    		}else if (pass!=guessed || pass==STRING_TERMINATOR || guessed==STRING_TERMINATOR){
                                                                    			return false; //difference OR end of string has been reached
                                                                    		}
                                                                    		// ...
                                                                    	}

                                                                    Дыра в том, что Password::evaluate() сравнивает пароли посимвольно, и при обнаружении первого несовпадения возвращает false. То есть время выполнения функции зависит от того, в каком по счету символе пароли не совпадают.

                                                                    Дальше смотрим сюда:
                                                                    void guessPassword(){
                                                                      if (password.evaluate()){
                                                                        if (Closed==1) {
                                                                          // угадали
                                                                          // ... 
                                                                        }
                                                                      }
                                                                      else{
                                                                          // не угадали
                                                                        digitalWrite(LedGreen,LOW);
                                                                        password.reset();
                                                                        errorSound();
                                                                      }
                                                                    }

                                                                    Если подключиться к контактам клавиатуры и измерять с достаточной точностью время между нажатием '#' и сигналом ошибки, можно подбирать пароль посимвольно.
                                                                    Алгоритм такой:
                                                                    1) вводим 0000# (естественно, не руками, а берем хотя бы ардуино :)
                                                                    2) измеряем время между последним нажатием и сигналом ошибки.
                                                                    3) повторяем шаги 1-2 для кодов 1000, 2000… 9000.
                                                                    4) если время, измеренное на шаге 2 вдруг немного увеличилось, значит мы подобрали первую цифру, и несовпадение происходит на второй.
                                                                    5) повторять шаги 1-4 для 2-4 цифр кода.
                                                                    6) PROFIT!!! N-символьный пароль подбирается за 10N попыток.

                                                                    Как защищаться. Три варианта, по возрастанию сложности:
                                                                    1) добавить рандомную задержку между (не)принятием кода и сигналом ошибки;
                                                                    2) ограничить число попыток ввода (самое правильное);
                                                                    3) написать свою библиотеку для работы с паролями (чревато появлением новых дыр).
                                                                      0
                                                                      Так уж произошло, что решили мы на работе установить кодовый замок на свою дверь, потому, как постоянно вбегаем – выбегаем из кабинета, дверь в который должна быть закрыта постоянно в отсутствие обитателей. Ключи частенько оказываются забытыми внутри. Вобщем, решили, что кодовый замок это отличный выход.

                                                                      А вообще на тех помещениях где кто-то настолько хочет попасть внутрь что будет использовать ваш вариант атаки, стоят не самодельные замки, а нечто посерьезнее и частенько с вооруженной охраной.
                                                                        +5
                                                                        Несомненно. Я не говорю, что атаковать будут вот прям завтра, я просто показал теоретическую возможность.
                                                                        И потом, не боги горшки обжигают. Рано или поздно случится заниматься разработкой какой-нибудь серьезной системы. Лучше сейчас приучить себя тщательно исследовать и отлаживать все варианты нестандартного поведения кода (и железа), чем потом рвать волосы на заднице :)
                                                                          +1
                                                                          Так автор и говорит, что использовал чужой код, ибо нет опыта разработки под Ардуино. Так что претензии скорее к источникам.
                                                                      +1
                                                                      В моем китайском кодовом замке есть контакты для кроны. Если бы не они, IT отдел не попал бы в кабинет с отключенным предохранителем из-за сгоревшего оборудования, замкнувшего цепь в наше отсутствие.
                                                                        0
                                                                        То что на картинке я смогу спаять если буду тренироваться паять это целый год
                                                                          +1
                                                                          Прочитав статью, появилась идея приделать клавиатуру для ввода кода к нашему электромеханическому замку на работе.
                                                                          Он уже есть и работает, поэтому изобретать запирающий механизм не надо.
                                                                          Снаружи открывается ключом в любом случае (даже если нет электричества) и открывается по таблетке ibutton, которые иногда тоже забывают вместе с ключами.
                                                                          Изнутри открывается ручкой на замке (опять же без электричества) и электронной кнопкой (кнопкой мышки в данный момент).
                                                                            0
                                                                            Вот эта ironlogic.ru/il.nsf/pages/matrixIV фиговина позволяет использовать символьные коды и карточки параллельно с TouchMemory или вместо него.
                                                                            0
                                                                            Немного напрягла строчка «активатор для ВАЗ». Я надеюсь, это никак не связано с отечественным автопромом?
                                                                              0
                                                                              Связано, так мне назвали в магазине эту штуку. Именно для ВАЗ.
                                                                                +2
                                                                                Если есть «активатор для ВАЗ» соответственно где-то должен существовать и «кряк для ВАЗ». А также, очевидно, можно ездить на не активированном ВАЗе в течении 30 дней. А потом, по видимому, надо покупать лицензионный ключ. Ключ, скорее всего, должен быть на 32, не меньше.
                                                                                0
                                                                                Дак вам тогда идеально подойдет вот эта вещь.
                                                                                  +3
                                                                                  Не «активатор», а «актуатор» же.
                                                                                    0
                                                                                    Спасибо, поправил.
                                                                                    0
                                                                                    Думаю, что оптимальным решением (и по цене, и по удобству использования, и по качеству) был бы обычный механический кодовый замок и доводчик.
                                                                                    Опять же при выходе ничего нажимать не надо!!!
                                                                                    Единственный недостаток, если в помещении часто бывают посетители — придётся вставать с рабочего места и открывать им дверь.
                                                                                      0
                                                                                      При выходе дверь постоянно оказывалась бы закрыта сама-собой, а этого быть не должно.
                                                                                      Придется действительно постоянно открывать дверь.
                                                                                        +1
                                                                                        Мы в отделе взяли коричневую пару из собственных патчкордов и присоединили к замку, а с другой стороны были персоналные кнопки для открытия двери не поднимая 5 точку с кресла. Мне кажется, админ вообще не должен вставать с рабочего места :)
                                                                                          0
                                                                                          Шикаарно! :)
                                                                                          Но нам так нельзя, у нас специфика работы такая, что если мы на месте то дверь должна быть открыта.
                                                                                            0
                                                                                            Ну так постучат, откроете. И табличка «Мы тут, стучите.»
                                                                                      +7
                                                                                      На входе на железнодорожный узел связи одной немаленькой станции стоит необычный кодовый замок. На двери ничего нет, кроме ручки, а рядом висит телефон-автомат. Внутри помещения находится АТС, на один из номеров которой подключен простенький электромеханический замок. Конструкция элементарная: при подключении питания соленоид втягивает ригель, при отключении ригель возвращается силой пружины. Хочешь войти — звонишь на секретный номер, можно даже с сотового. Дверь стабильно открывается по первому гудку. И никаких ключей не нужно, и питание на АТС никогда не пропадет.
                                                                                        0
                                                                                        Если сломается АТС, дверь в комнату с ней не смогут открыть, потому что сломалась АТС.
                                                                                          0
                                                                                          К оборудованию предъявляются повышенные требования по надежности (есть резервирование), у АТС круглосуточно дежурит смена механиков. Там просто быть такого не может, чтобы сломалась АТС.
                                                                                        0
                                                                                        По карточке как-то удобнее… Изначально дверь заперта, а чтобы войти нужно лишь приложить карточку. И не нужно никаких кодов, кнопок и прочего. У нас так.
                                                                                          0
                                                                                          Карточку можно из кармана выложить, как и ключ
                                                                                            0
                                                                                            Нельзя, если привязана к штанам :) Ну или висит на шее постоянно. В любом случае это небольшая плата за удобство.
                                                                                        +1
                                                                                        Что-то не очень понятно, а если кто-то закроет дверь снаружи, когда кто-то внутри есть.
                                                                                          0
                                                                                          Да, уже люди тут говорили об этом.
                                                                                          Поставив замок на дверь я тоже понял что без кнопки внутри не обойтись.

                                                                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                        Самое читаемое