РОЗРОБКА ФУНКЦІОНАЛЬНОЇ СХЕМИ І ЕЛЕМЕНТНА БАЗА
Розробка функціональної схеми проводиться відповідно до схеми розміщення функціональних блоків, зображеної на рис 2.1.
Система створена на основі плати Arduino Uno. Arduino Uno контролер побудований на ATmega328. Платформа має 14 цифрових вхід/виходів (6 з яких можуть використовуватися як виходи ШІМ), 6 аналогових входів, кварцовий генератор 16 МГц, роз'єм USB, силовий роз'єм, роз'єм ICSP і кнопку перезавантаження. Для роботи необхідно підключити платформу до комп'ютера за допомогою кабелю USB, або подати живлення за допомогою адаптера AC/DC або батареї. На рис. 3.1. зображений зовнішній вигляд Arduino Uno.

На відміну від усіх попередніх плат, які використовували FTDI USBмікроконтроллер для зв'язку по USB, новий Arduino Uno використовує мікроконтролер ATmega8U2.
Програмне забезпечення
Інтегроване середовище розробки Arduino це багатоплатформовий додаток на Java, що включає в себе редактор коду, компілятор і модуль передачі прошивки в плату. Середовище розробки засноване на мові програмування Processing та спроектоване для програмування новачками,не знайомими близько з розробкою програмного забезпечення. Мова програмування аналогічна мові Wiring. Строго кажучи, це C ++, доповнений деякими бібліотеками. Програми обробляються за допомогою препроцесора, а потім компілюється за допомогою AVR-GCC.
Живлення
Arduino Uno може одержувати живлення через підключення USB або від зовнішнього джерела живлення. Джерело живлення вибирається автоматично.
Зовнішнє живлення (НЕ USB) може подаватися через перетворювач напруги AC / DC (блок живлення) або акумуляторною батареєю. Перетворювач напруги підключається за допомогою роз'єму 2.1 мм з центральним позитивним полюсом. Провідники від батареї підключаються до виводів Gnd і Vin роз'єму живлення.
Платформа може працювати при зовнішньому живленні від 6 В до 20 В. При напрузі живлення нижче 7 В, вивід 5V може видавати менше 5 В, при цьому платформа може працювати нестабільно. При використанні напруги вище 12 В регулятор напруги може перегрітися і пошкодити плату. Рекомендований діапазон від 7 В до 12 В.
Виводи живлення:
— VIN. Вхід використовується для подачі живлення від зовнішнього джерела (в відсутність 5 В від роз'єму USB або іншого регульованого джерела живлення). Подача напруги живлення відбувається через даний вивід.
— 5V. Регульоване джерело напруги, використовуване для живлення мікроконтролера і компонентів на платі. Живлення може подаватися від виводу VIN через регулятор напруги, або від роз'єму USB, або іншого регульованого джерела напруги 5 В.
— 3V3. Напруга на виводі 3.3 В регульована вбудованим регулятором на платі. Максимальне споживання струму 50 мА.
— GND. Вивід заземлення.

— ISCP - для USB інтерфейсу призначений для програмування контролера USB інтерфейсу. ISCP для «основного» мікроконролера (МК) використовується для роботи з програматором, через який можна здійснювати операції, недоступні через звичайний послідовний інтерфейс - запис завантажувача і зміна фьюз (fuses), що змінюють поведінку МК.
Виводи МК діляться (в якомусь роді умовно) на цифрові (D0-D13) і аналогові (A0-A5), хоча при написанні програм використовується «наскрізна» нумерація виводів, тобто виводи 13 = D13, а 14 = A0, 15 = A1 і т.д.
Цифрові виводи можуть використовуватися і як входи і як виходи (режим входу або виходу задається в програмі), аналогові використовують як входи, з дозволом АЦП 10 біт (0-1023) і межею вимірювань 5В щодо землі або виведення AREF.
— Виводи D0, D2 використовуються для передачі даних через асинхронний послідовний порт і підключені до USB-serial контролеру. Ці виводи не можна підключати безпосередньо до порту RS323. Ці виводи використовують послідовний інтерфейс ТТЛ , який несумісний з RS232 і вимагає перетворення.
— Виводи D2, D3 можуть використовуватися для виклику зовнішніх переривань
— Виводи D3, D5, D6, D9, D10, і D11 пов'язані з внутрішніми лічильниками-таймерами МК і можуть використовуватися для виводу шим-сигналу (Широтно-імпульсна модуляція, PWM) і в якості лічильників зовнішніх імпульсів.
— Виводи D10-D13 можуть використовуватися для роботи із зовнішніми пристроями по протоколу SPI, при чому D10 (SS) використовується у випадку, якщо МК є веденим (slave).
— Вивід D13 підключений до світлодіоду «L» на платі, що ніяк не впливає на його використання, але може бути корисним для індикації чогось
— Два виводи I2C в верхньому (або «довгому») ряду - дублюють A4 і A5. Вони можуть використовуватися для роботи із зовнішніми пристроями по протоколу I2C, що є додатковою функцією A4, A5.
— Вивід Vin використовується для подачі живлення від зовнішнього джерела, далі він проходить через регулятор напруги.
— Виводи GND, 5V, 3V3 - земля і регульована напруга 5В, 3,3В.
— Вивід IOREF - видає робочу напругу, тобто 5В для Arduino Uno.
Таким чином, можливості вводу-виводу досить різноманітні. Через аналогові входи можна вимірювати напругу сигналу (можна навіть зробити осцилограф, але частота вимірювань буде обмежена швидкістю процесора), для цифрових входів-виходів можна як зчитувати, так і виставляти стан, в т.ч. генерувати ШІМ сигнал (зазвичай використовується для управління двигунами або генерування звуку), а через цілий ряд інтерфейсів можна спілкуватися із зовнішніми пристроями: однонапрямлена шина на базі будь-якого цифрового виводу, асинхронний послідовний порт, I2C, SPI.
При чому I2C і SPI дозволяють одночасно підключати безліч пристроїв на одну шину.
Більшість сенсорів для Arduino підключаються за допомогою аналогових входів, однонапрямленої шини або I2C.
Через SPI зазвичай працюють пристрої, що вимагають великої швидкості передачі даних (Ethernet shield, WiFi shield).
Дуже корисно для експериментів мати Sensor shield - плату з зручним дублюванням всіх виводів разом із заземленням і живленням для підключення зовнішніх пристроїв. Так само дуже зручна макетна плата для швидкого підключення пристроїв і пасивних компонентів без пайки.
Входи і виходи
Кожен з 14 цифрових виводів Uno може бути налаштований як вхід або вихід, використовуючи функції pinMode (), digitalWrite (), і digitalRead (). Виводи працюють при напрузі 5 В. Кожен вивід має навантажувальний резистор (за замовчуванням відключений) 20-50 кОм і може пропускати до 40 мА. Деякі виводи мають особливі функції:
— Послідовна шина: 0 (RX) і 1 (TX). Виводи використовуються для отримання (RX) і передачі (TX) даних TTL. Дані виводи підключені до відповідних виводів мікросхеми послідовної шини ATmega8U2 USB-to-TTL.
— Зовнішнє переривання: 2 і 3. Дані виводи можуть бути налаштовані на виклик переривання або на молодшому значенні, або на передньому чи задньому фронті, або при зміні значення.
— Шим: 3, 5, 6, 9, 10, і 11. Будь-який з виводів забезпечує ШІМ з роздільною здатністю 8 біт за допомогою функції analogWrite () .
— SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). За допомогою даних виводів здійснюється зв'язок SPI, для цього використовується бібліотека SPI .
— LED: 13. Вбудований світлодіод, підключений до цифрового виводу 13. Якщо значення на виводі має високий потенціал, то світлодіод горить.
На платформі Uno встановлені 6 аналогових входів (позначених як A0 .. A5), кожен діапазоном 10 біт (тобто може приймати 1024 різних значень). Стандартно виводи мають діапазон виміру до 5 В відносно землі, проте є можливість змінити верхню межу з допомогою виводу AREF і функції analogReference ().
Деякі виводи мають додаткові функції:
I2C: 4 (SDA) і 5 (SCL). За допомогою виводів здійснюється зв'язок I2C (TWI), для створення якої використовується бібліотека Wire.
Додаткова пара виводів платформи
— AREF. Опорна напруга для аналогових входів. Використовується з функцією analogReference () .
— Reset. Низький рівень сигналу на виводі перезавантажує мікроконтролер. Зазвичай застосовується для підключення кнопки перезавантаження на платі розширення, що закриває доступ до кнопки на самій платі Arduino.
Зв'язок
На платформі Arduino Uno встановлено декілька пристроїв для здійснення зв'язку з комп'ютером, іншими пристроями Arduino або микроконтроллерами. ATmega328 підтримують послідовний інтерфейс UART TTL (5 В), здійснюваний виводами 0 (RX) і 1 (TX). Встановлена на платі мікросхема ATmega8U2 направляє даний інтерфейс через USB, програми на стороні комп'ютера "спілкуються" з платою через віртуальний COM порт.
Прошивка ATmega8U2 використовує стандартні драйвера USB COM, ніяких сторонніх драйверів не потрібно, але на Windows для підключення буде потрібно файл ArduinoUNO.inf. Моніторинг послідовної шини (Serial Monitor) програми Arduino дозволяє посилати і отримувати текстові дані при підключенні до платформи. Світлодіоди RX і TX на платформі будуть миготіти при передачі даних через мікросхему FTDI або USB підключення (але не при використанні послідовної передачі через виводи 0 і 1).
Бібліотекою SoftwareSerial можливо створити послідовну передачу даних через будь-який з цифрових виводів Uno.
ATmega328 підтримує інтерфейси I2C (TWI) і SPI. В Arduino включена бібліотека Wire для зручності використання шини I2C.
Програмування
Платформа програмується за допомогою ПО Arduino. З меню «Tools Board» вибирається «Arduino Uno» (згідно зі встановленим микроконтроллером).
Мікроконтролер ATmega328 поставляється з записаним загрузчиком, що полегшує запис нових програм без використання зовнішніх программаторів. Зв'язок здійснюється оригінальним протоколом STK500.
Є можливість не використовувати завантажувач і запрограмувати мікроконтроллер через виводи ICSP (Внутрішньосхемне програмування).
Автоматичне (програмне) перезавантаження
Uno розроблена таким чином, щоб перед записом нового коду перезавантаження здійснювалося самою програмою Arduino на комп'ютері, а не натисканням кнопки на платформі. Одна з ліній DTR мікросхеми ATmega8U2, керуючих потоком даних (DTR), підключена до виводу перезавантаження микроконтроллера ATmega328 через 100 нФ конденсатор. Активація даної лінії, тобто подача сигналу низького рівня, перезавантажує мікроконтролер. Програма Arduino, використовуючи дану функцію, завантажує код одним натисканням кнопки Upload в самому середовищі програмування. Подача сигналу низького рівня по лінії DTR скоординована з початком запису коду, що скорочує таймаут завантажувача.
Функція має ще одне застосування. Перезавантаження Uno відбувається кожного разу при підключенні до програми Arduino на комп'ютері з ОС Mac X або Linux (через USB). Наступні півсекунди після перезавантаження працює завантажувач. Під час програмування відбувається затримка декількох перших байтів коду щоб уникнути отримання платформою некоректних даних (усіх, крім коду нової програми). Якщо відбувається разове налагодження скетчу, записаного в платформу, або введення яких-небудь інших даних при першому запуску, необхідно переконатися, що програма на комп'ютері очікує протягом секунди перед передачею даних.
На Uno є можливість відключити лінію автоматичної перезавантаження розривом відповідної лінії. Контакти мікросхем з обох кінців лінії можуть бути з'єднані з метою відновлення. Лінія маркована «RESET-EN». Відключити автоматичне перезавантаження також можливо підключивши резистор 110 Ом між джерелом 5 В і даною лінією.

