Кодовый замок на 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 секунд система вернётся в обычный (дежурный) режим
  • Если нажать #, сразу выйдем из режима ввода пароля
  • Если нажать секретную кнопку смены пароля в режиме ввода пароля, то тоже из него выйдем

ТОП-3 интересных проекта на Ардуино своими руками, схемы, видео

Схема и проект кодового замка на Arduino

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

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

  • Смотрите также, как сделать часы реального времени на ЖК-дисплее

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

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

Код программы и его детальное описание

#define LED1 10 // красный светодиод
#define LED2 11 // зеленый светодиод
#define RELAY 12 // реле на замок

#define NUM_KEYS 5 // количество знаков в коде

char key;
char myarraw[NUM_KEYS] = < '1', '2', '3', '4', '5'>; // массив с верным кодом
char button_pressed[NUM_KEYS]; //массив для хранения нажатых кнопок
int k=0; // счетчик нажатий
int s=0; // счетчик совпадений нажатых кнопок с верными
const byte ROWS = 4; // количество строк в матрице клавиатуры
const byte COLS = 4; // количество столбцов
char keys[ROWS][COLS] = < // таблица соответствия кнопок символам
<'1','2','3','A'>,
<'4','5','6','B'>,
<'7','8','9','C'>,
<'*','0','#','D'>>;
byte rowPins[ROWS] = <5, 4, 3, 2>; // пины подключенных строк
byte colPins[COLS] = <9, 8, 7, 6>; // пины подключенных столбцов

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); // создаем объект клавиатуры для работы с ней

void setup() <
pinMode(LED1, OUTPUT); // красный светодиод
pinMode(LED2, OUTPUT); // зеленый светодиод
pinMode(RELAY, OUTPUT); // реле управления замком
digitalWrite(RELAY, HIGH); // вход реле инверсный, поэтому его сразу включаем (?!)

if ( key != NO_KEY ) // если она все-таки есть
<
button_pressed [k] = key; //сохраняем эту кнопочку в массиве
k = k + 1; // запоминаем сколько уже кнопок нажали
if(k == NUM_KEYS) // если нажали нужное количество кнопок

Далее остается только залить прошивку в Arduino и провести эмуляцию в Proteus.

Барометр с расширенными функциями на Ардуино для дома своими руками

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

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

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

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

Результаты измерений выводятся на двухстрочный знакосинтезирующий дисплей. В первую строку выводится результат измерения текущего атмосферного давления в мм рт. ст., отклонение текущего значения давления от среднего значения для данного места (положительным считается превышение текущего значения давления над средним), а также температура воздуха в градусах Цельсия. Данные, приведенные в верхней строке, обновляются каждые 6 секунд. Вывод новых данных сопровождается вспышкой светодиода, расположенного над индикатором.

  • Схема термометра с модулем DS18B20 на основе платы Arduino

Во вторую строку индикатора выводятся показатели роста давления за последний час, 3 часа и 10 часов. Если давление за указанный временной промежуток возросло, то соответствующий рост выводится с плюсом, в противном случае — с минусом. Данные во второй строке обновляются каждые 10 минут. Сразу после включения барометра вторая строка будет пуста. Числовые значения появятся там по прошествии 1-го, 3-х и 10-ти часов соответственно.

Барометр предназначен для работы в сухом отапливаемом помещении при температуре 0. 40 °C и атмосферном давлении 600. 825 мм рт. ст.

Точность измерения давления и температуры полностью определяется точностью использованного датчика давления BMP180 фирмы Bosch. Типовая погрешность измерения давления составляет -1hPa, что примерно соответствует 0.75 мм рт. ст. Шумовая составляющая при измерении давления — 0.02 hPa (0.015 мм рт. ст.). Типовая погрешность измерения температуры вблизи значения 25 °C составляет +/- 0.5°C.

Интервалы времени в данном устройстве отсчитываются программно. Погрешность формирования этих интервалов, измеренная автором, не превышает одной минуты за 10 часов.

Схема барометра с дисплеем на Ардуино и необходимые детали

Список необходимых элементов:

  • Модуль с датчиком BMP180 (A1).
  • Плата Arduino (A2) — Arduino Nano 3.0.
  • Выпрямительный диод (VD1) — 1N4007.
  • LCD-дисплей (HG1) — WH1602L Winstar.
  • Светодиод (HL1) — L-1154GT Kingbright.
  • 2 электролитических конденсатора (С1, С2) — 4700 мкФ х 16 В и 220 мкФ х 16 В соответственно.
  • 2 резистора (R1, R3) — 1 кОм и 100 Ом 0.5 ВА соответственно.
  • Подстроечный резистор (R2) — 10 кОм.

Рекомендации по монтажу барометра для дома на Arduino

