Timbratrice con impronta digitale
Descrizione del progetto
[modifica]Questo progetto ha lo scopo di riconoscere e far passare un dipendente in un luogo di lavoro.
Ogni dipendente ovviamente possiede una propria impronta digitale che sarà esclusivamente legata al dipendente stesso.
Questo permetterà allo stesso di poter effettuare le operazioni di accesso al luogo di lavoro, alla fase di timbratura del cartellino ed inoltre eviterà eventuali tentativi di broglio oppure eviterà l'ingresso in azienda a personale non autorizzato.
Il funzionamento sarà quindi collegato al riconoscimento dell'impronta di un dito (pollice); se l'impronta risulterà tra quelle inserite nel database e risulterà corretta si accenderà una luce verde e verrà emesso un suono primario, mentre se l'impronta risulterà errata oppure con accesso negato si accenderà la luce rossa e verrà emesso un suono secondario ovvero un suono che identificherà un errore.
Tale progetto può essere ampliato dotando l'azienda di porte di accesso automatiche, anche esse permetteranno l'accesso solo a personale che ha effettuato il riconoscimento digitale mediante impronta.
Cenni teorici
[modifica]Per la realizzazione di questo progetto abbiamo utilizzato un sensore ad impronta digitale, Il suo funzionamento è semplice, genera un'immagine delle creste e delle linee che costituiscono un'impronta digitale, ma invece di farlo attraverso una luce, avviene attraverso una corrente elettrica.
Componenti
[modifica]In questo progetto abbiamo utilizzato diversi componenti che possiamo trovare nella tabella sottostante:
Componente | Descrizione | Q.tà |
---|---|---|
SG035 | Display lcd | 1 |
AS608 | Impronta digitale | 1 |
\\\\\\\\\\\\\\\\\\\\\ | Led rosso | 1 |
\\\\\\\\\\\\\\\\\\\\\\ | Led verde | 1 |
\\\\\\\\\\\\\\\\\\\\\\ | Cicalino | 1 |
\\\\\\\\\\\\\\\\\\\\\\ | Resistenze | 2 |
\\\\\\\\\\\\\\\\\\\\\\ | Jumper | \\ |
PC16 | Potenziometro | 1 |
Schema di montaggio
[modifica]Codice
[modifica]//Display lcd
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
//Fingerprint
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
SoftwareSerial serial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&serial);
//Variabili
int fingerId;
String nameId = "";
//Leds
const int l_green = 10, l_red = 9;
void setup() {
//Debug
Serial.begin(9600);
//Display
lcd.begin(16, 2);
lcd.print("Benvenuto");
//Fingerprint
finger.begin(57600);
if(finger.verifyPassword()) {
Serial.println("Found fingerprint sensor");
} else {
Serial.println("Fingerprint sensor not found :/");
lcd.clear();
lcd.print("Error");
while(1) { delay(1); }
}
//Leds
pinMode(l_green, OUTPUT);
pinMode(l_red, OUTPUT);
}
//Read fingerprint
int ReadFinger() {
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 -2; }
return finger.fingerID;
}
void onSuccess() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Benvenuto");
lcd.setCursor(0, 1);
lcd.print(nameId);
if(nameId == "Sconosciuto") {
digitalWrite(l_red, HIGH);
} else {
digitalWrite(l_green, HIGH);
}
delay(1000);
digitalWrite(l_red, LOW);
digitalWrite(l_green, LOW);
}
void loop() {
fingerId = ReadFinger();
switch(fingerId) {
case 1:
nameId = "Andrea Piergiovanni";
break;
case 2:
nameId = "Matteo Coccia";
break;
default:
nameId = "Sconosciuto";
break;
}
if(fingerId != -1) {
onSuccess();
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Benvenuto");
delay(100);
}
Espansioni suggerite
[modifica]In futuro potremmo ampliare in nostro progetto aggiungendo un motore per l'apertura di una eventuale porta.