Дисплей
В кодовому замку використовується для відображення інформації про стан замка(встановлення зв’язку між замком і користувачем).


З'єднання з Arduino відбувається за допомогою протоколу I2C, в якому задіюються 4 виводи: SDA, SDL, GND, VCC. При цьому вивід SDA дисплея під'єднується до виводу А4, а вивід SLD – до А5 на платі Arduino. Інші два виводи — це виводи для живлення.


Клавіатура
Використовується для вводу паролю.
Матрична клавіатура 4x4 (16 клавіш) для роботи в схемах на базі Arduino, AVR, PIC, ARM і інших мікроконтролерів. Використовується для одночасного підключення великої кількості кнопок до пристрою. Дозволяє значно скоротити кількість портів, які витрачаються на обслуговування кнопок. Наприклад, для підключення 16 кнопок матричноїклавіатури потрібно вже не 16 пінів, а всього 8 (4 стопці і 4 рядки).
Клавіатура кнопкова 4х4 матриця може використовуватися для управління різними пристроями, для набору кодів в кодових замках, для програмування.
Для використання кнопкової клавіатури потрібно підключити її до пристрою, яким потрібно керувати, за потребою створити програму управління і підключити живлення. Принцип роботи - при натисканні будь-якої клавіші замикається між собою певна пара проводів.
Клавіатура має 16 кнопок позначених S1 - S16.
Клавіатура кнопкова має один інтерфейс для підключення до пристрою, яким потрібно керувати: 8-піновий штирьовий інтерфейс типу «тато».
Живлення кнопкової клавіатури здійснюється від пристрою, яким потрібно керувати або від зовнішнього джерела.

