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

فهرست مطالب

ویژگی های ماژول سنسور اثر انگشت R301T

ماژول اثر انگشت R301T ماژولی با دقت و سرعت عملکرد بالا، دارای الگوریتم تطبیق با کارایی عالی و همچنین یک تراشه ی فلش با ظرفیت بالاست. این سنسور بر مبنای پردازش تصویر اثر انگشت، تطبیق و جستجو در حافظه و انجام فرمان های مورد نظر، کار میکند . راه ارتباطی این ماژول با میکروکنترلر، سریال می باشد که در بادریت (Baud Rate) پیش فرض 57600 قرار داشته و امکان تغییر بادریت (Baud Rate) وجود ندارد. این ماژول قابلیت ذخیره سازی 1700 اثر انگشت را دارد.

معرفی پایه ها (Pinout) ماژول اثر انگشت R301T

ماژول سنسور اثر انگشت R301T دارای 6 پایه به شرح زیر است:

  • 5V: تغذیه ماژول – 5 ولت
  • GND: زمین
  • RX: دریافت اطلاعات از طریق پروتکل سریال
  • TX: ارسال اطلاعات از طریق پروتکل سریال
  • Touch: خروجی لمس ماژول

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

جهت دریافت دیتاشیت ماژول اثر انگشت R301T اینجا کلیک کنید.

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

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

آردوینو UNO R3 × 1
ماژول اثر انگشت R301T × 1
سیم جامپر × 1

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

آردوینو IDE

راه اندازی ماژول اثر انگشت R301Tبا آردوینو

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

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

توجه

رنگ بندی سیم ها در مدل های مختلف امکان دارد متفاوت باشد، حتما از ترتیب پایه ها که در بالاتر آماده است استفاده کنید.

 

گام دوم: کد

ابتدا کتابخانه زیر را  بر آردوینوی خود نصب کنید. 

https://github.com/adafruit/Adafruit-Fingerprint-Sensor-Library

