Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Arduino
150
Share

بناء قفل الكترونى لفتح الباب ببصمة الأصبع

حساس البصمة هو جهاز بيومتري يستخدم للتعرف على الأفراد والتحقق من هويتهم عن طريق تحليل أنماط بصمات أصابعهم الفريدة. يقوم هذا الحساس بالتقاط صورة لبصمة الإصبع باستخدام تقنية معينة، مثل الضوء، ثم يقوم بمعالجة هذه الصورة لاستخراج ميزات معينة مثل الخطوط والفراغات والنقاط الدقيقة في البصمة، ومقارنتها بالبصمات المخزنة للتأكد من تطابقها.

Project Video

Overview

في هذا المشروع، سوف نستخدم حساس البصمة ولوحة الأردوينو لبناء قفل إلكتروني يتعرف على بصمات أصابع الأشخاص، حيث عند وضع الإصبع المسموح له بالدخول على حساس البصمة، سيتم تشغيل المصباح الأزرق وسيتم تحريك محرك السيرفو بمقدار 90 درجة لفتح الباب. أما إذا لم يتم وضع الإصبع الصحيح، فسيتم إضاءة المصباح الأحمر ولن يتم تحريك محرك السيرفو.

Getting the Items

Arduino Uno R3 (Voltaat Version)
Get Item
2×16 LCD with I2C Module
Get Item
Optical Fingerprint Sensor (R307)
Get Item
LED Kit – (4 colors, 5 pieces each)
Get Item
1/4 Watt Resistor (20 Pack)
Get Item
Half-size Breadboard
Get Item
Jumper Wires - Male to Male (40 Pack)
Get Item
Jumper Wires – Male to Female (40 Pack)
Get Item

Steps

Wiring it Up

قم بتوصيل الأسلاك بين لوحة الأردوينو، وحساس البصمة، ومحرك السيرفو، والشاشة الكريستالية، والمصابيح كما في الصورة التالية:

التوصيلات من الاردوينو الى لوحة التجارب  :

•منفذ ال 5 فولت ← المنافذ الموجبة بلوحة التجارب

•منفذ الجراوند ← المنافذ السالبة بلوحة التجارب

توصيلات حساس البصمة :

•منفذ VCC لحساس البصمة ← المنافذ الموجبة بلوحة التجارب

•منقذ GND لحساس البصمة ← المنافذ السالبة بلوحة التجارب

•منفذ الTX لحساس البصمة ← منفذ رقم 3 فى لوحة الاردوينو

• منفذ الRX لحساس البصمة ← منفذ رقم 2 فى لوحة الاردوينو

التوصيلات من محرك السيرفو :

•الطرف الموجب من محرك السيرفو ← المنافذ الموجبة بلوحة التجارب

•الطرف السالب من محرك السيرفو ← المنافذ السالبة بلوحة التجارب

•طرف الاشارة من محرك السيرفو ← منفذ رقم 9 فى لوحة الاردوينو

توصيلات الشاشة الكريستالية :

•منفذ VCC للشاشة الكريستالية ← المنافذ الموجبة بلوحة التجارب

•منقذ GND للشاشة الكريستالية ← المنافذ السالبة بلوحة التجارب

•منفذ SCL للشاشة الكريستالية ← منفذ رقم A5 للاردوينو

•منفذ SDA للشاشة الكريستالية ← منفذ رقم A4 للاردوينو

لتوصيلات من مصابيح ال LED بعد وضعها على لوحة التجارب:

• الطرف الموجب من مصباح ال LED الاحمر ← منفذ رقم 6 فى لوحة الاردوينو

• الطرف السالب من مصباح ال LED الاحمر ← مقاومة 220 اوم ← المنافذ السالبة بلوحة التجارب

• الطرف الموجب من مصباح ال LED الأخضر ← منفذ رقم 7 فى لوحة الاردوينو

• الطرف السالب من مصباح ال LED الأخضر ← مقاومة 220 اوم ← المنافذ السالبة بلوحة التجارب

Coding