Характеристики:
— Клавіатура кнопкова на 16 клавіш (4х4 матриця);
— 8-піновий інтерфейс типу «тато»;
— Напруга живлення: до 35 В;
— Струм: 100 мА;
— Спрацьовування контакту при натисканні: не більше 5 мс;
— Запас довговічності: до 1 млн натискань;
— Опір ізоляції: 100 MOм;
— Робоча температура: 0 - 75 ° С;
— Розміри: 43,0 х 43,0 х 11,4 мм;p>
— Вага: 11 г.

WI-FI МОДУЛЬ
Для роботи з android-пристроєм через Wi-Fi, у даному кодовому замку використовується Wi-Fi модуль ESP8266 ESP-12.
Це послідовний модуль приймача Wi-Fi, заснований на ESP8266 SoC у виконанні ESP-12E. ESP8266 має набір вбудованих протоколів TCP / IP. Модуль WiFi є високо інтегрованим чіпом, призначеним для взаємозв'язку по бездротовому зв'язку. Він являє собою повний і самодостатній модуль Wi-Fi для мережевого рішення, що дозволяє застосовувати його без зовнішнього контролера.
Зовнішній вигляд ESP8266 ESP-12 зображено на рисунку 3.8.
ESP8266-12E має широкі можливості з обробки та зберігання даних, які дозволяють йому бути інтегрованим з датчиками і інших пристроїв через свої GPIOs з мінімальним завантаженням під час виконання програми. Його високий ступінь інтеграції дозволяє мінімізувати схеми зовнішньої обв'язки.

