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

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

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

مرحله 1: مواد


در اینجا لیستی از مواد و ابزار مورد نیاز آورده شده است.

الکترونیک:

  • اسکنر اثر انگشت (و رابط JST)
  • مجموعه LCD (با ATmega328)
  • ATtiny85
  • ترانزیستور NPN
  • بلندگوی توییتر
  • سیم بلندگو
  • کیس (در مرحله 9 فایل هایی برای چاپ سه بعدی وجود خواهد داشت)
  • فیلم مس
  • تنظیم کننده ولتاژ 5 ولت
  • باتری 9 ولت
  • کانکتور برای باتری 9 ولت
  • سوئیچ SPDT

برای راحتی کار، لیست علاقه مندی های آماده را در وب سایت Sparkfun ضمیمه می کنم.

ابزار:

  • لحیم کاری و لحیم کاری
  • نوار عایق
  • سیم و جامپر
  • نیپرز/استریپر
  • تابلوی نمونه سازی
  • مقاومت های مختلف
  • پیچ
  • مته
  • چندین LED برای آزمایش
  • برد FTDI 5V
  • چسب حرارتی تفنگی
  • دسترسی به پرینتر سه بعدی
  • اختیاری: سوکت آی سی (8 پین برای ATtiny و 28 پین برای ATmega)
  • اختیاری: برد آردوینو دیگر / خازن 10uF (جزئیات در مرحله 5)

مرحله 2: نمودار دستگاه






کیت LCD خریداری شده از Sparkfun همراه با ATmega328 است که نمایشگر را کنترل می کند. ATmega328 بسیار قدرتمند است و نه تنها برای کنترل نمایشگر، بلکه برای کارهای دیگر نیز قابل استفاده است. با توجه به این موضوع، می توانیم به جای آردوینو از آن برای برقراری ارتباط با اسکنر اثر انگشت و ارسال دستورات به ATtiny85، کنترل نمایشگر و بیپر استفاده کنیم.

برای اینکه قفل بیومتریک درب همیشه کار نکند، یک سوئیچ در آن تعبیه کردم که در لحظه بسته شدن قاب کار می کند. در صورت بسته بودن کیس، برق دستگاه تامین نمی شود و در مصرف باتری صرفه جویی می کنیم.

نکته مهم: اسکنر اثر انگشت با ولتاژ 3.3 ولت کار می کند، بنابراین توصیه می کنم از یک تقسیم کننده ولتاژ استفاده کنید که سیگنال ها را از ATmega به 3.2 ولت تبدیل می کند. تقسیم کننده ولتاژ از یک مقاومت 560 اهم بین پایه اسکنر D10/ثانیه و یک مقاومت 1K بین پایه اسکنر GND/ثانیه تشکیل شده است.

پین اوت LCD:

  • D10 - پین اسکنر 1 (سیم سیاه)
  • D11 - اسکنر پین 2 (از طریق تقسیم کننده ولتاژ)
  • D12 - ATtiny85
  • D13 - جیغ

پین اوت ATtiny85:

  • پین 5 (0 در کد برنامه) - ورودی از ATmega
  • پین 3 (4 در کد برنامه) - ترانزیستور / LED زرد
  • پین 7 (2 در کد برنامه) - نشانگر LED

مرحله 3: مونتاژ اجزای کیت LCD

نام این مرحله برای خود صحبت می کند: راهنمای شروع سریع / مونتاژ مفید

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




نحوه قرارگیری قطعات روی برد به عهده شماست، فقط سعی کنید سیم ها را طوری لحیم کنید که در یک جهت قرار گیرند و نشکنند.

پس از مونتاژ، بالا و پایین تخته را با چسب حرارتی پوشاندم - این باعث می شود عناصر مدار ثابت و عایق شوند. چسب داغ به تراشه آسیب نمی رساند.

مانند برد اصلی، همه چیز را به برد ATtiny لحیم کنید و برای محکم کردن و جداسازی قطعات، چسب داغ بزنید. تنظیم کننده ولتاژ می تواند بسیار داغ شود، بنابراین بهتر است از چسب حرارتی روی آن یا هر سطح نزدیک آن خودداری کنید. همچنین بهتر است تخته ATtiny را با چسب حرارتی نپوشانید، زیرا ممکن است بخواهید آن را بردارید و دوباره برنامه ریزی کنید.

مرحله 5: برنامه نویسی ATmega328

همانطور که در مرحله 2 ذکر شد، ATmega328 دارای پردازنده به اندازه کافی قوی و پین های کافی برای آن است کنترل LCD، در حالی که سایر اجزای اضافی را کنترل می کند. برای رسیدن به این هدف، باید تراشه را برنامه ریزی کنید.

اگر تو داری آردوینو اونویا Duemilanove، می توانید به سادگی تراشه را از روی آنها جدا کنید و آن را با چیپ موجود در کیت جایگزین کنید. یا می توانید یک برد FTDI Basic Breakout (5V) و ضمیمه های لحیم کاری را در کنار آن پیدا کنید (تصاویر مرحله 3 را ببینید)

همچنین باید کد را در حالت "Duemilanove w/ ATmega328" آپلود کنید.

کد زیر - برنامه کاریبرای بررسی عملکرد دستگاه

#include "LiquidCrystal.h" LiquidCrystal lcd(2,3,4,5,6,7,8); void setup() ( pinMode(9, OUTPUT); // pinMode نور پس زمینه (13, OUTPUT)؛ // beeper lcd.begin(16, 2)؛ // 16 کاراکتر عرض، 2 DigitalWrite بالا (9، HIGH) ؛ / /turn on the backlight lcd.print("Hello world!"); //متن را با استفاده از تاخیر فاصله (2000) وسط قرار دهید؛ ) void loop() (//بیپر روشن و خاموش می شود، وضعیت آن روی نمایشگر نمایش داده می شود. lcd.clear(); 1000)؛ ) فایل ها

مرحله 6: راه اندازی اسکنر اثر انگشت

من از این کتابخانه برای ارتباط با اسکنر استفاده کردم. لینک دانلود مستقیم.

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

اسکنر اثر انگشت دارای حافظه داخلی مخصوص به خود برای ذخیره اطلاعات است. بنابراین پس از اینکه مطمئن شدید که اسکنر کار می کند، این برنامه را دانلود کنید تا اثر انگشت خود را با شناسه #0 به پایگاه داده اضافه کنید. کنسول سریال خود را باز کنید و به سادگی دستورالعمل ها را دنبال کنید.

برنامه چشمک زن LED برای تست اسکنر

/* این کد ساده LED را روشن و خاموش می کند. برای درک اینکه آیا ارتباط کار می کند یا خیر استفاده می شود. */ #include "FPS_GT511C3.h" #include "SoftwareSerial.h" //تنظیم سخت افزار - اسکنر انگشت متصل به: //پین دیجیتال 10(arduino rx، fps tx) //پایه دیجیتال 11(arduino tx - مقاومت فریم در ثانیه 560 اهم tx - مقاومت 1000 اهم - GND) //این ولتاژ tx 5 ولتی را به حدود 3.2 ولت کاهش می دهد و ما اسکنر خود را FPS_GT511C3 fps (10، 11) نمی سوزانیم. void setup())( Serial.begin(9600)؛ fps.UseSerialDebug = true؛ // می توانید پیام ها را در صفحه اشکال زدایی سریال fps ببینید.Open(); ) void loop())( // تست چشمک زن LED برای اسکنر فریم در ثانیه. SetLED(true)؛ // LED داخل تاخیر اسکنر (1000) را روشن می کند؛ fps.SetLED(نادرست)؛ // LED داخل تاخیر اسکنر (1000) را خاموش می کند؛ )

برنامه ای برای ضبط داده ها در اسکنر

