- Компоненти:
- Пояснення схеми:
- Стукаючий шаблон подачі в Arduino:
- Робоче пояснення:
- Пояснення програмування:
Безпека є головною проблемою у нашому повсякденному житті, і цифрові замки стали важливою частиною цих систем безпеки. Існує багато типів охоронних систем, які забезпечують наше місце. Деякі приклади - це система безпеки на основі PIR, система безпеки на основі RFID, система цифрового блокування, системи з біоматрицею, блокування електронного коду. У цій публікації давайте створимо секретний дверний замок, що виявляє стукіт, використовуючи Arduino, який може виявити візерунок ваших постукувань у двері і відкриватиме замок лише в тому випадку, якщо модель стуку відповідає правильному малюнку. Для належної робочої демонстрації перевірте відео в кінці.
Компоненти:
- Arduino Uno
- Нажимна Кнопка
- Зумер
- Резистор 1М
- Потужність
- Підключення проводів
- Коробка
- Серводвигун
Пояснення схеми:
Принципова схема цього датчика детонаційного малюнка дуже проста, що містить Arduino для контролю всього процесу проекту, кнопки, зумера та сервомотора. Arduino контролює цілі процеси, такі як отримання пароля у формі зумера або датчика, порівняння шаблонів, керування сервоприводом для відкриття та закриття воріт та збереження шаблону в Arduino.
Кнопка безпосередньо підключена до контакту D7 Arduino щодо землі. А зуммер підключений на аналоговому штифті A0 Arduino щодо землі і з опором 1M між A0 і землею. Серводвигун також з'єднаний з ШІМ висновками D3 з Arduino.
Стукаючий шаблон подачі в Arduino:
У цій схемі ми використовували зуммер або датчик Peizo, щоб взяти схему введення стуку в системі. Тут ми використовуємо кнопку, щоб дозволити отримувати вхідні дані від датчика, а також зберігати це в Arduino. Ця система розроблена, беручи ідею з шаблону азбуки Морзе, але не зовсім схожа на цю.
Тут ми використали картонну коробку для демонстрації. Щоб взяти вхід, ми натискаємо кнопку, щоб перебити дошку. Тут ми стукали, маючи на увазі період часу, який становить 500 мс. Це 500 мс, тому що ми зафіксували його в коді, і шаблон введення залежить від нього. Цей 500-часовий проміжок часу визначатиме, що вхідні дані були 1 або 0. Перевірте код нижче, щоб зрозуміти це.
Коли ми стукаємо його, Arduino починає відстежувати час першого і другого удару і поміщає це в масив. У цій системі ми приймаємо 6 ударів. Це означає, що ми отримаємо 5 періодів часу.
Тепер ми перевіряємо проміжок часу по одному. Спочатку ми перевіряємо проміжок часу між першим і другим стуком, якщо різниця в часі між цими менше 500 мс, тоді вона буде 0, а якщо більше 500 мс, то буде 1, і вона буде збережена у змінну. Тепер після цього ми перевіряємо проміжок часу між другим і третім ударами тощо.
Нарешті, ми отримаємо 5-значний вихід у форматі 0 та 1 (двійковий).
Робоче пояснення:
Робота з проектом Smart Lock на основі Knock проста. Спочатку ми повинні зберегти шаблон у системі. Отже, ми повинні натискати та утримувати кнопку, доки ми не постукаємо 6 разів. У цьому проекті я використав 6 ударів, але користувач може змінити їх як завгодно. Після шестикратного стуку Arduino знаходить шаблон стуку і зберігає його в EEPROM. Тепер після збереження шаблону введення натисніть і відразу ж відпустіть кнопку для надходження вхідних даних від датчика до Arduino, щоб відкрити замок. Тепер нам доведеться постукати 6 разів. Після цього Arduino декодує його та порівнює із збереженим шаблоном. Якщо відбувається збіг, тоді Arduino відкриває ворота, керуючи сервомотором.
Примітка: коли ми натискаємо або натискаємо та утримуємо кнопку Arduino, запускаємо 10-секундний таймер, щоб прийняти всі 6 стукотів. Означає, що користувачеві потрібно стукати протягом 10 секунд. І користувач може відкрити послідовний монітор, щоб переглянути журнал.
Пояснення програмування:
Перш за все в програму ми включаємо файл заголовка та визначаємо вхідний та вихідний штифт та визначаємо макрос та оголошені змінні, як ви можете бачити у Повному коді в розділі коду нижче.
Після цього, у функції налаштування , ми даємо напрямок визначеному штифту і запускаємо сервомотор.
void setup () {pinMode (sw, INPUT_PULLUP); myServo.attach (servoPin); myServo.write (180); Serial.begin (9600); }
Після цього ми беремо введення і зберігаємо шаблон введення або час стуку в масиві.
цикл void () {int i = 0; if (digitalRead (sw) == LOW) {Serial.println ("Пуск"); затримка (1000); довгий stt = міліс (); while (millis () <(stt + patternInputTime)) {int temp = analogRead (A0); if (temp> чутливість && прапор == 0 && i <= patternLenth) {…………..
Після цього ми декодуємо шаблон введення
для (int i = 0; i
А потім збережіть, якщо кнопка все ще натиснута
if (digitalRead (sw) == 0) {for (int i = 0; i
І якщо кнопка все ще не натиснута, тоді Arduino порівняє введений декодований шаблон із збереженим шаблоном.
ще {if (knok == 1) {for (int i = 0; i
Якщо який-небудь пароль відповідає, тоді сервопривід відкрийте ворота, інакше нічого не сталося, але користувач може бачити результат через послідовний монітор.
Serial.println (acceptFlag); if (acceptFlag> = patternLenth-1) {Serial.println ("Прийнято"); myServo.write (openGate); затримка (5000); myServo.write (closeGate); } else Serial.println ("Відхилено"); }
Ви можете перевірити повний код нижче за допомогою демонстраційного відео.