Характеристики:
— Модуль: ESP8266MOD;
— Повна сумісність виводів з ESP-12;
— Обсяг флеш-пам'яті: 4Мб;
— Напруга живлення: 3.3В;
— Робоча частота: 2.4 ГГц;
— Потужність випромінювання: + 24dbm;
— Порти GPIO: доступні у всіх виконаннях модуля з кроком 2.0мм;
— Тип антени: вбудована;
— Бездротові режими: точка доступу / softAP / SoftAP + точка доступу;
— Бездротовий протокол: 802.11 b / g / n;
— Підтримка безпеки: Wi-Fi @ 2.4GHz, підтримка WPA / WPA2 режиму безпеки;
— Управління: вбудованими АТ-командами.
1. RST Скидання, виконується при подачі низького рівня. Може використовуватися для зовнішнього контролю сервера многоточечной конференції;
2. ADC / TOUT Вхід АЦП роздільною здатністю 10 біт, діапазон виміру 0-1В;
3. EN Включення модуля, активний рівень високий;
4. GPIO16 Лінія введення-виведення з відкритим колектором;
5. GPIO14 Лінія введення-виведення;
6. GPIO12 Лінія введення-виведення;
7. GPIO13 Лінія введення-виведення або сигнал RXD інтерфейсу UART2;
8. VDD Харчування 3,3 У;
9. CS0 Сигнал CS інтерфейсу SPI;
10. MISO Сигнал MISO інтерфейсу SPI;
11. GPIO9 Працює тільки в ESP-12-D;
12. GPIO10 Працює тільки в ESP-12-D;
13. MOSI Сигнал MOSI інтерфейсу SPI;
14. SCLK Сигнал Clock інтерфейсу SPI;
15. CND Підключення загального проводу;
16. GPIO15 Лінія введення-виведення або сигнал TXD інтерфейсу UART2;
17. GPIO2 Лінія введення-виведення або підключення світлодіода WI-FI статусу;
18. Лінія введення-виведення;
19. GPIO4 Лінія введення-виведення;
20. GPIO5 Лінія введення-виведення;
21. RXD0 Сигнал RXD інтерфейсу UART0;
22. TXD0 Сигнал TXD інтерфейсу UART0;

