

This circuit is designed to control access using a combination of a fingerprint scanner and a voice recognition module. The main controller is an Arduino UNO, which interfaces with the fingerprint scanner for biometric authentication and a voice recognition module for voice command recognition. Upon successful authentication, the Arduino controls a relay that operates a 12V solenoid lock. Additionally, the circuit includes visual indicators (LEDs) and an audible indicator (buzzer) to signal the system's status.
3.3V connected to Fingerprint Scanner VCC5V connected to Voice Recognition Module VCC and KF-301 Relay powerGND connected to the cathodes of both LEDs, Fingerprint Scanner GND, Buzzer NEGATIVE, and KF-301 Relay groundD9 connected to the anode of the green LED through a 200 Ohm resistorD8 connected to the anode of the red LED through a 200 Ohm resistorD7 connected to Buzzer POSITIVED6 connected to KF-301 Relay signalD5 connected to Voice Recognition Module RDXD4 connected to Voice Recognition Module RTXD1 connected to Fingerprint Scanner RXD0 connected to Fingerprint Scanner TXVCC connected to Arduino UNO 3.3VTX connected to Arduino UNO D0RX connected to Arduino UNO D1GND connected to Arduino UNO GNDGND connected to Arduino UNO GNDVCC connected to Arduino UNO 5VRDX connected to Arduino UNO D5RTX connected to Arduino UNO D4signal connected to Arduino UNO D6power connected to Arduino UNO 5Vground connected to Arduino UNO GNDNC not connectedC connected to 12V Solenoid Lock -NO connected to 12V Power Supply -- connected to KF-301 Relay C+ connected to 12V Power Supply +POSITIVE connected to Arduino UNO D7NEGATIVE connected to Arduino UNO GNDcathode connected to Arduino UNO GNDanode connected to Arduino UNO D8 through a 200 Ohm resistorcathode connected to Arduino UNO GNDanode connected to Arduino UNO D9 through a 200 Ohm resistor+ connected to 12V Solenoid Lock +- connected to KF-301 Relay NOD9 and the anode of the green LEDD8 and the anode of the red LED#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;
unlock();
beep(1); // Beep once for both authentications
}
}
// If 20 seconds pass without valid voice input, lockout
if (millis() - unlockStartTime > 20000) {
lockout();
}
}
// Check if solenoid should be closed
if (accessGranted