في البداية، قم برفع الكود البرمجي الأول إلى لوحة الأردوينو الخاصة بتسجيل بصمات الأصابع، ثم افتح الشاشة السريالية. بعد ذلك، أدخل الرقم 1 في الشاشة السريالية وضع إصبعك على حساس البصمة لتسجيل بصمتك. وعندما تظهر لك الرسالة "Remove finger"، قم بإزالة إصبعك عن حساس البصمة. بعد ذلك، ستظهر لك الرسالة "Place same finger again"، عندها ضع إصبعك مرة أخرى على حساس البصمة.

/*

Voltaat learn (http://learn.voltaat.com)

Link for full tutorial:

Tutorial: Building an electronic lock to open the door with a fingerprint

The purpose of this sketch is that when an authorized finger is placed on the fingerprint sensor,

the blue light will turn on, and the servo motor will rotate by 90 degrees to open the door.

If an unauthorized finger is placed, the red light will turn on, and the servo motor will not move.

Connections from the Arduino to the breadboard:

• Arduino GND pin → Breadboard ground line

• Arduino 5V pin → Breadboard 5V line

Connections from the R307 FINGERPRINT Module:

• VCC pin → breadboard 5v line

• GND pin→ breadboard GND line

• TX pin→ Arduino pin 3

• RX pin → Arduino pin 2

Connection from the LCD:

• VCC pin → breadboard 5v line

• GND pin→ breadboard GND line

• SDA pin→ Arduino analog pin A4

• SCL pin → Arduino analog pin A5

Connections from the servo motor:

• Servo GND pin→ breadboard GND line

• Servo 5V pin→ breadboard 5V line

• Servo signal pin → Arduino pin 9

Connections from the Green LED :

• Green LED anode pin → Arduino pin 7

• Green LED cathode pin → 220 ohm resistor → Breadboard ground line

Connections from the Red LED :

• Red LED anode pin → Arduino pin 6

• Red LED cathode pin → 220 ohm resistor → Breadboard ground line

*/

#include <Adafruit_Fingerprint.h>

#if (defined(__AVR__) || defined(ESP8266)) && !defined(__AVR_ATmega2560__)

// For UNO and others without hardware serial, we must use software serial...

// pin #2 is IN from sensor (GREEN wire)

// pin #3 is OUT from arduino  (WHITE wire)

// Set up the serial port to use softwareserial..

SoftwareSerial mySerial(2, 3);

#else

// On Leonardo/M0/etc, others with hardware serial, use hardware serial!

// #0 is green wire, #1 is white

#define mySerial Serial1

#endif

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

uint8_t id;

void setup()

{

 Serial.begin(9600);

 while (!Serial);  // For Yun/Leo/Micro/Zero/...

 delay(100);

 Serial.println("\n\nAdafruit Fingerprint sensor enrollment");

 // set the data rate for the sensor serial port

 finger.begin(57600);

 if (finger.verifyPassword()) {

   Serial.println("Found fingerprint sensor!");

 } else {

   Serial.println("Did not find fingerprint sensor :(");

   while (1) { delay(1); }

 }

 Serial.println(F("Reading sensor parameters"));

 finger.getParameters();

 Serial.print(F("Status: 0x")); Serial.println(finger.status_reg, HEX);

 Serial.print(F("Sys ID: 0x")); Serial.println(finger.system_id, HEX);

 Serial.print(F("Capacity: ")); Serial.println(finger.capacity);

 Serial.print(F("Security level: ")); Serial.println(finger.security_level);

 Serial.print(F("Device address: ")); Serial.println(finger.device_addr, HEX);

 Serial.print(F("Packet len: ")); Serial.println(finger.packet_len);

 Serial.print(F("Baud rate: ")); Serial.println(finger.baud_rate);

}

uint8_t readnumber(void) {

 uint8_t num = 0;

 while (num == 0) {

   while (! Serial.available());

   num = Serial.parseInt();

 }

 return num;

}

void loop()                     // run over and over again

{

 Serial.println("Ready to enroll a fingerprint!");

 Serial.println("Please type in the ID # (from 1 to 127) you want to save this finger as...");

 id = readnumber();

 if (id == 0) {// ID #0 not allowed, try again!

    return;

 }

 Serial.print("Enrolling ID #");

 Serial.println(id);

 while (! getFingerprintEnroll() );

}