Модуль реле
В кодовому замку використовується для відкривання/закривання замка дверей.
1-канальний модуль реле 5V для Arduino PIC ARM AVR (див.рис. 3.10) використовується для управління різними приладами з великим вхідним струмом.

Релейний модуль має два інтерфейси - для підключення керуючого пристрою (мікроконтролера, комп'ютера) і для підключення керованих приладів до реле: для підключення релейного модуля до пристрою використовується 6-піновий інтерфейс. Контакти GND і VCC для підключення + 5В, виводи IN для підключення керуючого сигналу(мікроконтролер, комп'ютер або інший пристрій, що управляє). Для підключення керованих приладів до реле на платі присутній 12 контактний-затискач (по 3 на кожне реле). Позначення контактів зліва направо NO, COM, NC.
Потрібно підключити до виводів Vcc і Gnd модуль живлення 5В. Потім до керуючих виводів IN релейного модуля потрібно підключити мікроконтролер, комп'ютер або інший пристрій, що управляє.
Якщо на керуючих виводах є вхідні сигнали, то будуть світитися світлодіоди IN1, які відповідають керуючим виводам. До реле підключений червоний світлодіод D1, який буде світитися, коли реле включено.
Живлення релейного модуля здійснюється або від керуючого пристрою, або від зовнішніх джерел живлення (блоків живлення, батарей). Якщо потрібна повна оптична ізоляція потрібно підключити Vcc до виходу + 5В Arduino. Варто прибрати джампер Vcc to JDVcc. Підключити окремі+ 5В виводу JDVcc і Gnd з плати - це дасть живлення для транзисторів і обмотки реле.
Характеристики:
— робочий струм одного реле: 15 - 20мА;
— керуюча напруга реле: 5В;
— реле високого струму: SRD-05VDC-SL-C AC250V 10A, AC125V 10A, DC30V 10A, DC28V 10A;
— світлодіодна індикація стану кожного реле;
— світлодіодна індикація стану кожного керуючого виводу;
— стандартний інтерфейс, через який можна управляти релейним модулем за допомогою контролерів Arduino, 8051, AVR, PIC, DSP, ARM, ARM, MSP430, TTL logic або від комп'ютера;
— розміри: 76 х 55 х 19 мм;

