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 VCC
5V
connected to Voice Recognition Module VCC
and KF-301 Relay power
GND
connected to the cathodes of both LEDs, Fingerprint Scanner GND
, Buzzer NEGATIVE
, and KF-301 Relay ground
D9
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 POSITIVE
D6
connected to KF-301 Relay signal
D5
connected to Voice Recognition Module RDX
D4
connected to Voice Recognition Module RTX
D1
connected to Fingerprint Scanner RX
D0
connected to Fingerprint Scanner TX
VCC
connected to Arduino UNO 3.3V
TX
connected to Arduino UNO D0
RX
connected to Arduino UNO D1
GND
connected to Arduino UNO GND
GND
connected to Arduino UNO GND
VCC
connected to Arduino UNO 5V
RDX
connected to Arduino UNO D5
RTX
connected to Arduino UNO D4
signal
connected to Arduino UNO D6
power
connected to Arduino UNO 5V
ground
connected to Arduino UNO GND
NC
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 D7
NEGATIVE
connected to Arduino UNO GND
cathode
connected to Arduino UNO GND
anode
connected to Arduino UNO D8
through a 200 Ohm resistorcathode
connected to Arduino UNO GND
anode
connected to Arduino UNO D9
through a 200 Ohm resistor+
connected to 12V Solenoid Lock +
-
connected to KF-301 Relay NO
D9
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