Introduction: Arduino RFID Lock Box
Hi, today I will be showing you how to make a RFID Lock box.
Step 1: Preperation
You will need
1x wooden box - http://www.amazon.com/Darice-9151-58-Rectangle-Woo...
1x Parallax READ-ONLY RFID scanner - http://www.parallax.com/product/28140
1x Arduino Uno - http://store.arduino.cc/product/A000066
1x Mini Hobby Servo - http://www.amazon.com/TowerPro-SG90-Mini-Servo-Ac...
1x RGB LED - https://www.sparkfun.com/products/105
1x Battery box (five double a's)
Also you will need a Dremel
Step 2: Wiring the Electronics
Place your components like this:
RFID SOUT goes to Arduino RX
RFID EN goes to Arduino D2
RFID +5 goes to Arduino Power
RFID GND goes to Arduino GND
Servo Signal goes to Arduino D9
Servo PWR goes to Arduino Power
Servo GND goes to Arduino GND
LED Blue goes to Arduino D6
LED Red goes to Arduino D5
LED Green goes to Arduino D4
LED GND goes to Arduino GND
Step 3: Program!
Programming time...
Upload this code to your Arduino:
String Master = "A9001513FF"; //MASTER CARD TAG #
//Constants #include #define NumberOfKeys 10 //This defines the amount of keys in the access list #define WAIT_TIME 4000 //Time door will remain open #define BLINKS 2 //The amount of times the indicators blink when blinking is required #define ON_TIME 4000//time in milliseconds the relay stays energized
//External Equipment #define ENABLE 2 //Pin connected to the Enable pin of RFID #define LOCK 9 Servo my; int stat = 0; //Pin that is connected to NPN transistor that energizes lock
//LED Indicators #define OPEN_LIGHT 4 //LED indicator. Indicates the correct key was entered #define DENIED_LIGHT 5 //LED indicator. Indicates the wrong key was entered #define PROGRAMMING_LIGHT 6 //LED indicator. Indicates Programming mode is activated
int val = 0; int bytesread = 0; //Stores the master key used for programming the other keys String empty = "0000000000"; String keyCode; String accessList[NumberOfKeys]; char code[10]; boolean programmingMode,isInAccessList,KeyFound = false;
void setup() { my.attach(9); pinMode(OPEN_LIGHT,OUTPUT); pinMode(DENIED_LIGHT,OUTPUT); pinMode(PROGRAMMING_LIGHT,OUTPUT);
//Generates an array of size corresponding to the size of the access list for(int i = 0;i
Serial.begin(2400); // RFID reader SOUT pin connected to Serial RX pin at 2400bps
digitalWrite(OPEN_LIGHT,LOW); digitalWrite(DENIED_LIGHT,LOW); digitalWrite(PROGRAMMING_LIGHT,LOW); digitalWrite(ENABLE, LOW); // LOW Activates the RFID reader, HIGH deactivates it
}
void loop() { /**** EXTRACTION OF DATA FROM CARD ****/ if(Serial.available() > 0) { // if data available from reader if((val = Serial.read()) == 10) { // check for header [Header of data = 10] bytesread = 0; while(bytesread<10) { // read 10 digit code if( Serial.available() > 0) { val = Serial.read(); if((val == 10)||(val == 13)) { // if header or stop bytes before the 10 digit reading break; // stop reading } code[bytesread] = val; // add the digit bytesread++; // ready to read next digit } } if(bytesread == 10) { // if 10 digit read is complete digitalWrite(ENABLE, HIGH); // deactivate the RFID reader for a moment so it will not flood keyCode = code; keyCode = keyCode.substring(0,10); /*** INTERPRETATION OF DATA ***/ //At this point, data was read, and there is a keycode in the keyCode variable if((keyCode == Master) && (programmingMode == false)) {programmingMode = true; digitalWrite(PROGRAMMING_LIGHT,HIGH); } else {if(programmingMode == false) { for(int i = 0;i
} } }
/*** CLEARS DATA FROM BUFFERS TO AVOID DOUBLE READS***/ void flushBuffers(){ while(Serial.available() > 0) //if there is still data remaining in the RFID reader buffer Serial.read(); //read it into arduino buffer Serial.flush(); //then flush it }
/*** RESETTING INDICATORS ***/ void resetIndicators(){ delay(WAIT_TIME); //wait a little flushBuffers(); //clear buffers //return everything to starting position digitalWrite(OPEN_LIGHT,LOW); digitalWrite(DENIED_LIGHT,LOW); digitalWrite(ENABLE,LOW); }
/*** BEHAVIOR OF LED INDICATORS IF A KEY IN THE ACCESS LIST IS SWIPPED ***/ void accessGranted(){ digitalWrite(OPEN_LIGHT,HIGH); my.write(140);//Sends 5V to transistor to energize door lock } /*** BEHAVIOR OF LED INDICATORS IF A KEY THAT'S NOT IN THE ACCESS LIST IS SWIPPED ***/ void accessDenied(){ digitalWrite(DENIED_LIGHT,HIGH); my.write(10); }
/*** BEHAVIOR OF LED INDICATORS IF A NEW KEY IS ENTERED IN THE ACCESS LIST ***/ void newKeyEntered(){ for(int i = 0; i
/*** BEHAVIOR OF LED INDICATORS IF A KEY IS DELETED FROM ACCESS LIST ***/ void keyDeleted(){ for(int i = 0; i
/*** BEHAVIOR OF LED INDICATORS IF ACCESS LIST IS FULL ***/ void listFull(){ for(int i = 0; i
Step 4: Tape It All Together.
Tape it together with duct-tape.
Step 5: Finished!
You are now a proud owner of a DIYArduinoRFIDLock