Toggle Nav

آموزش راه اندازی سنسور اثر انگشت نوری AS608 با آردوینو

فهرست مطالب

ویژگی های سنسور اثر انگشت نوری AS608

سنسور اثر انگشت نوری AS608 علاوه بر اسکن اثر انگشت، آن را پردازش کرده و دیتای پردازش‌شده را از طریق ارتباط سریال برای میکروکنترلر می‌فرستد. تمام اثرانگشت های ثبت‌شده، در این ماژول ذخیره می‌شود. این ماژول قابلیت ذخیره 127 اثرانگشت متفاوت را دارا می‌باشد.

مهمترین ویژگی های این ماژول عبارت اند از:

  • ولتاژ تغذیه: 3.3 ولت
  • جریان تغذیه: حداکثر 60 میلی‌آمپر
  • رزولوشن: 500 dpi
  • حداکثر زمان ثبت تصویر اثرانگشت: 1 ثانیه

معرفی پایه های (Pinout) سنسور اثر انگشت نوری AS608

4 پایه مهم این ماژول به شرح زیر است:

  • V+: تغذیه ماژول – 3.3 ولت
  • GND: زمین
  • TX: فرستنده سریال
  • RX: گیرنده سریال

پین اوت (Pinout) این ماژول را می‌توانید در تصویر زیر مشاهده کنید.

لوازمی که به آن احتیاج دارید

قطعات مورد نیاز

آردوینو UNO R3 × 1
سنسور اثر انگشت نوری AS608 × 1

نرم افزارهای مورد نیاز

آردوینو IDE

راه اندازی سنسور اثر انگشت نوری AS608 با آردوینو

گام اول: سیم بندی

مطابق مدار زیر، سنسور را به آردوینو وصل کنید.

گام دوم: نصب کتابخانه

به Library manager رفته و  با سرچ  کلمه Fingerprint، کتابخانه زیر را نصب کنید.

توجه

اگر برای نصب کتابخانه نیاز به راهنمایی بیشتر دارید، به اینجا مراجعه کنید.

گام سوم: ثبت اثرانگشت

کد زیر را روی برد آردوینو آپلود کنید.

  /*
  AS608-Optical-Fingerprint-Sensor-enroll
  https://electropeak.com/learn/
    based on Adafruit Library

*/
#include <Adafruit_Fingerprint.h>

SoftwareSerial mySerial(2, 3); // TX/RX

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); }
  }
}

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:
      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:
      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;
  }   
}

برنامه بالا برای ثبت اثر انگشت می‌باشد. شما توسط این برنامه می‌توانید 127 اثر انگشت متفاوت را ثبت کنید. برنامه را اجرا کرده و Serial Monitor را باز کنید. سپس برای ثبت هر اثر انگشت بایستی مراحل زیر را طی کنید:

1- وارد کردن ID اثر انگشت

قبل از ثبت هر اثر انگشت بایستی ابتدا ID  آن را وارد کنید. شما مجاز به انتخاب عدد 1 تا 127 می‌باشد. برای مثال در تصویر زیر عدد 3 را انتخاب کرده‌ایم. 

2- قراردادن انگشت

در مرحله بعد شما بایستی انگشت خود را برای نخستین تصویربرداری بر روی سنسور قرار دهید.

3- قراردادن دوباره‌ی انگشت

در این مرحله برای تصویربرداری مجدد بایستی انگشت خود را دوباره بر روی سنسور قرار دهید. بعد از اتمام صحیح این مرحله عبارت Stored ظاهر می‌گردد.  

گام چهارم : تست و تطابق اثر انگشت

در ابتدا برنامه زیر را بر روی آردینو آپلود کنید.

  /*
  AS608-Optical-Fingerprint-Sensor-enroll
    Modified on 06 Jan 2021
  by Amir Mohammad Shojaee @ Electropeak
  https://electropeak.com/learn/
    based on Adafruit Library

*/

#include <Adafruit_Fingerprint.h>

volatile int finger_status = -1;

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

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

void setup()  
{
  Serial.begin(9600);
  while (!Serial);  // For Yun/Leo/Micro/Zero/...
  delay(100);
  Serial.println("\n\nAdafruit finger detect test");

  // 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); }
  }

  finger.getTemplateCount();
  Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates");
  Serial.println("Waiting for valid finger...");
}

void loop()                     // run over and over again
{
  finger_status = getFingerprintIDez();
  if (finger_status!=-1 and finger_status!=-2){
    Serial.print("Match");
  } else{
    if (finger_status==-2){
      for (int ii=0;ii<5;ii++){
        Serial.print("Not Match");
      }
    }
  }
  delay(50);            //don't ned to run this at full speed.
}

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

  p = finger.fingerFastSearch();
  if (p != FINGERPRINT_OK)  return -2;
  
  // found a match!
  Serial.print("Found ID #"); Serial.print(finger.fingerID); 
  Serial.print(" with confidence of "); Serial.println(finger.confidence);
  return finger.fingerID; 
}

توسط برنامه بالا  تست و تطابق اثر انگشت انجام می‌شود. ابتدا برنامه را اجرا کنید و سپس Serial Monitor را باز کنید.

 در این مرحله برنامه منتظر می‌ماند تا یک انگشت برای شناسایی بر روی سنسور قرار گیرد. پس از قرارگیری یک انگشت بر روی سنسور، اگر اثر انگشت آن از قبل ذخیره شده باشد عبارت Match و در صورتی که اثر انگشت شناسایی نشود، عبارت Not Match ظاهر می‌گردد.

در ضمن در صورت شناسایی اثر انگشت، ID متناظر با آن نیز مشخص می‌شود.

از این مطلب خوشتان آمد؟

آخرین مطالب و جدیدترین آموزش ها را در ایمیل خود دریافت کنید

آموزش های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *