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

Электронный замок своими руками

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

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

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

    • Тактовая кнопка
    • Датчик холла + магнит на самой двери
    • Геркон + магнит на самой двери
    • Горит зелёный — замок ОТКРЫТ. Горит чтобы не забыть закрыть дверь
    • Горит жёлтый — система проснулась и ожидает ввод пароля
    • Мигает красный — сел аккумулятор

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

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

    Версия с кнопкой

    • Дверь закрыта, нажато СНАРУЖИ — проснуться, ждать ввод пароля/RFID метку/электронный ключ/отпечаток пальца
    • Дверь закрыта, система проснулась, ждёт ввод пароля. Время можно настроить (настройка sleep_time)
    • Дверь закрыта, введён пароль/метка/ключ и т.д. — открыть
    • Дверь закрыта, нажато ВНУТРИ — открыть
    • Дверь открыта, нажато СНАРУЖИ — закрыть
    • Дверь открыта, нажато ВНУТРИ — закрыть
    • Дверь открыта, нажат КОНЦЕВИК — закрыть

    В замке предусмотрена работа от аккумулятора в режиме пониженного энергосбережения (включить выключить: настройка sleep_enable), а именно:

    • Просыпаться каждые несколько секунд, следить за СОБЫТИЕМ (опциональный вариант, если снаружи нет кнопки. Включить можно в настройке wake_button)
    • Каждые несколько минут следить за напряжением акума (вкл/выкл настройка battery_monitor)
    • Если акум разряжен (напряжение устанавливается в настройке bat_low):
      • открыть дверь (опционально, можно настроить в прошивке open_bat_low)
      • запретить дальнейшее открытие и закрытие
      • при нажатии на кнопки мигать красным светодиодом
      • перестать следить за СОБЫТИЕМ (т.е. ввод пароля/метка и т.д.)

      Версия с клавиатурой

      Когда система не спит, нажать кнопку смены пароля (скрытая кнопка). Попадаем в режим смены пароля:
      Вводим пароль из цифр (МАКСИМУМ 10 ЦИФР. )

      • При нажатии * пароль записывается в память и система выходит из смены пароля
      • При нажатии # пароль сбрасывается (можно вводить заново)
      • Если ничего не нажимать 10 секунд, автоматически выйдем из режима смены пароля, пароль останется старый

      Когда система не спит (проснулись по кнопки или сон отключен), нажать * для входа в режим ввода пароля
      Если система спит и периодически просыпается проверять СОБЫТИЕ, то нажимаем * и удерживаем, пока не загорится красный светодиод
      Режим ввода пароля:

      Кодовый замок на Arduino

      Кодовый замок на Arduino можно приспособить для различных целей. Это могут быть двери, шкатулки, сейфы или запуск какого-либо действия, например, запуск ракеты).

      Техническое задание

      Разработать кодовый замок на Arduino, который управляет электромагнитным реле. При правильном вводе 5-значного кода, срабатывает реле и загорается зеленый светодиод. Через 5 секунд реле приходит в изначальное состояние и зеленый светодиод гаснет. Если код введен неверно, то загорается красный светодиод в течение 5 секунд. Код можно вводить бесконечное количество раз.

      Разработка

      Давайте для начала смоделируем схему в Proteus

      Кодовый замок на Arduino

      На схеме мы видим матрицу из кнопок, два светодиода и вместо катушки реле для удобства взят спикер, который при эмуляции начинает трещать. При правильном наборе кода загорается светодиод L_1 и трещит спикер LS1 в течение 5 секунд.

      Описание кода

      Для того чтобы мы могли обрабатывать, нажатия клавиш на нашей клавиатуре, мы могли бы написать сами с нуля, библиотеку обработки, но это заняло бы много времени, и в данном случае, программируя на Ардуино, на языке высокого уровня, в этом нет необходимости. Достаточно только подключить готовую библиотеку, которая идет в комплекте библиотек с нашей Arduino IDE.

      В данном проекте, нам потребуется использовать три значения, которые мы будем использовать при написании нашего кода. Мы могли бы пойти стандартным путем и создать три переменные, присвоить им имена и значения, и затем просто использовать их. Но мы решили пойти немножко дальше, и показать, как можно еще более удобным способом решить данную задачу. Мы создаем 4 директивы, LED1, LED2 и RELAY, NUM_KEYS и присваиваем им постоянное значение, которое идет после названия директивы. После значения, точку с запятой, как мы привыкли, закрывать нашу строку, ставить не требуется.

      Здесь мы знакомимся с новым типом массивов и переменных char, в котором помимо цифровых значений, могут храниться символьные, например буквы, и различные знаки. Итак, мы создаем массив myarraw, который содержит 5 знаков, (не забываем про создание директивы). В данный массив мы записываем 5 значений, которые содержатся в фигурных скобках. Они будут являться кодом, по которому будет открываться наш замок, их вы впоследствии сможете поменять на любые другие. Затем нам нужно создать еще один массив, также 5 знаков, в котором будут храниться значения, наших нажатых кнопок.

      Здесь мы объявляем две переменные, к и s, и присваиваем им значение 0. В первой из них у нас будет храниться количество нажатий, а во второй количество совпадений, кода для открытия замка, который мы задали ранее в массиве, с кодом набранным на клавиатуре.

      Здесь же, мы задаем 2 константы формата byte, в целях экономии памяти, нашего контроллера мы пользуемся форматом для хранения переменных byte, а не привычный многим формат int. В данном случае он будет избыточен, для наших задач.

      Теперь же, нам нужно будет создать, таблицу соответствия, кнопок клавиатуры символам, которые будут сохраняться в наших массивах. Как мы видим, их расположение, совпадает с нанесенными значками на клавиатуре.

      Ну а здесь, нам требуется создать два массива, по 4 знака каждый, соответственно по количеству строк и столбцов, и задать, к каким пинам ардуино они у нас будут подключены. Формат переменной, как и в прошлом случае, у нас выбран byte.

      Здесь нужно остановиться подробнее: Библиотека Keypad, описывает класс работы с клавиатурой. Т.е. создает тип данных «клавиатура», у этого типа данных свои параметры, которые мы указываем в скобках. Типа то, что клавиатура 4*4, к каким пинам подключены строки, к каким столбцы, и таблицу соответствия кнопок нашим символам. Т.е. Keypad это тип данных, наподобие int или char. Затем мы пишем имя своей переменной (создаваемого объекта) keypad с параметрами этой переменной в скобках. Как будто присваиваем значение этой переменной. И дальше работаем как с переменной, у которой можно менять параметры.

      Кодовый замок на 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. Кому интересно, может поглядеть этот безобразный код :)

      Фото и видео


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


      Блок питания


      Клавиатурка


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

      Электронный кодовый замок для двери на плате Ардуино

      В этой инструкции я покажу вам, как сделать электронный замок на входную дверь, используя плату Ардуино Уно. Я сделал свою собственную схему на основе микроконтроллера ATmega328, но этот шаг опционален. В инструкции я покажу вам, как сделать простую схему с Ардуино Уно на макетной плате, а также дам несколько советов о том, как делать свои схемы на Ардуино.

      При использовании этой системы у вас будет 5 секунд на открытие двери. После 5 секунд электрический дверной замок автоматически заблокируется. Открыть его можно набрав правильный пароль и нажав кнопку ‘*’. Если нужно сменить текущий пароль, это можно сделать нажав на кнопку ‘A’, а если нужно пропустить или отменить операцию. это можно сделать, нажав ‘#’. В систему встроена пищалка, которая при эксплуатации издаёт звуки разных тональностей.

      Посмотрите видео с управлением системой:

      Для работы системы требуется ток напряжением от 9 до 12 Вольт, поэтому я использовал адаптер на 12V. Если ток проходит через систему, замок остаётся открытым. В обратном случае кодовый замок на входную дверь остаётся закрытым.

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

      Шаг 1: Что вам понадобится

      Для проекта нужно:

      • Плата Ардуино Уно
      • Высококонтрастный дисплей 16 *2
      • Кейпад (наборная панель) 4 * 4
      • Потенциометр 10
      • DIP сокет для atmega328
      • Регулятор напряжения LM7805 (5V на выходе)
      • Кварцевый генератор 16Mhz
      • Конденсаторы 2x 22pF керамика, 2x 0.22uF электролитические
      • Резистор 10K
      • Джек для DC
      • Макетная плата

      И одна коробка, в которую всё уместится

      • Что-то для вырезания отверстий в коробке
      • Пистолет с горячим клеем
      • Дрель для сверления отверстий в коробке

      Шаг 2: Схема

      Соединить всё весьма просто. Смотрите картинку выше, на ней изображена схема на макетной плате.

      Дисплей:

      • Пин 1 — Vdd на GND
      • Пин 2 — Vss на 5V
      • Пин 3 — Vo (на средний пин потенциометра!)
      • Пин 4 — RS на пин 8 Ардуино
      • Пин 5 — RW на GND
      • Пин 6 — EN к пину 7 на Ардуино
      • Пин 11 — D4 к пину 6 на Ардуино
      • Пин 12 — D5 к пину 5 на Ардуино
      • Пин 13 — D6 к пину 4 на Ардуино
      • Пин 14 — D7 к пину 3 на Ардуино
      • Пин 15 — Vee (на правый или левый пин потенциометра)

      Кейпад 4 * 4 (от левого к правому пину)

      • Пин 1 к пину A5 на Ардуино
      • Пин 2 к пину A4 на Ардуино
      • Пин 3 к пину A3 на Ардуино
      • Пин 4 к пину A2 на Ардуино
      • Пин 5 к пину 13 на Ардуино
      • Пин 6 к пину 12 на Ардуино
      • Пин 7 к пину 11 на Ардуино
      • Пин 8 к пину 10 на Ардуино
      • B — пин базы к пину 9 на Ардуино
      • C — пин коллектора на первый пин терминала затвора *
      • E — эмиттер на GND

      * второй пин модуля с закручивающимися клеммами будет соединён с пином «Vin» на Ардуино и по нему будет подаваться питание на электрозамок (от 9V до 12V).

      Шаг 3: Код

      Вот код, встроенный в Codebender!

      Скачайте плагин Codebender и кликните кнопку Run on Arduino, чтобы залить код в ваш Ардуино. Вот и готово, плата запрограммирована. Если вы хотите что-то поменять в коде, то просто нажмите кнопку Edit.

      Совет: если вы хотите поменять время, в течение которого дверь остаётся открытой, то поменяйте задержку (delay) в строке 105.

      Шаг 4: Собираем свою кастомную схему на Ардуино

      Теперь, когда вы опробовали проект в действии с платой Ардуино Уно, вы можете начать собирать свою собственную схему, основанную на Ардуино. Процесс несложен, но вам будут нужны дополнительные знания, поэтому я попытаюсь дать вам несколько советов, которые помогут вам собрать схему самостоятельно:

      1. Резистор 10K нужно поместить между первым (reset) и седьмым (Vcc) пинами микроконтроллера Atmega328.
      2. Кварцевый генератор 16MHz нужно соединить с пинами 9 и 10, отмеченными как XTAL1 и XTAL2
      3. Соедините с каждым пином генератора один конденсатор на 22pF. Другой конец конденсаторов пойдёт на пин 8 (GND) микроконтроллера.
      4. Помните о соединении второй линии подачи питания ATmega328 с вашим блоком питания, пины 20-Vcc и 22-GND.
      5. Вся информация по распиновке Ардуино расположена на второй картинке сверху
      6. Чтобы получать 5V с вашего источника питания, используйте LM7805 с двумя электролитическими конденсаторами на 0.22uF (на входном и выходном пине). Это важно! не подавайте на вашу кастомную схему больше 6V. Это сожжет микроконтроллер Atmega и схему дисплея.

      Шаг 5: Укладываем всё в коробку

      Потратьте время и продумайте максимально удобную конфигурацию коробки, в которую вы поместите всю электронику.

      Шаг 6: Готово!

      Вот и всё! Вы успешно дошли до конца этой инструкции и теперь знаете, как сделать свой кодовый замок на ардуино!

      Рассказываю как сделать какую-либо вещь с пошаговыми фото и видео инструкциями.

      Сейф с кодовым замком на Arduino

      После очередного конфликта между детьми (младшее поколение безнадёжно испортило домашнюю работу старшего) я принял решение изготовить детский, но полнофункциональный сейф, для надёжного хранения домашних работ

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

      Запланированный принцип действия всего устройства прост: деревянная коробка, кодовый замок управляемый Arduino, и механический засов, сдвигаемый сервоприводом. Итак, приступим!

      Механическая часть

      Сейф выполнен в виде ящика, собранного из кусков ДСП, завалявшихся в гараже. В качестве замка я использовал обычный шпингалет, но сначала его пришлось немного доработать. Я наклеил на него кусочки пластика таким образом, чтобы ручка могла передвигаться только вдоль шпингалета, не отклоняясь в стороны и не защёлкиваясь. В качестве аварийного способа открытия сейфа, задняя стенка может сниматься, конечно если открутить большое количество саморезов, удерживающих её.

      Электронные компоненты

      Здесь я приведу список используемой электроники со ссылками на продавцов и приблизительными ценами.

        — 3$ — 1$ — 1$
      • Литиевый Аккумулятор 18650 — 4$ — 0.5$
      • Блок защита+зарядки TP4056 — 0,5$
      • Бустер — повышатель напряжения до 5вольт — 0.5$ — 0.4$

      Итого, общие расходы на электронику составляют около 11$.

      Конечно, компоненты можно найти и дешевле, если заказывать сразу по несколько штук и экономить на стоимости доставки.

      16-кнопочная клавиатура снабжена двухсторонним скотчем на обороте, что делает очень удобным её монтаж на дверце. А шлейф этой клавиатуры выглядит тонким и ненадёжным, нуждается в дополнительной защите.

      Схема подключения

      Вся система питается от одного аккумулятора 18650. Через выключатель и модуль защиты TP4056, напряжение от него поступает на повышающий модуль до 5 вольт (полярность на выходе повышающего модуля я указал неточно, при подключении проверьте полярность тестером). От него питается контроллер и сервопривод. Клавиатура же не требует отдельного питания. Модуль защиты аккумулятора TP4056 может работать и как зарядное устройство, если на него подать стабилизированное напряжение 5вольт на контакты + и + (на схеме они не задействованы, расположены в верхней части защитной платы) или просто на его разъём Micro-USB. Получить это напряжение можно с любого современного зарядного устройства от мобильника.

      Логика работы сейфа предполагает, что пользователь должен включать питание кнопочным выключателем только когда требуется открыть или закрыть замок, остальное время простоя выключатель должен быть выключен для экономии заряда аккумулятора. Конечно можно было заморочиться с режимом ожидания, засыпанием и просыпанием контроллера, выпаиванием светодиодов с контроллера для экономии питания и т.д., но всё таки это только первый пробный образец! Так что пока — просто выключатель, и может быть в будущем выведу наружу шнур для внешней зарядки аккумулятора… На тот случай, если пользователь забудет выключатель во включённом положении и разрядит аккумулятор.

      В процессе настройки к схеме был ещё подключена пищалка, которая озвучивала нажатия кнопок. Однако в процессе испытаний выяснилось что пищалка при работе нагревается, а это значит что заряд аккумулятора частично расходуется впустую. По этой причине окончательная версия собрана без пищалки.

      Если конструкция приживётся в доме, можно заказать в фирме Смайл-мебель крой Ламинированной ДСП для сборки более красивой коробки, и продумать систему резервного питания или внешней зарядки аккумулятора.

      Программная часть

      Полный текст скетча я приведу в конце статьи, а пока озвучу только самые важные моменты.

      Контроллер постоянно опрашивает клавиатуру. Кнопка # отвечает за ЗАКРЫТИЕ замка в любом случае. Пароль указывается в начале скетча, может быть любой длины, и в нём можно использовать любые символы клавиатуры за исключением закрывающего символа #.

      Кнопки сброса нет. Перед паролем можно нажимать любые кнопки, затем нажать кнопки пароля в нужной последовательности и замок откроется!

      Любое движение сервопривода (на открытие или на закрытие) сопровождается двухсекундной паузой после команды, на случай если перемещение будет слишком медленным или на пути шпингалета окажется некое препятствие. После этой паузы — происходит Detach, то есть сервопривод логически отключается от контроллера и перестаёт давить на шпингалет. Таким образом, если в это время вы захотите провернуть сервопривод рукой, то вы не встретите сопротивления.

      В тексте программы, командами myservo.write(хх); задаются углы поворота сервопривода для открытия и закрытия замка. В моём случае это 40 и 140 градусов соответственно, но вы можете задавать свои значения, в интервале от нуля до 180.

      Скетч снабжён отладочными сообщениями в порт, которые не содержат пароль 😉

      Демонстрация работы

      Скетч

      Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

      void setup() <
      pinMode(1, OUTPUT);
      pinMode(2, OUTPUT);
      digitalWrite(1, LOW);
      digitalWrite(2, HIGH);

      Кодовой замок на Ардуино: подключение

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

      Кодовой замок на Ардуино: принцип работы

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

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

      Что нужно для сборки

      Собрать такой замок довольно проблематично, ведь нужно найти все комплектующие, которые далеко не всегда продаются в обычных магазинах. Итак, для стандартной сборки нам понадобиться:

      1. Пучок провод для бреборда, 30 штук будет более чем достаточно.
      2. Далее нужно купить две вилки и розетки RJ45.
      3. L293D.
      4. Актуатор центрального замка. Можно использовать с ВАЗа – это оптимально по цене и функциональности.
      5. Геркон – его можно взять со старого окна, здесь сложностей нет.
      6. Нам еще понадобиться блок питания от хаба D-LINK на 12 Вольт.
      7. Пульт управления от охранной сигнализации, его можно найти в любом магазине с электроникой.
      8. Arduino protoshield + breadboard.
      9. Arduino UNO.
      10. Также не обойтись без шпингалета. Он должен иметь внушительный размер, чтобы не сделать ошибку во время его выбора смотрите фото дальше.

      Как правило, чтобы приобрести все эти детали, придется выложить 40-50 долларов. Вроде сумма небольшая, но решать вам, напрягаться с этим или установить уже рабочую модель. Чтобы установить и соединить между собой, придется потратить несколько часов при условии, если вы все будете делать правильно.

      Программирование кодового замка

      Мы рекомендуем использовать код с официального сайта разработчиков, выглядит он следующим образом:

      1. Password password= Password( “0000” );
      2. constbyte ROWS = 4;
      3. constbyte COLS = 3;
      4. charkeys[ROWS][COLS] = <
      5. <
      6. ‘1’,’2′,’3′ >
      7. ,
      8. <
      9. ‘4’,’5′,’6′ >
      10. ,
      11. <
      12. ‘7’,’8′,’9′ >
      13. ,
      14. <
      15. ‘*’,’0′,’#’ >
      16. >;
      17. byte rowPins[ROWS]= <
      18. 3, 4, 5, 6>;
      19. byte colPins[COLS]= <
      20. 7, 8, 9>;
      21. Keypad keypad=Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
      22. byte Closed=0;
      23. byte Gerkon=2;
      24. byte LedRed=12;
      25. byte LedGreen=13;
      26. byte MotorPin1=0;
      27. byte MotorPin2=1;
      28. byte MotorPinGo=11;
      29. boolean programMode=false;
      30. intspeakerPin= 10;
      31. voidsetup() <
      32. pinMode(MotorPin1,OUTPUT);
      33. pinMode(MotorPin2,OUTPUT);
      34. pinMode(LedRed,OUTPUT);
      35. pinMode(LedGreen,OUTPUT);
      36. pinMode(speakerPin,OUTPUT);
      37. pinMode(Gerkon,INPUT);
      38. digitalWrite(Gerkon,HIGH);
      39. digitalWrite(LedRed,LOW);
      40. digitalWrite(LedGreen,LOW);
      41. digitalWrite(MotorPin1,LOW);
      42. digitalWrite(MotorPin2,LOW);
      43. digitalWrite(MotorPinGo,LOW);
      44. addEventListener(keypadEvent);
      45. setDebounceTime(100);
      46. startupSound();
      47. >
      48. voidloop() <
      49. char key = getKey();
      50. if (Closed==1) <
      51. digitalWrite(LedRed,HIGH);
      52. digitalWrite(LedGreen,LOW);
      53. >
      54. else <
      55. digitalWrite(LedRed,LOW);
      56. digitalWrite(LedGreen,HIGH);
      57. >
      58. >
      59. voidkeypadEvent(KeypadEvent key) <
      60. switch (getState()) <
      61. case PRESSED:
      62. switch (key) <
      63. case ‘#’:
      64. guessPassword();
      65. digitalWrite(LedRed,LOW);
      66. break;
      67. case ‘*’:
      68. CloseBolt();
      69. digitalWrite(LedRed,LOW);
      70. digitalWrite(LedGreen,LOW);
      71. break;
      72. default :
      73. if (key != NO_KEY) <
      74. >
      75. append(key);
      76. digitalWrite(LedRed,HIGH);
      77. analogWrite(speakerPin,128);
      78. break;
      79. >
      80. break;
      81. case RELEASED:
      82. switch (key) <
      83. default :
      84. digitalWrite(LedRed, LOW);
      85. analogWrite(speakerPin, 0);
      86. break;
      87. >
      88. break;
      89. >
      90. >
      91. voidguessPassword() <
      92. if (evaluate()) <
      93. if (Closed==1) <
      94. digitalWrite(LedGreen,HIGH);
      95. OpenBolt();
      96. digitalWrite(LedGreen,LOW);
      97. reset();
      98. >
      99. >
      100. else <
      101. digitalWrite(LedGreen,LOW);
      102. reset();
      103. errorSound();
      104. >
      105. >
      106. voidstartupSound()
      107. <
      108. int note = (1/33)*500000;
      109. for (int _=0;_<100000/note;_++) <
      110. delayMicroseconds(note);
      111. digitalWrite(speakerPin, HIGH);
      112. delayMicroseconds(note);
      113. digitalWrite(speakerPin, LOW);
      114. >
      115. note = (1/25)*500000;
      116. for (int _=0;_<100000/note;_++) <
      117. delayMicroseconds(note);
      118. digitalWrite(speakerPin, HIGH);
      119. delayMicroseconds(note);
      120. digitalWrite(speakerPin, LOW);
      121. >
      122. note = (1/26)*500000;
      123. for (int _=0;_<100000/note;_++) <
      124. delayMicroseconds(note);
      125. digitalWrite(speakerPin, HIGH);
      126. delayMicroseconds(note);
      127. digitalWrite(speakerPin, LOW);
      128. >
      129. >
      130. voiderrorSound()
      131. <
      132. int n = 2000;
      133. for (int vez=0;vez<2;vez++) <
      134. for (int _=0;_<30;_++) <
      135. delayMicroseconds(n);
      136. digitalWrite(speakerPin, HIGH);
      137. delayMicroseconds(n);
      138. digitalWrite(speakerPin, LOW);
      139. >
      140. delay(50);
      141. >
      142. >
      143. voidopenSound()
      144. <
      145. int n = 300;
      146. for (int vez=0;vez<3;vez++) <
      147. for (int _=0;_<100;_++) <
      148. delayMicroseconds(n);
      149. digitalWrite(speakerPin, HIGH);
      150. delayMicroseconds(n);
      151. digitalWrite(speakerPin, LOW);
      152. >
      153. delay(100);
      154. >
      155. >
      156. voidOpenBolt()
      157. <
      158. if (Closed == 1) <
      159. digitalWrite(MotorPin1, LOW);
      160. digitalWrite(MotorPin2, HIGH);
      161. digitalWrite(MotorPinGo, HIGH);
      162. delay(30);

        digitalWrite(MotorPin1, LOW);

        1. digitalWrite(MotorPin2, LOW);
        2. digitalWrite(MotorPinGo, LOW);
        3. Closed=0;
        4. openSound();
        5. >
        6. >
        7. voidCloseBolt()
        8. <
        9. if (Closed == 0) <
        10. closeSound1();
        11. do
        12. <
        13. delay(1);
        14. > while (digitalRead(Gerkon)==1);
        15. delay(3000); //wait 3 seconds
        16. digitalWrite(MotorPin1, HIGH);
        17. digitalWrite(MotorPin2, LOW);
        18. digitalWrite(MotorPinGo, HIGH);
        19. delay(30);
        20. digitalWrite(MotorPin1, LOW);
        21. digitalWrite(MotorPin2, LOW);
        22. digitalWrite(MotorPinGo, LOW);
        23. Closed=1;
        24. closeSound2();
        25. >
        26. >
        27. voidcloseSound1()
        28. <
        29. int n = 200;
        30. for (int vez=0;vez<2;vez++) <
        31. for (int _=0;_<100;_++) <
        32. delayMicroseconds(n);
        33. digitalWrite(speakerPin, HIGH);
        34. delayMicroseconds(n);
        35. digitalWrite(speakerPin, LOW);
        36. >
        37. delay(100);
        38. >
        39. >
        40. voidcloseSound2()
        41. <
        42. int n = 450;
        43. for (int _=0;_<110;_++) <
        44. delayMicroseconds(n);
        45. digitalWrite(speakerPin, HIGH);
        46. delayMicroseconds(n);
        47. digitalWrite(speakerPin, LOW);
        48. >
        49. >

        Процесс сборки: фото и видео

        Изначально покажем вам несколько фото о том, как его собирать и устанавливать.

        кодовой замок на Ардуино подключение

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

        блок питание кодогового замка

        Подключаем блок питания.

        шпингалет на кодовый замок

        Шпингалет, который и будет закрывать всю нашу конструкцию.

        Как подключить кодовый замок Arduino: видео

        Также читайте: как спрятать провода от компьютера.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: