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

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

Данный крупный проект посвящён изготовлению электронных замков своими руками, ниже вы найдёте ссылки на компоненты (Aliexpress), схемы подключения и файлы прошивок. Проект задуман как модульный, то есть руководствуясь приведёнными ниже схемами и инструкциями вы сможете сделать электронный замок любой нужной конфигурации и с удобным вариантом питания. Схемы разделены на схемы питания + подключения управляющего механизма, и отдельно показаны схемы подключения модулей. Комбинируя любые две схемы вы получите удобное для вас решение.
Кто ещё не сталкивался и не работал с Arduino, обязательно прочтите статью по подключению и настройке, ссылка выше.
Ваш AlexGyver.

КОНЦЕПТ И ЛОГИКА РАБОТЫ

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

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

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

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

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

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

ЛОГИКА РАБОТЫ СИСТЕМЫ

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

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

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

ЛОГИКА РАБОТЫ С КЛАВИАТУРОЙ

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

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

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

  • Обработка пароля сделана таким образом, что правильный пароль засчитывается только при наборе правильной последовательности цифр, то есть если пароль 345, то вводить можно любые числа до тех пор, пока не появится последовательность 345, т.е. 30984570345 откроет замок, так как оканчивается на 345.
  • Если пароль введён верно, дверь откроется
  • Если ничего не нажимать, через 10 секунд система вернётся в обычный (дежурный) режим
  • Если нажать #, сразу выйдем из режима ввода пароля
  • Если нажать секретную кнопку смены пароля в режиме ввода пароля, то тоже из него выйдем

Проект 10. Сейф (кодовый замок)

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

Описание работы:

Для начала работы подключите питание к Arduino. Загорится светодиод сигнализирующий об открытии сейфа, сервопривод повернут на 90 градусов. а на экране высветятся цифры от 0 до 99.

Для закрытия сейфа необходимо ввести кодовую последовательность, для этого вращайте потенциометры влево или вправо. Индикатор условно поделен пополам. Левую сторону индикатора регулирует потенциометр во 2 посадочной площадке. Правую сторону индикатора регулирует потенциометр в 6 посадочной площадке. Потенциометры регулируются в диапазоне от 0 до 99. После того, как вы выставили нужную последовательность, запомните ее и нажмите на кнопку. Светодиод погаснет, сервопривод повернется в 0 градусов, а сейф закроется. Установленная кодовая последователь на индикаторе мигнет три раза и высветятся другие числа.

Для того, чтобы открыть сейф необходимо ввести ту же самую последовательность и нажать кнопку. Устройство автоматически будет выключать экран когда вы закрыли сейф и ничего не будете настраивать (не крутите потенциометры и не нажимаете кнопку). Если вы введете неправильную последовательность индикатор мигнет три раза. Как только вы ввели правильную комбинацию, светодиод на кнопке опять загорится, а сервопривод повернется в 0 градусов, указывая но то, что замок открыт.

Закрыть замок -> установить код -> нажать кнопку -> светодиод погаснет.

Открыть замок -> установить код -> нажать кнопку -> светодиод зажжется.

Нам понадобится:

  • Arduino Uno х 1шт.
  • Trema Set Shield х 1шт.
  • Trema-модуль потенциометр х 2шт.
  • Trema-модуль кнопка со светодиодом, синяя х 1шт.
  • Штыревой соединитель х 1шт.
  • Сервопривод х 1шт.

Для реализации проекта нам необходимо установить следующие библиотеки:

  • Библиотека iarduino_4LED для работы с Trema-модуль четырехразрядным LED индикатором.
  • Библиотека Servo для работы с сервоприводами (библиотека входит в стандартный набор Arduino IDE).

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE .

Схема сборки:

  • Устанавливаем Trema Set Shield в Arduino Uno.
  • Устанавливаем Trema-модуль Четырехразрядный LED индикатор в 4 посадочную площадку.

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

Код программы:

Алгоритм работы:

В начале скетча (до кода setup) выполняются следующие действия:

  • Подключаем библиотеку iarduino_4LED для работы с Trema-модуль Четырехразрядным LED индикатором.
  • Объявляем объект dispLED, с указанием выводов дисплея.
  • Подключаем библиотеку Servo, для работы с Сервоприводом.
  • Объявляем объект servo.
  • Объявляем пины для работы с левым и правым Trema-модуль потенциометром, Сервоприводом, Trema-модуль кнопкой со светодиодом, синяя, а так же пины для работы с самими светодиодами.
  • Объявляем переменные и константы, которые задействованы в программе.
  • Объявляем функции.

В коде setup выполняются следующие действия:

  • Присоединяем сервопривод к выводу pinServo.
  • Переводим вывод pinKeyBlue, pinKeyLedBlue в режим входа.
  • Инициируем LED дисплей.
  • Устанавливаем максимальную яркость свечения LED индикатора.
  • Разрешаем переход к событию 1.

В коде loop выполняются следующие действия:

  • Событие 1.
  • Считываем значение с потенциометров с помощью функции «ReadingValues()».
  • Выводим значения потенциометров с помощью функции «ShowTime()».
  • Если нажата кнопка, то сохраняем кодовую последовательность, разрешаем переход к событию 2 и изменяем событие вывода значений потенциометра в другом диапазоне на противоположное .
  • Устанавливаем сервопривод на 180 градусов.
  • Включаем светодиод на кнопке.
  • Разрешаем событие нажатия кнопки, если прошла одна секунда с момента начала этого события.
  • Событие 2.
  • Осуществляем мигание с помощью цикла, в котором сначала очищаем дисплей, гасим светодиод и ждем 500 мс, затем выводим на дисплей значения потенциометров, зажигаем светодиод, ждем 500 мс и так три раза.
  • Гасим светодиод, устанавливаем на сервопривод 0 градусов, разрешаем переход к событию 3 и обнуляем переменные значений с левого и правого потенциометра без масштабирования.
  • Событие 3.
  • Считываем значение с потенциометров с помощью функции «ReadingValues()».
  • Выводим значения потенциометров с помощью функции «ShowTime()».
  • Если оба предыдущих значения потенциометра равно новому, то увеличиваем переменную счета. А если не равно, обнуляем переменную счета.
  • Сохраняем новые значения левого и правого потенциометров в предыдущие переменные.
  • Если переменная счета больше 500, то разрешаем переход к событию 4.
  • Если нажата кнопка, то сравниваем кодовую последовательность с новыми установленными значениями потенциометров. Если совпадают, то зажигаем светодиод, устанавливаем сервопривод а 180 градусов., разрешаем переход к событию 1, запрещаем события нажатия кнопки, сохраняем нынешнее значение счетчика. Если не равны, тогда три раза мигаем экраном, в цикле убавляя и прибавляя яркость подсветки, через каждый 500 мс.
  • Событие 4.
  • Очищаем индикатор.
  • Обнуляем переменную счета.
  • Считываем значение с потенциометров с помощью функции «ReadingValues()».
  • Если значения изменились, то разрешаем переход к события 3.
  • Сохраняем новые значения левого и правого потенциометров в предыдущие переменные.
  • Если нажата кнопка, то разрешаем переход в событие 3.
  • функции «ReadingValues()». В ней убираем дребезг потенциометров, а именно значения на потенциометрах не в масштабе должны быть больше или меньше предыдущих значений на 10 единиц. Тогда сохраняем текущие значения потенциометров не в масштабе и сохраняем текущие значения потенциометров масштабе в зависимости от диапазона.
  • Функция «ShowTime() «. В ней преобразуем время целочисленного значения в строковое, добавляя ноль, где это необходимо. А так же выводим раз в пол секунды общее время и мигающую точку по центру, для событий 1 и 7. Для остальных событий выводим время и точку постоянно.

Как сделать электромеханический кодовый замок своими руками: схема на электронных компонентах и Ардуино

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

Шаг 1: Нужные материалы

  • Arduino Mega 2560
  • Набор проводов-перемычек для макетных плат
  • LCD дисплей (16 знаков х 2 строки)
  • Резистор переменного сопротивления
  • Клавиатура
  • Зеленый и красный диоды
  • Кусок ДСП
  • Печатная плата
  • Сервопривод

Шаг 2: Проверяем клавиатуру

На картинке изображена электронная схема подключения, но я бы советовал проверить клавиатуру просто мультиметром.

Шаг 3: Код

Я не могу точно вспомнить, кто поделился со мной этим кодом, но спасибо этому доброму человеку. От того кода я оставил основу, основные моменты изменил под свои нужды.

Прежде чем вы скопируете код, подключите готовую библиотеку, которая находится в папке библиотек. Находится она по следующему пути: Windows C: —> program files (x86) —> Arduino.

Скопируйте код (но лучше загрузить файл):

Файлы

  • Password_lock3.ino
  • keypad.zip
  • Liqu >

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

Если вы хотите вывести клавиатуру, диоды и дисплей на столешницу или дверцу шкафа, вам останется только поместить контроллер и плату в коробку.

Шаг 5: Устанавливаем на место

  1. Нарисуйте, как примерно вы представляете себе результат
  2. Выберите место на столешнице, где вы будете устанавливать прибор (я советую установить прибор в верхний ящик стола и вывести периферию на поверхность столешницы)
  3. Наметьте на столе линии, по которым будете вырезать
  4. В углах контура просверлите отверстия (края отверстий не должны выходить за пределы контура)
  5. Вставьте полотно электролобзика в одно из отверстий и выпиливайте отверстие по контуру, посверленные отверстия облегчат вам процесс выпиливания углов
  6. Выпилите из листа ДСП (не толще 2,5 мм) кусок такого же размера, как и отверстие в столешнице
  7. На этом куске наметьте отверстия под клавиатуру, диоды и дисплей
  8. Просверлите отверстие для лобзика и выпилите намеченные фигуры
  9. Припаяйте провода-перемычки к контактам дисплея, клавиатуры и диодов
  10. Вставьте дисплей, клавиатуру и диоды в соответствующие отверстия в ДСП
  11. Кусок ДСП поместите в отверстие в столешнице
  12. Закрепить кусок ДСП можно маленькими уголками или клеем, я рекомендую первый вариант

По желанию:
Если закрепили поверхность кодового замка была утоплена в столешницу, можно добавить сверху еще один кусок ДСП, закрывающий электрокомпоненты. Этот кусок должен быть чуть больше, чем вырез в столешнице, и с маленькой петлей.

Шаг 6: Устанавливаем запирающий механизм

Эта часть достаточно сложная, поэтому заранее извиняюсь, если что-то написал непонятно.
Найдите где-нибудь металлическую пластину и согните ее буквой П. «Ноги» буквы сделайте по 3 см, а перекладину — 2 см.

В одной из «ног» просверлите 2 отверстия.
В дверце ящика просверлите 2 отверстия на таком же расстоянии друг от друга, как и отверстия на металлической детали.

Просверлите 2 отверстия по середине дверцы (не так, как это сделал я), если, конечно, вы не используете два сервопривода (что гораздо лучше в том случае, если дверца большая).
Закрепите П-образный крепеж на дверце двумя заклепками.

При установке сервопривода ориентируйтесь на фото. Установите привод в 2 см (или в 1см, это зависит от того, какую перекладину вы сделали П-образному крепежу) от дверцы.
Я приклеил сервопривод на суперклей, но вам я советую так не делать.

Шаг 7: Ставим выключатель на питание

Пару месяцев назад я поменял 12В адаптер от ноутбука на блок питания от старого компьютера.
Я соединил световой выключатель с проводом блока питания и с 12В выходом контроллера. Теперь я выключателем могу включать-выключать питание и кодовый замок. Блок питания подает ток на 2 диодных полосы, диоды замка и сам замок.

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

Шаг 8: Заключение

Работа над замком доставила мне огромное удовольствие. Я впервые сам писал код для микроконтроллера, и для этого мне пришлось многому научиться.

Квадрат в столешнице нужно было вырезать аккуратнее.

Я хотел бы внести следующие изменения:

  • заменить Arduino Mega 2560 на Arduino Uno и подключить клавиатуру к аналоговому входу (используя пороговый сигнал)
  • поместить замок в корпус
  • напечатать на 3Д-принтере нормальную панель, которая бы закрыла неаккуратный вырез в столешнице. Я напечатаю панель, как только заработает нормально мой самодельный 3Д-принтер (пока что сопло постоянно забивается, а филамент скручивается)
  • заменить сервопривод на соленоид

Arduino «кодовый замок»

Ребята, необходимо сделать подобие кодового замка на ARDUINO, суть которого в следующем:

соединяем провода в правильном порядке (допустим 5 проводов ПАПА и 5 МАМА) и замок открывается. Выскажите какие-то мысли как это реализовать или может ссылки есть на нечто подобное уже реализованное. Не бросайтесь тапками, пожалуйста.)

Я осваиваю понемногу ардуинку, но вот встала необходимость такого проекта. Буду очень благодарен. Комменты для минусов прикрепил.

Дубликаты не найдены

судя по фотке — жизнь тебя побросала

Подаёшь на выходные пины разные значения ШИМ. Коротишь их на входные ноги.

Дальше с входных получаешь значения и проверяешь для каждого пина отдельно правильность. Все совпали — замок открылся.

Ну и дальше что-то типа

На 4 умножаем, т.к. analogRead возвращает значение от 0 до 1023, тогда как analogWrite оперирует диапазоном 0. 255

Но вообще, конечно, надо брать некоторый допуск, т.к. значения analogRead будут иметь некоторую погрешность. Но это уже надо смотреть на практике как меняются цифры.

Как вариант можно вообще не использовать ШИМ. А сделать на всех выходных проводах разные напряжения при помощи делителей напряжения.

PS Знаешь, я не пробовал. Но по умолчанию в ардуине ШИМ на весьма низкой частоте. Поэтому сдается мне, что если напрямую подключить выход ШИМ ко входу АЦП, то ты можешь получить не совсем то, что рассчитываешь. И по хорошему надо бы дополнить цепь RC фильтром.

зачем шим и разные напряжения?! ))

Подаешь питание на первый провод и смотришь где оно появилось, потом второй третий и тд. опрос 25 вариантов займет максимум 100 милисекунд

Да можно. Собственно я этот способ уже предлагал #comment_69804347 однако он занимает много портов. Поэтому просто как вариант обсуждаю другие. С делителями вместо 10 портов дискретных портов будут задействованы 5 аналоговых.

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

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

ну перемычками правильную последовательность не реализовать. т. е. если сначала надо 2 замкнуть а потом 1 то с перемычками можно и наоборот сделать и все работать будет.

Согласен. Но мы не владеем полными условиями задачи.

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

С каких это ардуина стала космосом по деньгам?

а на ардуине рефрактометр не реализовать.

Это та штука, которой на кабеле ищется точка обрыва, по искажению прошедшего сигнала.

Честно сказать упустил тот момент, когда задача с кодовым замком потребовала использованиея рефрактометра.

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

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

Опять же, все зависит от задач, если это квеструм или нечто подобюное — то вариант с перемычками идеален.

Механические ключи, это же такая штука которая не даст вставить не тот провод в не ту дырку. То есть сужает подмножество возможных вариантов которые можно выставить в виде кода. Задача кодового замка как раз наоборот иметь возможность выставить как можно больше неправильных вариантов. То есть например если это комната с загадками, то человек должен обыскать всю комнату что бы понять, что 4 соединить с A, 1 соединить в D, 2 соединить с B и 3 соединить с С. А не просто подойти к двери и посмотрев на нее сказать 2 дотягивается только до B, 3 дотягивается только до C, 1 не втыкается в А, но втыкается только D. И место долгих поисков решает детскую задачку.

Берешь 5 пар резисторов,в которых один резистор одинаковый у всех пар, остальные 5 разные. Каждую пару одним концом на землю, вторым на +5, середина — «папа». берешь аналоговые входы — это твои мамы. итого у тебя будет 5 разных показателей. В скетче пишешь проверку совпадения всех 5 значений.

Автоматический «умный» замок и Arduino

Прогресс не стоит на месте и «Умные замки» все чаще появляются на дверях квартир, гаражей и домов.

Открывается подобный замок при нажатии на кнопку на смартфоне. Благо, смартфоны и планшеты уже вошли в наш обиход. В некоторых случаях, «умные замки» подключают к «облачным сервисам» вроде гугл диска и открывают удаленно. Кроме того, подобный вариант дает возможность давать доступ к открытию двери другим людям.

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

Кроме того, в проект добавлена возможность открывать замок после опознания отпечатка пальца. Для этого будет интегрирован датчик отпечатка пальца. Оба варианта открытия дверей будут работать на базе Adafruit IO платформы.

Подобный замок может стать отличным первым шагом в проекте вашего «Умного дома».

Настройка датчика отпечатка пальца

Для работы с датчиком отпечатка пальцев, есть отличная библиотека для Arduino, которая значительно облегчает процесс настройки датчика. В этом проекте используется Arduino Uno. Для подключения к интернету используется плата Adafruit CC3000.

Начнем с подключения питания:

  • Подключите контакт 5V с платы Arduino к красной рельсе питания;
  • Контакт GND с Arduino подключается к синей рельсе на беспаечной монтажной плате.

Переходим к подключению датчика отпечатка пальца:

  • Сначала подключите питание. Для этого красный провод соединяется с рельсой +5 V, а черный — с рельсой GND;
  • Белый провод датчика подключается к контакту 4 на Arduino.
  • Зеленый провод идет к контакту 3 на микроконтроллере.

Теперь займемся модулем CC3000:

  • Контакт IRQ с платы CC3000 подключаем к пину 2 на Arduino.
  • VBAT — к контакту 5.
  • CS — к контакту 10.
  • После этого надо подключить SPI контакты к Arduino: MOSI, MISO и CLK — к контактам 11, 12 и 13 соответственно.

Ну и в конце надо обеспечить питание: Vin — к Arduino 5V (красная рельса на вашей монтажной плате), а GND к GND (синяя рельса на макетке).

Фотография полностью собранного проекта показана ниже:

Перед разработкой скетча, который будет подгружать данные на Adafruit IO, надо передать данные о вашем отпечатке пальца сенсору. Иначе в дальнейшем он вас не опознает ;). Рекомендуем откалибровать датчик отпечатка пальца, используя Arduino отдельно. Если вы работаете с этим сенсором впервые, рекомендуем ознакомиться с процессом калибровки и детальной инструкцией по работе с датчиком отпечатка пальца.

Если вы еще не сделали этого, то заведите аккаунт на Adafruit IO.

После этого можем перейти к следующему этапу разработки «умного замка» на Arduino: а именно, разработка скетча, который будет передавать данные на Adafruit IO. Так как программа достаточно объемная, в статье мы выделим и рассмотрим только ее основные части, а после дадим ссылку на GitHub, где вы сможете скачать полный скетч.

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

После этого надо немного подкорректировать скетч, вставив параметры вашей WiFi сети, указав SSID и пароль (password):

#define WLAN_SSID «ваш_wifi_ssid»

#define WLAN_PASS «ваш_wifi_пароль»

#define WLAN_SECURITY WLAN_SEC_WPA2>

Кроме этого, необходимо ввести имя и AIO ключ (key) для входа в ваш аккаунт Adafruit IO:

#define AIO_SERVER «io.adafruit.com»

#define AIO_SERVERPORT 1883

#define AIO_USERNAME «adafruit_io_имя»

#define AIO_KEY «adafruit_io_ключ»>

Следующие строки отвечают за взаимодействие и обработку данных с датчика отпечатка пальца. Если датчик был активирован (отпечаток совпал), будет ‘1’:

const char FINGERPRINT_FEED[] PROGMEM = AIO_USERNAME «/feeds/fingerprint»;

Adafruit_MQTT_Publish fingerprint = Adafruit_MQTT_Publish(&mqtt, FINGERPRINT_FEED);

Кроме того, надо создать экземпляр объекта SoftwareSerial для нашего сенсора:

SoftwareSerial mySerial(3, 4);

После этого мы можем создать объект для нашего сенсора:

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

Внутри скетча мы указываем какой fingerID должен активировать замок в дальнейшем. В данном примере используется 0, который соответствует ID первого отпечатка пальцев, который используется датчиком:

После этого инициализируем счетчик и задержку (delay) в нашем проекте. По сути мы хотим, чтобы замок автоматически срабатывал после открытия. В данном примере используется задержка в 10 секунд, но вы можете подстроить это значение под собственные потребности:

int activationCounter = 0;

int lastActivation = 0;

int activationTime = 10 * 1000;

В теле функции setup() мы инициализируем датчик отпечатка пальцев и обеспечиваем подключение чипа CC3000 к вашей WiFi сети.

В теле функции loop() подключаемся к Adafruit IO. За это отвечает следующая строка:

После подключения к платформе Adafruit IO, проверяем последний отпечаток пальца. Если он совпадает, а замок не активирован, мы отсылаем ‘1’ для обработки в Adafruit IO:

Если же в пределах функции loop() замок активирован и мы достигли значения задержки, которое указывали выше, отсылаем ‘0’:

if ((activationCounter — lastActivation > activationTime) && lockState == true) <

Последнюю версию кода вы можете скачать на GitHub.

Пришло время тестировать наш проект! Не забудьте скачать и установить все необходимые библиотеки для Arduino!

Убедитесь, что вы внесли все необходимые изменения в скетч и загрузите его на ваш Arduino. После этого откройте окно серийного монитора.

Когда Arduino подключится к WiFi сети, сенсор отпечатка пальца начнет мигать красным цветом. Прислоните палец к датчику. В окне серийного монитора должен отобразится ID номер. Если он совпадет, появится сообщение, ‘OK!’. Это значит, что данные были отправлены на сервера Adafruit IO.

Схема и скетч для дальнейшей настройки замка на примере светодиода

Теперь займемся той частью проекта, которая непосредственно отвечает за управление дверным замком. Для подключения к беспроводной сети и активации/деактивации замка понадобится дополнительный модуль Adafruit ESP8266 (модуль ESP8266 не обязательно должен быть от Adafruit). На примере, который рассмотрим ниже, вы сможете оценить насколько легко обеспечить обмен данными между двумя платформами (Arduino и ESP8266) с использованием Adafruit IO.

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

Схема достаточно простая: сначала установите ESP8266 на breadboard. После этого установите светодиод. Не забывайте, что длинная (позитивная) нога светодиода подключается через резистор. Вторая нога резистора подключается к контакту 5 на модуле ESP8266. Вторая (катод) светодиода подключаем к пину GND на ESP8266.

Полностью собранная схема показана на фото ниже.

Теперь давайте разберемся со скетчем, который используем для этого проекта. Опять-таки, код достаточно объемный и сложный, поэтому мы рассмотрим только его основные части:

Начинаем с подключения необходимых библиотек:

Настраиваем параметры WiFi:

#define WLAN_SSID «ваш_wifi_ssid»

#define WLAN_PASS «ваш_wifi_пароль»

#define WLAN_SECURITY WLAN_SEC_WPA2

Также настраиваем параметры Adafruit IO. Так же, как и в предыдущем разделе:

#define AIO_SERVER «io.adafruit.com»

#define AIO_SERVERPORT 1883

#define AIO_USERNAME «adafruit_io_имя_пользователя»

#define AIO_KEY «adafruit_io_ключ»

Указываем, к какому пину мы подключили светодиод (в дальнейшем это будет наш замок или реле):

int relayPin = 5;

Взаимодействие с датчиком отпечатка пальцев, как и в предыдущем разделе:

const char LOCK_FEED[] PROGMEM = AIO_USERNAME «/feeds/lock»;

Adafruit_MQTT_Subscribe lock = Adafruit_MQTT_Subscribe(&mqtt, LOCK_FEED);

В теле функции setup() указываем, что пин, к которому подключен светодиод, должен работать в режиме OUTPUT:

В пределах цикла loop() сначала проверяем, подключились ли мы к Adafruit IO:

После этого проверяем, какой сигнал поступает. Если передается ‘1’, активируем контакт, который мы объявили раньше, к которому подключен наш светодиод. Если мы получили ‘0’, переводим контакт в состояние ‘low’:

while ((subscription = mqtt.readSubscription(1000))) <

if (subscription == &lock) <

// Сохраняем команду в данные типа строка

String command = String((char *)lock.lastread);

Найти последнюю версию скетча вы можете на GitHub.

Пришло время тестировать наш проект. Не забудьте загрузить все необходимые библиотеки для вашего Arduino и проверьте, верно ли вы внесли изменения в скетч.

Для программирования чипа ESP8266 можно использовать простой USB-FTDI конвертер.

Загрузите скетч на Arduino и откройте окно серийного монитора. На данном этапе мы просто проверили, удалось ли подключиться к Adafruit IO: доступный функционал мы рассмотрим дальше.

Тестируем проект

Теперь приступаем к тестированию! Перейдите в меню пользователя вашего Adafruit IO, в меню Feeds. Проверьте, созданы или нет каналы для отпечатка пальцев и замка (на принт-скрине ниже это строки fingerprint и lock):

Если их нет, то придется создать вручную.

Теперь нам надо обеспечить обмен данными между каналами fingerprint и lock. Канал lock должен принимать значение ‘1’, когда канал fingerprint принимает значение ‘1’ и наоборот.

Для этого используем очень мощный инструмент Adafruit IO: триггеры. Триггеры — это по-сути условия, которые вы можете применять к настроенным каналам. То есть, их можно использовать для взаимосвязи двух каналов.

Создаем новый reactive trigger из раздела Triggers в Adafruit IO. Это обеспечит возможность обмениваться данными между каналами датчика отпечатка пальцев и замка:

Вот как это должно выглядеть, когда оба триггера настроены:

Все! Теперь мы действительно можем тестить наш проект! Прикладываем палец к сенсору и видим как Arduino начал подмигивать светодиодом, который соответствует передаче данных. После этого должен начать мигать светодиод на модуле ESP8266. Это значит, что он начал получать данные через MQTT. Светодиод на монтажной плате в этот момент должен тоже включиться.

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

Настраиваем электронный замок

Мы добрались до последней части проекта: непосредственное подключение и управление электронным замком с помощью Arduino и датчика отпечатка пальца. Проект непростой, вы можете использовать все исходники в том виде, в котором они изложены выше, но вместо светодиода подключить реле.

Для непосредственного подключения замка вам понадобятся дополнительные компоненты: источник питания на 12 В, джек для подключения питания, транзистор (в данном примере используется IRLB8721PbF MOSFET, но можно использовать и другой, например, биполярный транзистор TIP102. Если вы используете биполярный транзистор, вам надо будет добавить резистор.

Ниже показана электрическая схема подключения всех компонентов к модулю ESP8266:

Обратите внимание, что если вы используете MOSFET транзистор, вам не понадобится резистор между пином 5 модуля ESP8266 и транзистором.

Полностью собранный проект показан на фото ниже:

Запитайте модуль ESP8266 с использованием FTDI модуля и подключите источник питания 12 В к джеку. Если вы использовали рекомендованные выше пины для подключения, в скетче ничего менять не придется.

Теперь можете прислонить палец к сенсору: замок должен сработать, отреагировав на ваш отпечаток пальца. На видео ниже показан проект автоматического «умного» замка в действии:

Дальнейшее развитие проекта «Умный замок»

В нашем проекте релизовано дистанционное управление дверным замком с помощью отпечатка пальца.

Можете смело экспериментировать, модифицировать скетч и обвязку. Например, можно заменить дверной электронный замок на реле для управления питанием вашего 3D принтера, манипулятора или квадрокоптера.

Можно развивать ваш «умный дом». Например, удаленно активировать систему полива на Arduino или включать свет в комнате. При этом не забывайте, что вы одновременно можете активировать практически неограниченное количество устройств, используя Adafruit IO.

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

Читайте также:  Передача электроэнергии на расстояние без проводов
Рейтинг
( Пока оценок нет )
Загрузка ...
Adblock
detector