uint8_t getFingerprintEnroll() {

 int p = -1;

 Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id);

 while (p != FINGERPRINT_OK) {

   p = finger.getImage();

   switch (p) {

   case FINGERPRINT_OK:

     Serial.println("Image taken");

     break;

   case FINGERPRINT_NOFINGER:

     Serial.print(".");

     break;

   case FINGERPRINT_PACKETRECIEVEERR:

     Serial.println("Communication error");

     break;

   case FINGERPRINT_IMAGEFAIL:

     Serial.println("Imaging error");

     break;

   default:

     Serial.println("Unknown error");

     break;

   }

 }

 // OK success!

 p = finger.image2Tz(1);

 switch (p) {

   case FINGERPRINT_OK:

     Serial.println("Image converted");

     break;

   case FINGERPRINT_IMAGEMESS:

     Serial.println("Image too messy");

     return p;

   case FINGERPRINT_PACKETRECIEVEERR:

     Serial.println("Communication error");

     return p;

   case FINGERPRINT_FEATUREFAIL:

     Serial.println("Could not find fingerprint features");

     return p;

   case FINGERPRINT_INVALIDIMAGE:

     Serial.println("Could not find fingerprint features");

     return p;

   default:

     Serial.println("Unknown error");

     return p;

 }

 Serial.println("Remove finger");

 delay(2000);

 p = 0;

 while (p != FINGERPRINT_NOFINGER) {

   p = finger.getImage();

 }

 Serial.print("ID "); Serial.println(id);

 p = -1;

 Serial.println("Place same finger again");

 while (p != FINGERPRINT_OK) {

   p = finger.getImage();

   switch (p) {

   case FINGERPRINT_OK:

     Serial.println("Image taken");

     break;

   case FINGERPRINT_NOFINGER:

     Serial.print(".");

     break;

   case FINGERPRINT_PACKETRECIEVEERR:

     Serial.println("Communication error");

     break;

   case FINGERPRINT_IMAGEFAIL:

     Serial.println("Imaging error");

     break;

   default:

     Serial.println("Unknown error");

     break;

   }

 }

 // OK success!

 p = finger.image2Tz(2);

 switch (p) {

   case FINGERPRINT_OK:

     Serial.println("Image converted");

     break;

   case FINGERPRINT_IMAGEMESS:

     Serial.println("Image too messy");

     return p;

   case FINGERPRINT_PACKETRECIEVEERR:

     Serial.println("Communication error");

     return p;

   case FINGERPRINT_FEATUREFAIL:

     Serial.println("Could not find fingerprint features");

     return p;

   case FINGERPRINT_INVALIDIMAGE:

     Serial.println("Could not find fingerprint features");

     return p;

   default:

     Serial.println("Unknown error");

     return p;

 }

 // OK converted!

 Serial.print("Creating model for #");  Serial.println(id);

 p = finger.createModel();

 if (p == FINGERPRINT_OK) {

   Serial.println("Prints matched!");

 } else if (p == FINGERPRINT_PACKETRECIEVEERR) {

   Serial.println("Communication error");

   return p;

 } else if (p == FINGERPRINT_ENROLLMISMATCH) {

   Serial.println("Fingerprints did not match");

   return p;

 } else {

   Serial.println("Unknown error");

   return p;

 }

 Serial.print("ID "); Serial.println(id);

 p = finger.storeModel(id);

 if (p == FINGERPRINT_OK) {

   Serial.println("Stored!");

 } else if (p == FINGERPRINT_PACKETRECIEVEERR) {

   Serial.println("Communication error");

   return p;

 } else if (p == FINGERPRINT_BADLOCATION) {

   Serial.println("Could not store in that location");

   return p;

 } else if (p == FINGERPRINT_FLASHERR) {

   Serial.println("Error writing to flash");

   return p;

 } else {

   Serial.println("Unknown error");

   return p;

 }

 return true;

}

