Электронный замок на ардуино уно. Делаем RFID-замок с использованием Arduino

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

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

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

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

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

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

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

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

В данном уроке мы научимся делать простую систему, которая будет отпирать замок по электронному ключу (Метке).

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

В этом уроке нам понадобится:

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

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

Зуммер подключаем в следующей последовательности:

Arduino Зуммер
5V VCC
GND GND
pin 5 IO

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

Более наглядно Вы можете посмотреть, как мы подключили все модули на картинке ниже:

Теперь, если все подключено, то можно переходить к программированию.

Скетч:

#include #include #include // библиотека "RFID". #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); unsigned long uidDec, uidDecTemp; // для храниения номера метки в десятичном формате Servo servo; void setup() { Serial.begin(9600); Serial.println("Waiting for card..."); SPI.begin(); // инициализация SPI / Init SPI bus. mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card. servo.attach(6); servo.write(0); // устанавливаем серву в закрытое сосотояние } void loop() { // Поиск новой метки if (! mfrc522.PICC_IsNewCardPresent()) { return; } // Выбор метки if (! mfrc522.PICC_ReadCardSerial()) { return; } uidDec = 0; // Выдача серийного номера метки. for (byte i = 0; i < mfrc522.uid.size; i++) { uidDecTemp = mfrc522.uid.uidByte[i]; uidDec = uidDec * 256 + uidDecTemp; } Serial.println("Card UID: "); Serial.println(uidDec); // Выводим UID метки в консоль. if (uidDec == 3763966293) // Сравниваем Uid метки, если он равен заданому то серва открывает. { tone(5, 200, 500); // Делаем звуковой сигнал, Открытие servo.write(90); // Поворациваем серву на угол 90 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.) delay(3000); // пауза 3 сек и механизм запирается. tone(5, 500, 500); // Делаем звуковой сигнал, Закрытие } servo.write(0); // устанавливаем серву в закрытое сосотояние }

Разберем скетч более детально:

Для того, что бы узнать UID карточки(Метки), необходимо записать данный скетч в arduino, собрать схему, изложенную выше, и открыть Консоль (Мониторинг последовательного порта). Когда вы поднесете метку к RFID, в консоли выведется номер

Полученный UID необходимо ввести в следующую строчку:

If (uidDec == 3763966293) // Сравниваем Uid метки, если он равен заданному то сервопривод открывает задвижку.

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

Видео:

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

Работает замок так: Поднесли НАШ ключ (RFID-метка) - замок закрылся, поднесли ключ повторно - замок открылся. Для визуализации работы замка, использовано шесть двухцветных светодиодов (линейка). При закрытии - пробегает красный свет, при открытии - зелёный. Если поднести ЧУЖОЙ ключ, мигнут красные светодиоды.

В качестве исполнительного механизма, решил использовать привод центрального замка автомобиля. Можно купить новый, можно б/у, разница в цене не большая, поэтому использовал новый, оно и надёжней. Шток привода соединил со шпингалетом. Шпингалет ещё советский, крепкий. Да и мощной "антивандальности" мне не требуется.

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

Исходя из того что схема замка (по задумке) имеет гарантированное питание, аккумулятор 12 вольт, для обеспечения работы замка, в случае пропадания ~220 . Разработал мостовую схему управления "машинкой". Особой фишкой схемы является её нелинейность, обеспечивающая надёжную работу механизма замка, и одновременно - щадящий режим работы "машинки" и ключевых транзисторов.

На схеме (выше), плечо "Закрыть" выделено красным цветом, а плечо "Открыть" - зелёным. Плечи питаются раздельно, через резисторы (находятся в блоке питания). Разделение питания плеч моста, ввёл для исключения ложных срабатываний.

