ویژگی های سنسور اثر انگشت نوری AS608
سنسور اثر انگشت نوری AS608 علاوه بر اسکن اثر انگشت، آن را پردازش کرده و دیتای پردازششده را از طریق ارتباط سریال برای میکروکنترلر میفرستد. تمام اثرانگشت های ثبتشده، در این ماژول ذخیره میشود. این ماژول قابلیت ذخیره 127 اثرانگشت متفاوت را دارا میباشد.
مهمترین ویژگی های این ماژول عبارت اند از:
- ولتاژ تغذیه: 3.3 ولت
- جریان تغذیه: حداکثر 60 میلیآمپر
- رزولوشن: 500 dpi
- حداکثر زمان ثبت تصویر اثرانگشت: 1 ثانیه
معرفی پایه های (Pinout) سنسور اثر انگشت نوری AS608
4 پایه مهم این ماژول به شرح زیر است:
- V+: تغذیه ماژول – 3.3 ولت
- GND: زمین
- TX: فرستنده سریال
- RX: گیرنده سریال
پین اوت (Pinout) این ماژول را میتوانید در تصویر زیر مشاهده کنید.
لوازمی که به آن احتیاج دارید
قطعات مورد نیاز
نرم افزارهای مورد نیاز
راه اندازی سنسور اثر انگشت نوری AS608 با آردوینو
گام اول: سیم بندی
مطابق مدار زیر، سنسور را به آردوینو وصل کنید.
توجه
رنگ بندی سیم ها در مدل های مختلف امکان دارد متفاوت باشد، حتما از ترتیب پایه ها که در بالاتر آماده است استفاده کنید.
گام دوم: نصب کتابخانه
به Library manager رفته و با سرچ کلمه Fingerprint، کتابخانه زیر را نصب کنید.
گام سوم: ثبت اثرانگشت
کد زیر را روی برد آردوینو آپلود کنید.
/*
AS608-Optical-Fingerprint-Sensor-enroll
Home<iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; clip: rect(1px, 1px, 1px, 1px);" title="“Home” — Electropeak" src="https://electropeak.com/learn/embed/#?secret=DWQ9d7kVdA" data-secret="DWQ9d7kVdA" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
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<iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; clip: rect(1px, 1px, 1px, 1px);" title="“Home” — Electropeak" src="https://electropeak.com/learn/embed/#?secret=DWQ9d7kVdA" data-secret="DWQ9d7kVdA" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
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 (9)
چرا برد آردوینو مدل UNO R3 ماژول اثر انگشت مدل AS608 شناسایی نمیکند؟
این خطارا همیشه میدهد:
did not find fingerprint sensor : (
باسلام
این خطا مربوط به سیم کشی می باشد.
گاهی وقت ها این خطا به خرابی ماژول نیز برمیگردد. درصورتی که با ماژول دیگری تست کرده اید و از درست کارکردن ماژول اثر انگشت مطمئن هستید. سیم کشی را بررسی کنید.
سلام
من میخوام هر دفعه که انگشت روی مازول قرار می گیرد کد هگز آن را به من به چطور متونم این کار را انجام بدم ممنون میشم اگر راهنماییم کنید
با سلام
برای این کار باید ابتدا سیم های تاچ سنسور را فعال کنید.
برای این کار یک سیم تغذیه دارد که باید به 3.3 ولت وصل کنید و یک سیم دیگر که به عنوان سیگنال می باشد به یکی از پایه های میکرو وصل می شود.
سپس با خواندن این پایه و تغییر وضعیت این پایه متوجه می شود که انگشت بر روی سنسور قرار گرفته است و دستور های خواندن انگشت را به سمت سنسور ارسال کرده و در صورت تایید بودن اثر انگشت به شما داده مربوطه ارسال می شود.
روش های دیگری را اطلاع ندارم
سلام خیلی ممنون ولی من متوجه نشدم چطور میتونم کد هگز را خروجی بگیرم
نحوه حذف اثر انگشت چطوریه ؟
با سلام
از بخش مثال های آردوینو، بخش Adafruit Fingerprint sensor را باز بکنید. فایلی به نام delete وجود دارد. آن را باز بکنید و بر روی آردوینو خود آپلود بکنید.
پس از اجرا سریال مانیتور را اجرا بکنید و از شما سوال میشود کدام ID حذف بشود. شماره ID را میدهید تا ID مربوطه حذف بشود.
سلام
تو این کد نویسی خروجی سیگنال برای ماژول رله کدوم پایه معرفی شده؟
با سلام دوست عزیز
در آموزش اعلام نشده است که این آموزش به همراه رله راهاندازی شده است.
شما در صورت نیاز بخش مربوط به رله را باید اضافه بکنید و اینکه به کدام پایه نیز وصل بشود نیز به توسط شما انتخاب میشود.