Capteur d'empreintes digitales Arduino. Serrure biométrique à empreintes digitales faite maison pour la porte de garage. Programme de clignotement des LED pour tester le scanner

Pour créer une connexion avec le capteur d'empreintes digitales, les instructions de Josh Hawley ont été utilisées (téléchargement direct des instructions).

Pour déboguer le fonctionnement du scanner d'empreintes digitales avec l'affichage des lettres, une synchronisation est nécessaire.

Le capteur d'empreintes digitales possède sa propre mémoire pour stocker les images numérisées. Ainsi, une fois que le capteur commence à fonctionner, téléchargez-le en l'ajoutant à la base de données d'empreintes digitales à l'adresse 0. Ouvrez la console de gestion sur votre ordinateur et suivez les invites contextuelles.

Codes – Exemple de clignotement :

/* Exemple de bibliothèque pour contrôler le scanner d'empreintes digitales (FPS) GT-511C3 */ #include "FPS_GT511C3.h" #include "SoftwareSerial.h" //Configuration matérielle - FPS connecté à : //broche numérique 10(arduino rx, fps tx) // broche numérique 11 (arduino tx - résistance 560ohm fps tx - résistance 1000ohm - masse) // cela ramène la ligne 5v tx à environ 3,2v donc nous ne faisons pas frire nos fps FPS_GT511C3 fps (10, 11); void setup())( Serial.begin(9600); fps.UseSerialDebug = true; // pour que vous puissiez voir les messages dans l'écran de débogage série fps.Open(); ) void loop())( // FPS Blink LED Test fps .SetLED(true); // allume la LED à l'intérieur du délai fps (1000); fps.SetLED(false); // éteint la LED à l'intérieur du délai fps (1000); )

Codes – Exemple d’inscription :

/* FPS_Enroll.ino - Exemple de bibliothèque pour contrôler le scanner d'empreintes digitales (FPS) GT-511C3 */ #include "FPS_GT511C3.h" #include "SoftwareSerial.h" //Configuration matérielle - FPS connecté à : //broche numérique 10 (arduino rx, fps tx) // broche numérique 11 (arduino tx - résistance 560ohm fps tx - résistance 1000ohm - masse) // cela ramène la ligne 5v tx à environ 3,2v donc nous ne faisons pas frire nos fps FPS_GT511C3 fps (10, onze); void setup())( Serial.begin(9600); delay(100); fps.Open(); fps.SetLED(true); Enroll(); ) void Enroll())( // Test d'inscription // recherche ouverte enroll id int enrollid = 0; fps.EnrollStart(enrollid); // inscription Serial.print("Appuyez sur le doigt pour vous inscrire #"); Serial.println(enrollid); while(fps.IsPressFinger() == false) delay( 100) ; bool bret = fps.CaptureFinger(true); int iret = 0; if (bret != false) ( Serial.println("Supprimer le doigt"); fps.Enroll1(); while(fps.IsPressFinger() = = true ) delay(100); Serial.println("Appuyez à nouveau sur le même doigt"); while(fps.IsPressFinger() == false) delay(100); bret = fps.CaptureFinger(true); if (bret != false) ( Serial.println("Supprimer le doigt"); fps.Enroll2(); while(fps.IsPressFinger() == true) delay(100); Serial.println("Appuyez à nouveau sur le même doigt"); while( fps. IsPressFinger() == false) delay(100); bret = fps.CaptureFinger(true); if (bret != false) ( Serial.println("Remove finger"); iret = fps.Enroll3(); if (iret == 0) ( Serial.println("Inscription réussie"); ) else ( Serial.print("Échec de l'inscription avec code d'erreur :"); Serial.println(iret); ) ) else Serial.println("Échec de la capture du troisième doigt"); ) else Serial.println("Échec de la capture du deuxième doigt"); ) else Serial.println("Échec de la capture du premier doigt"); ) boucle vide())( delay(100000); )

Fichier de synchronisation :

Dossier d'enregistrement d'esquisse :

Étape 7 : Programmation du processeur ATtiny85

