

The circuit in question is designed to control access through a 12V Solenoid Lock, which is managed by an Arduino UNO microcontroller. The system uses a Fingerprint Scanner and a Voice Recognition Module as authentication methods. Upon successful authentication, the lock can be opened for a predetermined duration. The circuit also includes visual indicators (LEDs) and an audible indicator (Buzzer) to provide status feedback.
3.3V to Fingerprint Scanner VCC5V to Voice Recognition Module VCC and KF-301 Relay powerGND to Red LED cathode, Fingerprint Scanner GND, Green LED cathode, Voice Recognition Module GND, Buzzer NEGATIVE, and KF-301 Relay groundD9 to Resistor (connected to Red LED anode)D8 to Resistor (connected to Green LED anode)D7 to Buzzer POSITIVED6 to KF-301 Relay signalD5 to Voice Recognition Module RDXD4 to Voice Recognition Module RTXD1 to Fingerprint Scanner RXD0 to Fingerprint Scanner TXVCC to Arduino UNO 3.3VTX to Arduino UNO D0RX to Arduino UNO D1GND to Arduino UNO GNDVCC to Arduino UNO 5VRDX to Arduino UNO D5RTX to Arduino UNO D4GND to Arduino UNO GNDsignal to Arduino UNO D6power to Arduino UNO 5Vground to Arduino UNO GNDC to 12V Solenoid Lock -NO to 12V Power Supply -+ to 12V Power Supply +- to KF-301 Relay CPOSITIVE to Arduino UNO D7NEGATIVE to Arduino UNO GNDanode through a 200 Ohm Resistor to Arduino UNO D9cathode to Arduino UNO GNDanode through a 200 Ohm Resistor to Arduino UNO D8cathode to Arduino UNO GND+ to 12V Solenoid Lock +- to KF-301 Relay NOD9 and Red LED anodeD8 and Green LED anode#include <Adafruit_Fingerprint.h>
#include <VoiceRecognitionV3.h>
// Define pins
#define VOICE_RX_PIN 4
#define VOICE_TX_PIN 5
#define RELAY_PIN 6 // Define relay control pin
#define BUZZER_PIN 7 // Define buzzer pin
#define RED_LED_PIN 8 // Define red LED pin
#define GREEN_LED_PIN 9 // Define green LED pin
// Hardware serial for fingerprint sensor (pins 0 and 1)
#define fingerprintSerial Serial
// Create instances
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&fingerprintSerial);
VR myVR(VOICE_RX_PIN, VOICE_TX_PIN); // Voice recognition instance
// Variables
bool fingerprintAuthenticated = false;
bool voiceAuthenticated = false;
bool accessGranted = false;
unsigned long unlockStartTime = 0;
const unsigned long unlockDuration = 10000; // 10 seconds unlock duration
const unsigned long lockoutDuration = 120000; // 120 seconds lockout duration
unsigned long lockoutStartTime = 0;
bool inLockout = false;
void setup() {
// Initialize serial communication
Serial.begin(9600);
delay(100);
// Initialize relay
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // Ensure relay is off initially (active low)
// Initialize buzzer
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(BUZZER_PIN, LOW); // Buzzer off initially
// Initialize LEDs
pinMode(RED_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
digitalWrite(RED_LED_PIN, HIGH); // Red LED on as power indicator
digitalWrite(GREEN_LED_PIN, LOW); // Green LED off initially
// Initialize fingerprint sensor using hardware serial
fingerprintSerial.begin(57600);
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1) {
delay(1);
}
}
finger.getTemplateCount();
Serial.print("Sensor contains ");
Serial.print(finger.templateCount);
Serial.println(" templates");
// Initialize voice recognition module
myVR.begin(9600); // Initialize SoftwareSerial for VR module
// Load voice commands: 0-5
for (uint8_t i = 0; i <= 5; i++) {
if (myVR.load(i) >= 0) { // Load each command
Serial.print("Command '");
Serial.print(i);
Serial.println("' loaded.");
} else {
Serial.print("Failed to load command '");
Serial.print(i);
Serial.println("'.");
}
}
Serial.println("Waiting for valid finger...");
}
void loop() {
// Handle lockout state
if (inLockout) {
if (millis() - lockoutStartTime >= lockoutDuration) {
inLockout = false;
Serial.println("Lockout period ended.");
} else {
return; // Stay in lockout
}
}
// Check fingerprint authentication
if (!fingerprintAuthenticated && !inLockout) {
int fingerID = getFingerprintIDez();
if (fingerID >= 0 && fingerID <= 6) {
fingerprintAuthenticated = true;
digitalWrite(GREEN_LED_PIN, HIGH); // Green LED on after fingerprint recognition
Serial.println("Fingerprint authenticated. Please provide voice command.");
delay(2000); // Hold green LED on for 2 seconds
digitalWrite(GREEN_LED_PIN, LOW); // Turn off green LED after 2 seconds
unlockStartTime = millis(); // Record time of fingerprint authentication for voice input timing
}
}
// Check voice authentication if fingerprint is authenticated
if (fingerprintAuthenticated && !voiceAuthenticated && !inLockout) {
uint8_t buf[64];
int ret = myVR.recognize(buf, 50);
if (ret > 0) {
if (buf[1] >= 0 && buf[1] <= 5) { // Command IDs 0-5
voiceAuthenticated = true;