RFID
Monday, April 18, 2011
CONCLUSIONS
Earlier, even now in educational institutions they follow the registers for taking attendance and an administration calculates the student’s attendance percentage and usually they inform attendance or any information like marks or any news to parents by letters. In which there is chance of human errors and is a hectic process.
So to reduce the burden for educational or other institutions or offices we have build this project to the best of my ability. we hope the traditional system of authentication and maintaining student database will be replaced with this system in notime. We took required measures for security but still there are some drawbacks so we are still working on it to rectify the drawbacks.
APPLIATION AND FUTURE SCOPE
The implemented attendance system with is useful for following applications
q Attendance system in educational institutions and other work places.
q Bank locker secured access.
q General frame work to implement any other RFID based applications.
q Ware houses and storage places where lot inventory movement is expected.
Advantages of the present implementation
q Low cost solution
q With little software modification extensible to any other microcontrollers.
Disadvantages:
(1) Since there is no other authentication mechanism, if some picks of some working card then he gets the full access
(2) The internal EEPROM has limited capacity so the number of events are also limited by it.
Future scope:
o A hex key pad can be interfaced to microcontroller board by which user can enter his password then only the lock can be opened. This ensures even if some one has card then also without the password he can’t get access.
o Connection to PC and development of PC side software to read from microcontroller
o Implementing the security systems with different levels by using different types of mifare cards.
o Cryptanalysis of the link between the card and reader.
o Study of other RFID techniques for better service and security.
o Interfacing the system with a GSM so that data can be transmitted through messages.
RESULTS
The following are the major achievements of the designed concept
1) RFID technology has been understood and a working model with RFID reader and tags was sussefullly designed.
2) The complete PSoC Designer tool kit has been explored
3) Interfacing of the RFID with PSoC controller kit has been established successfully.
4) The interfacing of the PSoC with the PC by using Serial protocol has been established.
The following functionalities have been achieved by the designed unit.
(1) The unit is able to read the RFID tags and the retrieve the infrotmation from the data base.
(2) It will update the information provided about in out into the data base
(3) The summary of the various transaction with different tags was logged and the logged information is presented on the console.
(4) The attendance system output is verified and it is observed that it is able to give the RTC time and date.
(5) The response of all other commands are verified and found as the protocol.
Software implementation of the compete concept
//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------
#include <m8c.h>
// part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
void delay_sec(int sec);
int card_data(char *);
char card[6][7]={"B6AAFF\0", "CD84AA\0", "BACD94\0", "FC4956\0", "F1C9DB\0", "D15466\0"};
BYTE rxBuf[8];
const BYTE txCBuf[] = { 0x00, // Slave internal sub-address 0
0x00,0x40,0x12, // Seconds and minutes in BCD
0x02, // Day of Week, Monday
0x23,0x03,0x09, // Day-Month-year 23-Mar-09
0x93 }; // Enable clock output
char s[7][4]={"SUN\0","MON\0","TUE\0","WED\0","THU\0","FRI\0","SAT\0"};
char st[2][4]={"IN1\0","OUT\0"};
void main()
{
char ch[16]="\0\0\0\0\0\0\0";
char buff[23]="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
char ch1[23];
char rd[23];
char card[7];
char * strPtr;
int i=0,j=0,sts,m=0;
int no;
BYTE bError;
WORD count=0;
BYTE status;
BYTE l,k,n;
RX8_1_CmdReset();
RX8_1_EnableInt();
RX8_1_Start(RX8_PARITY_NONE);
UART_1_Start(UART_PARITY_NONE);
M8C_EnableGInt ; // Turn on interrupts
LCD_1_Start();
E2PROM_1_Start();
I2Cm_1_Start();
PRT0DR==0x00;
UART_1_CPutString("WELCOME TO MY PROJECT");
UART_1_PutCRLF();
UART_1_CPutString("RFID ATTENDANCE SYSTEM");
UART_1_PutCRLF();
UART_1_PutCRLF();
LCD_1_Position(0,0);
LCD_1_PrCString(" WELCOME TO ");
LCD_1_Position(1,0);
LCD_1_PrCString("RFID ATTENDANCE");
delay_sec(2);
LCD_1_Control(0x01);
LCD_1_Position(0,0);
LCD_1_PrCString("Do u want set");
LCD_1_Position(1,0);
LCD_1_PrCString("Time 'Yes' r 'No'");
delay_sec(1);
LCD_1_Control(0x01);
LCD_1_Position(0,0);
LCD_1_PrCString("Press the key");
LCD_1_Position(1,0);
LCD_1_PrCString("'Yes' r 'No'");
while(PRT0DR==0x00);
if((PRT0DR & 0x01) == 0x01)
status = I2Cm_1_bWriteCBytes(0x68,txCBuf,9,I2Cm_1_CompleteXfer); // NAK the slave to signify
// In a endless loop, keep reading the time from the DS1307
LCD_1_Control(0x01);
while(1){
I2Cm_1_bWriteCBytes(0x68,txCBuf,1,I2Cm_1_NoStop );
status = I2Cm_1_fReadBytes(0x68,rxBuf,7,I2Cm_1_RepStart );
if(status == 0) {
// Flag an error condition
}
I2Cm_1_fSendStart(0x68,I2Cm_1_WRITE); // Do a write
I2Cm_1_fWrite(0x00);
I2Cm_1_fSendRepeatStart(0x68,I2Cm_1_READ); // Do a read
for(i = 0; i < 7; i++) {
rxBuf[i] = I2Cm_1_bRead(I2Cm_1_ACKslave); // Read first 6 bytes,
}
rxBuf[7] = I2Cm_1_bRead(I2Cm_1_NAKslave);
LCD_1_Position( 0,0);
for(i=3; i<7;i++) { // NAK the slave to signify
if(i==3){
k=rxBuf[i]-1;
LCD_1_PrString(s[k]);
LCD_1_PrCString(" ");
}
else{
LCD_1_PrHexByte(rxBuf[i]);
if(i==4||i==5)
LCD_1_PrCString("-");
}
}
LCD_1_Position( 1,0);
LCD_1_PrCString("TIME: ");
LCD_1_PrHexByte(rxBuf[2]);
LCD_1_PrCString(":");
LCD_1_PrHexByte(rxBuf[1]);
LCD_1_PrCString(":");
LCD_1_PrHexByte(rxBuf[0]);
delay_sec(1);
LCD_1_Control(0x01);
LCD_1_Position( 0,0);
LCD_1_PrCString("WELCOME COLLEGE");
LCD_1_Position(1,0);
LCD_1_PrCString("ATTENDENCE SYSTM");
delay_sec(2);
if(RX8_1_bCmdCheck)
if(strPtr = RX8_1_szGetParam()){
UART_1_CPutString("\r\n Reader:");
for(i=0;i<15;i++)
ch[i]= *(strPtr+i);
UART_1_PutString(ch);
UART_1_CPutString("\r\n Extract data:");
for(i=6;i<12;i++)
card[i-6]=ch[i];
UART_1_PutString(card);
UART_1_PutCRLF();
}
RX8_1_CmdReset();
delay_sec(1);
LCD_1_Control(0x01);
no=card_data(card);
if(ch[0]!='\0'){
LCD_1_Control(0x01);
if(no!=9){
LCD_1_Position(0,5);
LCD_1_PrCString("HELLO");
}
switch(no)
{
case 1: LCD_1_Position(1,0);
LCD_1_PrCString("Mr SIVA PRASAD");
UART_1_CPutString("HELLO Mr SIVA PRASAD ");
UART_1_PutCRLF();
UART_1_CPutString("STUDENT NO: 1001 ");
UART_1_PutCRLF();
break;
case 2: LCD_1_Position(1,0);
LCD_1_PrCString("Mr AMIT KUMAR");
UART_1_CPutString("HELLO Mr AMIT KUMAR");
UART_1_PutCRLF();
UART_1_CPutString("STUDENT NO: 1002 ");
UART_1_PutCRLF();
break;
case 3: LCD_1_Position(1,0);
LCD_1_PrCString("Mr RAJANEESH");
UART_1_CPutString("HELLO Mr RAJANEESH");
UART_1_PutCRLF();
UART_1_CPutString("STUDENT NO: 1003 ");
UART_1_PutCRLF();
break;
case 4: LCD_1_Position(1,2);
LCD_1_PrCString("MISS VIJAYA");
UART_1_CPutString("HELLO MISS VIJAYA");
UART_1_PutCRLF();
UART_1_CPutString("STUDENT NO: 1004 ");
UART_1_PutCRLF();
break;
case 5: LCD_1_Position(1,1);
LCD_1_PrCString("MISS SIRISHA");
UART_1_CPutString("HELLO MISS SIRISHA");
UART_1_PutCRLF();
UART_1_CPutString("STUDENT NO: 1005 ");
UART_1_PutCRLF();
break;
case 6: LCD_1_Position(1,0);
LCD_1_PrCString("MISS NAGARATHNA");
UART_1_CPutString("HELLO MISS NAGARATHNA");
UART_1_PutCRLF();
UART_1_CPutString("STUDENT NO: 1006 ");
UART_1_PutCRLF();
break;
default: LCD_1_Control(0x01);
LCD_1_Position(0,0);
LCD_1_PrCString("HELLO THIS IS");
LCD_1_Position(1,0);
LCD_1_PrCString("INVALID CARD");
break;
}
delay_sec(2);
for(i=0;i<23;i++)
ch1[i]='\0';
if(no>0 && no<=9){
LCD_1_Control(0x01);
LCD_1_Position(0,0);
LCD_1_PrCString("NOW PRESS THE");
LCD_1_Position(1,0);
LCD_1_PrCString(" IN OUT QUIT ");
while(PRT0DR==0x00);
LCD_1_Control(0x01);
if((PRT0DR & 0x01) == 0x01)
sts=1;
else if((PRT0DR & 0x02) == 0x02)
sts=0;
else if((PRT0DR & 0x04) == 0x04)
sts=2;
if(sts==1){
LCD_1_Position(0,0);
LCD_1_PrCString("GOOD MORNING");
LCD_1_Position(1,0);
LCD_1_PrCString("NOW YOU ARE IN");
}
else if(sts==0){
LCD_1_Position(0,0);
LCD_1_PrCString("NOW YOU ARE OUT");
LCD_1_Position(1,0);
LCD_1_PrCString("GOOD NIGHT BYE");
}
else if(sts==2){
LCD_1_Position(0,0);
LCD_1_PrCString("NOW YOU ARE QUIT");
LCD_1_Position(1,2);
LCD_1_PrCString("GOOD BYE");
UART_1_PutCRLF();
}
}
delay_sec(2);
if(sts!=2){
for(i=0;i<6;i++)
ch1[i]=card[i];
for(i=0;i<3;i++){
if(sts==1)
ch1[i+6]=st[0][i];
else if(sts==0)
ch1[i+6]=st[1][i];
}
m=9;
status = I2Cm_1_fReadBytes(0x68,rxBuf,7,I2Cm_1_RepStart );
if(status == 0) {
}
I2Cm_1_fSendStart(0x68,I2Cm_1_WRITE);
I2Cm_1_fWrite(0x00);
I2Cm_1_fSendRepeatStart(0x68,I2Cm_1_READ);
for(i = 0; i < 7; i++) {
rxBuf[i] = I2Cm_1_bRead(I2Cm_1_ACKslave);
ch1[m] = (rxBuf[i]/16)+48;
m++;
ch1[m] =(rxBuf[i]%16)+48;
m++;
}
rxBuf[7] = I2Cm_1_bRead(I2Cm_1_NAKslave);
LCD_1_Control(0x01);
bError = E2PROM_1_bE2Write(count,ch1,23,25);
if(no!=0)
if ( bError == E2PROM_1_NOERROR ) {
if(sts==1)
UART_1_CPutString("ENTER TIME :");
else if(sts==0)
UART_1_CPutString("EXIT TIME :");
UART_1_PutChar(ch1[13]);
UART_1_PutChar(ch1[14]);
UART_1_CPutString(":");
UART_1_PutChar(ch1[11]);
UART_1_PutChar(ch1[12]);
UART_1_CPutString(":");
UART_1_PutChar(ch1[9]);
UART_1_PutChar(ch1[10]);
UART_1_CPutString(" ");
UART_1_PutChar(ch1[15]);
UART_1_PutChar(ch1[16]);
UART_1_CPutString(" ");
UART_1_PutChar(ch1[17]);
UART_1_PutChar(ch1[18]);
UART_1_CPutString("-");
UART_1_PutChar(ch1[19]);
UART_1_PutChar(ch1[20]);
UART_1_CPutString("-");
UART_1_PutChar(ch1[21]);
UART_1_PutChar(ch1[22]);
UART_1_PutCRLF();
UART_1_PutCRLF();
LCD_1_Position(0,0);
if(sts==1)
LCD_1_PrCString("YOUR ENTER TIME");
else if(sts==0)
LCD_1_PrCString("YOUR EXIT TIME");
LCD_1_Position(1,4);
LCD_1_WriteData(ch1[13]);
LCD_1_WriteData(ch1[14]);
LCD_1_PrCString(":");
LCD_1_WriteData(ch1[11]);
LCD_1_WriteData(ch1[12]);
LCD_1_PrCString(":");
LCD_1_WriteData(ch1[9]);
LCD_1_WriteData(ch1[10]);
count=count+23;
}
else {
UART_1_PutCRLF();
UART_1_CPutString("DATA NOT STORED IN EEPROM");
UART_1_PutCRLF();
}
delay_sec(2);
}
if(count>=115){
for(count=0;count<115;count++){
UART_1_CPutString("STUDENT details:");
E2PROM_1_E2Read(count, rd, 23);
UART_1_PutString(rd);
UART_1_PutCRLF();
count=count+22;
//E2PROM_1_bE2Write(count,buff,23,25);
for(i=0;i<=23;i++)
rd[i]='\0';
}
count=0;
}
}
for(i=0;i<8;i++)
ch[i]='\0';
for(i=0;i<6;i++)
card[i]='\0';
LCD_1_Control(0x01);
LCD_1_Position(0,0);
LCD_1_PrCString("NOW PLEASE SHOW");
LCD_1_Position(1,3);
LCD_1_PrCString("YOUR CARD");
delay_sec(2);
LCD_1_Control(0x01);
LCD_1_Position(0,0);
}
delay_sec(1);
}
int card_data(char ch[]){
int i=0,j=0;
while(j<9){
while(ch[i]==card[j][i]&&ch[i]!='\0'&&card[j][i]!='\0')
i++;
if(ch[i]=='\0'&&card[j][i]=='\0')
return(j+1);
i=0;
j++;
}
return(0);
}
void delay_sec(int sec)
{
int i,j,secd;
for (secd=0;secd<=sec;secd++)
for(i=0;i<=2;i++)
for (j= 0;j<=20480;j++)
{
}
}
Subscribe to:
Posts (Atom)