Меню
безкоштовно
Головна  /  проблеми / Електронний замок на Ардуіно уно. Електронний замок своїми руками

Електронний замок на Ардуіно уно. Електронний замок своїми руками

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

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

У цьому уроці нам знадобиться:

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

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 \u003d 0; // Видача серійного номера мітки. for (byte i \u003d 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 \u003d\u003d 3763966293) // Порівнюємо Uid мітки, якщо він дорівнює заданому то сервопривід відкриває засувку.

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

Відео:

У цій статті я розповім, як зробити кодовий замок з Ардуіно. Для цього нам знадобляться червоний і зелений світлодіоди, зумер, Ардуіно нано, LCD дисплей з I2C конвертором, сервопривід і матрична клавіатура 4x4. При включенні дисплей буде писати "Enter code.",

включиться червоний світлодіод,

а зелений згасне, сервопривід встановиться на 0 °. При введенні цифр на дисплеї будуть загорятися *.

Якщо код введений невірно, то дисплей напише "Enter cod.". Якщо код правильний, то пролунає звуковий сигнал, серво привід повернеться на 180 °, дисплей напише "Open."

включиться зелений світлодіод,

а червоний відключиться. Після 3 секунд сервопривід повернеться в початкове положення, включиться червоний світлодіод, а зелений згасне, дисплей напише "Close.",

потім дисплей напише "Enter code.". Тепер про схему. Спочатку з'єднуємо Ардуіно проводами з макетної платою (контакти харчування).

Потім підключаємо до контактів D9 - D2 матричну клавіатуру.

Потім сервопривід. Його підключаємо до контакту 10.

Червоний світлодіод до контакту 11.

Зелений - до контакту 12.

Зумер - до контакту 13.

Тепер завантажуємо скетч.

#include #include #include #include iarduino_KB KB (9, 8, 7, 6, 5, 4, 3, 2); LiquidCrystal_I2C lcd (0x27, 16, 2); Servo servo; int pass \u003d (3, 6, 1, 8); int in; int r \u003d 11; int g \u003d 12; void setup () (KB.begin (KB1); pinMode (r, OUTPUT); pinMode (g, OUTPUT); lcd.init (); lcd.backlight (); digitalWrite (g, LOW); digitalWrite (r, HIGH ); servo.attach (10); servo.write (0); lcd.setCursor (0, 0);) void loop () (lcd.clear (); lcd.print ( "Enter code."); while ( ! KB.check (KEY_DOWN)) (delay (1);) in \u003d KB.getNum; lcd.clear (); lcd.setCursor (0, 0); lcd.print ( "*"); while (! KB. check (KEY_DOWN)) (delay (1);) in \u003d KB.getNum; lcd.print ( "*"); while (! KB.check (KEY_DOWN)) (delay (1);) in \u003d KB.getNum; lcd.print ( "*"); while (! KB.check (KEY_DOWN)) (delay (1);) in \u003d KB.getNum; lcd.print ( "*"); if (in \u003d\u003d pass) (if (in \u003d\u003d pass) (if (in \u003d\u003d pass) (if (in \u003d\u003d pass) (lcd.clear (); lcd.setCursor (0, 0); lcd.print ( "Open."); tone ( 13, 400, 750); servo.write (180); digitalWrite (r, LOW); digitalWrite (g, HIGH); delay (3000); lcd.clear (); lcd.setCursor (0, 0); lcd. print ( "Close."); tone (13, 300, 700); servo.write (0); digitalWrite (g, LOW); digitalWrite (r, HIGH); dela y (1000); )))))

От і все. Насолоджуйтесь кодовим замком!

список радіоелементів

позначення Тип Номінал кількість ПриміткаМагазинМій блокнот
Е1 плата Arduino

Arduino Nano 3.0

1 В блокнот
Е8, Е9 резистор

220 Ом

2 SMD В блокнот
Е6 світлодіод

АЛ102Г

1 червоний В блокнот
Е7 світлодіод

АЛ307Г

