Tư vấn: 0979.466.469 / 0938.128.290

MENU

Hệ thống chấm công RFID

Gia cong pcb 600*150px

HỆ THỐNG CHẤM CÔNG RFID

 

Hệ thống chấm công RFID là một đề tài rất thú vị, có thể được sử dụng ở những nơi khác nhau, như trong các trường học, các tổ chức, các công ty nhằm mục đích kiểm soát theo dõi nhân viên hay tự động tính lương và các loại ứng dụng tương tự khác.

Hệ thống chấm công RFID có thể được thiết kế bằng cách sử dụng các loại vi điều khiển khác nhau, như bộ điều khiển 8051, AVR, PIC hoặc ARM. Hệ thống chấm công RFID tương tự cũng có thể được phát triển bằng cách sử dụng trên các loại vi điều khiển phổ biến như Arduino, Raspberry Pi, v.v.

Việc lựa chọn một vi điều khiển hay mạch thiết kế hoàn toàn dựa trên các tính năng bổ sung mà bạn dự định kết hợp vào hệ thống. Ví dụ: - Nếu bạn muốn xuất tất cả dữ liệu đã đăng ký trong hệ thống lên web hosting vào cuối mỗi tuần thì không nên sử dụng bộ điều khiển 8051. Nó sẽ hiệu quả hơn khi sử dụng bộ điều khiển AVR Atmega. Nếu bạn muốn thiết kế theo sở thích, hệ thống này có thể được thiết kế dễ dàng bằng Arduino.

 

Hệ thống chấm công RFID sử dụng Arduino

Trong bài này, chúng ta sẽ xây dựng hệ thống chấm công RFID bằng Arduino. Chúng ta lưu trữ một kho dữ liệu thẻ RFID trong hệ thống, Khi người có thẻ RFID phù hợp (tương thích với dữ liệu được tải sẵn trong chương trình / hệ thống) đến và quẹt thẻ RFID, thời gian đến của anh ta sẽ được lưu trữ trên hệ thống. Khi quẹt thẻ RFID của mình một lần nữa, hệ thống sẽ lưu nó lại và từ đó tính ra tổng số giờ làm việc của anh ấy.

Chú ý: Trước khi bắt đầu, bạn cần phải hiểu rõ cách kết nối giữa RFID và ARDUINO .

 

Chức năng của mạch

  • Hiển thị thời gian và ngày hiện tại trên màn hình LCD kết hợp với các nút nhấn.

  • Lưu chi tiết thời gian đến và đi của người dùng trong EEPROM của arduino.

  • Tính toán và lưu trữ tổng số giờ làm việc của mỗi người và cung cấp các tùy chọn trong menu để truy xuất nó.

  • Cung cấp tùy chọn để xóa dữ liệu mà quản trị viên chỉ có thể truy cập bằng ID của mình.

 

Sơ đồ mạch

 

 

Mô tả

Sơ đồ mạch kết nối RFID với Arduino được hiển thị ở trên. Mã ID của thẻ RFID được đọc bởi mạch và tên của người tương ứng sẽ được hiển thị trên màn hình LCD 20 x 4. Chân TX của RFID được nối với chân 0 (RX) của arduino. Arduino nhận dữ liệu từ RFID thông qua kênh này.

Nút 1,2,3,4 được sử dụng để chọn chế độ trong menu. Các chân của arduino nối với các nút nhấn này được cấu hình “INPUT_PULLUP” trong chương trình. Nghĩa là chúng ta sẽ thay việc sử dụng điện trở kéo lên bên ngoài bằng kéo lên bên trong của Arduino. Một còi và hai LED cũng được kết nối với chân thứ 5,4,3 tương ứng của Arduino. Còi sẽ phát khi nhận được mã ID của người quẹt thẻ.

Hệ thống này sử dụng màn hình LCD 20 x 4 để hiển thị. Hoạt động và giao tiếp của mô-đun LCD 20 × 4 tương tự như mô-đun LCD 16 x2 . Nó bao gồm 4 hàng và 20 cột. Module RTC được sử dụng ở đây là IC DS1307 . Module RTC được kết nối với Arduino bằng giao thức I2C. Các chân SCL và SDA được sử dụng để thiết lập giao tiếp I2C.

 

Chương trình

#include

#include

#include "Wire.h"

#define I2C_ADDRESS 0x68

LiquidCrystal lcd(8,9,10,11,12,13);

#define SW1 A0

#define SW2 A1

#define SW3 A2

#define SW4 A3

int buzzer=1,red_led=5,green_led=4;

char* rfid_id[]={"0200106AF088","0200106B5029","18003D312034","14000AD871B7","12008CE0E997","02001047EABF","0200108156C5","0200108040D2","18003D858929","020010811182"};

char* names[]={"JUSTIN","JITHIN","EDWIN","STANLY","JOJO","SHONE","REJINDRAN","PRAVEEN","CHARLES","JOHN"};

int presence[10];

 

long pm=0;

int i=0,j=0, presentNum=0;

 

int decToBcd(int val){

return( (val/10*16) + (val%10) );

}

 

int bcdToDec(int val){

return( (val/16*10) + (val%16) );

}

 

int second, minute, hour, dayOfWeek, dayOfMonth, month, year;

int S=0, M=0, H=0,DOW=0, DOM=0, MONTH=0, YEAR=0;

int Min=0, Hour=0, totMin=0,totHour=0;

 

void setup() {

 

Wire.begin();

Serial.begin(9600);

lcd.begin(20,4);

lcd.clear();

// setTime(00,30,10,6,5,9,17);

 

pinMode(buzzer,OUTPUT);

pinMode(red_led,OUTPUT);

pinMode(green_led,OUTPUT);

pinMode(SW1,INPUT_PULLUP);

pinMode(SW2,INPUT_PULLUP);

pinMode(SW3,INPUT_PULLUP);

pinMode(SW4,INPUT_PULLUP);

 

presentNum=EEPROM.read(1000);

for(i=0;i<10;i++)

presence[i]=EEPROM.read(i);

 

}

void setTime(int second, int minute, int hour, int dayOfWeek, int dayOfMonth, int month, int year){

 

Wire.beginTransmission(I2C_ADDRESS);

Wire.write(0);

Wire.write(decToBcd(second));

Wire.write(decToBcd(minute));

Wire.write(decToBcd(hour));

Wire.write(decToBcd(dayOfWeek));

Wire.write(decToBcd(dayOfMonth));

Wire.write(decToBcd(month));

Wire.write(decToBcd(year));

Wire.endTransmission();

}

void readTime(int *second,int *minute,int *hour,int *dayOfWeek,int *dayOfMonth,int *month,int *year){

 

Wire.beginTransmission(I2C_ADDRESS);Wire.write(0);

Wire.endTransmission();Wire.requestFrom(I2C_ADDRESS, 7);

 

*second = bcdToDec(Wire.read() & 0x7f);

*minute = bcdToDec(Wire.read());

*hour = bcdToDec(Wire.read() & 0x3f);

*dayOfWeek = bcdToDec(Wire.read());

*dayOfMonth = bcdToDec(Wire.read());

*month = bcdToDec(Wire.read());

*year = bcdToDec(Wire.read());

}

void displayTime(){

 

int HOUR;

 

readTime(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,&year);

if(hour>12)

HOUR=hour-12;

else

HOUR=hour;

if(j<2){lcd.clear();j++;}

 

lcd.setCursor(1,0);

if (HOUR<10)

lcd.print("0");

 

lcd.print(HOUR);lcd.print(":");

 

if (minute<10)

lcd.print("0");

lcd.print(minute);

lcd.print(":");

 

if (second<10)

lcd.print("0");

lcd.print(second);

 

lcd.setCursor(4,1);

if(hour>12)

lcd.print("PM");

else

lcd.print("AM");

 

lcd.setCursor(12,0);

if (dayOfMonth<10)

lcd.print("0");

lcd.print(dayOfMonth);

lcd.print("/");

if (month<10)

lcd.print("0");

lcd.print(month);

lcd.print("/");

lcd.print(year);

lcd.print(" ");

Quảng cáo đặt hàng nhập

lcd.setCursor(11,1);

 

switch(dayOfWeek){

case 1: lcd.print(" Sunday ");break;

case 2: lcd.print(" Monday ");break;

case 3: lcd.print(" Tuesday ");break;

case 4: lcd.print("Wednesday ");break;

case 5: lcd.print(" Thursday ");break;

case 6: lcd.print(" Friday ");break;

case 7: lcd.print(" Saturday ");break;}

 

}

 

void conTime(int a, int b, int c )

