RFID Access: Difference between revisions

From HeatSync Labs Wiki
Jump to navigation Jump to search
(Created page with 'Attempt at creating an RFID access control shield for Arduino, both for doors and for pieces of equipment. Todo: * piezo/led feedback * relays for door strike or possible 120v …')
 
No edit summary
Line 24: Line 24:
int bytesread = 0;  
int bytesread = 0;  
String allowed = "0F03039364";
String allowed = "0F03039364";
String allowedName = "Will Bradley";
String allowedName = "Gordon Freeman";
String strTag = "TAG ";
String strTag = "TAG ";
String strAuth = "Authorized ";
String strAuth = "Authorized ";

Revision as of 08:22, 2 February 2011

Attempt at creating an RFID access control shield for Arduino, both for doors and for pieces of equipment.

Todo:

  • piezo/led feedback
  • relays for door strike or possible 120v on/off control
  • signin/signout with timer for tracking hourly usage
  • ethernet/wifi connection to HTTP server
    • authentication using server
    • feedback to HTTP server (signins/signouts, hourly usage?)
// RFID Access Control
// By Will Bradley
// Work in progress. Currently only reads an RFID card and outputs authorized/unauthorized messages.
// Uses Parallax RFID unit on pins 2,3,4 and Adafruit 2x16 LCD on pins 7-12.

// Modified by Worapoht K.
#include <SoftwareSerial.h>
// include LCD library code:
#include <LiquidCrystal.h>

int  val = 0; 
String code = ""; 
int bytesread = 0; 
String allowed = "0F03039364";
String allowedName = "Gordon Freeman";
String strTag = "TAG ";
String strAuth = "Authorized ";
String strUnauth = "Unauthorized ";

// initialized RFID reader
#define rxPin 4  // RFID reader SOUT pin connected to Serial RX pin at 2400bps 
#define txPin 3
#define enablePin 2

// initialize LCD library with the numbers of the interface pins
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void setup()
{ 
  Serial.begin(2400);  // Hardware serial for Monitor 2400bps

  pinMode(2,OUTPUT);       // Set digital pin 2 as OUTPUT to connect it to the RFID /ENABLE pin 
  digitalWrite(2, LOW);    // Activate the RFID reader 
  
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // Print a blank message to the LCD.
  lcd.print("");
}


void loop()
{ 
  SoftwareSerial RFID = SoftwareSerial(rxPin,txPin); 
  RFID.begin(2400);

  char tempCode[10];
  
  if((val = RFID.read()) == 10)
  {   // check for header 
    bytesread = 0; 
    while(bytesread<10)
    {  // read 10 digit code 
      val = RFID.read(); 
      if((val == 10)||(val == 13))
      {  // if header or stop bytes before the 10 digit reading 
        break;                       // stop reading 
      } 
      tempCode[bytesread]
      = val;      // add the digit    

      bytesread++;                   // ready to read next digit  
    } 
    
    code.concat(tempCode);

    if(bytesread == 10)
    {  // if 10 digit read is complete 
      Serial.print(strTag.concat(code));   // possibly a good TAG 
      
      if(code.substring(0,10) == allowed) {
        lcdPrintln(strAuth, 0);
        lcdPrintln(allowedName, 1);
        Serial.println(code);
        delay(1000);
        lcdClear();
      } else {
        lcdPrintln(strUnauth, 0);
        Serial.println(code);
        delay(1000);
        lcdClear();
      }
          
    }
    
    code = "";
    bytesread = 0; 
    delay(500);                       // wait for a second
  } 
} 

void lcdPrintln(String message, int line) {
      Serial.println(message);
        
      // set the cursor to column 0, line 1
      // (note: line 1 is the second row, since counting begins with 0):
      lcd.setCursor(0, line);
      // print the number of seconds since reset:
      lcd.print(message);
} 

void lcdClear() {
     lcd.clear(); 
}