La puce ATtiny85 est bon marché et entièrement compatible avec la carte Arduino, c'est probablement la meilleure pièce électrique jamais créée !

Un programmeur Arduino est également nécessaire pour reflasher la puce ATmega328, qui contrôle le fonctionnement de l'écran LCD.

Dans l'appareil assemblé, le processeur ATtiny exécutera des commandes très simples : rechercher un signal de l'ATmega et ouvrir la porte du garage lorsque le signal est confirmé.

Pour programmer le processeur, il doit être connecté à l'aide d'une maquette au programmateur avec un condensateur de 10 uF, comme indiqué dans l'image ci-dessous.

Et puis téléchargez code final et suivez les recommandations instructions de High-Low Tech.

Ensuite, la sortie 13 de la carte Arduino, connectée à la LED, doit être commutée à l'état HIGH pour surveiller le fonctionnement à l'aide de l'indication lumineuse.

Code final pour ATtiny :

//fpsAttiny par Nodcah //Reçoit un bref signal du module principal pour fermer une configuration de relais vide())( pinMode(2,OUTPUT); //indicateur mené à travers une résistance 10K pinMode(4,OUTPUT); //broche de trasistor qui ouvre le garage pinMode(0,INPUT); //délai d'entrée(500); //donner aux choses le temps de démarrer digitalWrite(2, HIGH); //indicateur LED ) void loop())( if(digitalRead(0 )) ( //modèle simple pour déclencher le retard du transistor (125); if(digitalRead(0)==false)( delay(55); //les timings sont désactivés car le timer de l'ATtiny n'est pas parfait if( digitalRead( 0))( delay(55); if(digitalRead(0)==false)( delay(55); if(digitalRead(0))( delay(55); if(digitalRead(0)==false) ( digitalWrite (4, HIGH); //le transistor "appuie" sur le bouton delay(1000); digitalWrite(4,LOW); digitalWrite(2,LOW); delay(1000); digitalWrite(2, HIGH); ) ) ) ) ) )

Serrure biométrique - code final, découpe du couvercle, préparation du garage Horloge GPS sur Arduino Serrure biométrique - Schéma et montage de l'écran LCD