Основным элементом устройства является модуль Arduino Nano. Мы используем 3-ю версию с микроконтроллером ATmega 328. Память модуля в данном случае занята только на треть, поэтому возможно применение модуля Arduino Nano с микроконтроллером ATmega 168.

Дисплей Winstar WH1602L — двухстрочный на 16 знакомест в каждой строке. Его основой является контроллер HD44780. Резистор R2 позволяет подстроить контрастность изображения. Если напряжение на выводе 3 (Vo) будет сильно отличаться от оптимального, то на дисплее совсем не будет видно никакого изображения. Это обстоятельство необходимо учитывать при первом включении устройства. Для данного экземпляра дисплея оптимальным оказалось напряжение на выводе 3 около 1 В. Резистор R3 определяет величину тока светодиодов подсветки.

Датчик давления BMP180 имеет металлический корпус размером 3.6х3.6×1 мм. Выводы его представляют собой контактные площадки, расположенные на дне корпуса. Кроме того, датчик требует питания 1.8–3.6 В. Уровни сигналов, которыми датчик обменивается с внешним устройством, также отличаются от требуемых. Эти обстоятельства затрудняют непосредственное использование BMP180. К счастью, данная проблема легко решается. В продаже имеются модули на основе датчиков BMP180, в состав которых входят сами датчики и все согласующие элементы. Эти модули представляют собой плату размером 10×13 мм. Их стоимость — примерно 1.4 USD.

Светодиод HL1 вспыхивает каждые 6 секунд сигнализируя о том, что на табло барометра выведены новые результаты. Мы использовали зелёный светодиод диаметром 3 мм L-1154GT фирмы Kingbright.

Конденсатор C1 имеет довольно большую ёмкость, что делает устройство нечувствительным к кратковременным сбоям питания. Если это не требуется, то C1 можно уменьшить до 500 мкФ.

Диод D1 отключает подсветку индикатора при сбоях питания. Это увеличивает время автономной работы барометра от энергии, запасённой в конденсаторе C1.

Устройство можно питать от любого источника постоянного тока (зарядного устройство сотового телефона, блока питания какого-либо гаджета и т. п.) с выходным напряжением 8. 12 В. При напряжении 9 В барометр потребляет около 80 мА.

Устройство собрано на макетной плате размером 85 х 55 мм, которая прикреплена к дисплею с помощью пластины из оргстекла.

Датчик BMP180 располагается внизу — как можно дальше от основных тепловыделяющих элементов, которыми являются резистор R3 и дисплей со светодиодной подсветкой. Корпусом устройства является пластмассовая коробка размером 160х160х25. В нижней и верхней стенках коробки следует просверлить ряд вентиляционных отверстий.

Прошивка барометра на Ардуино для дома

Скетч, который нужно прошить в память модуля Arduino Nano, представлен в архиве, который можно скачать ниже. Использована среда Arduino IDE 1.8.1. Для поддержки датчика давления требуется установить библиотеку Adafruit-BMP085. Соответствующий файл тоже есть в архиве.

Перед загрузкой скетча в строке 17 следует вместо числа 740.0, которое соответствует среднему давлению в месте установки барометра, вписать среднее давление в мм рт. ст., соответствующее тому месту, где будет установлен Ваш барометр. В первом приближении этот параметр можно определить по формуле Рср = 760-0.091h, где h —высота над уровнем моря в метрах. Высоту проще всего определить с помощью GPS-навигатора.

Стоит учесть, что данная формула не учитывает многие факторы, влияющие на атмосферное давление и применима только для высот до 500 м.

Простой и интересный проект на Ардуино — подарочная книга с секретом на Ардуино

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

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

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

Необходимые инструменты и материалы для книги с секретом на Ардуино

  • Бумага.
  • Картон.
  • Бархатный картон.
  • Декоративные камни.
  • Черный чай.
  • Ардуино.
  • Сервопривод.
  • 3 светодиода.
  • Акселерометр MPU 6050.
  • 2 геркона.
  • 2 резистора 10 кОм.
  • Резистор 220 Ом.
  • Переключатель.
  • Потенциометр 1 кОм.
  • Батарея 9 В.
  • Провода.
  • Клей.
  • Ножницы.
  • Краска.
  • 3D принтер.
  • Утюг.
  • Паяльник.
  • Клеевой пистолет.

Шаг первый: подготовка листов

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

Затем сминаем бумагу и опускаем смятые листы в круто заваренный черный чай на 15 минут. Через 15 минут листы достаем и высушиваем через полотенце утюгом.

Шаг второй: сервопривод

Используем сервопривод Tower Pro 9g SG90. Остальные детали напечатаны на 3D принтере. Вся информация по ним доступна для скачивания в архиве ниже.

Шаг третий: отсеки

Книга, как бы разделена на несколько частей: обложка, передняя часть с ардуино, часть с текстом и рисунками, часть с тайником. Берем пачку листов А4 и делим пополам. В одной части вырезаем нишу под Ардуино и батарею, в другой — под сервопривод и тайник. Торцы листов внутри отсеков проклеиваем термоклеем.

Тайник, в отличие от отсека с Ардуино, будет виден, поэтому проклеиваем его картоном.

Видимые части замачиваем в чае.

Шаг четвертый: установка сервопривода

Закрепляем сервопривод в отсеке. Выводим провод. На отдельных листах закрепляем петлю замка. В нормальном положении язычок привода цепляем за петлю и отсек закрыт.

Шаг пятый: обложка

Обложку изготавливаем из картона и оклеиваем бархатным картоном.

Шаг шестой: сборка книги

Соединяем части книги с помощью степлера и клея.

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

Прохождение каждого задания информируют загорающиеся светодиоды. В обложке делаем под них отверстия, вклеиваем их и закрываем сверху декоративными стеклами.

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

Шаг седьмой: Ардуино

Подключаем все электронные устройства к Ардуино и загружаем код. Вся информация есть в архиве ниже.

Шаг восьмой: шахматные фигуры

Шахматные фигуры можно напечатать на 3D-принтере. В нижнюю часть вклеиваем магниты (информация есть в архиве).

Подарочная книга с секретом на Ардуино готова.

  • Возможно, вас также заинтересует статья о ТОП-3 проектах Ардуино для начинающих

Делаем RFID-замок с использованием Arduino

Сегодня урок о том как использовать RFID-ридер с Arduino для создания простой системы блокировки, простыми словами – RFID-замок.

В уроке будет использоваться RFID-метка с Arduino. Устройство читает уникальный идентификатор (UID) каждого тега RFID, который мы размещается рядом со считывателем, и отображает его на OLED-дисплее. Если UID тега равен предопределенному значению, которое хранится в памяти Arduino, тогда на дисплее мы увидим сообщение «Unlocked» (англ., разблокировано). Если уникальный идентификатор не равен предопределенному значению, сообщение “Unlocked” не появится – см. фото ниже.

Замок закрыт

Замок открыт

Шаг 1: Детали, комплектующие

Детали, необходимые для создания этого проекта:

Общая стоимость комплектующих проекта составила примерно 15 долларов.

Шаг 2: RFID-считыватель RC522

В каждой метке RFID есть небольшой чип (на фото белая карточка). Если направить фонарик на эту RFID-карту, можно увидеть маленький чип и катушку, которая его окружает. У этого чипа нет батареи для получения мощности. Он получает питание от считывателя беспроводным образом используя эту большую катушку. Можно прочитать RFID-карту, подобную этой, с расстояния до 20 мм.

Тот же чип существует и в тегах RFID-брелка.

Каждый тег RFID имеет уникальный номер, который идентифицирует его. Это UID, который показывается на OLED-дисплее. За исключением этого UID, каждый тег может хранить данные. В этом типе карт можно хранить до 1 тысячи данных. Впечатляет, не так ли? Эта функция не будет использована сегодня. Сегодня все, что интересует, – это идентификация конкретной карты по ее UID. Стоимость RFID-считывателя и этих двух карт RFID составляет около 4 долларов США.

Шаг 3: OLED-дисплей

В уроке используется OLED-монитор 0.96′ 128×64 I2C.

Это очень хороший дисплей для использования с Arduino. Это дисплей OLED и это означает, что он имеет низкое энергопотребление. Потребляемая мощность этого дисплея составляет около 10-20 мА, и это зависит от количества пикселей.

Дисплей имеет разрешение 128 на 64 пикселя и имеет крошечный размер. Существует два варианта отображения. Один из них монохромный, а другой, как тот, который использован в уроке, может отображать два цвета: желтый и синий. Верхняя часть экрана может быть только желтой, а нижняя часть – синей.

Этот OLED-дисплей очень яркий и у него отличная и очень приятная библиотека, которую разработала компания Adafruit для этого дисплея. В дополнение к этому дисплей использует интерфейс I2C, поэтому соединение с Arduino невероятно простое.

Вам нужно только подключить два провода, за исключением Vcc и GND. Если вы новичок в Arduino и хотите использовать недорогой и простой дисплей в вашим проекте, начните с этого.

Шаг 4: Соединяем все детали

Связь с платой Arduino Uno очень проста. Сначала подключим питание как считывателя, так и дисплея.

Так как дисплей также может работать на 3,3 В, мы подключаем VCC от обоих модулей к положительной шине макета. Затем эта шина подключается к выходу 3,3 В от Arduino Uno. После чего соединяем обе земли (GND) с шиной заземления макета. Затем мы соединяем GND-шину макета с Arduino GND.

OLED-дисплей → Arduino

SCL → Аналоговый Pin 5

SDA → Аналоговый Pin 4

RFID-ридер → Arduino

RST → Цифровой Pin 9

IRQ → Не соединен

MISO → Цифровой Pin 12

MOSI → Цифровой Pin 11

SCK → Цифровой Pin 13

SDA → Цифровой Pin 10

Модуль RFID-считывателя использует интерфейс SPI для связи с Arduino. Поэтому мы собираемся использовать аппаратные штыри SPI от Arduino UNO.

Вывод RST поступает на цифровой контакт 9. Контакт IRQ остается несвязным. Контакт MISO подключается к цифровому выходу 12. Штырь MOSI идет на цифровой контакт 11. Контакт SCK переходит на цифровой контакт 13, и, наконец, вывод SDA идет на цифровой вывод 10. Вот и все.

Считыватель RFID подключен. Теперь нам нужно подключить OLED-дисплей к Arduino, используя интерфейс I2C. Таким образом, вывод SCL на дисплее переходит к аналоговому выводу Pin 5 и SDA на дисплее к аналоговому Pin 4. Если теперь мы включим проект и разместим RFID-карту рядом с ридером, мы увидим, что проект работает нормально.

Шаг 5: Код проекта

Чтобы код проекта был скомпилирован, нам нужно включить некоторые библиотеки. Прежде всего, нам нужна библиотека MFRC522 Rfid.

Чтобы установить её, перейдите в Sketch -> Include Libraries -> Manage libraries (Управление библиотеками). Найдите MFRC522 и установите её.

Нам также нужна библиотека Adafruit SSD1306 и библиотека Adafruit GFX для отображения.

Установите обе библиотеки. Библиотека Adafruit SSD1306 нуждается в небольшой модификации. Перейдите в папку Arduino -> Libraries, откройте папку Adafruit SSD1306 и отредактируйте библиотеку Adafruit_SSD1306.h. Закомментируйте строку 70 и раскомментируйте строку 69, т.к. дисплей имеет разрешение 128×64.

Сначала мы объявляем значение метки RFID, которую должен распознать Arduino. Это массив целых чисел:

Затем мы инициализируем считыватель RFID и дисплей:

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

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

Конечно, вы можете изменить этот код, чтобы сохранить более 1 значения UID, чтобы проект распознал больше RFID-меток. Это просто пример.

Код проекта:

Шаг 6: Итоговый результат

Как видно из урока – за небольшие деньги можно добавить RFID-ридер в ваши проекты. Можно легко создать систему безопасности с помощью этого ридера или создать более интересные проекты, например, чтобы данные с USB-диска считывались только после разблокировки.

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

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

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

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

Разработка

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

На схеме мы видим матрицу из кнопок, два светодиода и вместо катушки реле для удобства взят спикер, который при эмуляции начинает трещать. При правильном наборе кода загорается светодиод 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 с параметрами этой переменной в скобках. Как будто присваиваем значение этой переменной. И дальше работаем как с переменной, у которой можно менять параметры.

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

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

Шаг 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Скетч

#include
#include
Servo myservo;
const byte ROWS = 4; // 4 строки
const byte COLS = 4; // 4 столбца
char keys[ROWS][COLS] = <
<‘1′,’2′,’3′,’A’>,
<‘4′,’5′,’6′,’B’>,
<‘7′,’8′,’9′,’C’>,
<‘*’,’0′,’#’,’D’>
>;
char pass[] = <‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’>; // тут задаётся пароль каждый символ в отдельных кавычках
int passlen=0;
int r=0;
byte rowPins[ROWS] = <5,6, 7, 8>;
byte colPins[COLS] = <9, 10, 11, 12>;

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

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

Serial.print(«Вычисленная длина пароля «);
Serial.println(passlen);
>

void loop() <
char key = keypad.getKey();
if (key) <
Serial.println(key); // Передаем название нажатой клавиши в сериал порт
// tone(4, (int)key*10, 50); // Издаем звуковой сигнал длиной 50 миллисекунд
if (key==pass[r])
else
Serial.println(r);
if (r==passlen)
<
Serial.println(«ОТКРЫТО. »);
myservo.attach(3);
myservo.write(40);
delay(2000);
myservo.detach();
>

if (key==’#’)
<
Serial.println(«ЗАКРЫТО. »);
r=0;
myservo.attach(3);
myservo.write(140);
delay(2000);
myservo.detach();
>
>

Оставьте комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Читайте также:  Как осуществить мечту! Яхта из фанеры своими руками!
Ссылка на основную публикацию