پروژه آردوینو: ساخت قفل درب اثر انگشتی با آردوینو

نحوه ساخت سیستم قفل درب اثر انگشتی با استفاده از ماژول اثر انگشت r307 و آردوینو

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

 

لوازم پروژه:

1- آردوینو اونو

آردوینو اونو

 

2- سنسور اثر انگشت DFRobot

سنسور اثر انگشت

3- سلونوئید خطی 3 ولت

سلونوئید خطی 3 ولت

4- آداپتور 12 ولت 5 آمپر 60 وات

آداپتور 12 ولت 5 آمپر 60 وات

 

اثر انگشت خوان دیجیتال

حسگر اثر انگشت بیومتریک برای ایجاد سیستمی ایده‌آل است که بتواند از آنچه شما نیاز دارید از طریق تجزیه و تحلیل اثر انگشت شما محافظت کند. دستگاه با پروتکل سریال کار می کند، بنابراین می توان آن را با هر میکروکنترلر (اردوینو و غیره) یا کارت توسعه استفاده کرد.

این دستگاه ظرفیت ذخیره 162 اثر انگشت را در حافظه داخلی فلش خود دارد. LED دستگاه هر بار که برای اثر انگشت عکس می گیرد روشن می شود.

برای اینکه بتوانید از دستگاه استفاده کنید، لازم است اثر انگشت را در پایگاه داده آن ذخیره کنید. به هر اثر انگشت یک شناسه اختصاص داده می شود. متعاقباً می توان دنباله خواندن و مقایسه را برای تأیید اثر انگشت کاربران شروع کرد و بنابراین قادر به تشخیص و اجرای اقدامات بر اساس نتیجه بود.

نمای داخلی سنسور اثر انگشت
نمای داخلی سنسور اثر انگشت

 

طراحی مدار پروژه

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

مدار شماتیک پروژه
مدار شماتیک پروژه

 

برنامه نويسي پروژه
ابتدا از لینک زیر اقدام به دانلود کتابخانه آردوینو می کنیم:

لینک دانلود کتابخانه اثر انگشت برای آردوینو

پس از دانلود و نصب کتابخانه می توانید کد نویسی آردوینو را شروع کنید.

سنسور با 57600=baud کار می کند، می توان آن را پیکربندی کرد اما این سرعت به صورت پیشفرض ذخیره شده است. هنگام استفاده از سریال، آردوینو از کتابخانه سریال نرم افزار استفاده می کند.

ما مانیتور سریال آردوینو را برای شروع خواندن اثر انگشت ها باز می کنیم و دستورالعمل ها را دنبال می کنیم:

اولین اثر انگشت را در موقعیت 1 ذخیره می کنیم و سپس وارد می کنیم و دوباره دستورالعمل ها را دنبال می کنیم:

اگر اثر انگشت به درستی ثبت شده باشد، پیغام «اثر انگشت مطابقت دارد!» را نشان می‌دهد، به دنبال آن موقعیتی که در آن ذخیره شده و پیام «ثبت‌شده!» را نشان می‌دهد.

برای ذخیره بیش از یک اثر انگشت، سنسور تا 162 اثر انگشت اجازه می دهد. اکنون شماره موقعیت بعدی را که می خواهیم آن را ذخیره کنیم، که در این مثال موقعیت 2 خواهد بود را دوباره تایپ می کنیم. 2 را تایپ می کنیم و enter را فشار می دهیم و دوباره همان را ادامه می دهیم. دستورالعمل‌ها تا زمانی که تمام اثر انگشت های لازم ثبت شوند، همیشه موقعیت متفاوتی را نشان می‌دهند تا جایی که قبلاً ذخیره شده است رونویسی نشود.

در نهایت برنامه نهایی را بارگذاری می کنیم که اثر انگشت را می خواند. اگر اثر انگشت خوانده شده با یکی از موارد ذخیره شده مطابقت داشته باشد، رله ای که به پین 13 آردوینو متصل است به مدت 3 ثانیه فعال می شود.

 

برنامه نوشته شده برای پروژه

#include

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

pinMode(13, OUTPUT);

digitalWrite(13, LOW);

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

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

}

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

digitalWrite(13, HIGH);

delay(3000);

digitalWrite(13, LOW);

return finger.fingerID;

}

#include

#include

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

pinMode(13, OUTPUT);

digitalWrite(13, LOW);

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

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

}

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

digitalWrite(13, HIGH);

delay(3000);

digitalWrite(13, LOW);

return finger.fingerID;

}

گردآوری و ترجمه: مهندس سبحان جوان

منبع: https://create.arduino.cc/

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

آخرین مقالات

مقالات مرتبط