الجمعة، 25 أبريل، 2014

حساس بصمة الأصبع

Finger print sensor



في بعض المشاريع نحتاج لعمل نظام حماية او عمل نظام دخول لمكان او لقاعدة بيانات معينة , من أكثر الحساسات شيوعاً في الأستخدام هو حساس بصمة الأصبع , بحيث يعتمد التأكد من شخص ما على بصمة اصبعه .

سنقوم اليوم باستعراض هذا الحساس و كيفية توصيله مع الأردوينو .

في البداية سنتعرف على الحساس الذي سنستخدمه و هوSEN04172P



 Module Type : SEN04172P
Supply voltage: 3.6~6.0 V
Operating current(Max) : 120 mA
Storage capacity: 162 templates
Baud rate :9600, 19200, 28800, 38400, 57600bps (default is 57600)
Interface:TTL Serial
Work Temperature:-20 ~ +50 ℃

هذا الحساس يعتمد على البروتوكول UART Serial .



يأتي هذا الحساس عادة مع سلك خاص لتوصيله به ذو الألوان :

الأحمر : تغذية 5V
الأسود : الأضي Gnd
الأبيض: سلك Rx للحساس TTL
الأخضر"احياناً اصفر": سلك Tx للحساس TTL

القطع المستخدمة في هذه التجربة :



1) بطاقة أردوينو "أونو " 
2)حساس البصمة  
3)اسلاك توصيل Jumper

سنقوم في البداية بتخزين البصمات التي نريد التعرف عليها مسبقا , و هذا يتم عن طريق الخطوات التالية :


1) نحمل برنامج فارغ Blank على الأردوينو "يحتوي على setip, loop فقط " 
//Blank code 
//http://www.genotronex.com
//Code for finger print sensor
void setup() {}
void loop() {}

2) نوصل الحساس مباشرة إلى ال (Hardware serial (D0,D1  نقوم بتشغيل برنامج SF Demo و يمكن تحميله من هنا 






3) نقوم بأختيار رقم المنفذ الصحيح " كتنويه أذا لم يفتح معك البرنامج و يرتبط مع السنسور بشكل صحيح فأجعل رقم المنفذ الخاص بالأردوينو بين 2-10 عن طريق اعدادات المنافذ " كما في الصورة .


بعد الربط بشكل صحيح مع الحساس ستعطي المعلومات و البيانات المتعلقة بالحساس , و حتى البصمات المخزنة مسبقاص "أن وجدت" ستظهر على الشاشة .

الآن سنضيف بصمة جديدة ليتعرف الحساس لاحقاً عليها .

نذهب للخيار Enroll و نضغط عليه لتظهر لدينا شاشة , هذه الشاشة تطلب منا تحديد مكان تخزين البصمة الحالية "من 0 - 162 بصمة "




"بعد تحديد مكان تخزين البصمة , نضغط OK ثم نضع الاصبع على الحساس , سيظهر لون أحمر على الحساس , أبقي يدك موضوعه عليه و ستظهر رسالة على الشاشة ترشدك للخطوات .





هذه هي الطريقة لتخزين بصمة جديدة "يمكنك تخزين 162 بصمة مختلفة ".


طريقة سريعة للتأكد من أن تخزينك للبصمة صحيحة و مكان تخزين البصمة نختار الأمر ( بحث search ) ثم نضع الأصبع على الحساس و أن كانت البصمة مخزنة مسبقاً سيعطي الحساس انها موجودة و المكان المخزنة فيه هذه البصمة .



هكذا نكون قد تعرفنا على طريقة تخزين بصمة جديدة لهذا الحساس .



الخطوة الثانية : ربطه مع الأردوينو مباشرة .


الخطوة التالية تتلخص في عمل مقارنة للبصمات التي سيتم ادخالها لهذا الحساس و توظيفها لعمل وظائف مختلفة "تشغيل محرك , السماح بدخول قاعدة بيانات , السماح بتلقي اوامر من هذا المستخدم ...ألخ "





التوصيل سيتغير  كما في المخطط .




و هذا هو البرنامج المستخدم لهذا الحساس .
/*************************************************** 
  This is an example sketch for our optical Fingerprint sensor

  Designed specifically to work with the Adafruit BMP085 Breakout 
  ----> http://www.adafruit.com/products/751
 Modified By : Mohannad Rawashdeh
   http://www.genotronex.com
   Code for finger print sensor

*/

#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
int getFingerprintIDez();
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
SoftwareSerial mySerial(2, 3);

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()  
{
  Serial.begin(9600);
  Serial.println("fingertest");

  // 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);
  }
  Serial.println("Waiting for valid finger...");
}

void loop()                     // run over and over again
{
  getFingerprintIDez();
}

uint8_t getFingerprintID() {
  uint8_t p = finger.getImage();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image taken");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println("No finger detected");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Communication error");
      return p;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Imaging error");
      return p;
    default:
      Serial.println("Unknown error");
      return p;
  }

  // OK success!

  p = finger.image2Tz();
  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!
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK) {
    Serial.println("Found a print match!");
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Communication error");
    return p;
  } else if (p == FINGERPRINT_NOTFOUND) {
    Serial.println("Did not find a match");
    return p;
  } else {
    Serial.println("Unknown error");
    return p;
  }   
  
  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID); 
  Serial.print(" with confidence of "); Serial.println(finger.confidence); 
}

// returns -1 if failed, otherwise returns ID #
int getFingerprintIDez() {
  uint8_t p = finger.getImage();
  if (p != FINGERPRINT_OK)  return -1;

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

  p = finger.fingerFastSearch();
  if (p != FINGERPRINT_OK)  return -1;
  
  // found a match!
  Serial.print("Found ID #");
  Serial.println(finger.fingerID); 
  Serial.print("This Finger print related to : "); 
  switch(finger.fingerID){
   case 0:  
  Serial.println("Mohannad Rawashdeh "); 
    break;
   case 1 :  
  Serial.println("Ali Rawashdeh "); 
    break;
  
  }  

  return finger.fingerID; 
  
}


يقوم هذا البرنامج بمقارنة البصمات المخزنة فيه بالبصمات التي يتم وضعها على الحساس و ادخالها , و طباعة اسم صاحب البصمة  










6 التعليقات :

  1. بحث في القمة، بارك الله فيك، انا محتاج جدا الى مقالك و برنامجك لإستعماله في مشروع فتح الابواب و في الشركات

    ردحذف
  2. اتمنى ان تستفيد من هذه التدوينة و اشكرك على كلماتك , في القريب سنوثق ايضاً المشاريع التي تدمج القطع ببعض هنا على المدونة

    ردحذف
  3. شكرا لك على هذا المفال .. رائع جدا ..انا بحاجه لهذا الحساس لربطه مع قطعة Rasbarry pi الصنفb لنظام التعرف على الطلاب ..وانا بحاجه الى الطريقه

    ردحذف
  4. اخى الكريم اتمنى منك مشاركات اكثر لهذه القطعه حيث ان لها مشاريع كثيره. وفقك الله. ولك منى الف تحيه و تقدير

    ردحذف
  5. اخى الكريم اتمنى منك مشاركات اكثر لهذه القطعه حيث ان لها مشاريع كثيره. وفقك الله. ولك منى الف تحيه و تقدير

    ردحذف
  6. شكرا لك ولاكن واجهتني مشاكل في اليرمجه الطرف الي سيوجه الامر الا المحرن ؟؟من اي نقطه يوصل

    ردحذف

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.