Components and supplies
Trimmer Potentiometer, 10 kohm
Pushbutton Switch, Push-Pull
RC522 RFID reader
Tiny furniture screws
Z70 fingerprint scanner
Standard LCD - 16x2 White on Blue
Arduino Leonardo
Arduino Leonardo Enclosure 78 x 59 x 21 mm
Breadboard (generic)
Tools and machines
3D Printer (generic)
Hot glue gun (generic)
Zip tie
Apps and platforms
Arduino IDE
Project description
Code
Code
c_cpp
1#include <Keyboard.h> 2#include <SPI.h> 3#include <MFRC522.h> 4#include <LiquidCrystal.h> 5#include <Adafruit_Fingerprint.h> 6#define SS_PIN 10 7#define RST_PIN 9 8#define lcdLight 8 9#define Lock_Btn 11 10#define mySerial Serial1 11 12LiquidCrystal lcd(2,3,4,5,6,7); 13 14Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); 15 16MFRC522 rfid(SS_PIN, RST_PIN); //stworzenie instancji czytnika RFID, pin NSS - 10, "fałszywy" pin RST - 9 17char Enter = KEY_RETURN; //deklaracja przycisków klawiatury dla wygody 18char Escape = KEY_ESC; // 19char Win = KEY_LEFT_GUI; // 20char logKey = 'l'; // 21String readId; //id odczytanego chipu rfid zapisywane do stringa 22String logCard = ""; //id chipu, który odblokowuje komputer 23String password = ""; //twoje haslo 24bool loginFlag; 25int timeCount = 0; 26int fingerIDint; 27 28void temp(byte *buffer, byte bufferSize) //funkcja do przepisywania odczytanego id chipu RFID z rejestru czytnika do formy stringa 29{ 30 readId = ""; 31 for(byte i = 0; i < bufferSize; i++) 32 { 33 readId = readId + String(buffer[i], HEX); 34 } 35} 36 37int fingerID() { 38 uint8_t p = finger.getImage(); 39 if (p != FINGERPRINT_OK) return 0; 40 41 p = finger.image2Tz(); 42 if (p != FINGERPRINT_OK) return 0; 43 44 p = finger.fingerFastSearch(); 45 if (p != FINGERPRINT_OK) return 0; 46 47 //Serial.print("Found ID #"); Serial.print(finger.fingerID); 48 //Serial.print(" with confidence of "); Serial.println(finger.confidence); 49 return finger.fingerID; 50} 51 52void passwd() //funkcja do wpisywania hasła 53{ 54 Keyboard.press(Escape); 55 delay(1000); 56 Keyboard.releaseAll(); 57 Keyboard.print(password); //modyfikowalne, tutaj jest hasło do komputera 58 Keyboard.press(Enter); 59 Keyboard.releaseAll(); 60} 61 62void logOut() 63{ 64 Keyboard.press(Win); 65 delay(10); 66 Keyboard.press(logKey); 67 Keyboard.releaseAll(); 68 digitalWrite(lcdLight, HIGH); 69 lcd.setCursor(0,0); 70 lcd.print("Logging out..."); 71 loginFlag = false; 72 timeCount = 0; 73 delay(1000); 74} 75 76void clearLCD() //funkcja do czyszczenia wyswietlacza lcd 77{ 78 lcd.setCursor(0,0); 79 lcd.print(" "); 80 lcd.setCursor(0,1); 81 lcd.print(" "); 82} 83 84void setup( ) 85{ 86 //inicjalizacja pinów 87 pinMode(lcdLight, OUTPUT); 88 pinMode(Lock_Btn, INPUT_PULLUP); 89 90 //inicjalizacja elementów zewnętrznych bibliotek 91 lcd.begin(16,2); 92 Keyboard.begin(); 93 Serial.begin(9600); 94 SPI.begin(); //inicjalizacja szyny SPI płytki 95 rfid.PCD_Init(); //inicjalizacja instancji czytnika RFID 96 delay(4); 97 98 finger.begin(57600); 99 delay(5); 100 if (finger.verifyPassword()) { 101 Serial.println("Found fingerprint sensor!"); 102 } else { 103 Serial.println("Did not find fingerprint sensor :("); 104 while (1) { delay(1); } 105 } 106 107 //wstępne ustawienia zmiennych i pinów 108 loginFlag = false; //użytkownik nie zalogowany 109 110 delay(2000); 111 digitalWrite(lcdLight, HIGH); //podswietlenie lcd wlaczone 112 lcd.setCursor(0,0); 113 lcd.print("System booting"); 114 lcd.setCursor(0,1); 115 lcd.print("Please wait..."); 116 delay(5000); 117 clearLCD(); 118} 119 120void loop() 121{ 122 if(loginFlag == true) //przejscie w tryb uspienia, jezeli uzytkownik jest zalogowany - wylaczenie wyswietlacza lcd i pominięcie całej reszty petli loop 123 { 124 digitalWrite(lcdLight, LOW); 125 126 if(digitalRead(Lock_Btn) == LOW) //jezeli wcisniety przycisk wylogowania wcisnij kombinacje Win+L, wlacz wyswietlacz lcd i ustaw flage logowania na false - niezalogowany 127 { 128 logOut(); 129 return; 130 } 131 else 132 { 133 return; 134 } 135 } 136 137 else 138 { 139 140 if(rfid.PICC_IsNewCardPresent() == false) //funkcja wbudowana w biblioteke - sprawdza czy do czytnika jest przylozona jakakolwiek karta, jezeli nie ma karty funkcja zwraca false, co wypisuje na wyswietlacz tekst i pomija dalsza czesc petli loop 141 { 142 if(digitalRead(Lock_Btn) == LOW) // wicsniecie przycisku sluzy do podswietlenia ekranu lcd 143 { 144 digitalWrite(lcdLight, HIGH); 145 timeCount = 0; 146 } 147 if(timeCount == 90) //po 15 sekundach bezczynnosci podswietlenie ekranu lcd zostaje wylaczone 148 { 149 digitalWrite(lcdLight, LOW); 150 return; 151 } 152 else 153 { 154 fingerIDint = fingerID(); 155 clearLCD(); 156 lcd.setCursor(0,0); 157 lcd.print("Insert card"); 158 lcd.setCursor(0,1); 159 lcd.print("or place finger"); 160 //lcd.print(timeCount); //funkcja debugujaca, wyswietlajaca zawartosc zmiennej timeCount 161 timeCount++; 162 } 163 if(fingerIDint == 0) 164 { 165 return; 166 } 167 } 168 169 if(rfid.PICC_ReadCardSerial() == false and fingerIDint == 0) //funkcja wbudowana w biblioteke - zapisuje UID wprowadzonej karty do wewnetrznego rejestru, jezeli nie ma karty funkcja zwraca false i pomija dalsza czesc petli loop (moze sie zdarzyc, ze czytnik wykryje wprowadzona karte, ale nie bedzie ona kompatybilna i nie bedzie mozna odczytac jej UID) 170 { 171 return; 172 } 173 174 digitalWrite(lcdLight, HIGH); 175 clearLCD(); 176 switch(fingerIDint) 177 { 178 case 0: 179 { 180 lcd.setCursor(0,0); 181 lcd.print("Card detected!"); 182 temp(rfid.uid.uidByte, rfid.uid.size); //wykorzystanie funkcji przepisania ID z rejestru do Stringa 183 184 //Serial.println(readid); //funkcja debugujaca, wyrzucajaca ID karty do portu szeregowego 185 186 if(readId == logCard) //porownanie ID odczytanej karty z "wzorcem", jezeli karta sie zgadza nastepuje wykonanie funkcji wpisujacej haslo i ustawienie flagi logowania na true - zalogowany 187 { 188 lcd.setCursor(0,1); 189 lcd.print("Card match!"); 190 passwd(); 191 delay(1000); 192 clearLCD(); 193 lcd.setCursor(0,0); 194 lcd.print("Welcome!"); 195 delay(1000); 196 clearLCD(); 197 loginFlag = true; 198 return; 199 } 200 else //jezeli karta sie nie zgadza uklad wypisuje na ekran monit i wraca do poczatku petli loop 201 { 202 lcd.setCursor(0,1); 203 lcd.print("Wrong card!"); 204 delay(1000); 205 clearLCD(); 206 return; 207 } 208 } 209 default: 210 { 211 lcd.setCursor(0,0); 212 lcd.print(" "); 213 lcd.setCursor(0,0); 214 lcd.print("Finger detected!"); 215 lcd.setCursor(0,1); 216 lcd.print("Biometric match!"); 217 passwd(); 218 delay(1000); 219 clearLCD(); 220 lcd.setCursor(0,0); 221 lcd.print("Welcome!"); 222 delay(1000); 223 clearLCD(); 224 loginFlag = true; 225 } 226 } 227 } 228}
Downloadable files
Wiring
Wiring
Wiring
Wiring
Comments
Only logged in users can leave comments
iamjuras
0 Followers
•0 Projects
Table of contents
Intro
9
0