#include "FPS_GT511C3.h" #include "SoftwareSerial.h" //تنظیم سخت افزار - اسکنر انگشت متصل به: //پین دیجیتال 10 (arduino rx، fps tx) //پایه دیجیتال 11 (arduino tx - مقاومت 560 اهم fps tx - مقاومت 1000 اهم - GND) //با این کار 5v tx به حدود 3.2v کاهش می یابد و ما اسکنر خود را FPS_GT511C3 fps (10, 11) نمی سوزانیم. void setup())( Serial.begin(9600)؛ delay(100)؛ fps.Open(); fps.SetLED(true); Enroll(); ) void Enroll())( // آزمون ثبت نام // جستجو برای open id int enrollid = 0؛ fps.EnrollStart(enrollid); // register Serial.print("انگشت را فشار دهید تا ثبت نام کنید #"); Serial.println(enrollid); while(fps.IsPressFinger() == false) delay( 100)؛ bool bret = fps.CaptureFinger(true)؛ int iret = 0؛ if (bret != false) (Serial.println("Remove finger"); fps.Enroll1(); while(fps.IsPressFinger() = = true) delay(100)؛ Serial.println("همان انگشت را دوباره فشار دهید"؛ while(fps.IsPressFinger() == false) delay(100)؛ bret = fps.CaptureFinger(true)؛ if (bret != false) ( Serial.println ("Remove انگشت"); fps.Enroll2(); while(fps.IsPressFinger() == true) delay(100); Serial.println("انگشت را دوباره فشار دهید"); while( fps.IsPressFinger () == false) delay(100)؛ bret = fps.CaptureFinger(true)؛ if (bret!= false) (Serial.println("Remove انگشت"); iret = fps.Enroll3(); if (iret = = 0) ( Serial.println("ثبت نام با موفقیت انجام شد"); ) else ( Serial.print("ثبت نام با کد خطا انجام نشد:"); Serial.println(iret); ) ) else Serial.println("گرفتن انگشت سوم ناموفق بود"); ) else Serial.println("گرفتن انگشت دوم ناموفق بود"); ) else Serial.println("گرفتن انگشت اول ناموفق بود"); ) void loop())( delay(100000)؛ ) فایل ها

مرحله 7: ATtiny85 را برنامه ریزی کنید


ATtiny85 چیزی شبیه به یک آردوینو ارزان قیمت است که در یک تراشه مونتاژ شده است. ATtiny85 می تواند توسط آردوینوهای دیگر، از جمله ATmega328 موجود در کیت LCD ما، برنامه ریزی شود. در پروژه از آن برای اجرای دستورات بسیار ساده استفاده می شود: سیگنال ATmega را بررسی کنید و در صورت درست بودن سیگنال، گیت را باز کنید.

برای برنامه ریزی آن، همه چیز را مطابق عکس های پیوست شده وصل کنید. سپس فایل های لازم را دانلود کنید و این دستورالعمل ها را دنبال کنید.

پس از دانلود کد، پین ۱۳ روی آردوینو (ال ای دی داخلی) باید روشن شود که نشان می دهد کد دانلود شده است.

کد نهایی:

//یک سیگنال کوتاه از ماژول اصلی برای بستن رله void setup())( pinMode(2,OUTPUT)؛ //نشانه LED از طریق یک مقاومت 10K pinMode(4,OUTPUT) دریافت می کند؛ //پایه ترانزیستور که گاراژ را باز می کند pinMode(0,INPUT)؛ //تاخیر ورودی(500)؛ //زمان دادن به دستگاه برای شروع DigitalWrite(2، HIGH)؛ //نشانگر LED ) void loop())( if(digitalRead(0))(/ /الگوی ساده برای تعویض تاخیر ترانزیستور (125)؛ if(digitalRead(0)==false)( delay(55); //wait، زیرا تایمر ATtiny ایده آل نیست if(digitalRead(0))( delay(55 ) if(digitalRead(0)= =false)( delay(55)؛ if(digitalRead(0))(delay(55)؛ if(digitalRead(0)==false)(digitalWrite(4, HIGH); / / ترانزیستور تاخیر دکمه (1000) را فشار می دهد؛ digitalWrite (4، LOW)، digitalWrite (2، LOW)، تاخیر (1000)؛ digitalWrite (2، HIGH)؛ ) ) ) ) ) ) ) فایل ها

مرحله 8: کد نهایی

در زیر یک برنامه آردوینو است که من با استفاده از اسکنر و کتابخانه های نمایش نوشتم. برای اینکه مشخص شود در هر قسمت از برنامه چه اتفاقی می افتد، سعی کردم همه چیز را به بهترین شکل ممکن کامنت کنم. پس از دانلود این کد، همه چیز باید کار کند و تنها کاری که باید انجام شود، ادغام سیستم در درب است.

هشدار: اگر کتابخانه اسکنر کار نمی کند، سعی کنید از آن استفاده کنید نسخه قدیمیآردوینو IDE.

کد ATmega238:

#include "LiquidCrystal.h" //display library #include "FPS_GT511C3.h" //fps (Fingerprint scanner) library #include "SoftwareSerial.h" //استفاده شده توسط کتابخانه اسکنر //پیکربندی صفحه نمایش و پین های اسکنر LiquidCrystal lcd( 2، 3، 4، 5، 6، 7، 8)؛ //نمایش پین اوت FPS_GT511C3 fps (10, 11); //RX، TX boolean isFinger = false; //true اگر کتابخانه fps انگشت روی اسکنر را تشخیص دهد //پین های خروجی const int buzzerPin = 13; const int backlightPin = 9; const int attinyPin = 12; const String idNames = ("خود"،"برادر"، "رایان"، "مامان"، "بابا"، "خاله"، "بزرگ"، "زید"، "شخص"، "شخص"، "شست"); void setup())( //تنظیم خروجی ها pinMode(buzzerPin, OUTPUT)؛ pinMode (backlightPin, OUTPUT)؛ pinMode(attinyPin, OUTPUT)؛ //برای اشکال زدایی //Serial.begin(9600)؛ fps.UseSerialDebug = false؛ / / برای اشکال زدایی fps از طریق درست می شود درگاه سریال//initialize libraries lcd.begin(16,2); digitalWrite (پین نور پس زمینه، HIGH)؛ //نور پس زمینه LCD fps.Open(); fps.SetLED(true); //LED برای فریم در ثانیه //بارگیری صدا برای (int i=0; i<30; i++){ tone(buzzerPin, 50+10*i, 30); delay(30); } tone(buzzerPin, 350); //вывод стартового сообщения lcd.print("Put your finger "); //команда вывода на экран lcd.setCursor(0, 1); //устанавливаем курсор на нулевую колонку первой строки lcd.print(" on the scanner "); delay(150); noTone(buzzerPin); //останавливаем стартовый звук } void loop(){ //сканируем и распознаём отпечаток, когда приложен палец waitForFinger(); lcd.clear(); //очищаем экран и устанавливаем курсов в положение 0,0 fps.CaptureFinger(false); //захватываем отпечаток для идентификации int id = fps.Identify1_N(); //идентифицируем отпечаток и сохраняем id if(id <= 10){ lcd.print(" Access granted "); //сообщение об успехе lcd.setCursor(0,1); //выводим на экран имя когда дверь открывается String message = " Hey " + idNames + "!"; lcd.print(message); tone(buzzerPin, 262, 1000); delay(1500); //отправляем сигнал для открытия двери digitalWrite(attinyPin, HIGH); //первый импульс синхронизирует задержку (10ms) delay(5); digitalWrite(attinyPin, LOW); delay(3); digitalWrite(attinyPin, HIGH); //следующие два - открывают дверь delay(15); digitalWrite(attinyPin, LOW); delay(5); digitalWrite(attinyPin, HIGH); delay(10); digitalWrite(attinyPin, LOW); delay(1000); lcd.clear(); lcd.print("Don"t forget to "); lcd.setCursor(0,1); lcd.print(" shut me off! "); delay(2000); waitForFinger(); //нажмите чтобы продолжить запись while(true){ //сохраняет новый отпечаток //выводит сообщение на экран lcd.clear(); lcd.print(centerText("So you want to")); lcd.setCursor(0,1); lcd.print(centerText("scan a new one?")); delay(2000); //Скопировано и слегка модифицировано из примера регистрации данных: int enrollid = 11; //выбираете какой id переписать\создать //отпустите палец, когда хотите записать id/имя, напечатанное на экране waitForFinger(); //ждёт, когда будет нажат fps while(enrollid==11){ for (int i = 1; i1){ lcd.print(i); enrollid = i-1; break; } } } //предупреждение, если в данном слоте уже есть данные if(fps.CheckEnrolled(enrollid)){ lcd.clear(); lcd.print(" Warning! ID #"); lcd.print(enrollid); lcd.setCursor(0,1); lcd.print(" has data. OK? "); delay(2500); waitForFinger(); //ждёт, когда будет нажат fps fps.DeleteID(enrollid); //удаляет данные delay(100); } //Enroll fps.EnrollStart(enrollid); lcd.clear(); lcd.print("Place finger to "); lcd.setCursor(0,1); lcd.print("enroll #"); lcd.print(enrollid); //выводит id, который был добавлен waitForFinger(); //ждёт, когда будет нажат fps //захватывает отпечаток и сохраняет его в память трижды для точности данных bool bret = fps.CaptureFinger(true); //картинка высокого качества для записи int iret = 0; //в случае ошибки if (bret != false){ //первая регистрация lcd.clear(); lcd.print(" Remove finger "); fps.Enroll1(); while(fps.IsPressFinger() == true) delay(100); //ждёт пока уберут палец lcd.clear(); lcd.print(" Press again "); waitForFinger(); //ждёт, когда будет нажат fps bret = fps.CaptureFinger(true); if (bret != false){ //вторая регистрация lcd.clear(); lcd.print(" Remove finger "); fps.Enroll2(); while(fps.IsPressFinger() == true) delay(100); lcd.clear(); lcd.print("Press yet again "); waitForFinger(); bret = fps.CaptureFinger(true); if (bret != false){ //третья регистрация iret = fps.Enroll3(); if (iret == 0){ //проверяет, были ли какие-нибудь ошибки lcd.clear(); lcd.print(" Success! "); delay(2000); beep(); //выключает Ардуино } else{ //запускает этот код в случае любой ошибки lcd.clear(); lcd.print("Fail. Try again "); delay(1000); } } lcd.clear(); lcd.print(" Failed 3rd "); //ошибка на третьей записи delay(1000); } lcd.clear(); lcd.print(" Failed 2nd "); //ошибка на второй записи delay(1000); } lcd.clear(); lcd.print(" Failed 1st "); //ошибка на первой записи delay(1000); } } else{ lcd.print("Fingerprint is"); //если отпечаток не распознан lcd.setCursor(0,1); lcd.print(" unverified "); delay(2000); lcd.clear(); lcd.print("Please try again"); lcd.setCursor(0,1); lcd.print("Use your pointer"); //pointer - указательный палец (можете использовать любой и заменить это слово) delay(500); } delay(250); } void beep(){ //издаёт звуки, чтобы кто-нибудь закрыл кейс lcd.clear(); lcd.print("Please close the"); lcd.setCursor(0,1); lcd.print(" case! "); for(int i=0;i=80 && !fps.IsPressFinger()){ beep(); } } timer = 0; //обнуляет таймер как только функция завершится } String centerText(String s) { //центрует текст на дисплее, чтобы он лучше смотрелся while(16-s.length()>1)( //اگر متن نیاز به مرکزیت دادن دارد s = " " + s + " "؛ // فاصله های یکنواخت را در هر دو طرف اضافه می کند ) return s; ) فایل ها

برای ایجاد یک سیستم امنیتی بیومتریک ساده برای محافظت از خودروی شما در برابر دسترسی غیرمجاز، به یک حسگر اثر انگشت و یک میکروکنترلر آردوینو نیاز داریم. این پروژه از مواد آموزشی Adafruit استفاده می کند. برای سهولت در تکرار، از کد برنامه کامل این ماده با تغییرات جزئی استفاده می شود.

ابتدا سیستم استارت خودرو را اصلاح می کنیم. اتصال اصلی، هادی IG از سوئیچ احتراق است که برق را به تنظیم کننده ولتاژ، سپس به میکروکنترلر آردوینو می رساند تا آن را خاموش و روشن کند و انگشت روی سنسور را به مدت 10 ثانیه اسکن کند. اگر اثر انگشت مطابقت داشته باشد، سیستم جعبه رله را فعال می کند که رله استارت را کنترل می کند. اکنون می توانید موتور را روشن کنید. پس از 10 ثانیه، حسگر اثر انگشت خاموش می شود. می توانید با تکرار چرخه احتراق دوباره آن را روشن کنید. اگر ظرف مدت 10 ثانیه حسگر اثر انگشت را تشخیص ندهد یا اثر انگشت با مرجع مطابقت نداشته باشد، سیستم استارت خاموش می شود و موتور روشن نمی شود.

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

لطفا توجه داشته باشید که حسگر اثر انگشت موتور را روشن نمی کند. این به سادگی رله استارت را فعال و غیرفعال می کند، که موتور را ممنوع کرده یا اجازه می دهد تا روشن شود.

در این پروژه یک دستگاه ضد سرقت بر روی میتسوبیشی لنسر 2000 کوپه 2 در نصب شده است.

مرحله 1: اجزای مورد استفاده

مرحله 4: بارگیری برنامه اصلی

حسگر اثر انگشت را همانطور که در نمودار نشان داده شده است وصل کنید و برنامه اصلی را بارگذاری کنید. برای نظارت بر عملکرد صحیح، یک LED و یک مقاومت را به پایه 12 وصل کنید.

این برنامه بر اساس اصل مواد آموزشی اثر انگشت Adafruit کار می کند. با این حال، کد را کمی تغییر دادم و یک تایمر اضافه کردم تا سنسور بعد از 10 ثانیه خاموش شود تا از چراغ چشمک زن حسگر حواس پرتی نشود.

مرحله 5: مونتاژ قسمت 1

پیچ های زیر داشبورد را بردارید. اهرم رهاسازی کاپوت را شل کنید. قسمت پایین داشبورد را بردارید. سنسور را در فضای آزاد قرار دهید.

مرحله 6: مونتاژ، قسمت 2

فاصله مورد نیاز را اندازه بگیرید و یک منطقه کوچک را برای نصب ایمن سنسور برش دهید.

مرحله 7: مونتاژ، قسمت 3

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

چه چیزی نیاز دارید

  1. ماژول اثر انگشت FPM10A
  2. ماژول RFID RC522
  3. آردوینو مگا (از نظر تئوری می توان از بردهای دیگر استفاده کرد، اما من به دلیل تعداد پین ها به این یکی اکتفا کردم)
  4. 1 مجوز برای 1C 8.2 (کلینت ضخیم در مورد من، خودتان آن را برای یک نازک برش دهید)
  5. ارتباط از طریق پورت Com با استفاده از MsCommLib.MsComm (شما به مجوز نیاز دارید، حتی می توانید آن را در اینجا گوگل کنید)
  6. محیط توسعه برای آردوینو (1.8.5 استفاده شده)
  7. تبلت با رابط USB.
  8. مهار: مقاومت 1 کیلو اهم، دکمه اتصال کوتاه، سیم، نوار الکتریکی آبی، آنالایزر خزش حرارتی در صورت تمایل (در صورت داشتن حس نزدیک و غیرقابل توصیف با این دستگاه می توانید سیم ها را بچرخانید)، کابل USB برای آردوینو، بازوهای مستقیم و پیچیدگی های کج نام مستعار متوسط ​​1s شامل. برای ساختن بدنی برای تمام این معجزه.

نکات: در عکس رنگ سیم ها متفاوت است - در حین نصب چندین سیم شکسته شد زیرا ... آنها کاملا هوآوی بودند و من مجبور شدم رنگ های موجود دیگر را بگیرم.

سیستم پیام در لحظات حساس به طور عمدی تکرار می شود.
من فوراً به شما هشدار می دهم که ممکن است یک مهندس معمولی اشک از چشمان آنها سرازیر شود، اما این اولین پروژه آردوینو من است و یکی از چنین پیچیدگی هایی است و به نظر می رسد که کار می کند و با ثبات کار می کند. در ابتدا این ایده وجود داشت که همه چیز را از طریق شبکه (وای فای + سیمی) انجام دهم، اما پس از برآورد هزینه های اشکال زدایی و ایجاد سرویس http خودم و پیاده سازی همه چیز در 1C، تصمیم گرفتم از com استفاده کنم؛ در هر صورت، تمام منطق می تواند بدون تغییر conf به پردازش خارجی منتقل شود.

همچنین می‌توانید سیستمی برای عکاسی از یک کارمند ورودی از طریق دوربین وب رایانه لوحی، اضافه کردن یک رله و کنترل دروازه‌های الکترونیکی، یکپارچگی کامل با ZUP از طریق پردازش خارجی که از طریق پارامترهای راه‌اندازی منتقل می‌شود و از بین بردن کارناوال برای دروازه‌های خطرناک مخصوصاً با اهمیت مخفی وارد کنید. .

انتقاد مفید پذیرفته می شود.

پیش درآمد

با دیدن قیمت های سیستم های دسترسی موجود و سیستم های ردیابی زمان، جوهر سبز آرام آرام شروع به خفه کردن من کرد. پس از مدت ها قدم زدن در اطراف آردوینو و ماژول های آن، با ماژول اثر انگشت FPM10A مواجه شدم. این ماژول، بسته به نسخه، می تواند تعداد زیادی اثر انگشت - از 50 تا بی نهایت را در حافظه فلش خود ذخیره کند و در اکثر ماژول های تولید کنندگان کنترل بیومتریک استفاده می شود. با این حال، در پروژه من، به دلیل کتابخانه، به 254 محدود شده است. من بلافاصله به شما هشدار می دهم که کتابخانه کاملاً یافت شده خود را برای آردوینو پست می کنم زیرا ... من برای مدت طولانی با جستجو مشکل داشتم و 3 روز را برای جستجو و اشکال زدایی کتابخانه برای این ماژول تلف کردم.

توضیحات ماژول ها

کتابخانه مورد استفاده در پروژه امکان استفاده از اثر انگشت تا 256 (بایت) را فراهم می کند. این مقدار برای من بیش از حد بود؛ در موارد شدید، شما می توانید از 1 ماژول برای هر 256 کارمند استفاده کنید.
تعداد تگ های RFID فقط به دلیل منحصر به فرد بودن UID آنها محدود می شود. پایگاه داده را می توان در 1C ذخیره کرد و به کارمندان پیوند داد. همه برچسب های سازگار را می توان استفاده کرد. از نظر تئوری، هر کلیدی برای تلفن های داخلی، کارت های مترو و کارت های ترویکا ممکن است مناسب باشد.
اتصال به 1c از طریق درگاه com از طریق کتابخانه MsCommLib.MsComm انجام می شود، اما می توان آن را در هر کتابخانه دیگری بازنویسی کرد. درایورهای پورت com برای آردوینو باید همراه با محیط توسعه آردوینو نصب شوند، اما می توان آنها را نیز در گوگل جستجو کرد.
همه چیز لحیم شده در یک جعبه پنهان شده است، از طریق شبکه متصل می شود (من از WiFi استفاده کردم، اما می توانید از کارت شبکه USB خارجی نیز استفاده کنید).

الگوریتم کار

سخت افزار:

  1. ما ماژول های آردوینو را لحیم/پیچ می کنیم
  2. ما به یک برنامه نویس رایانه شخصی متصل می شویم و سیستم عامل را در Arda آپلود می کنیم، آزمایش را اجرا می کنیم، مطمئن می شویم که دستورات کار می کنند.
  3. آنها از طریق USB به رایانه لوحی ویندوز 10 متصل می شوند. در رایانه لوحی ما آن را از طریق بارگذاری خودکار جایگزین می کنیم:

الف) از طریق فایل بدن:

    start - run: shell: startup

    با استفاده از Notepad یک فایل با نام hz.bat و محتویات آن ایجاد کنید (مطمئن هستم که خودتان می توانید پارامترهای پایگاه داده فایل را مدیریت کنید - من sql دارم): "C:\Program Files\1cv8\ ... \bin\1cv8 exe.» ENTERPRISE / SServerName:Port\DBName» /NUser /PPpassword

ب) با جایگزین کردن پوسته با استفاده از یک اسکریپت VB، یک کار پیشرفته‌تر انجام می‌دهیم (حتماً بدون راه‌اندازی پوسته، علاوه بر کاربر پیش‌فرض، کاربر دیگری ایجاد کنید):

    با استفاده از Notepad یک فایل با نام C:\hz\hz.vbs و محتویات ایجاد کنید

