Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Умная зона безопасности на Arduino: разблокировка Android, iOS и Windows 10 по отпечатку пальца

Компоненты и материалы

Arduino Nano R3×1
Модуль Bluetooth HC-05×1
Сенсор отпечатков пальцев R301T (UART)×1
RGB-светодиод 5 мм (общий анод, 4 пина)×1

Программное обеспечение

О проекте

Гаджет «Safe Zone» создаёт зону доверия вокруг ваших устройств. После успешной верификации отпечатка пальца включается Bluetooth, устройства автоматически разблокируются (Smart Lock / Dynamic Lock), пока гаджет в радиусе действия.

Проблема и решение

Современные устройства требуют постоянной разблокировки (ПИН, отпечаток, Face ID). В безопасной среде (домашний офис) это раздражает. Решение: носимый/стационарный гаджет, который по вашему отпечатку активирует Bluetooth-маяк, и доверенные устройства снимают блокировку.

Модуль отпечатков R301T

UART-сенсор (TX/RX), хранит до 127 отпечатков. Работает через библиотеку Adafruit_Fingerprint. Подключение: TX → D2, RX → D3 (через SoftwareSerial), VCC → 3.3V/5V, GND → GND.

Bluetooth HC-05

Работает в режиме Slave. Один раз парится с каждым устройством (Windows 10: Dynamic Lock, Android: Smart Lock, iOS: Touch ID & Passcode → автоматическая разблокировка).

Схема подключения

Код Arduino (основной скетч)

#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // RX, TX для R301T
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
int cc = 0;

void setup() {
  Serial.begin(9600);
  while (!Serial); delay(100);
  Serial.println("\n\nAdafruit finger detect test");

  finger.begin(57600);
  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1) { pinMode(13, OUTPUT); digitalWrite(13, LOW); pinMode(9, OUTPUT); digitalWrite(9, HIGH); }
  }

  finger.getTemplateCount();
  Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
  Serial.println("Waiting for valid finger...");
  pinMode(13, OUTPUT); pinMode(9, OUTPUT);
}

void loop() {
  getFingerprintIDez();
  delay(50);
}

uint8_t getFingerprintID() {
  uint8_t p = finger.getImage();
  switch (p) {
    case FINGERPRINT_OK: Serial.println("Image taken"); break;
    case FINGERPRINT_NOFINGER: Serial.println("No finger detected"); return p;
    case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); return p;
    case FINGERPRINT_IMAGEFAIL: Serial.println("Imaging error"); return p;
    default: Serial.println("Unknown error"); return p;
  }
  p = finger.image2Tz();
  switch (p) {
    case FINGERPRINT_OK: Serial.println("Image converted"); break;
    case FINGERPRINT_IMAGEMESS: Serial.println("Image too messy"); return p;
    case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); return p;
    case FINGERPRINT_FEATUREFAIL: Serial.println("Could not find fingerprint features"); return p;
    case FINGERPRINT_INVALIDIMAGE: Serial.println("Could not find fingerprint features"); return p;
    default: Serial.println("Unknown error"); return p;
  }
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK) Serial.println("Found a print match!");
  else if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println("Communication error"); return p; }
  else if (p == FINGERPRINT_NOTFOUND) { Serial.println("Did not find a match"); return p; }
  else { Serial.println("Unknown error"); return p; }

  Serial.print("Found ID #"); Serial.print(finger.fingerID);
  Serial.print(" with confidence of "); Serial.println(finger.confidence);
  for (int i = 255; i > 1; i--) { analogWrite(9, i); delay(10); }
  if (cc % 2 == 0) digitalWrite(13, HIGH); else digitalWrite(13, LOW);
  cc++;
  return finger.fingerID;
}

int getFingerprintIDez() {
  uint8_t p = finger.getImage();
  if (p != FINGERPRINT_OK) return -1;
  p = finger.image2Tz();
  if (p != FINGERPRINT_OK) return -1;
  p = finger.fingerFastSearch();
  if (p != FINGERPRINT_OK) return -1;
  Serial.print("Found ID #"); Serial.print(finger.fingerID);
  Serial.print(" with confidence of "); Serial.println(finger.confidence);
  return finger.fingerID;
}

Сборка и настройка устройств

  1. Загрузить скетч в Arduino Nano.
  2. Зарегистрировать отпечаток через Serial Monitor (команды библиотеки Adafruit).
  3. Собрать схему на макетной плате или печатной плате.
  4. Спарьте HC-05 с устройствами:
    • Windows 10: Параметры → Учётные записи → Параметры входа → Dynamic Lock → добавить Bluetooth-устройство.
    • Android: Настройки → Экран блокировки → Smart Lock → Доверенные устройства → добавить HC-05.
    • iOS: Настройки → Touch ID и код-пароль → разблокировка по Bluetooth (требует настройки).
  5. Приложить палец → RGB мигает зелёным → HC-05 становится видимым → устройства разблокируются.

Идеи для развития

Производственный процесс

  1. Панель управления полётным симулятором 2020 на Arduino Nano: LCD и CDI-дисплеи
  2. Создание потрясающей системы Ambilight для монитора на Arduino
  3. Умная система мониторинга температуры для школ: точно, в реальном времени, безопасно
  4. Библиотека 8-битного порта ввода-вывода для Arduino — расширение цифрового управления
  5. Управление Arduino с iOS/Android по Wi-Fi/Ethernet через Evothings Studio
  6. Arduino 64-клавишная прототипная клавиатура: матрица на сдвиговых регистрах
  7. Генерация музыкальных тонов на Arduino: полный спектр 88 клавиш пианино
  8. Гальванически разделённый аналоговый вход для Arduino на LM331 и оптопаре 4N25
  9. Набор для создания робота с умной внутренней навигацией на базе Arduino
  10. Как прямые водяные насосы повышают эффективность водопередачи