— VCC “+” – живлення;
— IN – вивід вхідного сигналу;
— GNG “-” - земля.
Зуммер модуль
В кодовому замку використовується для сповіщення відкриття замка, і для відлякування злодіїв.
Активний зумер модуль для Arduino являє собою звуковипро-мінювач, модуль звуку.
Для використання зумера YL-44 потрібно створити на його основі макет: підключити живлення та підключити керуючий сигнал. Зумер видає такий же звук, як динамік ініціалізації в системному блоці комп'ютера. Зумер є активним, тому що для його роботи не потрібен зовнішній частотний генератор. На корпусі зумера є отвір для закріплення плати на плоскій поверхні за допомогою шурупа.
Активний зумер модуль для Arduino управляється Arduino контролером або іншим керуючим мікропроцесорним пристроєм за допомогою спеціальних програм і бібліотеки «TONE».

Характеристики:
— модель: YL-44;
— тип зумера: активний;
— видаваний звук: такий як у динаміка ініціалізації в системному блоці комп'ютера;
— отвір для закріплення на плоскій поверхні;
— напруга живлення: 3,3 - 5 В;
— розміри: 36 х 14 х 12 мм;
— довжина шлейфу: 250 мм;
— вага комплекту: 6 г.

Позначення контактів aктивного зумера модуля для Arduino:
— VCC - напруга живлення;
— I / O - керуючий сигнал;
— GND - загальний контакт.
Живлення aктивного зумера модуля для Arduino може здійснюватися від Arduino контролера або від зовнішнього джерела живлення. Напруга живлення 3,3 - 5 В постійного струму.
Bluetooth модуль
Для роботи з android-пристроєм через Bluetooth, у даній системі використовується Bluetooth модуль HC-06(див. рис. 3.14).

Основні характеристики HC-06:
— Напруга живлення – 3.3 VCC;
— Максимальний струм споживання – 45 мА;
— Швидкість передачі даних – 1200-1382400 біт;
— Максимальна відстань зв’язку - 30 м.
Опис виводів:
1. Vcc – вивід живлення;
2. Gnd – спільний вивід(земля);
3. TXD – вивід передачі даних;
4. RXD – вивід прийому даних;
На рисунку 3.15 показано графічне позначення HC-06 на функціональній схемі .

За бажанням можна налаштувати деякі параметри модуля, наприклад, його ім’я, швидкість передачі даних, pin-код.
Найзручніше підключити модуль через перехідник USB до комп’ютера, підключитися терміналом до послідовного порту на швидкості 9600 і спробувати надіслати тестову команду «АТ»(важливо відправляти саме великі літери), у відповідь має прийти «OK», тоді все налаштовано добре. Якщо у відповідь нічого не прийшло, необхідно перевірити правильність підключення модуля.
Доступні команди:
— АТ – поверне ОК;
— АТ+VERSION – переглянути версію;
— АТ+NAME – встановити ім’я пристрою;
— AT+PINxxxx – встановити pin-код(1234 – за замовчуванням);
— AT+BAUDx – встановити швидкість передачі даних.
Функціональна схема
Функціональна схема кодового замка зображена на рисунку 3.16.

1. DM1 – LCD1602 I2C;
2. DM2 – Arduino Unо;
3. BA1 - Зумер YL-44;
4. AM1 - Модуль реле 1-канальне 5V;
5. DM3 – Bluetooth модуль HC-06;
6. KM1 – Матрична клавіатура 4х4;
7. DM4 – Wi-Fi модуль ESP8266 ESP-12;