- Необходими компоненти
- Описание на проекта:
- Модул FingerPrint:
- Работа на система за посещаемост, базирана на пръстови отпечатъци
- Схема и описание на проект за система за посещаемост на пръстови отпечатъци
- Обяснение на кода:
Системите за посещение са често използвани системи за отбелязване на присъствието в офиси и училища. От ръчно маркиране на присъствието в регистрите за присъствие до използване на високотехнологични приложения и биометрични системи, тези системи се подобриха значително. В предишните ни проекти сме обхванали няколко други проекта за електронна посещаемост, използващи RFID и AVR микроконтролер, 8051 и малинов Pi. В този проект използвахме модула за пръстови отпечатъци и Arduino, за да вземем и поддържаме данни и записи за посещаемост. Използвайки сензор за пръстови отпечатъци, системата ще стане по-сигурна за потребителите. Следващите раздели обясняват техническите подробности за създаването на система за биометрично присъствие на базата на пръстови отпечатъци с помощта на Arduino.
Необходими компоненти
- Ардуино -1
- Модул за отпечатък на пръсти -1
- Бутон - 4
- Светодиоди -1
- 1K резистор -2
- 2.2K резистор -1
- Мощност
- Свързващи проводници
- Кутия
- Звънец -1
- 16x2 LCD -1
- Дъска за хляб -1
- RTC модул -1
Описание на проекта:
В тази схема на системата за присъствие на пръстови отпечатъци използвахме модула за сензор за пръстови отпечатъциза удостоверяване на истински човек или служител, като въведете пръста си в системата. Тук използваме 4 бутона за записване, Изтриване, НАГОРЕ / НАДОЛУ. Клавишът ENROLL и DEL има тройни функции. Клавишът ENROLL се използва за записване на ново лице в системата. Така че, когато потребителят иска да регистрира нов пръст, той / тя трябва да натисне клавиша ENROLL, след което LCD ще поиска идентификационния номер, където потребителят иска да съхранява изображението за отпечатване на пръст. Сега, ако в този момент потребителят не иска да продължи по-нататък, той / тя може да натисне отново клавиша ENROLL, за да се върне. Този път бутонът ENROLL се държи като клавиш Back, т.е. бутонът ENROLL има както регистрация, така и функция за връщане назад. Освен клавиша за регистрация се използва и за изтегляне на данни за присъствието през сериен монитор. По същия начин клавишът DEL / OK също има същата двойна функция, както когато потребителят регистрира нов пръст,тогава той / тя трябва да избере ID на пръста, като използва още два клавиша, а именно НАГОРЕ и НАДОЛУ. Сега потребителят трябва да натисне клавиша DEL / OK (този път този клавиш се държи като OK), за да продължи с избрания ID. И клавишът Del се използва за нулиране или изтриване на данни от EEPROM на Arduino.
Модул FingerPrint:
Модулът на сензора за пръстови отпечатъци улавя изображението на отпечатъка на пръста и след това го преобразува в еквивалентния шаблон и ги записва в паметта си според избрания идентификатор от Arduino. Целият процес се командва от Arduino като заснемане на отпечатък на пръст, конвертиране в шаблони и съхраняване като ID и т.н.
Система за сигурност, базирана на пръстови отпечатъци
Биометрична машина за гласуване въз основа на пръстови отпечатъци
Тук сме добавили жълт светодиод, който показва, че модулът за пръстови отпечатъци е готов за заснемане на пръст. За различни показания се използва и зумер. Arduino е основният компонент на тази система, той отговаря за контрола на цялата система.
Работа на система за посещаемост, базирана на пръстови отпечатъци
Работа на този проект за система за посещаемост на пръстови отпечатъцие доста проста. На първо място, потребителят трябва да регистрира пръстови отпечатъци на потребителя с помощта на бутони. За да направите това, потребителят трябва да натисне клавиша ENROLL и след това LCD ще поиска въвеждане на ID за пръстовия отпечатък, за да го запише в паметта по име на ID. Така че сега потребителят трябва да въведе ID с помощта на бутоните НАГОРЕ / НАДОЛУ. След като изберете ID, потребителят трябва да натисне бутона OK (клавиш DEL). Сега LCD ще поиска да постави пръст върху модула за пръстови отпечатъци. Сега потребителят трябва да постави пръста си върху модула за отпечатване на пръсти и след това модулът прави изображение на пръста. Сега LCD ще каже да премахнете пръста от модула за пръстови отпечатъци и отново ще поиска да поставите пръста отново. Сега потребителят трябва да постави пръста си отново и модулът прави изображение и го преобразува в шаблони и го съхранява чрез избран идентификатор в паметта на модула за пръстови отпечатъци.Сега потребителят ще бъде регистриран и той / тя може да храни присъствието си, като поставя пръста си върху модула за пръстови отпечатъци. По същия начин всички потребители ще бъдат регистрирани в системата.
Сега, ако потребителят иска да премахне или изтрие някой от съхранените идентификатор или пръстов отпечатък, тогава той / тя трябва да натисне бутона DEL. След като натиснете клавиша за изтриване, LCD ще поиска да изберете ID, който трябва да бъде изтрит. Сега потребителят трябва да избере ID и да натисне бутона OK (същия клавиш DEL). Сега LCD ще ви уведоми, че пръстовият отпечатък е изтрит успешно.
Как работи Attendance в този проект за система за присъствие на пръстови отпечатъци:
Всеки път, когато потребителят постави пръста си върху модула за пръстови отпечатъци, тогава модулът за пръстови отпечатъци заснема изображение на пръст и търси дали някой идентификатор е свързан с този пръстов отпечатък в системата. Ако се открие идентификационен номер на пръстов отпечатък, на LCD дисплея ще се покаже регистрирано присъствие и в същото време зумерът ще издава звуков сигнал веднъж и светодиодът ще се изключи, докато системата не е готова да приеме отново.
Заедно с модула за пръстови отпечатъци, ние използвахме и RTC модул за час и дата. Часът и датата работят непрекъснато в системата. Така че Arduino взема време и дата, когато истински потребител постави пръста си върху пръстовия отпечатък и ги запише в EEPROM в определения слот памет.
Тук създадохме 5 потребителски пространства в тази система за 30 дни. Чрез натискане на бутона RESET в Arduino и след това веднага клавиш за регистрация ще бъде отговорен за изтеглянето на данните за присъствието през сериен монитор от Arduino EEPROM паметта.
Управление на паметта:
Разполагаме с 1023 байта памет в Arduino UNO, от които имаме 1018 байта за съхраняване на данни и взехме 5 данни за посещаемост на потребителите за 30 дни. И всяко посещение ще записва час и дата, така че това се превръща в 7-байтови данни.
Така че общата необходима памет е
5 * 30 * 7 = 1050, така че тук се нуждаем от повече 32 байта
Но ако ще използваме 4 потребители, тогава ние изисквахме
4 * 30 * 7 = 840
Тук направихме тази демонстрация на проекта, като взехме 5 потребители памет. По този начин няма да можем да съхраняваме 32 байта или 5 записа на присъствието на 5 -ия потребител.
Можете да опитате от 4 потребители, като промените някои редове в кода. Направих коментарите в кода, където са необходими промените.
Схема и описание на проект за система за посещаемост на пръстови отпечатъци
Схемата на този проект за система за присъствие на базата на пръстови отпечатъци, както е показано на горната схема, е доста проста. Разполага с Arduino за управление на целия процес на проекта, бутон за записване, изтриване, избор на идентификатори и за присъствие, зумер за предупреждение, светодиоди за индикация и LCD за инструктиране на потребителя и показване на получените съобщения.
Както е показано на схемата, бутонът е директно свързан към щифт A0 (ENROLL), A1 (DEL), A2 (UP), A3 (DOWN) на Arduino по отношение на земята и жълт светодиод е свързан към Digital pin D7 на Arduino по отношение на земята през 1k резистор. Rx и Tx на модула за пръстови отпечатъци са директно свързани на сериен щифт D2 и D3 (софтуерен сериен) на Arduino. Захранването 5v се използва за захранване на модул за отпечатване на пръсти, взет от дъската Arduino. На пин A5 е свързан и зумер. LCD 16x2 е конфигуриран в 4-битов режим и неговите RS, EN, D4, D5, D6 и D7 са директно свързани с цифрови щифтове D13, D12, D11, D10, D9 и D8 на Arduino.
Обяснение на кода:
Кодът на системата за посещаемост на пръстови отпечатъци за arduino е даден в следващите раздели. Въпреки че кодът е обяснен добре с коментари, тук обсъждаме няколко важни части от кода. Използвахме библиотека с пръстови отпечатъци за свързване на модул за отпечатване на пръсти с платка Arduino.
На първо място, ние включваме заглавния файл и дефинира входния и изходния щифт и дефинираме макроса и декларираните променливи. След това, във функцията за настройка, ние даваме посока на дефиниран щифт и инициираме LCD и модул за отпечатване на пръсти
След него трябва да напишем код за изтегляне на данните за присъствието.
void setup () {delay (1000); lcd.begin (16,2); Serial.begin (9600); pinMode (записване, INPUT_PULLUP); pinMode (нагоре, INPUT_PULLUP); pinMode (надолу, INPUT_PULLUP); pinMode (del, INPUT_PULLUP); pinMode (съвпадение, INPUT_PULLUP); pinMode (зумер, ИЗХОД); pinMode (indFinger, OUTPUT); digitalWrite (зумер, LOW); if (digitalRead (записване) == 0) {digitalWrite (зумер, HIGH); забавяне (500); digitalWrite (зумер, LOW); lcd.clear (); lcd.print ("Моля, изчакайте"); lcd.setCursor (0,1); lcd.print ("Изтегляне на данни");
След това трябва да напишем код за изчистване на данните за присъствието от EEPROM.
if (digitalRead (del) == 0) {lcd.clear (); lcd.print ("Моля, изчакайте"); lcd.setCursor (0,1); lcd.print ("Reseting….."); за (int i = 1000; i <1005; i ++) EEPROM.write (i, 0); за (int i = 0; i <841; i ++) EEPROM.write (i, 0xff); lcd.clear (); lcd.print ("Нулиране на системата"); забавяне (1000); }
След него инициираме модул за отпечатване на пръсти, показващ приветствено съобщение през LCD и също така иницииран RTC модул.
След него, в функция на цикъл, прочетохме RTC време и го показахме на LCD
невалиден цикъл () {сега = rtc.now (); lcd.setCursor (0,0); lcd.print ("Time->"); lcd.print (now.hour (), DEC); lcd.print (':'); lcd.print (now.minute (), DEC); lcd.print (':'); lcd.print (сега.секунда (), DEC); lcd.print (""); lcd.setCursor (0,1); lcd.print ("Дата->"); lcd.print (now.day (), DEC); lcd.print ('/'); lcd.print (сега.месец (), DEC); lcd.print ('/'); lcd.print (now.year (), DEC);
След него изчакваме отпечатъкът на пръста да влезе и да сравнява заснетия идентификатор на изображението със съхранените идентификатори. Ако се получи измерване, продължете със следващата стъпка. И проверка за регистрация на клавиши del
int резултат = getFingerprintIDez (); if (резултат> 0) {digitalWrite (indFinger, LOW); digitalWrite (зумер, HIGH); забавяне (100); digitalWrite (зумер, LOW); lcd.clear (); lcd.print ("ID:"); lcd.print (резултат); lcd.setCursor (0,1); lcd.print ("Моля, изчакайте…."); забавяне (1000); присъствие (резултат); lcd.clear (); lcd.print ("Посещаемост"); lcd.setCursor (0,1); lcd.print ("Регистриран"); забавяне (1000); digitalWrite (indFinger, HIGH); връщане; }
Дадена функция void checkKeys () се използва за проверка на Регистриране или натискане на клавиша DEL или не и какво да се прави, ако се натисне. Ако бутонът ENROLL е натиснат, се извиква функцията Enroll () и се натиска бутон DEL, след което се извиква функцията delete ()
Функцията void delet () се използва за въвеждане на ID за изтриване и извикване на функция uint8_t deleteFingerprint (uint8_t id), която ще изтрие пръста от записите.
Дадена функция се използва за заснемане на изображение за отпечатък на пръст и конвертирането им в шаблона и запазване на избрания идентификатор в паметта на модула за пръстови отпечатъци
uint8_t getFingerprintEnroll () {int p = -1; lcd.clear (); lcd.print ("ID на пръста:"); lcd.print (id); lcd.setCursor (0,1); lcd.print ("Place Finger"); забавяне (2000); докато (p! = FINGERPRINT_OK) {p = finger.getImage ();…………………
Дадената функция се използва за съхраняване на часа и датата на присъствие в определения слот на EEPROM
невалидно присъствие (int id) {int user = 0, eepLoc = 0; ако (id == 1) {eepLoc = 0; потребител = потребител1 ++; } иначе ако (id == 2) {eepLoc = 210; потребител = потребител2 ++; } иначе ако (id == 3)………….
Дадената функция се използва за извличане на данни от EEPROM и изпращане на сериен монитор
изтегляне на невалидни (int eepIndex) {if (EEPROM.read (eepIndex)! = 0xff) {Serial.print ("T->"); ако (EEPROM.read (eepIndex) <10) Serial.print ('0'); Serial.print (EEPROM.read (eepIndex ++)); Serial.print (':'); ако (EEPROM.read (eepIndex) <10) Serial.print ('0'); Serial.print (EEPROM.read (eepIndex ++));………….