我们以前在许多RFID项目中都使用过RFID,并且已经使用8051建立了基于RFID的出勤系统,在这里,我们将使用Raspberry Pi建立 基于RFID的出勤系统。
在这个 基于RFID的考勤系统项目中,我们将向您说明如何使用RFID卡自动授权和计数考勤。RFID技术(射频识别和检测)通常用于学校,学院,办公室和车站,用于各种目的,以自动跟踪人员。在这里,我们将使用RFID计算授权人员的出席次数。
如果您不熟悉Raspberry Pi,我们创建了一系列教程和raspberry pi项目,并与所有基本组件和一些简单的项目入手进行检查。
使用的组件:
- Raspberry Pi(带有已启动的SD卡)
- 按钮
- 蜂鸣器
- 16x2 LCD
- 1万锅
- 10K电阻
- LED
- 1k电阻
- 面包板
- RFID读取器
- 功率5伏
- RFID标签或卡
- 以太网电缆
- 连接线
RFID阅读器和标签:
RFID是一种电子设备,分为两部分-一个是RFID阅读器,另一个是RFID标签或卡。当我们将RFID标签放在RFID阅读器附近时,它会顺序读取标签数据。RFID标签在线圈中具有12位数字的字符代码。该RFID的波特率为9600 bps。RFID使用电磁体将数据从阅读器传输到标签或从标签传输到阅读器。
工作说明:
Raspberry Pi 3在这里控制着这个项目的整个过程(用户可以使用任何Raspberry Pi开发板)。RFID阅读器读取RFID卡ID, Raspberry Pi通过UART接收此数据,然后RPi验证卡并在LCD屏幕上显示结果。
当人们将其RFID标签放在RFID阅读器上方进行扫描时,RFID会读取标签的数据并将其发送到Raspberry Pi。然后,Raspberry Pi读取该RFID标签的唯一标识号,然后将该数据与预定义的数据或信息进行比较。如果数据与预定义的数据匹配,则Raspberry Pi将标签人的出勤率增加1,如果匹配不匹配,则微控制器在LCD上显示“ Invalid Card”(无效卡)消息,并且蜂鸣器持续鸣叫一段时间。在这里,我们还添加了一个按钮以查看总数。所有学生的出席率。在这里,我们采用了4个RFID标签,其中三个用于记录三个学生的出勤情况,另一个被用作无效卡。
电路说明:
该Raspberry Pi考勤系统项目的电路图非常简单,其中包含 Raspberry Pi 3,RFID阅读器,RFID标签,蜂鸣器,LED和LCD。 Raspberry Pi在这里控制着整个过程,例如读取来自阅读器的数据,将数据与预定义的数据进行比较,驱动蜂鸣器,驱动状态LED以及将状态发送到LCD显示屏。RFID阅读器用于读取RFID标签。蜂鸣器用于指示,并由内置的NPN晶体管驱动。LCD用于在其上显示状态或消息。
连接很简单。LCD以4位模式与Raspberry Pi连接。LCD的RS,RW和EN引脚直接连接到接线Pi GPIO 11,gnd和10。数据引脚连接到接线Pi GPIO 6、5、4和1。一个10K电位器用于设置LCD的对比度或亮度。蜂鸣器相对于地线连接在Pi GPIO引脚7上。通过相应的RFID卡连接了三个LED,用于学生指示。一个LED用于显示系统已准备就绪,可以扫描RFID卡。接线Pi GPIO引脚12上还连接了一个按钮,以显示出勤人数。RFID阅读器连接到UART引脚(连接GPIO引脚16)。
在Raspberry Pi中安装connectionPicture Library:
像在Python中一样,我们将 导入RPi.GPIO作为IO 头文件 导入, 以使用Raspberry Pi的GPIO引脚,在这里,用C语言,我们需要使用connectioningPi Library在我们的C程序中使用GPIO引脚。我们可以通过以下命令一个一个地安装它,您可以从Terminal或某些SSH客户端(如Putty)(如果使用Windows)运行此命令。浏览我们的《 Raspberry Pi入门》教程,以了解有关处理Raspberry Pi的更多信息。
sudo apt-get install git-core sudo apt-get update sudo apt-get upgrade git clone git://git.drogon.net/wiringPi cdconnectionPi git pull origin cdconnectionPi./build
使用以下命令测试wireingPi库的安装:
gpio -v gpio阅读全部
编程说明:
现在首先我们包括一些库并定义需要在此代码中使用的引脚。
#包括
之后,定义一些变量和数组以进行计算,并存储值和字符串。
int sp; int count1 = 0,count2 = 0,count3 = 0; char ch; 字符 int i = 0; 字符温度
然后编写了函数来执行整个过程。其中一些如下:
给定 void lcdcmd 函数用于向LCD发送命令
void lcdcmd(unsigned int ch){int temp = 0x80; digitalWrite(D4,temp&ch << 3); digitalWrite(D5,temp&ch << 2); digitalWrite(D6,temp&ch << 1); digitalWrite(D7,temp&ch); digitalWrite(RS,LOW); digitalWrite(EN,HIGH);……………..
给定的 空写入 功能用于将数据发送到LCD。
void write(unsigned int ch){int temp = 0x80; digitalWrite(D4,temp&ch << 3); digitalWrite(D5,temp&ch << 2); digitalWrite(D6,temp&ch << 1); digitalWrite(D7,temp&ch); digitalWrite(RS,HIGH); digitalWrite(EN,HIGH);……………..
给定 void clear() 函数用于清除LCD, void setCursor 用于设置光标位置,以及用于将字符串发送到LCD的 无效打印 。
无效clear(){lcdcmd(0x01); } void setCursor(int x,int y){int set = 0; if(y == 0)set = 128 + x; if(y == 1)设置= 192 + x; lcdcmd(set); } void print(char * str){while(* str){write(* str); str ++; }}
void begin 功能用于在4位模式下初始化LCD。
void begin(int x,int y){lcdcmd(0x02); lcdcmd(0x28); lcdcmd(0x06); lcdcmd(0x0e); lcdcmd(0x01); }
void buzzer() 和 void wait() 函数用于发出蜂鸣声并等待再次放置卡。函数 void serialbegin 用于初始化串行通信。
无效的buzzer(){digitalWrite(buzz,HIGH); 延迟(1000); digitalWrite(buzz,LOW); } void wait(){digitalWrite(led5,LOW); 延迟(3000); } void serialbegin(int baud){if(((sp = serialOpen(“ / dev / ttyS0”,baud))<0){clear(); print(“无法打开”); setCursor(0,1); 打印(“串行端口”);}}
在 void setup() 函数中,我们初始化所有的GPIO,LCD和串行UART。
void setup(){如果(wiringPiSetup()== -1){clear(); print(“无法启动”); setCursor(0,1); print(“ wiringPi”); } pinMode(led1,OUTPUT); pinMode(led2,输出);……………………
给定 void get_card() 函数用于从RFID阅读器获取数据。
在 void main() 函数中,我们在LCD上显示了一些消息,并将标签数据与预定义的数据进行了比较,以使用以下代码验证卡。
……………… if(strncmp(rfid,“ 0900711B6003”,12)== 0){count1 ++; 明确(); print(“ Attd.Registered”); setCursor(0,1); print(“ Studnet 1”); digitalWrite(led1,HIGH); 蜂鸣器(); digitalWrite(led1,LOW); 等待(); } else if(strncmp(rfid,“ 090070FE6EE9”,12)== 0){count2 ++; 明确(); print(“ Attd.Registered”); setCursor(0,1);………………
最后, void check_button() 函数用于显示按下按钮时的总出席人数。
无效check_button(){if(digitalRead(in1)== 0){digitalWrite(led5,LOW); 明确(); setCursor(0,0); print(“ std1 std2 std3”);……………..
在下面查看此Raspberry Pi考勤系统的完整代码。