考勤系统是标记办公室和学校中存在状态的常用系统。从在考勤登记簿中手动标记出勤到使用高科技应用程序和生物识别系统,这些系统都得到了显着改善。在之前的项目中,我们还介绍了其他几个使用RFID和AVR微控制器,8051和树莓派的电子考勤系统项目。在此项目中,我们使用了指纹模块和Arduino来获取并保存考勤数据和记录。通过使用指纹传感器,该系统对于用户而言将变得更加安全。以下各节介绍了使用Arduino制作基于指纹的生物识别出勤系统的技术细节。
所需组件
- Arduino -1
- 指纹模块-1
- 按钮-4
- LED -1
- 1K电阻-2
- 2.2K电阻-1
- 功率
- 连接线
- 框
- 蜂鸣器-1
- 16x2液晶屏-1
- 面包板-1
- RTC模块-1
项目描述:
在此指纹考勤系统电路中,我们使用了指纹传感器模块通过在系统中输入他们的手指来验证真实的人或雇员。在这里,我们使用4个按钮来注册,删除,上/下按钮。 ENROLL和DEL键具有三重功能。 ENROLL键用于将新人员注册到系统中。因此,当用户要注册新手指时,他/她需要按ENROLL键,然后LCD要求输入ID,用户要在其中存储指纹图像。现在,如果此时用户不想继续操作,则可以再次按ENROLL键返回。这次ENROLL键的作用与Back键相同,即ENROLL键既具有注册功能又具有Back功能。除了登记键,还用于通过串行监视器下载考勤数据。同样,DEL / OK键也具有相同的双重功能,例如用户注册新手指时,然后他/她需要使用另外两个键(即UP和DOWN)来选择手指ID。现在,用户需要按DEL / OK键(这次此键的行为类似于OK)以继续选择ID。 Del键用于从Arduino的EEPROM重置或删除数据。
指纹模块:
指纹传感器模块会捕获手指的打印图像,然后将其转换为等效模板,然后根据Arduino选定的ID将其保存到其内存中。所有过程都是由Arduino命令的,例如拍摄指纹图像,将其转换为模板并存储为ID等。您可以使用指纹模块检查更多项目:
基于指纹的安全系统
基于指纹的生物特征投票机
在这里,我们添加了一个黄色LED,它指示指纹模块已准备好拍摄手指的图像。蜂鸣器也用于各种指示。Arduino是该系统的主要组件,它负责控制整个系统。
基于指纹考勤系统的工作
该指纹考勤系统项目的工作非常简单。首先,用户需要借助按钮来注册用户的指纹。为此,用户需要按ENROLL键,然后LCD要求输入指纹的ID,以按ID名称将其保存在内存中。因此,现在用户需要使用UP / DOWN键输入ID。选择ID后,用户需要按OK键(DEL键)。现在,LCD将要求将手指放在指纹模块上。现在,用户需要将手指放在指纹模块上,然后该模块拍摄手指图像。现在,LCD会说要从指纹模块中移开手指,然后再次要求再次放置手指。现在,用户需要再次放下手指,模块拍摄图像并将其转换为模板,并通过选择的ID将其存储到指纹模块的内存中。现在,用户将被注册,他/她可以将手指放在指纹模块上来参加会议,通过相同的方法,所有用户都将被注册到系统中。
现在,如果用户要删除或删除任何已存储的ID或指纹,则他/她需要按DEL键。按下删除键后,LCD会要求您选择需要删除的ID。现在,用户需要选择ID并按OK键(相同的DEL键)。现在,LCD会通知您指纹已成功删除。
指纹考勤系统项目中的考勤工作方式:
每当用户将手指放在指纹模块上时,指纹模块都会捕获手指图像,并在系统中搜索是否有任何ID与该指纹相关联。如果检测到指纹ID,则LCD将显示已注册考勤,同时蜂鸣器将蜂鸣一次,LED将熄灭,直到系统准备好再次输入。
除了指纹模块,我们还使用了RTC模块来显示时间和日期。时间和日期在系统中连续运行。因此,每当真正的用户将手指放在指纹上并将其保存在分配的内存插槽中的EEPROM中时,Arduino便会花费时间和日期。
在这里,我们在此系统中创建了30天的5个用户空间。通过按下Arduino中的RESET按钮,然后立即注册键,将负责通过Arduino的EEPROM存储器通过串行监视器下载考勤数据。
内存管理:
我们在Arduino UNO中有1023字节的内存,其中有1018字节用于存储数据,并且在30天的时间内获取了5个用户出勤数据。每个出席者都会记录时间和日期,因此它成为7字节数据。
因此所需的总内存为
5 * 30 * 7 = 1050因此我们需要更多32个字节
但是,如果我们要使用4个用户,则我们需要
4 * 30 * 7 = 840
在这里,我们通过占用5个用户的内存来完成了该项目演示。这样,我们将无法存储第5个用户的32字节或5个出勤记录。
您可以通过更改代码中的某些行来由4个用户尝试。我已经在需要更改的代码中添加了注释。
指纹考勤系统项目的电路图和说明
如上图所示,该基于指纹的考勤系统项目的电路非常简单。它具有用于控制项目所有过程的Arduino,用于注册,删除,选择ID和出席的按钮,用于警告的蜂鸣器,用于指示的LED和用于指示用户并显示结果消息的LCD。
如电路图所示,相对于地面,一个按钮直接连接到Arduino的A0(ENROL),A1(DEL),A2(UP),A3(DOWN)引脚,数字LED引脚D7连接了黄色LED通过1k电阻将Arduino接地。指纹模块的Rx和Tx直接连接到Arduino的串行引脚D2和D3(软件串行)。5v电源用于为从Arduino板上获取的指纹模块供电。蜂鸣器也连接在引脚A5上。一个16x2 LCD配置为4位模式,其RS,EN,D4,D5,D6和D7直接连接到Arduino的数字引脚D13,D12,D11,D10,D9和D8。
代码说明:
arduino的指纹考勤系统代码在后续部分中给出。尽管用注释对代码进行了很好的解释,但是我们在这里讨论了代码的几个重要部分。我们使用指纹库将指纹模块与Arduino板连接。
首先,我们包含头文件并定义输入和输出引脚,并定义宏和声明的变量。此后,在设置功能中,我们向定义的引脚提供方向,并启动LCD和指纹模块
之后,我们必须编写用于下载考勤数据的代码。
void setup(){delay(1000); lcd.begin(16,2); Serial.begin(9600); pinMode(注册,INPUT_PULLUP); pinMode(up,INPUT_PULLUP); pinMode(向下,INPUT_PULLUP); pinMode(del,INPUT_PULLUP); pinMode(match,INPUT_PULLUP); pinMode(蜂鸣器,输出); pinMode(indFinger,OUTPUT); digitalWrite(蜂鸣器,低); if(digitalRead(enroll)== 0){digitalWrite(buzzer,HIGH); 延迟(500); digitalWrite(蜂鸣器,低); lcd.clear(); lcd.print(“请稍候”); lcd.setCursor(0,1); lcd.print(“ Downloding Data”);
之后,我们必须编写代码以清除EEPROM中的考勤数据。
if(digitalRead(del)== 0){lcd.clear(); lcd.print(“请稍候”); lcd.setCursor(0,1); lcd.print(“ Reseting…..”); for(int i = 1000; i <1005; i ++)EEPROM.write(i,0); for(int i = 0; i <841; i ++)EEPROM.write(i,0xff); lcd.clear(); lcd.print(“系统重置”); 延迟(1000); }
之后,我们启动指纹模块,在LCD上显示欢迎消息,并启动RTC模块。
之后,在循环功能中,我们已读取RTC时间并将其显示在LCD上
void loop(){now = 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(now.second(),DEC); lcd.print(“”); lcd.setCursor(0,1); lcd.print(“ Date->”); lcd.print(now.day(),DEC); lcd.print('/'); lcd.print(now.month(),DEC); lcd.print('/'); lcd.print(now.year(),DEC);
之后,等待指纹输入并比较捕获的图像ID和存储的ID。如果发生匹配,则继续下一步。并检查注册del键
int result = getFingerprintIDez(); if(result> 0){digitalWrite(indFinger,LOW); digitalWrite(蜂鸣器,高); 延迟(100); digitalWrite(蜂鸣器,低); lcd.clear(); lcd.print(“ ID:”); lcd.print(result); lcd.setCursor(0,1); lcd.print(“请稍候…”); 延迟(1000); 出勤(结果);lcd.clear(); lcd.print(“ Attendance”); lcd.setCursor(0,1); lcd.print(“已注册”); 延迟(1000); digitalWrite(indFinger,HIGH); 返回; }
给定void checkKeys() 函数用于检查是否按下了Enroll或DEL键,以及按下该怎么办。如果按下ENROLL键,则调用 Enroll() 函数,而按DEL键,则将调用 delete() 函数。
void delet() 函数用于输入要删除的ID,并调用 uint8_t deleteFingerprint(uint8_t id) 函数,该函数将从记录中删除手指。
给定功能用于拍摄指纹图像并将其转换为模板,并通过选择的ID将其保存到指纹模块存储器中。
uint8_t getFingerprintEnroll(){int p = -1; lcd.clear(); lcd.print(“手指ID:”); lcd.print(id); lcd.setCursor(0,1); lcd.print(“放置手指”); delay(2000); while(p!= FINGERPRINT_OK){p = finger.getImage();…………………
给定功能用于将出勤时间和日期存储在EEPROM分配的插槽中
无效出席人数(int id){int user = 0,eepLoc = 0; if(id == 1){eepLoc = 0; user = user1 ++; } else if(id == 2){eepLoc = 210; user = user2 ++; } else if(id == 3)………….
给定功能用于从EEPROM获取数据并发送到串行监视器
void download(int eepIndex){if(EEPROM.read(eepIndex)!= 0xff){Serial.print(“ T->”); if(EEPROM.read(eepIndex)<10)串行打印('0'); Serial.print(EEPROM.read(eepIndex ++)); Serial.print(':'); if(EEPROM.read(eepIndex)<10)串行打印('0'); Serial.print(EEPROM.read(eepIndex ++));………….