1 зелений В блокнот
Е3 LCD-дисплейЗ I2C інтерфейсом1 зелена підсвічування В блокнот
Е5 сервоприводSG901 180 градусів В блокнот
Е2 зумер1 Bu В блокнот
Е4 клавіатура4Х41 матрична В блокнот
немає BreadBoard640 точок1 без пайки

Днями я переглядав фільм «Нова Людина-Павук» і в одній сцені Пітер Паркер дистанційно відкриває і закриває двері зі свого ноутбука. Як тільки я побачив це, то відразу ж зрозумів, що і мені потрібен такий електронний замок на вхідні двері.

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

Крок 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 \u003d 0; int state; int flag \u003d 0; void setup () (myservo.attach (9); Serial.begin (9600); myservo.write (60); delay (1000);) void loop () (if (Serial.available ()\u003e 0) (state \u003d Serial.read (); flag \u003d 0;) // if the state is "0" the DC motor will turn off if (state \u003d\u003d "0") (myservo.write (8); delay (1000); Serial. println ( "Door Locked");) else if (state \u003d\u003d "1") (myservo.write (55); delay (1000); Serial.println ( "Door UnLocked");))

Крок 10: Закінчений замок на базі Arduino

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

ведучого каналу youtube "AlexGyver" просили зробити електронний замок своїми руками. Ласкаво просимо на цикл відео про електронні замки на arduino. У загальних рисах майстер пояснить ідею.

Є кілька варіантів створення системи електронного замка. Найчастіше використовуються для замикання дверей і ящиків, шаф. А також для створення схованок і потаємних сейфів. Тому потрібно зробити макет, з яким зручно працювати і можна наочно і докладно показувати пристрій системи зсередини і зовні. Тому вирішив зробити раму з дверцятами. Для цього знадобиться квадратний брус 30 x 30. Фанера 10мм. Дверні петлі. Спочатку хотів зробити фанерний ящик, але згадав, що в кімнаті все завалено запчастинами. Подібний ящик нікуди поставити. Тому буде зроблений макет. Якщо хтось хоче поставити собі електронний замок, то, дивлячись на макет можна з легкістю все повторити.

Все, що потрібно для замка, знайдете в цьому китайському магазині.

Мета - розробити максимально ефективні схеми і прошивки для електронних замків. Ви зможете використовувати ці результати для установки цих систем на свої двері, ящики, шафи і тайники.

Дверцята готова. Тепер потрібно придумати, як відкривати і закривати електронним способом. Для цих цілей підходить потужна соленоидная клямка з aliexpress (посилання на магазин вище). Якщо подати на висновки напруги, вона відкриється. Опір котушки майже 12 ом, значить при напрузі 12 вольт котушка буде їсти близько 1 ампера. З таким завданням впорається і літієвий акумулятор і підвищує модуль. Налаштовуємо на відповідне напруги. Хоча можна і трохи більше. Клямка кріпиться на внутрішній стороні дверцят на відстані, щоб не чіпляла край і могла закриватися. Клямки повинна бути відповідною частиною у вигляді металевого короба. Використовувати її без цього незручно і неправильно. Доведеться поставити сходинку, хоча б створювалася видимість нормальної роботи.

У холостому режимі клямка відкривається нормально, тобто якщо на дверцятах є ручка, подаємо імпульс, дверку за ручку відкриваємо. Але якщо подпружінени, цей спосіб вже не підходить. Підвищуючий перетворювач не справляється з навантаженням. Для відкриття підпружинений дверцята доведеться використовувати великі акумуляторів і більш потужний перетворювач. Або мережевий джерело живлення і забити на автономності системи. У китайських магазинах є клямки великих розмірів. Вони підійдуть для ящиків. Харчування можна подавати за допомогою реле або мосфети транзистора, або силового ключа на тому ж транзисторі. Більш цікаво і менш витратний варіант - сервопривід, з'єднаний з шатуном з будь-яким замикаючим елементом - шпінгалет або більш серйозні засувка. Він може знадобитися також шматочок сталевого спиці, яка виконує роль шатуна. Такий системі не потрібен великий струм. Але вона займає більше місця і більш хитра логіка управління.

Є два типи сервоприводів. Маленькі слабкі і великі потужні, якими можна спокійно засунути в отвори в серйозні металеві штирі. Обидва показаних варіантів працюють як на дверцятах, так і на висувних ящиках. З ящиком доведеться повозитися, проробляючи отвір в висувною стінці.

Друга частина

Arduino є найкращою системою для копіювання будь-якого обладнання. Більшість ідей не змогли б втілитися без неї. Давно існує така думка: створити спеціальний кодовий замок на Ардуіно. Для його відкриття необхідно затискання певної клавіші. При цьому замок не повинен відкриватися, навіть якщо знати потрібну кнопку. Щоб його відрити необхідно витримати певні інтервали, використовуючи м'язову пам'ять. Таке злочинець не зможе зробити. Але це все лише теорія.

Щоб його зібрати потрібно скористатися спеціальним приладом прямокутних імпульсів, а також кілька лічильників і купу. Але готове пристрій мав би великі габаритні розміри і його незручно було б використовувати. Як правило, такі думки не дають спокою. Першим етапом на шляху втілення мрії стало створення програми під Arduino. Саме вона буде служити в якості кодового замка. Для того щоб відкрити його знадобиться натиснути не одну клавішу, а кілька, причому робити це одночасно. Готова схема виглядає таким чином:

Якість картинки не краще, але підключення виконується до землі, D3, D5, D7, D9 і D11.

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

Const int ina \u003d 3; const int inb \u003d 5; const int inc \u003d 9; const int ledPin \u003d 13; int i \u003d 1000; byte a \u003d 0; byte b \u003d 0; byte c \u003d 0; byte d \u003d 0; unsigned long time \u003d 0; // не забувайте все, що приймає значення millis () unsigned long temp \u003d 0; // зберігати в unsigned long byte keya \u003d (0, 0, 0, 0, 0, 0, 0, 0); // коди власне byte keyb \u003d (1, 1, 1, 1, 0, 1, 0, 0); byte keyc \u003d (1, 0, 1, 0, 1, 1, 1, 0); byte k \u003d 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 \u003d 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 \u003d\u003d 0) (blinktwice (); // запрошення ввести код) if (k \u003d\u003d 8) (digitalWrite (ledPin, HIGH); delay (3000); k \u003d 0 ;) a \u003d digitalRead (ina); // зчитуються рівні сигналів з кнопок - натиснута / не було натиснуто b \u003d digitalRead (inb); c \u003d digitalRead (inc); delay (100); // наступний if - захист проти помилкових спрацьовувань, можна не використовувати if ((digitalRead (ina) \u003d\u003d a) && (digitalRead (inb) \u003d\u003d b) && (digitalRead (inc) \u003d\u003d c)) (if (a \u003d\u003d keya [k]) (if (b \u003d\u003d keyb [k]) (if (c \u003d\u003d keyc [k]) (k ++; )))) If (k \u003d\u003d 1) (if (d \u003d\u003d 0) (time \u003d millis (); d ++;)) temp \u003d millis (); temp \u003d temp - time; if (temp\u003e 10000) (k \u003d 0; d \u003d 0; time \u003d millis ();))

Щоб не виникало зайвих питань по коду, слід роз'яснити деякі моменти. Функція setup використовується для призначення портів. Наступна функція - Input_Pullup, яка необхідна для збільшення напруги Піна на 5 В. Це здійснюється за допомогою резистора. Завдяки цьому не будуть виникати різні короткі замикання. Для більшої зручності рекомендується застосовувати функцію blinktwice. Взагалі при створенні різних програм потрібно пробувати інші функції.

Після призначення функцій відбувається зчитування сигналу з портів. Якщо кнопка натиснута, то це буде позначатися цифрою 1, а якщо немає - 2. Далі, відбувається аналіз усіх значень. Наприклад, з'явилася така комбінація, як 0,1,1. Це означає, що перша клавіша натиснута, а решта дві немає. Якщо всі значення виконуються вірно, то умова 8 теж вірно. Про це свідчить загорівся світлодіод на передній панелі. Далі необхідно вписати певний код, який буде служити для відкривання дверей.

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