Самоделна биометрична брава с пръстов отпечатък за гаражна врата. Домашна биометрична ключалка за пръстови отпечатъци за гаражна врата Скенер за пръстови отпечатъци за различни Arduino шаблони


Какво ти е необходимо

  1. FPM10A Модул за пръстови отпечатъци
  2. RFID модул RC522
  3. Arduino mega (теоретично могат да се използват и други платки, но се спрях на тази поради броя на щифтовете)
  4. 1 лиценз за 1C 8.2 (дебел клиент в моя случай, изрежете го сами за тънък)
  5. Комуникация през Com порт с помощта на MsCommLib.MsComm (имате нужда от лиценз, можете дори да го потърсите в Google тук)
  6. Среда за разработка за Arduino (използвана е 1.8.5)
  7. Таблет с USB интерфейс.
  8. Кабел: 1 Kilo Ohm резистор, бутон за късо съединение, проводници, „синя“ електрическа лента, терморектален анализатор на пълзене, ако желаете (можете да усучете проводниците, ако имате близки, неописуеми усещания, свързани с това устройство), USB кабел за Arduino, прави ръце и криви навивки на средния 1s псевдоним вкл. да направи тяло за цялото това чудо.

Забележки: на снимката цветовете на проводниците са различни - по време на монтажа няколко проводника бяха скъсани, защото... Бяха изцяло Huawei и се наложи да взема други налични цветове.

Системата за съобщения се дублира в критични моменти нарочно.
Веднага ви предупреждавам, че средният инженер може да има сълзи, течащи от очите им от колофона, но това е първият ми проект на Arduino, и то с такава сложност, и изглежда работи и работи стабилно. Първоначално имаше идея да правя всичко чрез мрежата (wifi + кабел), но след като оцених разходите за отстраняване на грешки и създаване на собствена http услуга и внедряване на всичко в 1C, реших да използвам com; във всеки случай цялата логика може да се прехвърли към външна обработка без промяна на конф.

Можете също така да вмъкнете система за фотографиране на входящ служител през уеб камерата на таблета, да добавите реле и контрол на електронни врати, пълна интеграция със ZUP чрез външна обработка, предавана чрез параметри за стартиране и унищожаване на карнавала за особено опасни портали от секретно значение) .

Полезната критика е добре дошла.

Пролог

Като видях цените на съществуващите системи за достъп и системи за отчитане на времето, зелената есенция бавно започна да ме задушава. След като се разхождах дълго време из Arduino и неговите модули, попаднах на модула за пръстови отпечатъци FPM10A. Този модул, в зависимост от версията, може да съхранява голям брой пръстови отпечатъци - от 50 до безкрайност във флаш паметта си и се използва в повечето модули на производителите на биометричен контрол. Въпреки това, в моя проект, поради библиотеката, той е ограничен до 254. Предупреждавам ви веднага, че публикувам моята изчерпателно намерена библиотека за Arduino, защото... Борих се с търсенето дълго време и загубих 3 дни в търсене и отстраняване на грешки в библиотеката за този модул.

Описание на модулите

Използваната в проекта библиотека позволява използването на до 256 (байта) пръстови отпечатъка. Тази сума беше прекомерна за мен, в краен случай можете да използвате 1 модул на всеки 256 служители.
Броят на RFID етикетите е ограничен само от уникалността на техния UID. базата данни може да се съхранява в 1C и да се свързва със служители. Могат да се използват всички съвместими тагове. Теоретично може да са подходящи всякакви ключове за домофони, метро карти и тройки карти.
Връзката към 1c минава през com порта през библиотеката MsCommLib.MsComm, но може да се пренапише във всяка друга. Драйверите за com порта за Arduino трябва да бъдат инсталирани заедно със средата за разработка на Arduino, но те също могат да бъдат търсени в Google.
Всичко запоено е скрито в кутия, свързано през мрежата (аз използвах WiFi, но можете да използвате и външна USB мрежова карта).

Алгоритъм на работа

Хардуер:

  1. Запояваме/усукваме Arduino модули
  2. Свързваме се с компютърен програмист и качваме фърмуера на Arda, изпълняваме теста, уверяваме се, че командите работят
  3. Те се свързват чрез USB към таблет с Windows 10. На таблета го заменяме или чрез автоматично зареждане:

A) чрез основен файл:

    стартиране - изпълнение: shell:startup

    създайте там файл с помощта на Notepad с името hz.bat и съдържанието (сигурен съм, че можете сами да се справите с параметрите на файловата база данни - имам sql): “C:\Program Files\1cv8\ ... \bin\1cv8 .exe” ENTERPRISE / SServerName:Port\DBName" /NUser /PPassword

B) правим по-усъвършенстван, като заменяме обвивката с помощта на VB скрипт (не забравяйте да създадете друг потребител в допълнение към този по подразбиране, без да стартирате обвивката):

    създайте файл с помощта на Notepad с име C:\hz\hz.vbs и съдържание