توجه

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

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

    /*************************************************** 
  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

  These displays use TTL Serial to communicate, 2 pins are required to 
  interface
  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/

#include <Adafruit_Fingerprint.h>

// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
// uncomment this line:
// #define mySerial Serial1

// 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)
// comment these two lines if using hardware serial
SoftwareSerial mySerial(2, 3);

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:
      Serial.println(".");
      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;
  }   
}  

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

دستگاه منتظر وارد کردن یک عدد بین 1 تا 127 به عنوان ID از سوی شما می باشد.

پس از آن می‌توانید انگشت خود را روی ماژول قرار داده و اثر انگشت را ثبت کنید.

پس از تعریف کردن اثر انگشت خود، کد زیر را روی برد آردوینو آپلود کنید.

    /*************************************************** 
  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

  These displays use TTL Serial to communicate, 2 pins are required to 
  interface
  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/


#include <Adafruit_Fingerprint.h>

// On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white
// uncomment this line:
// #define mySerial Serial1

// 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)
// comment these two lines if using hardware serial
SoftwareSerial mySerial(2, 3);

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
{
  getFingerprintIDez();
  delay(50);            //don't ned to run this at full speed.
}

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

  return finger.fingerID;
}

// 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.print(finger.fingerID); 
  Serial.print(" with confidence of "); Serial.println(finger.confidence);
  return finger.fingerID; 
}

پس از آپلود کد، سریال مانیتور را باز کنید. با هر بار قرار دادن اثر انگشت تعریف شده، کد ID آن اثر انگشت نمایش داده می شود.

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

Comments (13)

  • محمد Reply

    سلام . منظور از قسمت اول: پس از آپلود کد، سریال مانیتور دستگاه خود را باز کنید. دستگاه منتظر وارد کردن یک ID از سوی شما می باشد.چیست؟ چه کاری باید انجام دهیم؟
    قسمت دوم کد چه کاری انجام دهیم؟

    فوریه 11, 2022 at 4:49 ب.ظ
    • مهران ملکی Reply

      سلام.
      بعد از اینکه کد رو آپلود کردین، تو نرم‌افزار آردوینو بخش سریال مانیتور رو باز کنید. سریال مانیتور رو میتونید از مسیر Tools -> Serial Monitor پیدا کنید. پس از اون شما باید اثر انگشتی که میخواید رو ثبت کنید. به این معنا که ابتدا یک عدد بین 1 تا 127 به عنوان ID وارد میکنید و بعد از اون اثر انگشت مربوطه رو روی ماژول قرار بدید و به این تریتیب ماژول، اثر انگشت رو ثبت میکنه. میتونید به تعداد 1 تا 127 عدد اثر انگشت ثبت کنید.
      تو کد دوم، دیگه اثر انگشت ها و ID های اون‌ها تعریف شده. تو این قسمت شما با لمس ماژول اثر انگشت، ماژول اثر انگشت رو اسکن میکنه و در صورتی که جزو اثر انگشت‌های ثبت شده باشه، ID متناظر اون رو نمایش میده. در غیر این صورت پیامی با مضمون اینکه اثر انگشت پیدا نشد رو نشون میده.

      فوریه 12, 2022 at 9:05 ق.ظ
  • Rahii Reply

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

    ژوئن 17, 2022 at 11:28 ب.ظ
  • احسان Reply

    سلام این ماژول میتواند ۱۷۰۰ اثرانگشت را زخیره کند برای مثال چتور میتوان برای انگشت ۱۰۰۰ نام انتخاب کرد درصورتی که شما می گویید عددی بین ۱ تا ۱۲۷ برای انگشت انتخاب کنید

    سپتامبر 23, 2022 at 1:46 ب.ظ
    • مهران ملکی Reply

      سلام
      در این کد نوشته شده فرض شده که فرد استفاده کننده تنها به ذخیره 128 اثر انگشت مختلف نیاز داره. شما میتونید تا عدد 1700 رو هم به عنوان ID انتخاب کنید.

      اکتبر 28, 2022 at 1:11 ب.ظ
      • احسان Reply

        سلام
        من متوجه نشدم آیا میتونم ۱۷۰۰ اثر انگشت مختلف را در این ماژول با همین کتاب خانه ذخیره کنم؟

        جولای 8, 2023 at 12:21 ب.ظ
  • مهدی Reply

    فایل تصویری اثر انگشت ایا قابل انتقال بر روی حافظه جانبی یا مانیتور کامپیوتر بصورت فرمت عکس هست یا خیر یا فقط اطلاعات اثر انگشت بصورت کد ذخیره میشه؟

    دسامبر 21, 2022 at 1:13 ق.ظ
    • علی عبدالملکی Reply

      سلام وقتتون بخیر
      بله همین ماژول میتونه دیتای عکس finger رو در قالب یک packet سریال به شما بده
      برای این کار و نحوه انجام اون میتونید از لینک زیر کمک بگیرید
      https://forum.arduino.cc/t/image-extraction-from-fingerprint-sensor/1034434/7

      فوریه 27, 2023 at 6:18 ب.ظ
  • مهدی Reply

    فایل تصویری اثر انگشت ایا قابل انتقال بر روی حافظه جانبی یا مانیتور کامپیوتر بصورت فرمت عکس هست یا خیر یا فقط اطلاعات اثر انگشت بصورت کد ذخیره میشه؟
    بعبارتی من میخوام فایل خروجی رو در نزم افزار خودم پردازش کنم
    و فقط اسکن میخوام

    دسامبر 21, 2022 at 1:18 ق.ظ
  • احسان Reply

    سلام خیلی ممنون
    یعنی من میتونم ۱۷۰۰ نفر را در این ماژول با همین کتاب خانه ذخیره کنم (البته با آیدی نه شماره )
    درسته ؟

    ژوئن 11, 2023 at 11:34 ق.ظ
    • محمد دمیرچی Reply

      با سلام باید کد لایبراری را نیز برای این موضوع مقداری تغییر بدهید. یا از کتابخانه دیگری استفاده کنید فگر میکنم این کتابخانه محدودیت داشته باشد.
      id همان شماره ای می باشد که شما به دستگاه میدهد.

      ژوئن 12, 2023 at 11:49 ق.ظ
      • احسان Reply

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

        جولای 5, 2023 at 3:00 ب.ظ

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

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