Пояснение: Через резисторы 33- Ом (на схеме блока питания), напряжение 12 вольт заряжает конденсаторы (по 2000 -мкф, в каждом плече). При поступление управляющего напряжение от контроллера Arduino_ProMini-168 на вход "Закрыть" (или аналогично на "Открыть"), через оптопару PVT322 - открывается соответствующее плечо ключей. При этом происходит следующее: В момент открытия ключей, энергия с конденсаторов мощно "дёргает" моторчик "машинки". По мере разряда конденсаторов (это происходит быстро) моторчик "машинки" питается током ограниченным резисторами (33 -Ом). Благодаря этому, в конце процесса "закрытия"-"открытия" замка, шток движется достаточно медленно.

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

Схема блока питания трансформаторная. Вообще, схема замка питается от аккумулятора 12 -вольт, 2,8 -А/Ч. А схема БП поддерживает аккумулятор на номинальном уровне. Светодиод "Сеть" указывает на нормальную работу блока питания.

Все диоды 1N4007 (забыл указать на схеме, а человек задал вопрос - какие?).

(1) собран ограничитель максимального тока. Резистором R1 верхний порог тока установлен в 300 -мА.
На интегральном стабилизаторе LM317(2) собран стабилизатор напряжения. Напряжение стабилизации настраивается резистором R 2 . Напряжение на аккумуляторе должно составлять 13,7 -вольта.

Напряжение с аккумулятора подаётся в три точки.
Через резисторы (по 33 -Ом) на (X) , (Y) - питание плечей ключей "драйвера" мотора "машинки".

Большинство своих устройств собираю из того, что под руку попалось. Этот проект не исключение. В качестве корпуса использую корпус:) от электронного балласта:

Светодиоды №-2 ... №-7 - двухцветные. Они расположены в линию. Используются для визуализации процессов "открытие" и "закрытие" замка. Украшательство.

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

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

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

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

#include

#include

#include

#include "Adafruit_MQTT.h"

#include "Adafruit_MQTT_CC3000.h"

#include

#include >

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

#define WLAN_SECURITY WLAN_SEC_WPA2>

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

#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 первого отпечатка пальцев, который используется датчиком:

int fingerID = 0;

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

int activationCounter = 0;

int lastActivation = 0;

int activationTime = 10 * 1000;

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

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

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

if (fingerprintID == fingerID && lockState == false) {

Serial.println(F("Access granted!"));

lockState = true;

Serial.println(F("Failed"));

Serial.println(F("OK!"));

lastActivation = millis();

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

if ((activationCounter - lastActivation > activationTime) && lockState == true) {

lockState = false;

if (! fingerprint.publish(state)) {

Serial.println(F("Failed"));

Serial.println(F("OK!"));

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

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

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

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

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

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

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

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

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


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

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

#include

#include "Adafruit_MQTT.h"

#include "Adafruit_MQTT_Client.h"

Настраиваем параметры 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:

pinMode(relayPin, OUTPUT);

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

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

Adafruit_MQTT_Subscribe *subscription;

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

if (subscription == &lock) {

Serial.print(F("Got: "));

Serial.println((char *)lock.lastread);

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

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

if (command == "0") {

digitalWrite(relayPin, LOW);

if (command == "1") {

digitalWrite(relayPin, HIGH);

Найти последнюю версию скетча вы можете на 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.

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

На днях я пересматривал фильм «Новый Человек-Паук» и в одной сцене Питер Паркер дистанционно открывает и закрывает дверь со своего ноутбука. Как только я увидел это, то сразу же понял, что и мне нужен такой электронный замок на входную дверь.

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

Шаг 1: Список материалов





Для сборки электронного замка на Ардуино вам понадобятся следующие материалы:

Электроника:

  • 5В настенный адаптер

Компоненты:

  • 6 винтов для шпингалета
  • картон
  • провода

Инструменты:

  • паяльник
  • клеевой пистолет
  • дрель
  • сверло
  • сверло для направляющего отверстия
  • канцелярский нож
  • компьютер с программой Arduino IDE

Шаг 2: Как действует замок

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

Рычаг сервопривода, соединенный со шпингалетом, будет закрывать его (на 0°) и открывать (на 60°), с помощью команд, получаемых через модуль Bluetooth.

Шаг 3: Схема монтажа проводов


Давайте сначала подключим сервопривод к плате Arduino (хочу заметить, что, хотя у меня использована плата Arduino Nano, в плате Uno расположение выводов точно такое же).

  • коричневый провод сервопривода – заземляющий, его подключаем к земле на Arduino
  • красный провод – плюс, его подключаем к разъему 5В на Arduino
  • оранжевый провод – вывод истока сервопривода, его подключаем к 9-му выводу на Arduino

Я советую вам проверить работу сервопривода, прежде чем продолжить сборку. Для этого в программе Arduino IDE в примерах выбираете Sweep. Убедившись в том, что серво работает, можем подключать Bluetooth-модуль. Нужно соединить вывод rx модуля Bluetooth с tx выводом Arduino, и tx вывод модуля с rx выводом Arduino. Но пока не делайте этого! Когда эти соединения будут спаяны, вы уже не сможете загрузить никакие коды на Arduino, поэтому сначала загрузите все ваши коды и только после этого паяйте соединения.

Вот схема соединений модуля и микроконтроллера:

  • Rx модуля – Tx платы Arduino
  • Tx модуля – Rx платы
  • Vcc (положительный вывод) модуля – 3,3v платы Arduino
  • Ground соединяем с Ground (заземление с заземлением)

Если объяснение кажется вам непонятным, следуйте представленной схеме соединений проводов.

Шаг 4: Испытание

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

Шаг 5: Корпус для электрокомпонентов



Я решил поместить в корпус только контроллер и модуль Bluetooth, а сервопривод оставить снаружи. Для этого на куске картона обводим контур платы Arduino Nano и добавляем по 1 см пространства по периметру и вырезаем. После этого также вырезаем еще пять сторон корпуса. В передней стенке нужно будет прорезать отверстие под шнур питания контроллера.

Размеры сторон корпуса:

  • Дно – 7,5х4 см
  • Крышка – 7,5х4 см
  • Левая боковая стенка – 7,5х4 см
  • Правая боковая стенка – 7,5х4 см
  • Передняя стенка – 4х4 см (с прорезью под шнур питания)
  • Задняя стенка – 4х4 см

Шаг 6: Приложение

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

Уверен, кое у кого из вас есть возможность проверить это. Для Андроида скачайте приложение Bluetooth Terminal, для Windows скачайте TeraTerm. Затем нужно подключить модуль к смартфону, имя должно быть linvor, пароль – 0000 или 1234. Как только сопряжение установится, откройте установленное приложение, войдите в опции и выберите «Установить соединение (небезопасное)». Теперь ваш смартфон – монитор последовательного интерфейса Arduino, то есть вы можете обмениваться данными с контроллером.

Если вы введете 0, дверь закроется, а на экране смартфона будет сообщение «Дверь закрыта».
Если вы введете 1, то увидите, как дверь открывается, а на экране будет сообщение «Дверь открыта».
На Windows процесс тот же самый, за исключением того, что установить нужно приложение TeraTerm.

Шаг 7: Монтируем шпингалет


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

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

Шаг 8: Питание


Чтобы завершить устройство, вам понадобятся источник питания, шнур и штекер мини-usb для соединения с Arduino.
Соедините вывод земли источника питания с выводом земли мини-порта usb, соедините красный провод с красным проводом мини-порта usb, потом протяните провод от замка до дверной петли, а от нее протяните до розетки.

Шаг 9: Код

#include Servo myservo; int pos = 0; int state; int flag=0; void setup() { myservo.attach(9); Serial.begin(9600); myservo.write(60); delay(1000); } void loop() { if(Serial.available() > 0) { state = Serial.read(); flag=0; } // if the state is "0" the DC motor will turn off if (state == "0") { myservo.write(8); delay(1000); Serial.println("Door Locked"); } else if (state == "1") { myservo.write(55); delay(1000); Serial.println("Door UnLocked"); } }

Шаг 10: Законченный замок на базе Arduino

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