/*

Voltaat learn (http://learn.voltaat.com)

Link for full tutorial:

Tutorial: Building an electronic lock to open the door with a fingerprint

The purpose of this sketch is that when an authorized finger is placed on the fingerprint sensor,

the blue light will turn on, and the servo motor will rotate by 90 degrees to open the door.

If an unauthorized finger is placed, the red light will turn on, and the servo motor will not move.

Connections from the Arduino to the breadboard:

• Arduino GND pin → Breadboard ground line

• Arduino 5V pin → Breadboard 5V line

Connections from the R307 FINGERPRINT Module:

• VCC pin → breadboard 5v line

• GND pin→ breadboard GND line

• TX pin→ Arduino pin 3

• RX pin → Arduino pin 2

Connection from the LCD:

• VCC pin → breadboard 5v line

• GND pin→ breadboard GND line

• SDA pin→ Arduino analog pin A4

• SCL pin → Arduino analog pin A5

Connections from the servo motor:

• Servo GND pin→ breadboard GND line

• Servo 5V pin→ breadboard 5V line

• Servo signal pin → Arduino pin 9

Connections from the Green LED :

• Green LED anode pin → Arduino pin 7

• Green LED cathode pin → 220 ohm resistor → Breadboard ground line

Connections from the Red LED :

• Red LED anode pin → Arduino pin 6

• Red LED cathode pin → 220 ohm resistor → Breadboard ground line

*/

#include <Adafruit_Fingerprint.h>

#include <LiquidCrystal_I2C.h>

#include <Servo.h>

#include <SoftwareSerial.h>

// Initialize the LCD (address 0x27 may vary based on your display)

LiquidCrystal_I2C lcd(0x27, 16, 2);

// Initialize the Servo

Servo myServo;

int Blue_led = 7;

int Red_led = 6;

// For Arduino Uno and similar boards without additional hardware serial

SoftwareSerial mySerial(2, 3); // RX, TX for fingerprint sensor

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup() {

 Serial.begin(9600);

 lcd.begin(16,2);

 lcd.backlight();

 lcd.clear();

 lcd.print("Initializing...");

 myServo.attach(9); // Attach servo to pin 9

 myServo.write(90);  // Start with servo in default position

 pinMode(Blue_led, OUTPUT);

 pinMode(Red_led, OUTPUT);

 finger.begin(57600);

 delay(5);

 if (finger.verifyPassword()) {

   lcd.clear();

   lcd.print("Sensor Found!");

 } else {

   lcd.clear();

   lcd.print("Sensor Error");

   while (1) { delay(1); }

 }

 if (finger.getTemplateCount() == 0) {

   lcd.clear();

   lcd.print("No fingerprints");

 } else {

   lcd.clear();

   lcd.print("Place Finger...");

 }

}

void loop() {

 int id = getFingerprintID();

 if (id == 1) { // Check if the ID matches

   lcd.clear();

   lcd.print("ID #"); lcd.print(id);

   lcd.setCursor(0, 1);

   lcd.print("Match Found!");

   digitalWrite(Red_led, LOW);

   digitalWrite(Blue_led, HIGH);

   rotateServo();

   digitalWrite(Blue_led, LOW);

 } else {

   lcd.clear();

   lcd.print("Place finger:");

   lcd.setCursor(0, 1);

   lcd.print("No Match");

   digitalWrite(Red_led, HIGH);

 }

 delay(50);

}

uint8_t getFingerprintID() {

 if (finger.getImage() != FINGERPRINT_OK) return -1;

 if (finger.image2Tz() != FINGERPRINT_OK) return -1;

 if (finger.fingerSearch() != FINGERPRINT_OK) return -1;

 return finger.fingerID;

}

void rotateServo() {

 myServo.write(0);  // Rotate servo to 90 degrees

 delay(3000);        // Hold position for 3 seconds

 myServo.write(90);   // Return to original position

}

Testing it Out

بعد رفع الكود البرمجى ستجد انه عند وضع الإصبع المسموح له بالدخول على حساس البصمة، سيتم تشغيل المصباح الأزرق وسيتم تحريك محرك السيرفو بمقدار 90 درجة لفتح الباب. أما إذا لم يتم وضع الإصبع الصحيح، فسيتم إضاءة المصباح الأحمر ولن يتم تحريك محرك السيرفو.

Resources

No items found.