set oShell=createobject("wscript.shell")
sCmd="""C:\Program Files\1cv8\ ... \bin\1cv8.exe"" ENTERPRISE /SServerName:Port\DBName" /NUser /PPassword"
oShell.run sCmd, вярно
sCmd="изключване /r /t 0"
oShell.run sCmd

    стартиране - изпълнение: regedit, следвайте клона: Current User\Software\Microsoft\Windows NT\CurrentVersion\Winlogon

    добавете параметъра на низа "Shell" (REG_SZ)

    редактирайте го: "wscript C:\hz\hz.vbs" (без кавички в параметъра)

    рестартирайте и тествайте. 1c трябва да стартира без explorera

  1. След това се уверяваме, че работи и го опаковаме в кутия.

Програмно:

  1. В нормално състояние Arduino проверява скенера за пръстови отпечатъци, RFID скенера, бутона за администриране и изпраща команди за изчакване през com порта.
  2. Веднага щом пръст се появи в зрителното поле на четеца, ние изпращаме команда към com порта и 1c вижда или ID на пръста, или UID на етикета чрез четене на променливите.
  3. Бутонът е необходим за администриране на пръстови отпечатъци. Когато го натиснете, 1c иска парола за вход и след това може да присвои на служителя или ID на скенер, или UID на карта чрез системата за съобщения.

За комуникация с 1c се използват следните редове (направих обработката за моя conf и моя график, той е в проекта само за пример, но е включен в изходния код):

Връзка към com порт

Процедура StartSystem() ComPort = Нов COMObject("MsCommLib.MsComm"); Опитайте ComPort.CommPort = 3; ComPort.Settings = "9600,N,8,1"; ComPort.Handshaking = 0; ComPort.InBufferCount = 0; ComPort.InBufferSize = 70; ComPort.InputLen = 0; ComPort.InputMode = 1; ComPort.NullDiscard = 0; ComPort.PortOpen = Вярно; Предупреждение за изключение ("Не е възможно да се отвори портът!"); ThisForm.Close(); EndAttempt; hSeconds = 0; ConnectWaitHandler("OutputSportData", 1, False); // Свързване на манипулатор за наблюдение на порта Край на процедурата

Прекъсване на връзката от com порт

Процедура EndSystem() DisableWaitHandler("OutputSportData"); ComPort.PortOpen = False; ComPort = ""; Край на процедурата

Четене на данни от com порт

Процедура OutputSportData() ExportSportData = ""; If ComPort.PortOpen Then //ComPort.Output = "1"; SportsData = ComPort.Input; ProcessEncryptedString(SportData); Ако е съкратено (Предварителен служител)<>"" Тогава hSeconds = hSeconds + 1; endIf; Ако hSeconds > 60, тогава PreEmployee = 0; hSeconds = 0; endIf; В противен случай Предупреждение ("Портът не се отваря"); ThisForm.Close(); endIf; Край на процедурата Процедура Процес Криптиран низ (Спортни данни) Масив = Спортни данни Unload(); IndexMin = SportsData.GetLowerBound(0); IndexMax = SportsData.GetUpperBound(0); StringInfo = ""; За Index = IndexMin By IndexMax - 1 цикъл SymbolReceived = AbbrLP(Array.Get(Index)); If CharacterReceived = "13" Then If Not Suspend Then RowInfo = RowProcessing(RowInfo); //Тук обработка на съобщения EndIf; Else LineInfo = LineInfo + Symbol(Number(SymbolReceived)); endIf; EndCycle; Край на процедурата

Изпращане на информация към com порт

Процедура SendToPort(Изпращане) Ако ComPort.PortOpen Тогава ComPort.Output = AbbrLP(Изпращане); Else Notify("Портът не се отваря", MessageStatus.VeryImportant); endIf; Край на процедурата

Код на проекта за Arduino Mega

#включи // свържете библиотеката за работа с модула за пръстови отпечатъци #include // свържете библиотеката за работа със софтуер UART #include #включи const int buttonPin = 2; // входно число, свързано с бутона за влизане в режим на програмиране int buttonState = 0; // променлива за съхраняване на състоянието на бутона int modeState = 0; // променлива за съхраняване на състоянието на устройството. 0 - изчакване на скенера за пръстови отпечатъци. 1 - програмиране uint8_t id; // идентификационен номер, под който ще бъде записан шаблонът за пръстови отпечатъци String frcUID = ""; // идентификационен номер на rfid четец int rfidYes = 0; // успешно въвеждане на RFID SoftwareSerial mySerial(10, 11); // деклариране на обекта mySerial за работа с библиотеката SoftwareSerial OBJECT_NAME(RX, TX); // Можете да посочите всякакви пинове, които поддържат PCINTx прекъсване Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); // деклариране на пръстов обект за работа с библиотеката Adafruit_Fingerprint OBJECT_NAME = Adafruit_Fingerprint(PARAMETER); // ПАРАМЕТЪР - връзка към обект за работа с UART, към който е свързан модула, например: &Serial1 MFRC522 mfrc522(53, 5); // Създаване на екземпляр MFRC522 void setup() ( pinMode(buttonPin, INPUT); // инициализиране на щифта, свързан към бутона като вход Serial.begin(9600); // Инициализиране на хардуерен UART със скорост 9600 докато (!Serial); / / Изчакване на хардуерно закъснение за инициализация на UART (500); SPI.begin(); // Инициализиране на SPI шина mfrc522.PCD_Init(); // Иницииране на MFRC522 mfrc522.PCD_DumpVersionToSerial(); // Показване на подробности за PCD - подробности за четеца на карти MFRC522 delay( 500); // Изчакване модулът за пръстови отпечатъци да инициализира Serial.println(". . . Сензор за сканиране . . ."); // Показване на съобщението "Търсене на сензор" finger.begin(57600); // Инициализиране софтуерен UART със скорост 57600 (скорост на модула по подразбиране) Serial.println(finger.verifyPassword()); if (finger.verifyPassword()) ( Serial.println(". . . Намерен сензор! . . . "); // Ако модулът за пръстови отпечатъци е открит, отпечатайте съобщение "сензорът е намерен" ) else ( Serial.println(". . . Не е намерен сензор . . ."); // Ако модулът за пръстови отпечатъци не е намерен, покажете съобщението "сензорът не е намерен" " и въведете безкраен цикъл: while(1); докато (1); ) Serial.println(". . . Моля, поставете пръста си върху скенера или rfid . . .."); ) void loop() ( //Работа с бутона! buttonState = digitalRead(buttonPin); // четене на стойности от входа на бутона if (buttonState == HIGH) ( modeState = 1; // влизане в режим на програмиране NEXT ) превключвател (modeState) ( case 0: frcUID = ""; //Работа в режим на запитване за пръстов отпечатък и rfid if (finger.getImage() == FINGERPRINT_OK) ( // Заснемане на изображението, ако резултатът от изпълнението е равен на константата FINGERPRINT_OK ( правилно зареждане на изображението), след това преминаваме по-нататък if (finger.image2Tz() == FINGERPRINT_OK) ( // Преобразуване на полученото изображение, ако резултатът от изпълнението е равен на константата FINGERPRINT_OK (изображението се преобразува), след това продължете if (finger.fingerFastSearch() == FINGERPRINT_OK) ( // Намерете съвпадение в базата данни с пръстови отпечатъци, ако резултатът от изпълнението е равен на константата FINGERPRINT_OK (намерено е съвпадение), тогава отиваме по-нататък frcUID = ". . . Намерен ID=" + String(finger.fingerID) + ", confidence=" + String(finger.confidence) + "! . . "; Serial.println(frcUID); ) ) ) if (mfrc522.PICC_IsNewCardPresent()) ( delay(100); if (mfrc522.PICC_ReadCardSerial()) ( //mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); frcUID = ""; за (байт i = 0; i< mfrc522.uid.size; i++) { frcUID = frcUID + (mfrc522.uid.uidByte[i]); } frcUID = ". . . Found RFID UID=" + frcUID + "@ . . ."; Serial.println(frcUID); } } delay(100); // Задержка перед следующим сканированием 0,5 сек (нет смысла запускать на полной скорости) Serial.println(". . . Please put your finger on the scanner or rfid . . ."); break; case 1: Serial.println(". . . Programming mode . . ."); // Входим в режим программирования delay(400); Serial.println(". . . Programming mode . . ."); // Входим в режим программирования delay(400); Serial.println(". . . Programming mode . . ."); // Входим в режим программирования delay(400); Serial.println(". . . Programming mode . . ."); // Входим в режим программирования id = readnumber(); // Ожидание получения цифры, введённой с COM-порта if (id >= 255) ( // Ако 255 (максимален id), тогава влезте отново в режим на готовност modeState = 0; ) else ( if (id)< 254) { // Если 254 то rfid иначе палец 0-253 modeState = 2; // Пытаемся отсканировать палец } else { modeState = 3; // Пытаемся отсканировать rfid uid } } break; case 2: while (!getFingerprintEnroll()); // Пытаемся получить ответ об присваивании ID modeState = 1; break; case 3: rfidYes = 0; Serial.println(". . . Put RFID in Scanner! . . ."); delay(400); Serial.println(". . . Put RFID in Scanner! . . ."); delay(400); Serial.println(". . . Put RFID in Scanner! . . ."); delay(5000); if (mfrc522.PICC_IsNewCardPresent()) { // Пытаемся отсканировать rfid uid delay(100); if (mfrc522.PICC_ReadCardSerial()) { //mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); frcUID = ""; for (byte i = 0; i < mfrc522.uid.size; i++) { frcUID = frcUID + (mfrc522.uid.uidByte[i]); } frcUID = ". . . New RFID UID=" + frcUID + "@ . . ."; rfidYes = 1; Serial.println(frcUID); delay(400); Serial.println(frcUID); delay(400); Serial.println(frcUID); delay(400); Serial.println(frcUID); } } if (rfidYes == 0) { Serial.println(". . . RFID error! . . ."); delay(400); } modeState = 1; break; } } // функция возвращает номер, введённый с COM-порта uint8_t readnumber(void) { int num = -1; // Переменная с номером, который требуется вернуть while (num < 0) { // Вход в цикл, пока переменная num не станет >= 0 докато (!Serial.available()); // Изчакайте, докато данните се появят в буфера на COM порта, докато (Serial.available()) ( // Цикъл, докато буферът на COM порта не изчерпи данните си char c = Serial.read(); // Присвояване на следващия знак от COM порта към променлива c if (isdigit(c)) ( // Ако стойността на променлива c е цифра, тогава... if (num< 0) { num = 0; // Увеличиваем значение num на один порядок } else { num *= 10; } num += c - "0"; // Прибавляем к значению num цифру из переменной c } delay(5); // Задержка на 5мс, чтоб в буфер COM-порта успели догрузиться следующие символы (если таковые имеются) } } return num; // Возвращение введённого числа } uint8_t getFingerprintEnroll() { int p; // Переменная для получения результатов выполнения функций //Загрузка первого изображения отпечатка пальца p = -1; Serial.println(". . . Please put your new finger on the scanner . . ."); // Вывод сообщения "Пожалуйста положите Ваш палец на сканер" delay(400); Serial.println(". . . Please put your new finger on the scanner . . ."); // Вывод сообщения "Пожалуйста положите Ваш палец на сканер" delay(400); Serial.println(". . . Please put your new finger on the scanner . . ."); // Вывод сообщения "Пожалуйста положите Ваш палец на сканер" delay(400); Serial.println(". . . Please put your new finger on the scanner . . ."); // Вывод сообщения "Пожалуйста положите Ваш палец на сканер" while (p != FINGERPRINT_OK) { // Вход в цикл, пока переменная p не станет равна константе FINGERPRINT_OK (корректная загрузка изображения) p = finger.getImage(); // Захватываем изображение и возвращаем результат выполнения данной операции в переменную p switch (p) { // Проверка ответа... case FINGERPRINT_OK: Serial.println(" Ok!"); break; // Изображение отпечатка пальца корректно загрузилось case FINGERPRINT_NOFINGER: Serial.println(". . . Please put your new finger on the scanner . . ."); break;// Сканер не обнаружил отпечаток пальца case FINGERPRINT_PACKETRECIEVEERR: Serial.println(". . . Communication error . . ."); break; // Ошибка соединения case FINGERPRINT_IMAGEFAIL: Serial.println(". . . Imaging error Please try again . . ."); break; // Ошибка изображения default: Serial.println(". . . Unknown error Please try again . . ."); break; // Неизвестная ошибка } } //Конвертирование изображения первого отпечатка пальца p = finger.image2Tz(1); Serial.print (". . . Image converting . . ."); // Конвертируем первое изображение и возвращаем результат выполнения данной операции в переменную p switch (p) { // Проверка ответа... case FINGERPRINT_OK: Serial.println("Ok!"); 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(". . . No fingerprint on image . . ."); return p; // Ошибка конвертирования case FINGERPRINT_INVALIDIMAGE: Serial.println(". . . No fingerprint on image . . ."); return p; // Ошибка изображения default: Serial.println(". . . Unknown error . . ."); return p; // Неизвестная ошибка } //Просим убрать палец от сканера p = 0; while (p != FINGERPRINT_NOFINGER) { // Вход в цикл, пока переменная p не станет равна константе FINGERPRINT_NOFINGER (сканер не обнаружил отпечаток пальца) Serial.println(". . . Please remove your finger from the scanner . . ."); // Вывод сообщения "Пожалуйста уберите Ваш палец со сканера" delay(400); p = finger.getImage(); // Захватываем изображение и возвращаем результат выполнения данной операции в переменную p } Serial.println(" Ok!"); //Загрузка второго изображения отпечатка пальца p = -1; Serial.println(". . . Place same finger again . . ."); // Вывод сообщения "Пожалуйста положите тот же палец еще раз" delay(400); while (p != FINGERPRINT_OK) { // Вход в цикл, пока переменная p не станет равна константе FINGERPRINT_OK (корректная загрузка изображения) p = finger.getImage(); // Захватываем изображение и возвращаем результат выполнения данной операции в переменную p switch (p) { // Проверка ответа... case FINGERPRINT_OK: Serial.println(" Ok!"); break; // Изображение отпечатка пальца корректно загрузилось case FINGERPRINT_NOFINGER: Serial.println(". . . Place same finger again . . ."); break; // Сканер не обнаружил отпечаток пальца case FINGERPRINT_PACKETRECIEVEERR: Serial.println(". . . Communication error . . ."); break; // Ошибка соединения case FINGERPRINT_IMAGEFAIL: Serial.println(". . . Imaging error . . ."); break; // Ошибка изображения default: Serial.println(". . . Unknown error . . ."); break; // Неизвестная ошибка } } //Конвертирование изображения второго отпечатка пальца p = finger.image2Tz(2); Serial.print (". . . Image 2 converting . . ."); // Конвертируем второе изображение и возвращаем результат выполнения данной операции в переменную p switch (p) { // Проверка ответа... case FINGERPRINT_OK: Serial.println("Ok!"); 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(". . . No fingerprint on image . . ."); return p; // Ошибка конвертирования case FINGERPRINT_INVALIDIMAGE: Serial.println(". . . No fingerprint on image . . ."); return p; // Ошибка изображения default: Serial.println(". . . Unknown error . . ."); return p; // Неизвестная ошибка } //Создание модели (шаблона) отпечатка пальца, по двум изображениям p = finger.createModel(); Serial.print (". . . Creating model . . ."); // Создание модели (шаблона) отпечатка пальца, по двум изображениям if (p == FINGERPRINT_OK) { Serial.println(". . . Model create! Ok! . . ."); } else // Модель (шаблон) отпечатка пальца создана if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println(". . . Communication error . . ."); return p; } else // Ошибка соединения if (p == FINGERPRINT_ENROLLMISMATCH) { Serial.println(". . . Fingerprints did not match . . ."); return p; } else // Отпечатки пальцев не совпадают { Serial.println(". . . Unknown error . . ."); // Неизвестная ошибка return p; } //Сохранение, ранее созданной, модели (шаблона) отпечатка пальца, под определённым ранее, идентификационным номером p = finger.storeModel(id); //Serial.println(". . . Saving model . . ."); Serial.println(". . . Saving model . . ."); //Serial.println(". . . Saving model in ID="); Serial.print(id); Serial.print(": "); // Сохранение модели (шаблона) отпечатка пальца, по двум изображениям if (p == FINGERPRINT_OK) { frcUID = ". . . Model save in ID=" + String(id) + "! . . ."; Serial.println(frcUID); delay(1500); Serial.println(frcUID); delay(400); Serial.println(frcUID); delay(400); Serial.println(frcUID); } else // Модель (шаблон) отпечатка пальца сохранена if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println(". . . Communication error . . ."); return p; } else // Ошибка соединения if (p == FINGERPRINT_BADLOCATION) { Serial.println(". . . Could not store in that location . . ."); return p; } else // Не удалось сохранить в этом месте if (p == FINGERPRINT_FLASHERR) { Serial.println(". . . Error writing to flash . . ."); return p; } else // Ошибка записи в flash память { Serial.println(". . . Unknown error . . ."); // Неизвестная ошибка return p; } }

Епилог

Цената на таблета е около 10 000 рубли. (всъщност от 7000 нови могат да се купят с 1 Gb RAM, но с 4Gb 1c ще е по-приятно да се движи, всъщност купих използван за 6000 в перфектно състояние с 1Gb но бърниках с оптимизацията).

Проходът беше направен за производство на мебели, така че направих тялото там. Мисля, че можете да изрежете „смес от дървени стърготини и картон“ в магазин за 1000 рубли. и го завийте заедно със самонарезни винтове/залепете го със суперлепило. В краен случай можете да вземете готова кутия (например електрически шкаф) и да изрежете прозорец там.

Модули Arduino и т.н.: около 2000 рубли.

Удоволствието от брейнсторминг и правене е безценно!

Ако използвате сравнително старо устройство, тогава не трябва да се разстройвате преди време. Вместо да сменяте стария си лаптоп с по-модерен с вграден биометричен сензор, можете да свържете USB към него.

PQI Mini USB четецът на пръстови отпечатъци е чудесен избор за тези, които искат да дадат втори живот на старо оборудване. Скенерът е създаден специално, за да работи с новата функция Hello, налична на устройства с Windows 10. Устройството обаче поддържа и версии на операционните системи Windows 7 и 8.

Едно от основните предимства на сензора е възможността за 360-градусово сканиране. Така че не е нужно да се притеснявате за най-добрия начин да свържете вашето устройство към вашия компютър. Използвайте най-близкия USB порт и започнете. Когато скенерът се нуждае от пръстов отпечатък, той автоматично ще се обърне там, където е необходим, и ще сравни получените данни със запазеното копие.

PQI Mini USB четец на пръстови отпечатъци може да съхранява до 10 различни профила. Това прави устройството чудесно за споделяне или когато трябва да сканирате допълнителен пръст (ако „основният“ се замърси или нарани).

PQI Mini USB четецът на пръстови отпечатъци се предлага на много разумна цена, което го прави отличен избор за тези, които търсят модел за начинаещи. Освен това скенерът е достатъчно преносим, ​​за да го носите без много проблеми.

Четец на пръстови отпечатъци Verifi P2000

Ако използвате настолен компютър, където не е толкова лесно да стигнете до USB портове, тогава обърнете внимание на четеца на пръстови отпечатъци Verifi P2000. Лесно се свързва с компютър и най-важното е, че може да се постави близо до компютъра за по-удобно използване.

Скенерът е изработен от удароустойчив метал и ще издържи много години. Въпреки здравия си дизайн, той има добра степен на разпознаване на пръстови отпечатъци. Така че не е нужно постоянно да променяте позицията на пръста си, само за да постигнете идеално съвпадение. В повечето случаи плъзгането на сензора само веднъж ще бъде достатъчно.

При създаването на P2000 Verifit планира да направи устройството здраво и издръжливо, така че да не оказва влияние върху процеса на сканиране и точността на резултатите от разпознаването. Четецът на пръстови отпечатъци Verifi P2000 е доста преносимо устройство, което лесно можете да носите със себе си. Освен това е съвместим с много по-голям брой компютри от други подобни модели.

Kensington VeriMark

За един невероятно малък скенер за пръстови отпечатъци, Kensington VeriMark има почти всичко необходимо за удобно изживяване. Моделът поддържа 360-градусово сканиране и е с малки размери. Но основното нещо, което прави Kensington VeriMark толкова ценен, е допълнителната функционалност.

Устройството съхранява всички получени данни в криптирана форма. Когато сензорът сканира пръстов отпечатък, той веднага го криптира. Невъзможно е да се прекъсне този процес, така че хакването на софтуера или хардуера и извличането на биометрични данни няма да е възможно.

Освен това устройството използва специален шаблон за дешифриране на получените сканирания, с който разполага само производителят. Това го прави по-сигурен от хакерски атаки и други опити за неоторизиран достъп.

Скенерът поддържа работа със сравнително стари портове, независимо от версията на изданието. Ако използвате модел с адаптер USB-C към USB-A, можете да свържете устройството към сравнително стар лаптоп или компютър, който не поддържа по-модерни USB портове.

Анализатор на четец на пръстови отпечатъци Benss

Benss Fingerprint Reader Analyzer е друг скенер, който може да улесни живота ви и да ви спаси от много проблеми. По правило по-простите модели първо правят една контролна снимка, след което всички следващи разпечатки се сравняват с първоначалния резултат. Това означава, че ако нещо се случи с оригиналното изображение (с което се сравняват всички други сканирания), вероятността крайните резултати да съвпадат значително ще намалее.

Benss Fingerprint Reader Analyzer работи със самообучаващ се алгоритъм, който автоматично създава и актуализира вашия профил с всяко докосване. Колкото по-дълго използвате устройството, толкова по-точни ще бъдат резултатите. Това прави скенера по-труден за заблуда с фалшиви пръстови отпечатъци. Тъй като сензорът непрекъснато сканира пръста ви и актуализира базата данни, той веднага открива опити за неоторизиран достъп.

Това е едно от най-ефективните устройства за противодействие на хакерски атаки. Неговият процент на фалшиво приемане е по-малък от 0,002%, което означава, че наистина трябва да опитате да хакнете устройството. В същото време това не усложнява много работата, неговият FRR коефициент (False Rejection Rate - отказ на достъп до лице, регистрирано в системата) е само 3%.

IDEM BioScan Compact

Ако търсите скенер с възможност за персонализиране, ще харесате IDEM BioScan Compact. За да разширите основните му възможности и да получите допълнителна функционалност, просто изтеглете специален софтуер от официалния уебсайт на производителя.

След това ще можете да шифровате отделни файлове и папки на вашия компютър, както и да съхранявате данни за вход и парола за достъп до уебсайтове в специална програма. По този начин можете да влезете във всеки интернет портал, като просто докоснете сензора с пръст.

Дори и да не вземете предвид допълнителната функционалност, BioScan Compact се счита за достоен модел. Устройството може да съхранява до 10 различни пръстови отпечатъка, разполага с малки размери и вградена защита за разпознаване на фалшиви биометрични данни.

Blucoil SecuGen Hamster Pro 20

Blucoil SecuGen Hamster Pro 20 е идеалният скенер за пръстови отпечатъци за професионални нужди. Поради факта, че моделът предлага подобрени настройки за сигурност, цената му е почти два пъти по-висока от останалите устройства в нашия списък.

В допълнение, това е един от малкото скенери с официална поддръжка на Linux. Така че без значение каква операционна система използвате, сензорът е подходящ за всякакви задачи.

SecuGen Hamster Pro 20 е удароустойчиво устройство, което е защитено от надраскване, вода и прах. Скенерът може да проследява следи, оставени от предишни сканирания, и да отхвърля неясни резултати.

Освен това Blucoil SecuGen Hamster Pro 20 е енергоспестяващо устройство, така че автоматично се изключва, ако никой не го използва дълго време.

Допълнителна сигурност

През последните години бяха пуснати огромен брой мобилни и настолни устройства с вградени скенери за пръстови отпечатъци и броят им нараства само всяка година. Ако вашият компютър няма вграден сензор за разпознаване на биометрични данни, тогава не се притеснявайте. Има огромно разнообразие от USB скенери за компютри и лаптопи, съвместими с почти всички популярни модели.

Тъй като нямам кола, не е необходимо да нося ключовете си навсякъде с мен. Поради това се оказа, че няколко пъти се оказвам без ключове пред къщата и трябва да чакам някой от роднините да се прибере и да ме пусне вътре и в един момент реших, че трябва да направя нещо по въпроса и проектираха домашно направена ключалка за гараж.

В този проект ще ви покажа как да направите ключалка с пръстов отпечатък за вашата входна врата.

Стъпка 1: Материали


Ето списък на необходимите материали и инструменти.

електроника:

  • Скенер за пръстови отпечатъци (и JST конектор)
  • LCD комплект (с ATmega328)
  • ATtiny85
  • NPN транзистор
  • Високоговорител за пищялки
  • Кабел за високоговорител
  • Калъф (в стъпка 9 ще има файлове за 3D печат)
  • Меден филм
  • Регулатор на напрежение 5V
  • 9V батерия
  • Конектор за 9V батерия
  • SPDT превключвател

За улеснение ще прикача готов списък с желания в сайта на Sparkfun.

Инструмент:

  • Поялник и спойка
  • Изолационна лента
  • Проводници и джъмпери
  • Щипки/стрипер
  • Платка за създаване на прототипи
  • Различни резистори
  • Винтове
  • Пробивна машина
  • Няколко светодиода за тестване
  • FTDI 5V платка
  • Пистолет за горещо лепило
  • Достъп до 3D принтер
  • По избор: IC гнездо (8-пинов за ATtiny и 28-пинов за ATmega)
  • По избор: друга платка Arduino / 10uF кондензатор (подробности в стъпка 5)

Стъпка 2: Диаграма на устройството






LCD комплектът, закупен от Sparkfun, се доставя с ATmega328, който управлява дисплея. ATmega328 е доста мощен и може да се използва не само за управление на дисплея, но и за други задачи. С оглед на това можем да го използваме вместо Arduino, за да комуникираме със скенера за пръстови отпечатъци и да изпращаме команди до ATtiny85, да управляваме дисплея и звуковия сигнал.

За да попреча на биометричната ключалка на вратата да работи през цялото време, вградих в нея превключвател, който работи в момента, в който кутията се затвори. Ако калъфът е затворен, захранването на устройството не се подава и ние пестим ресурси на батерията.

Важна забележка: Скенерът за пръстови отпечатъци работи на 3,3 V, така че препоръчвам да използвате делител на напрежение, който ще преобразува сигналите от ATmega в 3,2 V. Делителят на напрежението се състои от резистор 560 ома между D10/втори щифт на скенера и 1K резистор между GND/втори щифт на скенера.

LCD pinout:

  • D10 - щифт 1 на скенера (черен проводник)
  • D11 - щифт 2 скенер (чрез делител на напрежение)
  • D12 - ATtiny85
  • D13 - Пищялка

Разпределение на ATtiny85:

  • Pin 5 (0 в програмния код) - вход от ATmega
  • Pin 3 (4 в програмния код) - транзистор / жълт светодиод
  • Pin 7 (2 в програмния код) - индикация LED

Стъпка 3: Сглобяване на компонентите от LCD комплекта

Името на стъпката говори само за себе си: удобно ръководство за бърз старт/сглобяване

Стъпка 4: Сглобяване на веригата на прототипната платка




Разположението на компонентите на платката зависи от вас, просто се опитайте да запоите проводниците така, че да гледат в една и съща посока и да не се счупят.

След като се сглобих, покрих горната и долната част на платката с горещо лепило - това закрепи и изолира елементите на веригата. Горещото лепило няма да повреди чипа.

Както при основната платка, запоете всичко към платката ATtiny и нанесете горещо лепило, за да закрепите и изолирате компонентите. Регулаторът на напрежението може да се нагрее много, така че е добра идея да избягвате нанасянето на горещо лепило върху него или повърхности в близост до него. Също така е най-добре да не покривате платката ATtiny с горещо лепило, тъй като може да искате да я премахнете и препрограмирате.

Стъпка 5: Програмиране на ATmega328

Както бе споменато в стъпка 2, ATmega328 има достатъчно силен процесор и достатъчно щифтове, за да управлява LCD дисплея, докато управлява други допълнителни компоненти. За да постигнете това, трябва да програмирате чипа.

Ако имате Arduino Uno или Duemilanove, можете просто да премахнете чипа от него и да го замените с този, който е доставен в комплекта. Или можете да намерите FTDI Basic Breakout платка (5V) и запоени приставки отстрани (вижте снимките в стъпка 3)

Ще трябва също да качите кода в режим „Duemilanove w/ ATmega328“.

Кодът по-долу е работеща програма за проверка на функционалността на устройството.

#include "LiquidCrystal.h" LiquidCrystal lcd(2,3,4,5,6,7,8); void setup() ( pinMode(9, OUTPUT); // подсветка pinMode(13, OUTPUT); // звуков сигнал lcd.begin(16, 2); // 16 знака широк, 2 висок digitalWrite(9, HIGH) ; / /включете подсветката lcd.print("Hello world!"); //центрирайте текста с помощта на интервали delay(2000); ) void loop() ( //сигналът се включва и изключва, състоянието му се показва на дисплея lcd.clear(); lcd.print(" Зумерът е включен "); тон(13, 262, 1000); delay(1000); lcd.clear(); lcd.print(" Зумерът е изключен "); delay( 1000); ) Файлове

Стъпка 6: Настройване на скенера за пръстови отпечатъци

Използвах тази библиотека, за да комуникирам със скенера. Директна връзка за изтегляне.

За да проверите дали вашият код работи, изтеглете този мигащ тестер.

Скенерът за пръстови отпечатъци разполага със собствена вградена памет за съхранение на данни. Така че, след като сте сигурни, че скенерът работи, изтеглете тази програма, за да добавите вашия пръстов отпечатък към базата данни под id #0. Отворете вашата серийна конзола и просто следвайте инструкциите.

Програма за мигане на светодиоди за тестване на скенера

/* Този прост код ще включва и изключва светодиода. Използва се, за да се разбере дали комуникацията работи. */ #include "FPS_GT511C3.h" #include "SoftwareSerial.h" //Настройка на хардуера - скенер за пръсти, свързан към: //цифров щифт 10(arduino rx, fps tx) //цифров щифт 11(arduino tx - 560ohm fps резистор tx - 1000ohm резистор - GND) //това намалява 5v tx до около 3.2v и няма да изгорим нашия скенер FPS_GT511C3 fps(10, 11); void setup())( Serial.begin(9600); fps.UseSerialDebug = true; // можете да видите съобщения на екрана за серийно отстраняване на грешки fps.Open(); ) void loop())( // LED мигащ тест за fps скенер. SetLED(true); // включва светодиода вътре в закъснението на скенера(1000); fps.SetLED(false); // изключва светодиода вътре в закъснението на скенера(1000); )

Програма за запис на данни в скенера

#include "FPS_GT511C3.h" #include "SoftwareSerial.h" //Настройка на хардуера - скенер за пръсти, свързан към: //цифров щифт 10(arduino rx, fps tx) //цифров щифт 11(arduino tx - 560ohm резистор fps tx - 1000ohm резистор - GND) //това намалява 5v tx до около 3.2v и няма да изгорим нашия скенер FPS_GT511C3 fps(10, 11); void setup())( Serial.begin(9600); delay(100); fps.Open(); fps.SetLED(true); Enroll(); ) void Enroll())( // Тест за регистрация // търсене на open id int enrollid = 0; fps.EnrollStart(enrollid); // регистрация Serial.print("Натиснете пръст за записване #"); Serial.println(enrollid); while(fps.IsPressFinger() == false) delay( 100); bool bret = fps.CaptureFinger(true); int iret = 0; if (bret != false) ( Serial.println("Премахване на пръст"); fps.Enroll1(); while(fps.IsPressFinger() = = true) delay(100); Serial.println("Натиснете отново същия пръст"); while(fps.IsPressFinger() == false) delay(100); bret = fps.CaptureFinger(true); if (bret != false) ( Serial.println("Премахване на пръст"); fps.Enroll2(); while(fps.IsPressFinger() == true) delay(100); Serial.println("Натиснете отново същия пръст"); while( fps.IsPressFinger () == false) delay(100); bret = fps.CaptureFinger(true); if (bret != false) ( Serial.println("Премахване на пръст"); iret = fps.Enroll3(); if (iret = = 0) ( Serial.println("Записването е успешно"); ) else ( Serial.print("Неуспешно записване с код на грешка:"); Serial.println(iret); ) ) else Serial.println("Неуспешно улавяне на трети пръст"); ) else Serial.println("Неуспешно заснемане на втори пръст"); ) else Serial.println("Неуспешно заснемане на първия пръст"); ) void loop())( delay(100000); ) Файлове

Стъпка 7: Програмирайте ATtiny85


ATtiny85 е нещо като евтин Arduino, събран в един чип. ATtiny85 може да бъде програмиран от други Arduinos, включително ATmega328 в нашия LCD комплект. В проекта се използва за изпълнение на много прости команди: проверете сигнала от ATmega и отворете вратата, ако сигналът е правилен.

За да го програмирате, свържете всичко според приложените снимки. След това изтеглете необходимите файлове и следвайте тези инструкции.

След изтегляне на кода, пин 13 на Arduino (вграден светодиод) трябва да светне, което показва, че кодът е изтеглен.

Краен код:

//Получава кратък сигнал от главния модул за затваряне на релето void setup())( pinMode(2,OUTPUT); //LED индикация чрез 10K резистор pinMode(4,OUTPUT); //транзисторен щифт, който отваря гаража pinMode(0,INPUT); //закъснение при въвеждане(500); //дайте време на устройството да стартира digitalWrite(2, HIGH); //LED индикация) void loop())( if(digitalRead(0))( / /прост модел за превключване на забавянето на транзистора (125); if(digitalRead(0)==false)( delay(55); //изчакайте, тъй като таймерът ATtiny не е идеален if(digitalRead(0))( delay(55) ); if(digitalRead(0)= =false)( delay(55); if(digitalRead(0))( delay(55); if(digitalRead(0)==false)( digitalWrite(4, HIGH); / / транзисторът “натиска” бутона delay(1000 ); digitalWrite(4,LOW); digitalWrite(2,LOW); delay(1000); digitalWrite(2, HIGH); ) ) ) ) ) ) ) Файлове

Стъпка 8: Краен код

По-долу е дадена програма на Arduino, която написах с помощта на библиотеките за скенер и дисплей. За да стане ясно какво се случва във всяка част от програмата, се постарах да коментирам всичко по възможно най-добрия начин. След като изтеглите този код, всичко трябва да работи и всичко, което остава да направите, е да интегрирате системата във вратата.

Предупреждение: ако библиотеката на скенера не работи, опитайте да използвате по-стара версия на Arduino IDE.

Код за ATmega238:

#include "LiquidCrystal.h" //библиотека на дисплея #include "FPS_GT511C3.h" //библиотека fps (скенер за пръстови отпечатъци) #include "SoftwareSerial.h" //използван от библиотеката на скенера //Конфигуриране на щифтовете на дисплея и скенера LiquidCrystal lcd( 2, 3, 4, 5, 6, 7, 8); //извеждане на pinout FPS_GT511C3 fps(10, 11); //RX, TX boolean isFinger = false; //вярно, ако fps библиотеката открие пръста върху скенера //изходни щифтове const int buzzerPin = 13; const int backlightPin = 9; const int attinyPin = 12; const String idNames = ("self", "Bro", "Ryan", "Mom", "Dad", "Alltie", "Grandma", "Zeide", "Person", "person", "Thumb"); void setup())( //настройване на изходите pinMode(buzzerPin, OUTPUT); pinMode(backlightPin, OUTPUT); pinMode(attinyPin, OUTPUT); //за отстраняване на грешки //Serial.begin(9600); fps.UseSerialDebug = false; / /става true за отстраняване на грешки на fps чрез сериен порт //инициализиране на библиотеки lcd.begin(16,2); digitalWrite(backlightPin, HIGH); //LCD подсветка fps.Open(); fps.SetLED(true); / /LED на fps //зареждане на звук за (int i=0; i<30; i++){ tone(buzzerPin, 50+10*i, 30); delay(30); } tone(buzzerPin, 350); //вывод стартового сообщения lcd.print("Put your finger "); //команда вывода на экран lcd.setCursor(0, 1); //устанавливаем курсор на нулевую колонку первой строки lcd.print(" on the scanner "); delay(150); noTone(buzzerPin); //останавливаем стартовый звук } void loop(){ //сканируем и распознаём отпечаток, когда приложен палец waitForFinger(); lcd.clear(); //очищаем экран и устанавливаем курсов в положение 0,0 fps.CaptureFinger(false); //захватываем отпечаток для идентификации int id = fps.Identify1_N(); //идентифицируем отпечаток и сохраняем id if(id <= 10){ lcd.print(" Access granted "); //сообщение об успехе lcd.setCursor(0,1); //выводим на экран имя когда дверь открывается String message = " Hey " + idNames + "!"; lcd.print(message); tone(buzzerPin, 262, 1000); delay(1500); //отправляем сигнал для открытия двери digitalWrite(attinyPin, HIGH); //первый импульс синхронизирует задержку (10ms) delay(5); digitalWrite(attinyPin, LOW); delay(3); digitalWrite(attinyPin, HIGH); //следующие два - открывают дверь delay(15); digitalWrite(attinyPin, LOW); delay(5); digitalWrite(attinyPin, HIGH); delay(10); digitalWrite(attinyPin, LOW); delay(1000); lcd.clear(); lcd.print("Don"t forget to "); lcd.setCursor(0,1); lcd.print(" shut me off! "); delay(2000); waitForFinger(); //нажмите чтобы продолжить запись while(true){ //сохраняет новый отпечаток //выводит сообщение на экран lcd.clear(); lcd.print(centerText("So you want to")); lcd.setCursor(0,1); lcd.print(centerText("scan a new one?")); delay(2000); //Скопировано и слегка модифицировано из примера регистрации данных: int enrollid = 11; //выбираете какой id переписать\создать //отпустите палец, когда хотите записать id/имя, напечатанное на экране waitForFinger(); //ждёт, когда будет нажат fps while(enrollid==11){ for (int i = 1; i1){ lcd.print(i); enrollid = i-1; break; } } } //предупреждение, если в данном слоте уже есть данные if(fps.CheckEnrolled(enrollid)){ lcd.clear(); lcd.print(" Warning! ID #"); lcd.print(enrollid); lcd.setCursor(0,1); lcd.print(" has data. OK? "); delay(2500); waitForFinger(); //ждёт, когда будет нажат fps fps.DeleteID(enrollid); //удаляет данные delay(100); } //Enroll fps.EnrollStart(enrollid); lcd.clear(); lcd.print("Place finger to "); lcd.setCursor(0,1); lcd.print("enroll #"); lcd.print(enrollid); //выводит id, который был добавлен waitForFinger(); //ждёт, когда будет нажат fps //захватывает отпечаток и сохраняет его в память трижды для точности данных bool bret = fps.CaptureFinger(true); //картинка высокого качества для записи int iret = 0; //в случае ошибки if (bret != false){ //первая регистрация lcd.clear(); lcd.print(" Remove finger "); fps.Enroll1(); while(fps.IsPressFinger() == true) delay(100); //ждёт пока уберут палец lcd.clear(); lcd.print(" Press again "); waitForFinger(); //ждёт, когда будет нажат fps bret = fps.CaptureFinger(true); if (bret != false){ //вторая регистрация lcd.clear(); lcd.print(" Remove finger "); fps.Enroll2(); while(fps.IsPressFinger() == true) delay(100); lcd.clear(); lcd.print("Press yet again "); waitForFinger(); bret = fps.CaptureFinger(true); if (bret != false){ //третья регистрация iret = fps.Enroll3(); if (iret == 0){ //проверяет, были ли какие-нибудь ошибки lcd.clear(); lcd.print(" Success! "); delay(2000); beep(); //выключает Ардуино } else{ //запускает этот код в случае любой ошибки lcd.clear(); lcd.print("Fail. Try again "); delay(1000); } } lcd.clear(); lcd.print(" Failed 3rd "); //ошибка на третьей записи delay(1000); } lcd.clear(); lcd.print(" Failed 2nd "); //ошибка на второй записи delay(1000); } lcd.clear(); lcd.print(" Failed 1st "); //ошибка на первой записи delay(1000); } } else{ lcd.print("Fingerprint is"); //если отпечаток не распознан lcd.setCursor(0,1); lcd.print(" unverified "); delay(2000); lcd.clear(); lcd.print("Please try again"); lcd.setCursor(0,1); lcd.print("Use your pointer"); //pointer - указательный палец (можете использовать любой и заменить это слово) delay(500); } delay(250); } void beep(){ //издаёт звуки, чтобы кто-нибудь закрыл кейс lcd.clear(); lcd.print("Please close the"); lcd.setCursor(0,1); lcd.print(" case! "); for(int i=0;i=80 && !fps.IsPressFinger()){ beep(); } } timer = 0; //обнуляет таймер как только функция завершится } String centerText(String s) { //центрует текст на дисплее, чтобы он лучше смотрелся while(16-s.length()>1)( //ако текстът се нуждае от центриране s = " " + s + " "; // добавя интервали равномерно от двете страни ) return s; ) Файлове


За да създаде такъв проект, авторът трябваше да модифицира стартовата система на своя автомобил. Основната връзка е IG проводникът от ключа за запалване, през който захранващото напрежение се подава към регулатора на напрежението, а след това към самия Arduino, за да го включи, както и да включи сензора за сканиране на пръсти. Ако сканирането на пръстите е успешно, системата активира релейния блок и той управлява релето на стартера. Сега можете да запалите колата. Сензорът работи за 10 секунди и може да се рестартира чрез повторение на стартовия цикъл на запалване. Ако в рамките на определеното време сензорът не открие пръстов отпечатък или той не съвпада с посочения, тогава системата за стартиране ще бъде деактивирана и двигателят няма да стартира.

Тъй като всеки автомобил има собствена система за стартова конфигурация, е необходимо да погледнете електрическата схема, преди да промените системата за стартиране на двигателя.

Тази статия описва как да свържете устройство против кражба към Mitsubishi Lancer 2000 купе с 2 врати.

Материали:
- Arduino Uno.
- Сензор за пръстови отпечатъци.
- Захранване.
- Релеен блок.
- NPN транзистор BC547B
- Резистор 1 kOhm










Схема на свързване:
Схемата е леко модифицирана според използваните компоненти. Моля, не забравяйте, че е валидно само за този модел автомобил.

Стъпка 1 Подготовка на софтуерни компоненти:
В Arduino IDE библиотеката се зарежда и добавя.
Файл от библиотеката blank.ino се зарежда в Arduino, който ще служи като интерфейс между сензора и микроконтролера.
Програмата е инсталирана и сензорът е свързан към Arduino, както е показано на диаграмата. След което отпечатъкът се зарежда през инсталираната програма.


Сега сензорът е свързан, както е показано на следващата диаграма. След което авторът продължава да изтегля основната програма. Към щифт 12 е свързан светодиод с резистор.

Програмата ще работи основно въз основа на учебния материал за пръстови отпечатъци на Adafruit. Единственото нещо, което се добавя към програмния код, е таймер за изключване на сензора от 10 секунди. Можете да изтеглите кода под статията.

Сглобяване на стъпка 3:
Част 1:

Първо развийте винтовете под таблото. Долната част на панела се отстранява и сензорът може да се постави в свободното пространство.



Част 2:
В избраното място за сензора се изрязва зона за надеждното му монтиране.





част 3:
Платката Arduino е инсталирана зад сензора за пръстови отпечатъци. Мястото за инсталиране на Arduino беше леко заточено, за да може платката да заеме правилната позиция.



част 4:
Регулираното захранване е монтирано зад арматурното табло от страната на водача.

част 5:
Останалите компоненти на оборудването са свързани съгласно схемата в началото на статията.







Стъпка 4 инсталация:
Необходимите кабели са свързани и устройството е инсталирано под таблото. Авторът следи да няма късо съединение.

Въпреки че можете да получите достъп до защитени системи чрез пароли и ключове, и двете опции могат да бъдат неудобни и лесни за забравяне. В този урок ще научим как да използваме модула FPM10A с библиотеката Adafruit Arduino, за да създадем биометрична система за пръстови отпечатъци.

По традиция започваме с компонентите за нашия урок.

Подробности

  • FPM10A Модул за пръстови отпечатъци
  • Ардуино Уно

Библиотеки и софтуер

  • Arduino IDE
  • Библиотека с пръстови отпечатъци на Adafruit

Схема на свързване

Диаграмата на свързване на модула FPM10A и Arduino Uno трябва да бъдат свързани заедно, както е показано на фигурата по-горе. Ще разгледаме повече подробности в следващата стъпка.

Свързващи компоненти

Започването с този модул е ​​невероятно лесно, защото той използва сериен порт за комуникация. Въпреки това, тъй като Arduino Uno има само един хардуерен сериен порт, трябва да използвате серийния порт чрез софтуер, като използвате щифтове 2 и 3, за да комуникирате с модула за пръстови отпечатъци (хардуерният сериен порт е запазен за комуникация с компютъра).

Лентовият кабел, който се доставя с модула FPM10A, не е много удобен за хоби, тъй като проводниците се намират в корпуса на стъпки от 1,27 mm, така че отрязахме едната страна и след това свързахме кабелите към джъмпери.

Инсталиране и използване на библиотеката

Първата стъпка в използването на FPM10A е да инсталирате библиотеката за пръстови отпечатъци на Adafruit, което може да се направи с помощта на Library Manager. Отворете Arduino IDE и отидете на:

Скица → Включване на библиотека → Управление на библиотеки

Когато мениджърът на библиотеката зареди търсене за „Пръстов отпечатък“, първият резултат трябва да бъде библиотеката с пръстови отпечатъци на Adafruit. Инсталирайте го.

След като инсталирате библиотеката, е време да създадете нов проект на Arduino. Кликнете Файл → Нов и след това запишете проекта в собствена папка. В този момент отворете папката на вашия проект и копирайте файла „fingerprint.h“ в нея.

Това е специален заглавен файл, който е написан, за да направи библиотеката с пръстови отпечатъци по-лесна за използване. Заглавният файл има само три функции:

  • fingerprint_setup() - конфигурира серийния порт за 9600 бода и се свързва към модула;
  • readFingerprint() - анкетна функция, която връща -1, ако нещо се обърка, или връща информация, че е намерен успешен пръстов отпечатък
  • enrollFingerprint (int id) - добавя пръстов отпечатък към системата с присвоения идентификатор “id”.

За да включите този файл във вашия проект, просто използвайте командата include, както е показано по-долу:

#include "fingerprint.h"

Първата функция, която трябва да извикате в setup(), е fingerprint_setup(), която автоматично се свързва с модула и потвърждава, че всичко работи.

Void setup() ( fingerprint_setup(); )

За да добавите нов пръстов отпечатък, извикайте функцията enrollFingerprint(id).

Това ще върне -1, ако възникне грешка. В противен случай стойностите показват успешна регистрация на пръстови отпечатъци. ID предоставя тази функция с връзки към сканирания пръстов отпечатък и всеки пръстов отпечатък има уникален идентификационен номер.

Записване на пръстов отпечатък (0x01);

Код на Arduino

Можете да копирате окончателната скица за нашата платка Arduino по-долу:

#include "fingerprint.h" void setup() ( fingerprint_setup(); ) void loop() ( // Създаване на нов запис за пръстов отпечатък enrollFingerprint(0x01); delay(1000); // Заявка за запис Serial.println(" \nUSER ЗАЯВКА ЗА ВХОД...ПОСТАВЕТЕ ПРЪСТ ВЪРХУ СЕНЗОР \n"); while(readFingerprint() == -1); Serial.println(" \nДОСТЪПЪТ СЕ РАЗРЕШИ \n"); Serial.println(" \nFingerprint confidence: " + String (доверие) + "\n"); забавяне (3000); )

Принцип на действие

Когато активирате този проект, той първо ще ви помоли да поставите пръста си върху скенера. Ако скенерът може да чете вашите пръстови отпечатъци, той ще ви помоли да премахнете и след това да замените пръста си със скенера. Това трябва да накара скенера да добави успешно вашия пръстов отпечатък към ID 1 и поставянето на пръста ви върху скенера трябва да доведе до достъп до системата.

Този проект може лесно да бъде разширен, за да включва блокировки и соленоидни релета, за да позволи на оторизирани потребители да правят промени и да отключват системата. След като вашият проект е завършен, инсталирайте новия си скенер на врати, шкафове, сейфове, прозорци, електрически системи, компютри и други!