{

 

int Hr;

int h, m, s;

h=EEPROM.read(a);

m=EEPROM.read(b);

s=EEPROM.read(c);

 

if(h>12)

Hr=h-12;

else

Hr=h;

lcd.print(" ");

if (Hr<10)

lcd.print("0");

 

lcd.print(Hr);lcd.print(":");

 

if (m<10)

lcd.print("0");

lcd.print(m);

lcd.print(":");

 

if (s<10)

lcd.print("0");

lcd.print(s);

 

if(h>12)

lcd.print(" PM");

else

lcd.print(" AM");

 

}

 

 

void loop()

{

int i;

char response[12];

int ch;

 

top:

 

if(hour==8 && minute==30 && second==0){

lcd.clear();

lcd.setCursor(2,0);

lcd.print(" Clearing");

lcd.setCursor(2,1);

lcd.print("Yesterday's data");

 

for(i=0;i<10;i++){

lcd.setCursor(4,3);

lcd.print(" ");

delay(1000);

lcd.setCursor(4,3);

lcd.print("Please Wait");

delay(1000);}

lcd.clear();

lcd.setCursor(7,1);

lcd.print("CLEARED");

delay(1000);

EEPROM.write(1000,0);

for(i=0;i<500;i++)

EEPROM.write(i,0);

 

presentNum=EEPROM.read(1000);

for(i=0;i<10;i++)

presence[i]=EEPROM.read(i);

j=0;

}

 

displayTime();

 

lcd.setCursor(0,3);

lcd.print(" Press 1 for menu ");

 

if(digitalRead(SW1)==0)

{

lcd.clear();lcd.setCursor(0,0);lcd.print(" 1. View attendance ");

lcd.setCursor(0, 1); lcd.print(" 2. View all");

lcd.setCursor(0, 2); lcd.print(" 3. Clear all");

lcd.setCursor(0, 3); lcd.print(" 4. Go Back");

delay(500);

while(digitalRead(SW1)==HIGH && digitalRead(SW2)==HIGH && digitalRead(SW3)==HIGH && digitalRead(SW4)==HIGH);

 

if(digitalRead(SW1)== LOW)//View attendance

{

top1:lcd.clear(); lcd.setCursor(0,0); lcd.print("Total staffs - "); lcd.print(10);

presentNum=EEPROM.read(1000);

lcd.setCursor(0,1); lcd.print("Staffs present - "); lcd.print(presentNum);

lcd.setCursor(0,3); lcd.print("1.Detials");

lcd.setCursor(11,3); lcd.print("4.Go Back");

delay(500);

while(digitalRead(SW1)==HIGH && digitalRead(SW4)==HIGH);

 

if(digitalRead(SW4)==LOW){

lcd.clear(); goto top;}

 

if(digitalRead(SW1)==LOW){

delay(500);

for(i=0;i<10;i++)

presence[i]=EEPROM.read(i);

 

if(presentNum==0){

lcd.clear();

lcd.setCursor(2,1);

lcd.print("No One Is Present");

delay(2000);

}

lcd.clear();

if(presence[0]==1 || presence[0]==2)

{

lcd.clear();

lcd.setCursor(7,0);

lcd.print(names[0]);

 

lcd.setCursor(0,1);

lcd.print("Arrive -");

conTime(300,301,302);

lcd.setCursor(0,2);

lcd.print("Depart -");

if(presence[0]==2)

conTime(303,304,305);

lcd.setCursor(0,3);

lcd.print("1.Next");

lcd.setCursor(11,3);

lcd.print("4.Go Back");

delay(500);

while(digitalRead(SW1)==HIGH && digitalRead(SW4)==HIGH);

 

 

Gia công pcb 932*150
Sản phẩm nổi bật
Sale 0%
51000 /Cái
/ Cái

Code: 3573-111 Liên hệ

Lưu xem sau
Sale 20%
128000 - 160000 /Cái
160000 / Cái

Code: M-3002-040 Còn hàng

Lưu xem sau
Sale 0%
242000 /Bịch
/ Bịch

Code: M-1021-001 Liên hệ

Lưu xem sau
Sale 0%
220000 /Cái
/ Cái

Code: M-10001-053 Còn hàng

Lưu xem sau
Hỗ trợ liên kết
0979466469
0899909838
0938128290
0899909838
Khiếu nại: 0964238397
0979466469
0868565469
0868565469

Hotline: 0979 466 469

Loading
0979 466 469
Bạn cần linh kiện mẫu ? 7-11 ngày