Version 0 1
This version uses a hardware switch to activate, and a random number generator to emulate RFID Tags with wrong and right codes.
UPDATE: New code with password and menu system in its infancy.
Hardware
Picture of 0-1 hardware can be seen here
Behaviour
When the Arduino detects a high input on pin 2 (rfidIn - see #Code), a random number is generated between 0 and 100. If this number is less than or equal to 50, then the Arduino assumes this is a valid card and opens the lock (an LED in this case) and turns on the green LED for 3 seconds. If this number is more than 50, then the Arduino assumes this is an invalid card and just turns on the red LED for 3 seconds.
Serial Output
This is a sample serial output from the Arduino
Serial Connection Innitiated
Welcome to HACMan Security
----------------------------
Access Denied
Number:51
Access Granted
Number:49
Access Granted
Number:5
Access Denied
Number:72
Access Denied
Number:76
Code
/* RFID Door Control
by Thomas Bloor - aka. TBSliver
Version: 0-11
This version has only a very basic functionality
which is done using LED's, a hardware switch, and
a random number generator.
This version also includes extras for the serial menu.
*/
char menuInput[36];
int redPin = 5;
int yellowPin = 4;
int greenPin = 3;
int lockPin = 6;
int rfidIn = 2;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(yellowPin, OUTPUT);
pinMode(greenPin,OUTPUT);
pinMode(lockPin, OUTPUT);
pinMode(rfidIn, INPUT); //change to serial input for RFID reader
Serial.begin(9600); //Serial output to comp at 9600bps
Serial.println("Serial Connection Innitiated");
Serial.println("Welcome to HACMan Security");
Serial.println("Please type menu to enter the menu");
Serial.println("----------------------------");
randomSeed(analogRead(0));
//startup LED pattern
digitalWrite(redPin, HIGH);
digitalWrite(yellowPin, HIGH);
digitalWrite(greenPin, HIGH);
delay(500);
digitalWrite(redPin, LOW);
digitalWrite(yellowPin, LOW);
digitalWrite(greenPin, LOW);
delay(250);
digitalWrite(yellowPin, HIGH);
}
void loop() {
int val=0,randNumber=0;
val = digitalRead(rfidIn); //will be replaced with serial in
if(val==1){
delay(500); //debounce
randNumber = random(100); //only to get a non-unlock element
if(randNumber<=50){ //insert search pattern here
Serial.println("Access Granted");
Serial.print("Number:");
Serial.println(randNumber);
Serial.println("");
digitalWrite(greenPin, HIGH);
digitalWrite(lockPin, HIGH);
delay(3000);
digitalWrite(greenPin, LOW);
digitalWrite(lockPin, LOW);
}
else{
Serial.println("Access Denied");
Serial.print("Number: ");
Serial.println(randNumber);
Serial.println("");
digitalWrite(redPin, HIGH);
delay(3000);
digitalWrite(redPin, LOW);
}
}
if(readSerial()==1){
if(!strcmp(menuInput, "menu")){
digitalWrite(redPin, HIGH);
digitalWrite(greenPin, HIGH);
menu();
digitalWrite(redPin, LOW);
digitalWrite(greenPin, LOW);
}
else {
Serial.println("Did not understand command.");
Serial.print("You entered: ");
Serial.println(menuInput);
Serial.println("type in menu to get to the menu");
Serial.println("");
}
}
}
void menu(){
boolean exit = 0,pass = 0;
int tries=3;
Serial.println("Welcome to the Menu System");
Serial.println("\r\nPlease enter password to continue");
while(pass==0 && tries > 0){
if(readSerial()==1){
if(!strcmp(menuInput, "pass")){
pass = 1;
Serial.println("Password correct");
}
else {
Serial.print("Password incorrect, ");
Serial.print(tries);
Serial.println(" attempts left");
tries--;
}
}
}
if(tries==0){
Serial.println("All attempts used, exiting menu");
}
}
int readSerial(){
int i=0,serialNo=0;
if(Serial.available() > 0) {
delay(100);
serialNo = Serial.available();
for(i=0; i<serialNo; i++) {
menuInput[i] = Serial.read();
}
menuInput[serialNo] = '\0';
return 1;
}
else {
return 0;
}
}
Last update:
August 22, 2020