Розумний електронний замок на Ардуіно, що працює по Bluetooth - вхідні двері як у Спайдермена. Електронний замок на Ардуіно Кодовий замок на arduino uno

Так вже сталося, що вирішили ми на роботі встановити кодовий замок на свою двері, тому, як постійно вбігаємо - вибігаємо з кабінету, двері до якого має бути закрита постійно під час відсутності мешканців. Ключі частенько виявляються забутими всередині. Вобщем, вирішили, що кодовий замок це відмінний вихід.

Порившись на китайських барахолках і ebay я нічого дешевого і більш-менш серйозного не знайшов і вирішив зробити його своїми руками. Відразу зазначу, що платформа Arduino була обрана за свою простоту, так-як досвіду спілкування з мікроконтролерами не було взагалі.

ідея

На двері із зовнішнього боку дверей повинна розташовуватися клавіатура, на якій вводиться пароль, з внутрішньої сторони закріплена інша конструкція. Для контролю повного зачинення дверей використовується геркон. Виходячи з кабінету людина натискає на клавіатурі «*» і не чекаючи поки двері закриються доводчиком йде по своїх справах, коли двері будуть повністю закрита, геркон замкнеться і замок буде закритий. Відчиняються двері за допомогою введення 4х значного пароля і натисканням на «#».

комплектуючі

Arduino UNO \u003d $ 18
Arduino protoshield + breadboard \u003d $ 6
L293D \u003d $ 1
Пучок проводів 30шт для бредборда \u003d $ 4
2 розетки RJ45 \u003d $ 4
2 вилки RJ45 \u003d $ 0.5
актуатор центрального замка \u003d 250 руб.
Геркон \u003d безкоштовно відірваний від старого вікна.
Шпінгалет металевий гігантських розмірів \u003d безкоштовно
Корпус від старого хаба D-LINK з півтораміліметрових заліза \u003d безкоштовно
Блок живлення від того ж хаба D-LINK на 12 і 5в \u003d теж безкоштовно
Купа гвинтів і гаєчок для кріплення всього цього добра до корпусу \u003d 100руб.
Пульт управління від охоронної сигналізації \u003d безкоштовно.

Разом: $ 33,5 і 350руб.

Не так вже й мало, скажете ви, і будете, безумовно праві, але ж за задоволення треба платити! А зібрати, щось своїми руками завжди приємно. До того-ж конструкцію можна сильно здешевити, якщо використовувати голий МК без Arduino.

Підготовка до складання

Хочеться декілька слів сказати про покупку ключового елемента конструкції актуатора. У місцевому авто-магазині мені запропонували актуатори двох видів: «з двома проводами і з п'ятьма». За словами продавщиці вони були абсолютно однаковими і відмінність в кількості проводів не значило абсолютно нічого. Однак, як виявилося пізніше, це не так! Я вибрав девайс з двома проводами, він харчувався від 12в. У конструкції з п'ятьма проводами встановлені кінцеві вимикачі, що дозволяє контролювати рух важеля. Зрозумів, що купив не той я тільки коли розібрав його і змінювати його було пізно. Хід важеля виявився занадто коротким, щоб нормально засунути клямку, тому, необхідно було трохи його доопрацювати, а саме видалити дві гумові шайби вкорочують хід важеля актуатора. Для цього корпус довелося розпиляти уздовж звичайною ножівкою, тому, що друга шайба знаходилася всередині. Синя изолента нам, як завжди допомогла нам в подальшому при складанні його назад.
Для управління мотором актуатора був використаний драйвер моторів L293D, який витримує пікове навантаження до 1200 мА, у нас при зупинці двигуна актуатора пікове навантаження виростала всього до 600 мА.
З пульта управління від охоронної сигналізації були виведені контакти з клавіатури, динаміка і двох світлодіодів. Пульт і основний пристрій передбачалося з'єднати за допомогою кручений пари і RJ45 роз'ємів

Програмування.

Так, як досвіду програмування Arduino у мене не було до цих пір. Я скористався чужими напрацюваннями і статтями з сайту arduino.cc. Кому цікаво, може подивитися цей потворний код :)

Фото і відео



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


Блок живлення


Клавіатурка


Шпінгалет (з'єднаний з актуатором металевої спицею і на яку надіта термоусадка для краси)

Відео процесу роботи пристрою:

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

RFID (англ. Radio Frequency IDentification, радіочастотна ідентифікація) - спосіб автоматичної ідентифікації об'єктів, в якому за допомогою радіосигналів зчитуються або записуються дані, що зберігаються в так званих транспондерах, або RFID-мітках. Будь-яка RFID-система складається з пристрою, що зчитує (зчитувач, рідер або інтеррогатор) і транспондера (він же RFID-мітка, іноді також застосовується термін RFID-тег).

В уроці буде використовуватися RFID-мітка з Arduino. Пристрій читає унікальний ідентифікатор (UID) кожного тега RFID, який ми розміщується поруч зі зчитувачем, і відображає його на OLED-дисплеї. Якщо UID тега дорівнює зумовленої значенням, яке зберігається в пам'яті Arduino, тоді на дисплеї ми побачимо повідомлення «Unlocked» (англ., Розблоковано). Якщо унікальний ідентифікатор статті не дорівнює зумовленої значенням, повідомлення "Unlocked» не з'явиться - см. Фото нижче.

замок закритий

замок відкритий

Деталі, необхідні для створення цього проекту:

  • RFID-рідер RC522
  • OLED-дисплей
  • Макетна плата
  • Провід

Додаткові деталі:

  • Акумулятор (powerbank)

Загальна вартість комплектуючих проекту склала приблизно 15 доларів.

Крок 2: RFID-зчитувач RC522

У кожній мітці RFID є невеликий чіп (на фото біла картка). Якщо направити ліхтарик на цю RFID-карту, можна побачити маленький чіп і котушку, яка його оточує. У цього чіпа немає батареї для отримання потужності. Він отримує харчування від зчитувача бездротовим чином використовуючи цю велику котушку. Можна прочитати RFID-карту, подібну до цієї, з відстані до 20 мм.

Той же чіп існує і в тегах RFID-брелка.

Кожен тег RFID має унікальний номер, який ідентифікує його. Це UID, який показується на OLED-дисплеї. За винятком цього UID, кожен тег може зберігати дані. У цьому типі карт можна зберігати до 1 тисячі даних. Вражає, чи не так? Ця функція не буде використовуватися сьогодні. Сьогодні все, що цікавить, - це ідентифікація конкретної карти по її UID. Вартість RFID-зчитувача і цих двох карт RFID становить близько 4 доларів США.

Крок 3: OLED-дисплей

В уроці використовується OLED-монітор 0.96 "128x64 I2C.

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

Дисплей має роздільну здатність 128 на 64 пікселя і має крихітний розмір. Існує два варіанти відображення. Один з них монохромний, а інший, як той, який використаний в уроці, може відображати два кольори: жовтий і синій. Верхня частина екрана може бути тільки жовтою, а нижня частина - синьою.

Цей OLED-дисплей дуже яскравий і у нього відмінна і дуже приємна бібліотека, яку розробила компанія Adafruit для цього дисплея. На додаток до цього дисплей використовує інтерфейс I2C, тому з'єднання з Arduino неймовірно просте.

Вам потрібно лише підключити два дроти, за винятком Vcc і GND. Якщо ви новачок в Arduino і хочете використовувати недорогий і простий дисплей в вашим проект, почніть з цього.

Крок 4: З'єднуємо всі деталі

Зв'язок з платою Arduino Uno дуже проста. Спочатку підключимо харчування як зчитувача, так і дисплея.

Будьте обережні, зчитувач RFID повинен бути підключений до виходу 3,3 В від 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 -\u003e Include Libraries -\u003e Manage libraries (Керування бібліотеками). Знайдіть MFRC522 і встановіть її.

Нам також потрібна бібліотека Adafruit SSD1306 і бібліотека Adafruit GFX для відображення.

Встановіть обидві бібліотеки. Бібліотека Adafruit SSD1306 потребує невеликої модифікації. Перейдіть в папку Arduino -\u003e Libraries, Відкрийте папку Adafruit SSD1306 і відредагуйте бібліотеку Adafruit_SSD1306.h. Закоментуйте рядок 70 і розкоментуйте рядок 69, тому що дисплей має дозвіл 128x64.

Спочатку ми оголошуємо значення мітки RFID, яку повинен розпізнати Arduino. Це масив цілих чисел:

Int code \u003d (69,141,8,136); // UID

Потім ми инициализируем зчитувач RFID і дисплей:

Rfid.PCD_Init (); display.begin (SSD1306_SWITCHCAPVCC, 0x3C);

Після цього в функції циклу ми перевіряємо тег на зчитувачі кожні 100 мс.

Якщо на зчитувачі є тег, ми читаємо його UID і друкуємо його на дисплеї. Потім ми порівнюємо UID тега, який ми тільки що прочитали, зі значенням, яке зберігається в кодової змінної. Якщо значення однакові, ми виводимо повідомлення UNLOCK, інакше ми не будемо відображати це повідомлення.

If (match) (Serial.println ( "\\ nI know this card!"); PrintUnlockMessage ();) else (Serial.println ( "\\ nUnknown Card");)

Звичайно, ви можете змінити цей код, щоб зберегти більше 1 значення UID, щоб проект розпізнав більше RFID-міток. Це просто приклад.

Код проекту:

#include #include #include #include #define OLED_RESET 4 Adafruit_SSD1306 display (OLED_RESET); #define SS_PIN 10 #define RST_PIN 9 MFRC522 rfid (SS_PIN, RST_PIN); // Instance of the class MFRC522 :: MIFARE_Key key; int code \u003d (69,141,8,136); // This is the stored UID int codeRead \u003d 0; String uidString; void setup () (Serial.begin (9600); SPI.begin (); // Init SPI bus rfid.PCD_Init (); // Init MFRC522 display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64) // Clear the buffer. display.clearDisplay (); display.display (); display.setTextColor (WHITE); // or BLACK); display.setTextSize (2); display.setCursor (10,0); display.print ( "RFID Lock"); display.display (); ) Void loop () (if (rfid.PICC_IsNewCardPresent ()) (readRFID ();) delay (100);) void readRFID () (rfid.PICC_ReadCardSerial (); Serial.print (F ( "\\ nPICC type:") ); MFRC522 :: PICC_Type piccType \u003d rfid.PICC_GetType (rfid.uid.sak); Serial.println (rfid.PICC_GetTypeName (piccType)); // Check is the PICC of Classic MIFARE type if (piccType! \u003d MFRC522 :: PICC_TYPE_MIFARE_MINI && piccType! \u003d MFRC522 :: PICC_TYPE_MIFARE_1K && piccType! \u003d MFRC522 :: PICC_TYPE_MIFARE_4K) (Serial.println (F ( "Your tag is not of type MIFARE Classic.")); return;) clearUID (); Serial.println ( " Scanned PICC "s UID:"); printDec (rfid.uid.uidByte, rfid.uid.size); uidString \u003d String (rfid.uid.uidByte) + "" + String (rfid.uid.uidByte) + "" + String (rfid.uid.uidByte) + "" + String (rfid.uid.uidByte); printUID (); int i \u003d 0; boolean match \u003d true; while (i

Крок 6: Підсумковий результат

Як видно з уроку - за невеликі гроші можна додати RFID-рідер в ваші проекти. Можна легко створити систему безпеки за допомогою цього рідера або створити більш цікаві проекти, наприклад, щоб дані з USB-диска зчитувалися тільки після розблокування.

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

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

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

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


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

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

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

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

Прогрес не стоїть на місці і "Розумні замки" все частіше з'являються на дверях квартир, гаражів та будинків.

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

У цьому проекті буде реалізована 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\u003e

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

#define AIO_SERVERPORT 1 883

#define AIO_USERNAME "adafruit_io_імя"

#define AIO_KEY "adafruit_io_ключ"\u003e

Наступні рядки відповідають за взаємодію і обробку даних з датчика відбитків пальців. Якщо датчик був активований (відбиток збігся), буде "1":

const char FINGERPRINT_FEED PROGMEM \u003d AIO_USERNAME "/ feeds / fingerprint";

Adafruit_MQTT_Publish fingerprint \u003d Adafruit_MQTT_Publish (& mqtt, FINGERPRINT_FEED);

Крім того, треба створити екземпляр об'єкта SoftwareSerial для нашого сенсора:

SoftwareSerial mySerial (3, 4);

Після цього ми можемо створити об'єкт для нашого сенсора:

Adafruit_Fingerprint finger \u003d Adafruit_Fingerprint (& mySerial);

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

int fingerID \u003d 0;

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

int activationCounter \u003d 0;

int lastActivation \u003d 0;

int activationTime \u003d 10 * 1000;

У тілі функції setup () ми инициализируем датчик відбитку пальців і забезпечуємо підключення чіпа CC3000 до вашої WiFi мережі.

У тілі функції loop () підключаємося до Adafruit IO. За це відповідає наступний рядок:

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

if (fingerprintID \u003d\u003d fingerID && lockState \u003d\u003d false) (

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

lockState \u003d true;

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

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

lastActivation \u003d millis ();

Якщо ж в межах функції loop () замок активований і ми досягли значення затримки, яке вказували вище, відсилаємо "0":

if ((activationCounter - lastActivation\u003e activationTime) && lockState \u003d\u003d true) (

lockState \u003d 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 1 883

#define AIO_USERNAME "adafruit_io_імя_пользователя"

#define AIO_KEY "adafruit_io_ключ"

Зазначаємо, до якого піну ми підключили світлодіод (надалі це буде наш замок або реле):

int relayPin \u003d 5;

Взаємодія з датчиком відбитку пальців, як і в попередньому розділі:

const char LOCK_FEED PROGMEM \u003d AIO_USERNAME "/ feeds / lock";

Adafruit_MQTT_Subscribe lock \u003d Adafruit_MQTT_Subscribe (& mqtt, LOCK_FEED);

У тілі функції setup () вказуємо, що пін, до якого підключений світлодіод, повинен працювати в режимі OUTPUT:

pinMode (relayPin, OUTPUT);

У межах циклу loop () спочатку перевіряємо, підключилися ми до Adafruit IO:

Після цього перевіряємо, який сигнал надходить. Якщо передається "1", активуємо контакт, який ми оголосили раніше, до якого підключений наш світлодіод. Якщо ми отримали "0", переводимо контакт в стан "low":

Adafruit_MQTT_Subscribe * subscription;

while ((subscription \u003d mqtt.readSubscription (1000))) (

if (subscription \u003d\u003d & lock) (

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

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

// Зберігаємо команду в дані типу рядок

String command \u003d String ((char *) lock.lastread);

if (command \u003d\u003d "0") (

digitalWrite (relayPin, LOW);

if (command \u003d\u003d "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.

Залишайте Ваші коментарі, щодо вашого особистим досвідом нижче. У дискусії часто народжуються нові ідеї і проекти!