آموزش راه اندازی سنسور اثر انگشت نوری 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
  
Home
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
  
Home
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 متناظر با آن نیز مشخص می‌شود.

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

Comments (5)

  • امیر Reply

    چرا برد آردوینو مدل UNO R3 ماژول اثر انگشت مدل AS608 شناسایی نمیکند؟
    این خطارا همیشه میدهد:
    did not find fingerprint sensor : (

    ژوئن 24, 2023 at 10:55 ق.ظ
    • محمد دمیرچی Reply

      باسلام
      این خطا مربوط به سیم کشی می باشد.
      گاهی وقت ها این خطا به خرابی ماژول نیز برمیگردد. درصورتی که با ماژول دیگری تست کرده اید و از درست کارکردن ماژول اثر انگشت مطمئن هستید. سیم کشی را بررسی کنید.

      ژوئن 25, 2023 at 9:56 ق.ظ
  • E Reply

    سلام
    من میخوام هر دفعه که انگشت روی مازول قرار می گیرد کد هگز آن را به من به چطور متونم این کار را انجام بدم ممنون میشم اگر راهنماییم کنید

    آگوست 1, 2023 at 8:09 ب.ظ
    • محمد دمیرچی Reply

      با سلام
      برای این کار باید ابتدا سیم های تاچ سنسور را فعال کنید.
      برای این کار یک سیم تغذیه دارد که باید به 3.3 ولت وصل کنید و یک سیم دیگر که به عنوان سیگنال می باشد به یکی از پایه های میکرو وصل می شود.
      سپس با خواندن این پایه و تغییر وضعیت این پایه متوجه می شود که انگشت بر روی سنسور قرار گرفته است و دستور های خواندن انگشت را به سمت سنسور ارسال کرده و در صورت تایید بودن اثر انگشت به شما داده مربوطه ارسال می شود.
      روش های دیگری را اطلاع ندارم

      آگوست 2, 2023 at 10:53 ق.ظ
      • E Reply

        سلام خیلی ممنون ولی من متوجه نشدم چطور میتونم کد هگز را خروجی بگیرم

        آگوست 2, 2023 at 4:12 ب.ظ

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

نشانی ایمیل شما منتشر نخواهد شد.