Cirkit Designer LogoCirkit DesignerYour all-in-one circuit design IDE Launch Cirkit Designer App

Arduino UNO-Based Biometric and Voice-Controlled Security System

View and Edit Project In Cirkit DesignerImage of Arduino UNO-Based Biometric and Voice-Controlled Security System

Circuit Documentation

Summary

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.

Component List

Arduino UNO

Fingerprint Scanner

Voice Recognition Module

KF-301 Relay

12V Solenoid Lock

Buzzer

LED: Two Pin (red)

LED: Two Pin (green)

12V Power Supply

Resistor (200 Ohms)

Wiring Details

Arduino UNO

Fingerprint Scanner

Voice Recognition Module

KF-301 Relay

12V Solenoid Lock

Buzzer

LED: Two Pin (red)

LED: Two Pin (green)

12V Power Supply

Resistor (200 Ohms)

Documented Code

#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;