تنظیم oShell=createobject("wscript.shell")
sCmd="""C:\Program Files\1cv8\ ... \bin\1cv8.exe"" ENTERPRISE /SServerName:Port\DBName" /NUser /PPpassword"
oShell.run sCmd، درست است
sCmd=" shutdown /r /t 0"
oShell.run sCmd

    start - execute: regedit، شاخه را دنبال کنید: Current User\Software\Microsoft\Windows NT\CurrentVersion\Winlogon

    پارامتر رشته "شل" (REG_SZ) را اضافه کنید

    آن را ویرایش کنید: "wscript C:\hz\hz.vbs" (بدون نقل قول در پارامتر)

    راه اندازی مجدد و تست کنید. 1c باید بدون اکسپلورر شروع شود

  1. بعد، مطمئن می شویم که کار می کند و آن را در جعبه بسته بندی می کنیم.

به صورت برنامه ای:

  1. در حالت عادی، آردوینو از اسکنر اثر انگشت، اسکنر RFID، دکمه مدیریت نظرسنجی می کند و دستورات انتظار را از طریق پورت com ارسال می کند.
  2. به محض اینکه انگشتی در میدان دید خواننده ظاهر شد، فرمانی را به پورت com ارسال می کنیم و 1c با خواندن متغیرها، شناسه انگشت یا UID تگ را می بیند.
  3. دکمه برای مدیریت اثر انگشت مورد نیاز است. وقتی آن را فشار می‌دهید، 1c رمز ورود به سیستم را می‌خواهد و سپس می‌تواند یک شناسه اسکنر یا یک UID کارت را از طریق سیستم پیام‌رسانی به کارمند اختصاص دهد.

برای برقراری ارتباط با 1c، از خطوط زیر استفاده می شود (من پردازش را برای conf و timesheet خود انجام دادم، فقط برای مثال در پروژه است اما در کد منبع گنجانده شده است):

اتصال به پورت com

Procedure StartSystem() ComPort = New COMObject("MsCommLib.MsComm"); ComPort.CommPort = 3 را امتحان کنید. ComPort.Settings = "9600,N,8,1"; ComPort.Handshaking = 0; ComPort.InBufferCount = 0; ComPort.InBufferSize = 70; ComPort.InputLen = 0; ComPort.InputMode = 1; ComPort.NullDiscard = 0; ComPort.PortOpen = True; هشدار استثنایی ("باز کردن پورت ممکن نیست!")؛ ThisForm.Close(); EndAttempt; hSeconds = 0; ConnectWaitHandler("OutputSportData"، 1، False); // یک هندلر را برای نظارت بر پایان رویه پورت وصل کنید

قطع ارتباط از پورت کام

Procedure EndSystem() DisableWaitHandler("OutputSportData"); ComPort.PortOpen = نادرست; ComPort = ""; پایان رویه

خواندن داده ها از پورت com

رویه OutputSportData() ExportSportData = ""; اگر ComPort.PortOpen سپس //ComPort.Output = "1"; SportsData = ComPort.Input; ProcessEncryptedString (SportData); در صورت اختصار (پیش کارمند)<>"" سپس hSeconds = hSeconds + 1; endIf; اگر hSeconds > 60 سپس PreEmployee = 0; hSeconds = 0; endIf; در غیر این صورت هشدار ("پورت باز نمی شود"); ThisForm.Close(); endIf; پایان رویه روند فرآیند رشته رمزگذاری شده (داده های ورزشی) آرایه = داده های ورزشی. Unload(); IndexMin = SportsData.GetLowerBound(0); IndexMax = SportsData.GetUpperBound(0); StringInfo = ""; برای Index = IndexMin By IndexMax - 1 Cycle SymbolReceived = AbbrLP(Array.Get(Index)); اگر CharacterReceived = "13" سپس اگر نه Suspend سپس RowInfo = RowProcessing(RowInfo); //در اینجا پردازش پیام EndIf; Else LineInfo = LineInfo + Symbol(Number(Symbol Received)); endIf; چرخه پایان پایان رویه

ارسال اطلاعات به پورت com

رویه SendToPort(Send) If ComPort.PortOpen سپس ComPort.Output = AbbrLP(Send); Else Notify("پورت باز نمی شود"، MessageStatus.VeryImportant); endIf; پایان رویه

کد پروژه برای آردوینو مگا

#عبارتند از // کتابخانه را برای کار با ماژول اثر انگشت #include متصل کنید // کتابخانه را برای کار با نرم افزار UART #include متصل کنید #عبارتند از const int buttonPin = 2; // شماره ورودی متصل به دکمه برای ورود به حالت برنامه نویسی int buttonState = 0; // متغیر برای ذخیره وضعیت دکمه int modeState = 0; // متغیر برای ذخیره وضعیت دستگاه. 0 - منتظر اسکنر اثر انگشت. 1 - برنامه نویسی uint8_t id; // شماره شناسایی که الگوی اثر انگشت تحت آن ذخیره می شود String frcUID = ""; // شماره شناسایی خواننده rfid int rfidYes = 0; // ورودی موفق RFID SoftwareSerial mySerial(10, 11); // شی mySerial را برای کار با کتابخانه SoftwareSerial OBJECT_NAME (RX, TX) اعلام کنید. // می توانید هر پینی که از وقفه PCINTx پشتیبانی می کند را مشخص کنید Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); // یک شی انگشت را برای کار با کتابخانه Adafruit_Fingerprint اعلام کنید OBJECT_NAME = Adafruit_Fingerprint(PARAMETER); // PARAMETER - پیوند به یک شی برای کار با UART که ماژول به آن متصل است، به عنوان مثال: &Serial1 MFRC522 mfrc522(53, 5); // ایجاد نمونه MFRC522 void setup() ( pinMode(buttonPin, INPUT); // مقداردهی اولیه پین ​​متصل به دکمه به عنوان ورودی Serial.begin(9600)؛ // راه اندازی UART سخت افزاری با سرعت 9600 در حالی که (!Serial); // در انتظار تاخیر اولیه سازی سخت افزار UART(500)؛ SPI.begin(); // گذرگاه SPI را راه اندازی کنید mfrc522.PCD_Init(); // راه اندازی MFRC522 mfrc522.PCD_DumpVersionToSerial(); // نمایش جزئیات PCD - کارت خواندن MFRC522 delay( 500)؛ // انتظار برای مقداردهی اولیه ماژول اثر انگشت Serial.println(". . . Scan sensor . . ."); // نمایش پیام "Searching for sensor" finger.begin(57600); // Initializing نرم افزار UART با سرعت 57600 (سرعت ماژول پیش فرض) Serial.println(finger.verifyPassword()); if (finger.verifyPassword()) (Serial.println(". . . Found sensor! . . ."); // If ماژول اثر انگشت شناسایی شده است، پیام را چاپ کنید "sensor found" ) other (Serial.println(". . . Did not find sensor . . ."); // اگر ماژول اثر انگشت پیدا نشد، پیام "sensor not found" را نمایش دهید "و یک حلقه بی نهایت وارد کنید: while(1 ); while(1); ) Serial.println(". . . لطفا انگشت خود را روی اسکنر یا rfid قرار دهید . . ."); ) void loop() (//با دکمه کار کنید! buttonState = digitalRead(buttonPin)؛ // مقادیر را از ورودی دکمه بخوانید اگر (buttonState == HIGH) (modeState = 1; // وارد حالت برنامه نویسی NEXT شوید) (modeState) ( case 0: frcUID = ""؛ //کار در حالت نظرسنجی اثر انگشت و rfid if (finger.getImage() == FINGERPRINT_OK) ( // اگر نتیجه اجرا برابر با ثابت FINGERPRINT_OK باشد، تصویر را بگیرید. بارگذاری صحیح تصویر)، سپس اگر (finger.image2Tz() == FINGERPRINT_OK) (//تصویر حاصل را تبدیل کنید، اگر نتیجه اجرا برابر با ثابت FINGERPRINT_OK باشد (تصویر تبدیل شده است) بیشتر می‌شویم، سپس ادامه می‌دهیم. if (finger.fingerFastSearch() == FINGERPRINT_OK) ( // در پایگاه داده اثر انگشت مطابقت پیدا کنید، اگر نتیجه اجرا برابر با ثابت FINGERPRINT_OK باشد (مطابقتی پیدا شد)، آنگاه به جلوتر می رویم frcUID = ". . . Found ID=" + String(finger.fingerID) + ", trust=" + String(finger.fingerID) + "! . . ."; Serial.println(frcUID); ) ) ) if (mfrc522.PICC_IsNewCardPresent()) ( تاخیر(100)؛ if (mfrc522.PICC_ReadCardSerial()) (//mfrc522.PICC_DumpToSerial)5(2) frcUID = ""؛ برای (بایت i = 0; i< mfrc522.uid.size; i++) { frcUID = frcUID + (mfrc522.uid.uidByte[i]); } frcUID = ". . . Found RFID UID=" + frcUID + "@ . . ."; Serial.println(frcUID); } } delay(100); // Задержка перед следующим сканированием 0,5 сек (нет смысла запускать на полной скорости) Serial.println(". . . Please put your finger on the scanner or rfid . . ."); break; case 1: Serial.println(". . . Programming mode . . ."); // Входим в режим программирования delay(400); Serial.println(". . . Programming mode . . ."); // Входим в режим программирования delay(400); Serial.println(". . . Programming mode . . ."); // Входим в режим программирования delay(400); Serial.println(". . . Programming mode . . ."); // Входим в режим программирования id = readnumber(); // Ожидание получения цифры, введённой с COM-порта if (id >= 255) ( // اگر 255 (حداکثر شناسه) سپس دوباره حالت آماده به کار را وارد کنیدState = 0;< 254) { // Если 254 то rfid иначе палец 0-253 modeState = 2; // Пытаемся отсканировать палец } else { modeState = 3; // Пытаемся отсканировать rfid uid } } break; case 2: while (!getFingerprintEnroll()); // Пытаемся получить ответ об присваивании ID modeState = 1; break; case 3: rfidYes = 0; Serial.println(". . . Put RFID in Scanner! . . ."); delay(400); Serial.println(". . . Put RFID in Scanner! . . ."); delay(400); Serial.println(". . . Put RFID in Scanner! . . ."); delay(5000); if (mfrc522.PICC_IsNewCardPresent()) { // Пытаемся отсканировать rfid uid delay(100); if (mfrc522.PICC_ReadCardSerial()) { //mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); frcUID = ""; for (byte i = 0; i < mfrc522.uid.size; i++) { frcUID = frcUID + (mfrc522.uid.uidByte[i]); } frcUID = ". . . New RFID UID=" + frcUID + "@ . . ."; rfidYes = 1; Serial.println(frcUID); delay(400); Serial.println(frcUID); delay(400); Serial.println(frcUID); delay(400); Serial.println(frcUID); } } if (rfidYes == 0) { Serial.println(". . . RFID error! . . ."); delay(400); } modeState = 1; break; } } // функция возвращает номер, введённый с COM-порта uint8_t readnumber(void) { int num = -1; // Переменная с номером, который требуется вернуть while (num < 0) { // Вход в цикл, пока переменная num не станет >= 0 while (!Serial.available()); // صبر کنید تا داده ها در بافر پورت COM ظاهر شوند در حالی که (Serial.available()) ( // حلقه بزنید تا بافر پورت COM تمام شود char c = Serial.read()؛ // کاراکتر بعدی را از پورت COM اختصاص دهید به متغیر c if (isdigit(c)) ( // اگر مقدار متغیر c یک رقم باشد، پس... اگر (num< 0) { num = 0; // Увеличиваем значение num на один порядок } else { num *= 10; } num += c - "0"; // Прибавляем к значению num цифру из переменной c } delay(5); // Задержка на 5мс, чтоб в буфер COM-порта успели догрузиться следующие символы (если таковые имеются) } } return num; // Возвращение введённого числа } uint8_t getFingerprintEnroll() { int p; // Переменная для получения результатов выполнения функций //Загрузка первого изображения отпечатка пальца p = -1; Serial.println(". . . Please put your new finger on the scanner . . ."); // Вывод сообщения "Пожалуйста положите Ваш палец на сканер" delay(400); Serial.println(". . . Please put your new finger on the scanner . . ."); // Вывод сообщения "Пожалуйста положите Ваш палец на сканер" delay(400); Serial.println(". . . Please put your new finger on the scanner . . ."); // Вывод сообщения "Пожалуйста положите Ваш палец на сканер" delay(400); Serial.println(". . . Please put your new finger on the scanner . . ."); // Вывод сообщения "Пожалуйста положите Ваш палец на сканер" while (p != FINGERPRINT_OK) { // Вход в цикл, пока переменная p не станет равна константе FINGERPRINT_OK (корректная загрузка изображения) p = finger.getImage(); // Захватываем изображение и возвращаем результат выполнения данной операции в переменную p switch (p) { // Проверка ответа... case FINGERPRINT_OK: Serial.println(" Ok!"); break; // Изображение отпечатка пальца корректно загрузилось case FINGERPRINT_NOFINGER: Serial.println(". . . Please put your new finger on the scanner . . ."); break;// Сканер не обнаружил отпечаток пальца case FINGERPRINT_PACKETRECIEVEERR: Serial.println(". . . Communication error . . ."); break; // Ошибка соединения case FINGERPRINT_IMAGEFAIL: Serial.println(". . . Imaging error Please try again . . ."); break; // Ошибка изображения default: Serial.println(". . . Unknown error Please try again . . ."); break; // Неизвестная ошибка } } //Конвертирование изображения первого отпечатка пальца p = finger.image2Tz(1); Serial.print (". . . Image converting . . ."); // Конвертируем первое изображение и возвращаем результат выполнения данной операции в переменную p switch (p) { // Проверка ответа... case FINGERPRINT_OK: Serial.println("Ok!"); 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(". . . No fingerprint on image . . ."); return p; // Ошибка конвертирования case FINGERPRINT_INVALIDIMAGE: Serial.println(". . . No fingerprint on image . . ."); return p; // Ошибка изображения default: Serial.println(". . . Unknown error . . ."); return p; // Неизвестная ошибка } //Просим убрать палец от сканера p = 0; while (p != FINGERPRINT_NOFINGER) { // Вход в цикл, пока переменная p не станет равна константе FINGERPRINT_NOFINGER (сканер не обнаружил отпечаток пальца) Serial.println(". . . Please remove your finger from the scanner . . ."); // Вывод сообщения "Пожалуйста уберите Ваш палец со сканера" delay(400); p = finger.getImage(); // Захватываем изображение и возвращаем результат выполнения данной операции в переменную p } Serial.println(" Ok!"); //Загрузка второго изображения отпечатка пальца p = -1; Serial.println(". . . Place same finger again . . ."); // Вывод сообщения "Пожалуйста положите тот же палец еще раз" delay(400); while (p != FINGERPRINT_OK) { // Вход в цикл, пока переменная p не станет равна константе FINGERPRINT_OK (корректная загрузка изображения) p = finger.getImage(); // Захватываем изображение и возвращаем результат выполнения данной операции в переменную p switch (p) { // Проверка ответа... case FINGERPRINT_OK: Serial.println(" Ok!"); break; // Изображение отпечатка пальца корректно загрузилось case FINGERPRINT_NOFINGER: Serial.println(". . . Place same finger again . . ."); break; // Сканер не обнаружил отпечаток пальца case FINGERPRINT_PACKETRECIEVEERR: Serial.println(". . . Communication error . . ."); break; // Ошибка соединения case FINGERPRINT_IMAGEFAIL: Serial.println(". . . Imaging error . . ."); break; // Ошибка изображения default: Serial.println(". . . Unknown error . . ."); break; // Неизвестная ошибка } } //Конвертирование изображения второго отпечатка пальца p = finger.image2Tz(2); Serial.print (". . . Image 2 converting . . ."); // Конвертируем второе изображение и возвращаем результат выполнения данной операции в переменную p switch (p) { // Проверка ответа... case FINGERPRINT_OK: Serial.println("Ok!"); 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(". . . No fingerprint on image . . ."); return p; // Ошибка конвертирования case FINGERPRINT_INVALIDIMAGE: Serial.println(". . . No fingerprint on image . . ."); return p; // Ошибка изображения default: Serial.println(". . . Unknown error . . ."); return p; // Неизвестная ошибка } //Создание модели (шаблона) отпечатка пальца, по двум изображениям p = finger.createModel(); Serial.print (". . . Creating model . . ."); // Создание модели (шаблона) отпечатка пальца, по двум изображениям if (p == FINGERPRINT_OK) { Serial.println(". . . Model create! Ok! . . ."); } 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; } //Сохранение, ранее созданной, модели (шаблона) отпечатка пальца, под определённым ранее, идентификационным номером p = finger.storeModel(id); //Serial.println(". . . Saving model . . ."); Serial.println(". . . Saving model . . ."); //Serial.println(". . . Saving model in ID="); Serial.print(id); Serial.print(": "); // Сохранение модели (шаблона) отпечатка пальца, по двум изображениям if (p == FINGERPRINT_OK) { frcUID = ". . . Model save in ID=" + String(id) + "! . . ."; Serial.println(frcUID); delay(1500); Serial.println(frcUID); delay(400); Serial.println(frcUID); delay(400); Serial.println(frcUID); } 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 // Ошибка записи в flash память { Serial.println(". . . Unknown error . . ."); // Неизвестная ошибка return p; } }

پایان

قیمت تبلت حدود 10000 روبل است. (در واقع از بین 7000 عدد جدید با 1 گیگ رم قابل خرید است اما با 4 گیگ 1c جابجایی آن خوشایندتر خواهد بود، من در واقع یک مورد استفاده شده را به قیمت 6000 در شرایط عالی با 1 گیگا بایت خریداری کردم اما با بهینه سازی بهینه شده است).

راهرو برای تولید مبلمان ساخته شده بود، بنابراین بدنه را در آنجا ساختم. من فکر می کنم که می توانید "مخلوط خاک اره و مقوا" را در یک فروشگاه به قیمت 1000 روبل برش دهید. و آن را با پیچ های خودکار به هم بچسبانید/با چسب چسب بزنید. به عنوان آخرین راه حل، می توانید یک جعبه آماده (مثلاً یک کابینت برق) بردارید و یک پنجره را در آنجا ببرید.

ماژول های آردوینو و غیره: حدود 2000 روبل.

لذت طوفان فکری و ساختن قیمتی ندارد!

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

حسگر اثر انگشت PQI Mini USB یک انتخاب عالی برای کسانی است که می خواهند به تجهیزات قدیمی عمری دوباره ببخشند. این اسکنر به طور خاص برای کار با ویژگی جدید Hello در دستگاه های دارای ویندوز 10 ایجاد شده است. با این حال، دستگاه از نسخه های سیستم عامل ویندوز 7 و 8 نیز پشتیبانی می کند.

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

حسگر اثر انگشت PQI Mini USB می تواند تا 10 پروفایل مختلف را ذخیره کند. این باعث می شود دستگاه برای اشتراک گذاری یا زمانی که نیاز به اسکن یک انگشت اضافی دارید (اگر انگشت "اصلی" کثیف یا زخمی شود) عالی است.

حسگر اثر انگشت PQI Mini USB با قیمت بسیار مناسبی در دسترس است و برای کسانی که به دنبال مدل استارت هستند، گزینه ای عالی است. علاوه بر این، این اسکنر به اندازه کافی قابل حمل است که بدون دردسر زیاد قابل حمل است.

اثر انگشت خوان Verifi P2000

اگر از رایانه رومیزی استفاده می کنید که در آن دسترسی به پورت های USB چندان آسان نیست، به خواننده اثر انگشت Verifi P2000 توجه کنید. به راحتی به رایانه شخصی متصل می شود و مهمتر از همه، می توان آن را برای استفاده راحت تر در نزدیکی رایانه قرار داد.

این اسکنر از فلز مقاوم در برابر ضربه ساخته شده است و برای سالهای طولانی دوام می آورد. علیرغم طراحی مقاوم، نرخ تشخیص اثر انگشت خوبی دارد. بنابراین لازم نیست دائماً موقعیت انگشت خود را تغییر دهید تا فقط یک تطابق کامل داشته باشید. در بیشتر موارد، تنها یک بار کشیدن سنسور کافی خواهد بود.

هنگام ایجاد P2000، Verifit برنامه ریزی کرد تا دستگاه را قوی و بادوام کند تا تأثیری بر روند اسکن و دقت نتایج تشخیص نداشته باشد. اثر انگشت خوان Verifi P2000 یک دستگاه نسبتا قابل حمل است که می توانید به راحتی آن را با خود حمل کنید. علاوه بر این، با تعداد بسیار بیشتری از رایانه ها نسبت به سایر مدل های مشابه سازگار است.

Kensington VeriMark

Kensington VeriMark برای یک اسکنر اثر انگشت فوق‌العاده کوچک، تقریباً همه چیزهایی را که برای یک تجربه راحت نیاز دارید، دارد. این مدل از اسکن 360 درجه پشتیبانی می کند و اندازه کوچکی دارد. اما نکته اصلی که Kensington VeriMark را بسیار ارزشمند می کند، عملکرد اضافی است.

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

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

اسکنر از کار با پورت های نسبتا قدیمی، صرف نظر از نسخه منتشر شده، پشتیبانی می کند. اگر از یک مدل با استفاده از آداپتور USB-C به USB-A استفاده می‌کنید، می‌توانید دستگاه را به یک لپ‌تاپ یا رایانه نسبتاً قدیمی که از درگاه‌های USB مدرن‌تر پشتیبانی نمی‌کند وصل کنید.

آنالایزر اثر انگشت Benss

Benss Fingerprint Reader Analyzer یکی دیگر از اسکنرهایی است که می تواند زندگی شما را آسان کند و شما را از بسیاری از مشکلات نجات دهد. به عنوان یک قاعده، مدل‌های ساده‌تر ابتدا یک عکس کنترلی می‌گیرند و پس از آن همه چاپ‌های بعدی با نتیجه اولیه مقایسه می‌شوند. این بدان معناست که اگر برای تصویر اصلی اتفاقی بیفتد (که تمام اسکن‌های دیگر با آن مقایسه می‌شوند)، احتمال تطابق نتایج نهایی بسیار کاهش می‌یابد.

Benss Fingerprint Reader Analyzer با یک الگوریتم خودآموز کار می کند که به طور خودکار پروفایل شما را با هر لمس ایجاد و به روز می کند. هر چه مدت زمان بیشتری از دستگاه استفاده کنید، نتایج دقیق تر خواهد بود. این امر فریب دادن اسکنر با اثر انگشت های جعلی را دشوارتر می کند. از آنجایی که حسگر دائما انگشت شما را اسکن می کند و پایگاه داده را به روز می کند، بلافاصله تلاش برای دسترسی غیرمجاز را تشخیص می دهد.

این یکی از موثرترین ابزارها برای مقابله با حملات هکرها است. نرخ پذیرش نادرست آن کمتر از 0.002٪ است، به این معنی که شما باید واقعاً سعی کنید دستگاه را هک کنید. در عین حال، این کار را چندان پیچیده نمی کند؛ ضریب FRR آن (نرخ رد نادرست - عدم دسترسی به شخصی که در سیستم ثبت شده است) تنها 3٪ است.

IDEM BioScan Compact

اگر به دنبال یک اسکنر با قابلیت شخصی سازی هستید، IDEM BioScan Compact را دوست خواهید داشت. برای گسترش قابلیت های اساسی آن و دریافت قابلیت های اضافی، کافی است نرم افزار ویژه ای را از وب سایت رسمی سازنده دانلود کنید.

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

حتی اگر قابلیت های اضافی را در نظر نگیرید، BioScan Compact یک مدل شایسته در نظر گرفته می شود. این دستگاه قادر است تا 10 اثر انگشت مختلف را ذخیره کند، دارای ابعاد کوچک و امنیت داخلی برای تشخیص داده های بیومتریک جعلی است.

Blucoil SecuGen Hamster Pro 20

Blucoil SecuGen Hamster Pro 20 اسکنر اثر انگشت ایده آل برای نیازهای حرفه ای است. با توجه به این واقعیت که این مدل تنظیمات امنیتی پیشرفته ای را ارائه می دهد، قیمت آن تقریباً دو برابر سایر دستگاه های موجود در لیست ما است.

علاوه بر این، این یکی از معدود اسکنرهایی است که از لینوکس رسمی پشتیبانی می کند. بنابراین مهم نیست که از چه سیستم عاملی استفاده می کنید، سنسور برای هر کاری مناسب است.

SecuGen Hamster Pro 20 یک دستگاه ضد ضربه است که در برابر خط و خش، آب و گرد و غبار محافظت می شود. اسکنر قادر است آثار باقی مانده از اسکن های قبلی را ردیابی کند و نتایج نامشخص را رد کند.

علاوه بر این، Blucoil SecuGen Hamster Pro 20 یک دستگاه صرفه جویی در انرژی است، بنابراین اگر کسی برای مدت طولانی از آن استفاده نکند، به طور خودکار خاموش می شود.

امنیت اضافی

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

برای ایجاد ارتباط با حسگر اثر انگشت از دستورالعمل های جاش هاولی (دانلود مستقیم دستورالعمل ها) استفاده شده است.

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

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

کدها – مثال چشمک زدن:

/* نمونه کتابخانه برای کنترل اسکنر اثر انگشت GT-511C3 (FPS) */ #include "FPS_GT511C3.h" #include "SoftwareSerial.h" //تنظیم سخت افزار - FPS متصل به: //پین دیجیتال 10(arduino rx، fps tx) //پین دیجیتال 11 (arduino tx - مقاومت 560 اهم fps tx - مقاومت 1000 اهم - زمین) //این خط 5v tx را به حدود 3.2v می‌رساند بنابراین ما فریم در ثانیه خود را سرخ نمی‌کنیم FPS_GT511C3 fps (10, 11); void setup())( Serial.begin(9600)؛ fps.UseSerialDebug = true؛ // بنابراین می توانید پیام ها را در صفحه نمایش اشکال زدایی سریال ببینید fps.Open(); ) void loop())( // FPS Blink LED فریم در ثانیه را تست کنید.SetLED(true)؛ // LED داخل فریم در ثانیه تأخیر (1000) را روشن کنید.

کدها - مثال ثبت نام:

/* FPS_Enroll.ino - نمونه کتابخانه برای کنترل اسکنر اثر انگشت GT-511C3 (FPS) */ #include "FPS_GT511C3.h" #include "SoftwareSerial.h" //تنظیم سخت افزار - FPS متصل به: //پین دیجیتال 10 (arduino rx, fps tx) //پین دیجیتال 11 (arduino tx - مقاومت 560 اهم fps tx - مقاومت 1000 اهم - زمین) //این خط 5 ولت tx را به حدود 3.2 ولت کاهش می دهد بنابراین ما فریم در ثانیه خود را سرخ نمی کنیم FPS_GT511C3 fps (1) یازده)؛ void setup())( Serial.begin(9600)؛ delay(100)؛ fps.Open(); fps.SetLED(true); Enroll(); ) void Enroll())( // Enroll Test // Find open ثبت نام int enrollid = 0؛ fps.EnrollStart(enrollid); // enroll Serial.print("انگشت را فشار دهید تا ثبت نام کنید #"); Serial.println(enrollid); while(fps.IsPressFinger() == false) delay( 100) ؛ bool bret = fps.CaptureFinger(true)؛ int iret = 0؛ if (bret != false) (Serial.println("Remove finger"); fps.Enroll1(); while(fps.IsPressFinger() = = true ) delay(100)؛ Serial.println ("باز هم همان انگشت را فشار دهید"؛ while(fps.IsPressFinger() == false) delay(100)؛ bret = fps.CaptureFinger(true)؛ if (bret != false) ( Serial.println ("Remove انگشت"); fps.Enroll2(); while(fps.IsPressFinger() == true) delay(100); Serial.println("انگشت را دوباره فشار دهید"); while( fps. IsPressFinger() == false) delay(100)؛ bret = fps.CaptureFinger(true)؛ if (bret!= false) (Serial.println("Remove انگشت"); iret = fps.Enroll3(); if (iret == 0) ( Serial.println("ثبت نام با موفقیت انجام شد"); ) else ( Serial.print("ثبت نام با کد خطا انجام نشد:"); Serial.println(iret); ) ) else Serial.println("گرفتن انگشت سوم ناموفق بود"); ) else Serial.println("گرفتن انگشت دوم ناموفق بود"); ) else Serial.println("گرفتن انگشت اول ناموفق بود"); ) void loop())( delay(100000);)

همگام سازی فایل:

فایل ثبت طرح:

مرحله 7: برنامه نویسی پردازنده ATtiny85

ریزتراشه ATtiny85 ارزان است و کاملاً با برد آردوینو سازگار است و احتمالاً بهترین قطعه الکتریکی است که تا کنون ساخته شده است!

یک برنامه نویس آردوینو نیز برای ریفلش کردن تراشه ATmega328 نیاز است که عملکرد صفحه نمایش LCD را کنترل می کند.

در دستگاه مونتاژ شده، پردازنده ATtiny دستورات بسیار ساده ای را انجام می دهد: سیگنال ATmega را بررسی کنید و پس از تأیید سیگنال درب گاراژ را باز کنید.

برای برنامه ریزی پردازنده باید طبق تصویر زیر با استفاده از برد برد به پروگرامر به همراه خازن 10 uF متصل شود.

و سپس دانلود کنید کد نهاییو توصیه ها را دنبال کنید دستورالعمل های High-Low Tech.

پس از آن، خروجی 13 روی برد آردوینو، متصل به LED، باید به حالت HIGH تبدیل شود تا با استفاده از نشانگر نور، عملکرد را کنترل کند.

کد نهایی برای آتینی :

//fpsAttiny توسط Nodcah //یک سیگنال مختصر از ماژول اصلی برای بستن یک رله void setup())( pinMode(2,OUTPUT)؛ //نشانگر هدایت شده از طریق 10K مقاومت pinMode(4,OUTPUT) دریافت می کند؛ //پاین ترازیستور که پین ​​گاراژ را باز می کند(0,INPUT)؛ //تاخیر ورودی(500)؛ //به چیزها زمان می دهد تا DigitalWrite(2, HIGH) راه اندازی شود؛ // LED نشانگر ) void loop())( if(digitalRead(0) )) (//الگوی ساده برای راه اندازی تاخیر ترانزیستور(125)؛ if(digitalRead(0)==false)( delay(55)؛ //زمان بندی خاموش است زیرا تایمر ATtiny کامل نیست اگر( digitalRead(0))( delay(55)؛ if(digitalRead(0)==false)(delay(55); if(digitalRead(0))(delay(55); if(digitalRead(0)==false) ( digitalWrite (4، HIGH)؛ // ترانزیستور تأخیر دکمه را فشار می دهد (1000)؛ digitalWrite (4، LOW)؛ digitalWrite (2، LOW؛ تاخیر (1000)؛ digitalWrite (2، HIGH)؛ )) ) ))))

قفل بیومتریک - کد نهایی، برش پوشش، آماده سازی گاراژساعت GPS در آردوینو قفل بیومتریک - نمودار صفحه نمایش LCD و مونتاژ



 


خواندن:



چرا یک لپ تاپ به یک SSD کوچک نیاز دارد و آیا ارزش نصب ویندوز روی آن را دارد؟

چرا یک لپ تاپ به یک SSD کوچک نیاز دارد و آیا ارزش نصب ویندوز روی آن را دارد؟

درایو SSD چقدر برای بازی ها مهم است ، چه تأثیری دارد و چه فایده ای از این فناوری دارد - این همان چیزی است که در مقاله ما مورد بحث قرار خواهد گرفت. حالت جامد...

تعمیر فلش مموری با استفاده از برنامه ها نحوه تعمیر پورت USB در لپ تاپ

تعمیر فلش مموری با استفاده از برنامه ها نحوه تعمیر پورت USB در لپ تاپ

چگونه پورت USB را تعمیر کنیم؟ پاسخ تکنسین: هنگام استفاده از رایانه، درگاه‌های USB اغلب خراب می‌شوند. اول از همه شکست می خورند...

ساختار دیسک آسیب دیده است، خواندن غیرممکن است، چه باید بکنم؟

ساختار دیسک آسیب دیده است، خواندن غیرممکن است، چه باید بکنم؟

رایانه های شخصی کاربران اغلب اطلاعات مهم را ذخیره می کنند - اسناد، عکس ها، فیلم ها، اما پشتیبان گیری از داده ها معمولاً ...

کامپیوتر از چه چیزی تشکیل شده است؟

کامپیوتر از چه چیزی تشکیل شده است؟

تاریخ انتشار: 1396/01/14 با سلام خدمت دوستان امروز به طور مفصل به طراحی واحد سیستم کامپیوتر می پردازیم. بیایید بفهمیم چه ...

فید-تصویر RSS