Hello, I'm relatively new to Arduino Community and Arduino projects. So I started with an RFID door lock project, which worked surprisingly well but has a flaw. Every time I scan a card with access, it works intentionally and retracts the Solenoid lock, but once it accepts the correct card, it will no longer look for the other and it will stop working. I need to reactivate the serial monitor mode again and again. I want it to work in a loop, so that even after being accepted, it will start looking for RFID cards again and continue the unlocking and locking process again.
This is what I've used in my project
- Arduino UNO
- One channel relay
- RFID Card Reader
- Buzzer
- Solenoid Lock 12v
- 12v Power Adapter
Here's the code:
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 5
#define RST_PIN 9
#define RELAY 3 //connect the relay to number 3 pin
#define BUZZER 2 // connect the buzzer to 2 pin
#define ACCESS_DELAY 2000
#define DENIED_DELAY 1000
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
void setup()
{
Serial.begin(9600); // Initiate a serial communication
SPI.begin(); // Initiate SPI bus
mfrc522.PCD_Init(); // Initiate MFRC522
pinMode(RELAY, OUTPUT);
pinMode(BUZZER, OUTPUT);
noTone(BUZZER);
digitalWrite(RELAY, HIGH);
Serial.println("Put your card to the reader for scanning ...");
Serial.println();
}
void loop()
{
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
//Show UID on serial monitor
Serial.print("UID tag :");
String content= "";
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print("Message : ");
content.toUpperCase();
if (content.substring(1) == "3D CF 58 37") // enter your own card number after copying it from serial monitor
{
Serial.println("Authorized access");
Serial.println();
delay(500);
digitalWrite(RELAY, LOW);
delay(ACCESS_DELAY);
digitalWrite(RELAY, HIGH);
delay(1);
}
else {
Serial.println(" Access denied");
tone(BUZZER, 300);
delay(DENIED_DELAY);
noTone(BUZZER);
}
}