De quoi avez-vous besoin

  1. Module d'empreintes digitales FPM10A
  2. Module RFID RC522
  3. Arduino mega (théoriquement, d'autres cartes peuvent être utilisées, mais j'ai opté pour celle-ci en raison du nombre de broches)
  4. 1 licence pour 1C 8.2 (client gros dans mon cas, coupez-le vous-même pour un mince)
  5. Communication via le port Com en utilisant MsCommLib.MsComm (vous avez besoin d'une licence, vous pouvez même la rechercher sur Google ici)
  6. Environnement de développement pour Arduino (1.8.5 utilisé)
  7. Tablette avec interface USB.
  8. Faisceau : résistance 1 Kilo Ohm, bouton de court-circuit, fils, ruban électrique « bleu », analyseur de fluage thermorectal si vous le souhaitez (vous pouvez tordre les fils si vous avez des sensations proches, indescriptibles associées à cet appareil), câble USB pour Arduino, bras droits et circonvolutions tordues du surnom moyen 1s incl. faire un corps pour tout ce miracle.

Remarques : sur la photo, les couleurs des fils sont différentes - lors du processus d'installation, plusieurs fils ont été cassés car... Ils étaient complètement Huawei et j'ai dû prendre d'autres couleurs disponibles.

Le système de messagerie est volontairement dupliqué aux moments critiques.
Je vous préviens tout de suite que l'ingénieur moyen peut avoir les larmes aux yeux à cause de la colophane, mais c'est mon premier projet Arduino, et un d'une telle complexité, et il semble fonctionner et fonctionner de manière stable. Au début, il y avait l'idée de tout faire via le réseau (wifi + filaire), mais après avoir estimé les coûts de débogage et de création de mon propre service http et tout implémenté en 1C, j'ai décidé d'utiliser com ; en tout cas, toute la logique peut être transféré vers un traitement externe sans modifier la conf.

Vous pouvez également insérer un système pour photographier un employé entrant via la webcam de la tablette, ajouter un relais et contrôler les portails électroniques, intégration complète avec la ZUP grâce à un traitement externe transmis via les paramètres de lancement et annihilation du carnaval pour les passerelles particulièrement dangereuses d'importance secrète) .

Les critiques utiles sont les bienvenues.

Prologue

En voyant les prix des systèmes d’accès et des systèmes de suivi du temps existants, l’essence verte a lentement commencé à m’étouffer. Après avoir longuement parcouru l'Arduino et ses modules, je suis tombé sur le module d'empreinte digitale FPM10A. Ce module, selon les versions, peut stocker un grand nombre d'empreintes digitales - de 50 à l'infini dans sa mémoire flash et est utilisé dans la plupart des modules des fabricants de contrôles biométriques. Cependant, dans mon projet, à cause de la librairie, elle est limitée à 254. Je vous préviens tout de suite que je poste ma librairie exhaustivement trouvée pour Arduino car... J'ai longtemps lutté avec la recherche et j'ai perdu 3 jours à chercher et à déboguer la bibliothèque de ce module.

Description des modules

La bibliothèque utilisée dans le projet permet d'utiliser jusqu'à 256 empreintes digitales (octets). Ce montant était pour moi excessif : dans les cas extrêmes, vous pouvez utiliser 1 module pour 256 salariés.
Le nombre d'étiquettes RFID n'est limité que par le caractère unique de leur UID. la base de données peut être stockée dans 1C et liée aux employés. Toutes les balises compatibles peuvent être utilisées. Théoriquement, toutes les clés d'interphone, de carte de métro et de carte troïka peuvent convenir.
La connexion à 1c passe par le port com via la bibliothèque MsCommLib.MsComm, mais elle peut être réécrite sur n'importe quel autre. Les pilotes pour le port COM pour Arduino doivent être installés avec l'environnement de développement Arduino, mais ils peuvent également être recherchés sur Google.
Tout ce qui est soudé est caché dans un boitier, connecté via le réseau (j'ai utilisé le WiFi, mais on peut aussi utiliser une carte réseau USB externe).

Algorithme de travail

Matériel:

  1. Nous soudons/torsadons les modules Arduino
  2. Nous nous connectons à un programmeur PC et téléchargeons le firmware sur l'Arda, exécutons le test, nous assurons que les commandes fonctionnent
  3. Ils se connectent via USB à une tablette Windows 10. Sur la tablette on la remplace soit par chargement automatique :

A) via un fichier corps :

    démarrer - exécuter : shell: démarrage

    créez-y un fichier à l'aide du Bloc-notes avec le nom hz.bat et son contenu (je suis sûr que vous pouvez gérer vous-même les paramètres de la base de données de fichiers - j'ai SQL) : « C:\Program Files\1cv8\ ... \bin\1cv8 .exe » ENTERPRISE / SServerName:Port\DBName" /NUser /PPassword

B) on en fait un plus avancé en remplaçant le shell par un script VB (veillez à créer un autre utilisateur en plus de celui par défaut sans lancer le shell) :

    créez un fichier à l'aide du Bloc-notes avec le nom C:\hz\hz.vbs et son contenu

set oShell=createobject("wscript.shell")
sCmd="""C:\Program Files\1cv8\ ... \bin\1cv8.exe"" ENTERPRISE /SServerName:Port\DBName" /NUser /PPassword"
oShell.run sCmd, vrai
sCmd="arrêt /r /t 0"
oShell.run sCmd

    démarrer - exécuter : regedit, suivez la branche : Current User\Software\Microsoft\Windows NT\CurrentVersion\Winlogon

    ajoutez le paramètre de chaîne "Shell" (REG_SZ)

    éditez-le : "wscript C:\hz\hz.vbs" (sans les guillemets dans le paramètre)

    redémarrez et testez. 1c devrait démarrer sans explorera

  1. Ensuite, nous nous assurons qu'il fonctionne et l'emballons dans une boîte.

Par programme :

  1. Dans l'état normal, l'Arduino interroge le scanner d'empreintes digitales, le scanner RFID, le bouton d'administration et envoie des commandes d'attente via le port COM.
  2. Dès qu'un doigt apparaît dans le champ de vision du lecteur, nous envoyons une commande au port com et 1c voit soit l'ID du doigt, soit l'UID du tag grâce à la lecture des variables.
  3. Le bouton est nécessaire pour gérer les empreintes digitales. Lorsque vous appuyez dessus, 1c demande un mot de passe de connexion et peut ensuite attribuer à l'employé soit un identifiant de scanner, soit un UID de carte via le système de messagerie.

Pour communiquer avec 1c, on utilise les lignes suivantes (j'ai fait le traitement pour ma conf et ma timesheet, c'est dans le projet juste par exemple mais est inclus dans le code source) :

Connexion au port COM

Procédure StartSystem() ComPort = New COMObject("MsCommLib.MsComm"); Essayez 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 = True ; Exception Warning("Il n'est pas possible d'ouvrir le port!"); ThisForm.Close(); FinTentative ; hSecondes = 0 ; ConnectWaitHandler("OutputSportData", 1, False); // Connecter un handler pour surveiller le port Fin de procédure

Déconnexion du port COM

Procédure EndSystem() DisableWaitHandler("OutputSportData"); ComPort.PortOpen = Faux ; ComPort = "" ; Fin de la procédure

Lecture des données du port COM

Procédure OutputSportData() ExportSportData = ""; Si ComPort.PortOpen Alors //ComPort.Output = "1" ; SportsData = ComPort.Input ; ProcessEncryptedString(SportData); Si abrégé (pré-employé)<>"" Alors hSecondes = hSecondes + 1 ; fin si; Si hSecondes > 60 Alors PreEmployee = 0 ; hSecondes = 0 ; fin si; Sinon Attention("Le port ne s'ouvre pas"); ThisForm.Close(); fin si; Fin de la procédure Procédure Processus Chaîne cryptée (Données sportives) Tableau = Données sportives.Unload(); IndexMin = SportsData.GetLowerBound(0); IndexMax = SportsData.GetUpperBound(0); ChaîneInfo = "" ; Pour Index = IndexMin Par IndexMax - 1 Cycle SymbolReceived = AbbrLP(Array.Get(Index)); Si CharacterReceived = "13" Alors si non Suspendre alors RowInfo = RowProcessing(RowInfo); //Ici traitement des messages EndIf; Sinon LineInfo = LineInfo + Symbol(Number(SymbolReceived)); fin si; Fin du cycle ; Fin de la procédure

Envoi d'informations au port COM

Procédure SendToPort(Send) Si ComPort.PortOpen Then ComPort.Output = AbbrLP(Send); Else Notify("Le port ne s'ouvre pas", MessageStatus.VeryImportant); fin si; Fin de la procédure

Code de projet pour Arduino Mega

#inclure // connecte la bibliothèque pour travailler avec le module d'empreintes digitales #include // connecte la bibliothèque pour travailler avec le logiciel UART #include #inclure const int boutonPin = 2; // entrez le numéro connecté au bouton pour entrer en mode programmation int buttonState = 0; // variable pour stocker l'état du bouton int modeState = 0; // variable pour stocker l'état du périphérique. 0 - en attente du scanner d'empreintes digitales. 1 - programmation de l'identifiant uint8_t ; // numéro d'identification sous lequel le modèle d'empreinte digitale sera enregistré String frcUID = ""; // numéro d'identification du lecteur rfid int rfidYes = 0; // entrée réussie RFID SoftwareSerial mySerial (10, 11); // déclare l'objet mySerial pour qu'il fonctionne avec la bibliothèque SoftwareSerial OBJECT_NAME(RX, TX); // Vous pouvez spécifier toutes les broches prenant en charge l'interruption PCINTx Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); // déclare un objet doigt pour qu'il fonctionne avec la bibliothèque Adafruit_Fingerprint OBJECT_NAME = Adafruit_Fingerprint(PARAMETER); // PARAMETRE - lien vers un objet pour travailler avec UART auquel le module est connecté, par exemple : &Serial1 MFRC522 mfrc522(53, 5); // Créer une instance MFRC522 void setup() ( pinMode(buttonPin, INPUT); // initialiser la broche connectée au bouton en tant qu'entrée Serial.begin(9600); // Initialiser le matériel UART à une vitesse de 9600 while (!Serial); // En attente du délai d'initialisation UART matériel (500); SPI.begin(); // Init bus SPI mfrc522.PCD_Init(); // Init MFRC522 mfrc522.PCD_DumpVersionToSerial(); // Afficher les détails du PCD - Détails du lecteur de carte MFRC522 delay( 500); // Attente de l'initialisation du module d'empreinte digitale Serial.println(". . . Scan sensor . . ."); // Affichage du message "Recherche du capteur" finger.begin(57600); // Initialisation logiciel UART à la vitesse 57600 (vitesse du module par défaut) Serial.println(finger.verifyPassword()); if (finger.verifyPassword()) ( Serial.println(". . . Capteur trouvé! . . ."); // If le module d'empreinte digitale est détecté, imprimer le message "capteur trouvé" ) else ( Serial.println(". . . Capteur introuvable . . ."); // Si le module d'empreinte digitale n'est pas trouvé, afficher le message "capteur introuvable " et entrez une boucle infinie : while(1 ); tandis que(1); ) Serial.println(". . . Veuillez mettre votre doigt sur le scanner ou le rfid . . ."); ) void loop() ( //Travailler avec le bouton ! buttonState = digitalRead(buttonPin); // lire les valeurs de l'entrée du bouton if (buttonState == HIGH) ( modeState = 1; // entrer en mode de programmation NEXT ) switch (modeState) ( case 0: frcUID = ""; //Travail en mode d'interrogation d'empreinte digitale et rfid if (finger.getImage() == FINGERPRINT_OK) ( // Capturer l'image, si le résultat de l'exécution est égal à la constante FINGERPRINT_OK ( chargement correct de l'image), puis on passe plus loin if (finger.image2Tz() == FINGERPRINT_OK) ( // Convertit l'image résultante, si le résultat de l'exécution est égal à la constante FINGERPRINT_OK (l'image est convertie), puis continue if (finger.fingerFastSearch() == FINGERPRINT_OK) ( // Trouver une correspondance dans la base de données d'empreintes digitales, si le résultat de l'exécution est égal à la constante FINGERPRINT_OK (une correspondance a été trouvée), alors on va plus loin frcUID = ". . . ID trouvé = " + Chaîne (finger.fingerID) + ", confiance = " + Chaîne (finger.confidence) + " ! . . ."; Serial.println(frcUID); ) ) ) if (mfrc522.PICC_IsNewCardPresent()) ( delay(100); if (mfrc522.PICC_ReadCardSerial()) ( //mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); frcUID = "" ; pour (octet 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) ( // Si 255 (id max) alors entrez à nouveau en mode veille 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 while (!Serial.available()); // Attendez que les données apparaissent dans le tampon du port COM while (Serial.available()) ( // Boucle jusqu'à ce que le tampon du port COM soit à court de données char c = Serial.read(); // Attribue le caractère suivant du port COM à la variable c if (isdigit(c)) ( // Si la valeur de la variable c est un chiffre, alors... 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; } }

Épilogue

Le prix de la tablette est d'environ 10 000 roubles. (en fait, à partir de 7000 neufs on peut en acheter avec 1 Go de RAM, mais avec 4 Go 1c ce sera plus agréable à déplacer, j'en ai effectivement acheté un d'occasion pour 6000 en parfait état avec 1 Go mais bricolé avec l'optimisation).

Le passage a été réalisé pour la production de meubles, j'y ai donc réalisé la carrosserie. Je pense qu'on peut découper un « mélange de sciure et de carton » dans un magasin pour 1 000 roubles. et vissez-le avec des vis autotaraudeuses/collez-le avec de la superglue. En dernier recours, vous pouvez prendre un coffret tout fait (par exemple, une armoire électrique) et y découper une fenêtre.

Modules Arduino et ainsi de suite : environ 2 000 roubles.

Le plaisir de réfléchir et de réaliser n’a pas de prix !

Bien que vous puissiez accéder à des systèmes sécurisés via des mots de passe et des clés, les deux options peuvent être peu pratiques et faciles à oublier. Dans ce tutoriel, nous apprendrons comment utiliser le module FPM10A avec la bibliothèque Adafruit Arduino pour créer un système d'empreintes biométriques.

Par tradition, nous commençons par les composants de notre leçon.

Détails

  • Module d'empreintes digitales FPM10A
  • Arduino Uno

Bibliothèques et logiciels

  • EDI Arduino
  • Bibliothèque d'empreintes digitales Adafruit

Diagramme de connexion

Le schéma de connexion du module FPM10A et de l'Arduino Uno doivent être connectés ensemble comme sur la figure ci-dessus. Nous y reviendrons plus en détail dans la prochaine étape.

Composants de connexion

Démarrer avec ce module est incroyablement simple car il utilise un port série pour la communication. Cependant, comme l'Arduino Uno ne dispose que d'un seul port série matériel, vous devez utiliser le port série via un logiciel utilisant les broches 2 et 3 pour communiquer avec le module d'empreintes digitales (le port série matériel est réservé à la communication avec le PC).

Le câble plat fourni avec le module FPM10A n'est pas très adapté aux loisirs, car les fils sont placés dans le boîtier au pas de 1,27 mm. Nous avons donc coupé un côté puis connecté les fils aux cavaliers.

Installation et utilisation de la bibliothèque

La première étape de l'utilisation du FPM10A consiste à installer la bibliothèque Fingerprint d'Adafruit, ce qui peut être effectué à l'aide du gestionnaire de bibliothèque. Ouvrez l'IDE Arduino et accédez à :

Sketch → Inclure la bibliothèque → Gérer les bibliothèques

Lorsque le gestionnaire de bibliothèque charge une recherche « Fingerprint », le premier résultat doit être la bibliothèque d'empreintes digitales Adafruit. Installez-le.

Après avoir installé la bibliothèque, il est temps de créer un nouveau projet Arduino. Cliquez sur Fichier → Nouveau puis enregistrez le projet dans son propre dossier. À ce stade, ouvrez le dossier de votre projet et copiez-y le fichier «fingerprint.h».

Il s'agit d'un fichier d'en-tête spécial qui a été écrit pour faciliter l'utilisation de la bibliothèque d'empreintes digitales. Le fichier d'en-tête n'a que trois fonctions :

  • Fingerprint_setup() - configure le port série pour 9600 bauds et se connecte au module ;
  • readFingerprint() - une fonction d'interrogation qui renvoie -1 si quelque chose s'est mal passé, ou renvoie des informations indiquant qu'une empreinte digitale réussie a été trouvée
  • enrollFingerprint (int id) - ajoute une empreinte digitale au système avec l'identifiant attribué « id ».

Pour inclure ce fichier dans votre projet, utilisez simplement la commande include comme indiqué ci-dessous :

#include "empreinte digitale.h"

La première fonction que vous devez appeler dans setup() est Fingerprint_setup(), qui se connecte automatiquement au module et confirme que tout fonctionne.

Annuler la configuration() ( empreinte digitale_setup(); )

Pour ajouter une nouvelle empreinte digitale, appelez la fonction enrollFingerprint(id).

Cela renverra -1 si un échec se produit. Sinon, les valeurs indiquent un enregistrement réussi des empreintes digitales. L'ID fournissait cette fonction avec des liens vers l'empreinte digitale numérisée, et chaque empreinte digitale avait un numéro d'identification unique.

Inscrire l'empreinte digitale (0x01);

Code Arduino

Vous pouvez copier le croquis final de notre carte Arduino ci-dessous :

#include "fingerprint.h" void setup() ( Fingerprint_setup(); ) void loop() ( // Créer une nouvelle entrée d'empreinte digitale enrollFingerprint(0x01); delay(1000); // Demander l'entrée Serial.println(" \nUSER DEMANDE DE CONNEXION...PLACER LE DOIGT SUR LE CAPTEUR \n"); while(readFingerprint() == -1); Serial.println(" \nACCÈS ACCORDÉ \n"); Serial.println(" \nConfiance des empreintes digitales : " + String (confiance) + "\n"); delay(3000); )

Principe d'opération

Lorsque vous activez ce projet, il vous demandera d'abord de placer votre doigt sur le scanner. Si le scanner est capable de lire vos empreintes digitales, il vous demandera de retirer puis de remplacer votre doigt par le scanner. Cela devrait permettre au scanner d'ajouter avec succès votre empreinte digitale à l'ID 1, et placer votre doigt sur le scanner devrait entraîner un accès au système.

Ce projet peut facilement être étendu pour inclure des verrouillages et des relais solénoïdes pour permettre aux utilisateurs autorisés d'apporter des modifications et de déverrouiller le système. Une fois votre projet terminé, installez votre nouveau scanner sur les portes, armoires, coffres-forts, fenêtres, systèmes électriques, ordinateurs et plus encore !

Pour créer un système de sécurité biométrique simple afin de protéger votre voiture contre tout accès non autorisé, nous aurons besoin d'un capteur d'empreintes digitales et d'un microcontrôleur Arduino. Ce projet utilise le matériel de formation Adafruit. Pour faciliter la répétition, le code complet du programme de ce matériel est utilisé, avec des modifications mineures.

Tout d'abord, nous modifions le système de démarrage du véhicule. La connexion principale est le conducteur IG du commutateur d'allumage, qui alimente le régulateur de tension, puis le microcontrôleur Arduino pour l'allumer et l'éteindre et scanner le doigt sur le capteur pendant 10 secondes. Si l'empreinte digitale correspond, le système active le boîtier relais, qui contrôle le relais de démarrage. Vous pouvez maintenant démarrer le moteur. Après 10 secondes, le capteur d'empreintes digitales s'éteint. Vous pouvez le rallumer en répétant le cycle d'allumage. Si dans les 10 secondes le capteur ne détecte pas d'empreinte digitale ou si l'empreinte digitale ne correspond pas à celle de référence, alors le système de démarrage est désactivé et le moteur ne démarre pas.

Étant donné que chaque véhicule possède un système de configuration de démarrage différent, vous devrez consulter un électricien au sujet du système électrique du véhicule ou revoir le schéma de câblage avant de modifier le système de démarrage.

Veuillez noter que le capteur d'empreintes digitales ne démarre pas le moteur. Il active et désactive simplement le relais de démarrage, qui interdit ou autorise le démarrage du moteur.

Dans ce projet, un antivol est installé sur un coupé Mitsubishi Lancer 2000 2 portes.

Étape 1 : composants utilisés

Étape 4 : Chargement du programme principal

Connectez le capteur d'empreintes digitales comme indiqué sur le schéma et chargez le programme principal. Connectez une LED et une résistance à la broche 12 pour surveiller le bon fonctionnement.

Le programme fonctionne sur le principe du matériel pédagogique Adafruit Fingerprint. Cependant, j'ai légèrement modifié le code et ajouté une minuterie pour éteindre le capteur après 10 secondes afin d'éviter toute distraction causée par la LED clignotante du capteur.

Étape 5 : Assemblage, partie 1

Retirez les vis sous le tableau de bord. Desserrez le levier de déverrouillage du capot. Retirez la partie inférieure du tableau de bord. Placez le capteur dans l'espace libre.

Étape 6 : Assemblage, partie 2

Mesurez la distance requise et découpez une petite zone pour installer solidement le capteur.

Étape 7 : Assemblage, partie 3

Il est préférable d'installer la carte Arduino Uno derrière le capteur d'empreintes digitales. J'ai un peu affûté le siège pour que la carte Arduino Uno soit dans la bonne position.