آموزش راه اندازی ماژول اثر انگشت fp20
به نام خدا و با سلام خدمت هموطنان گرامی!
در این مطلب میخوام آموزش راه اندازی ماژول اثر انگشت fp20 و نرم افزار تحت ویندوز رو عرض کنم، ضمن اینکه ماژول های اثر انگشت مشابه نیز به همین شکل راه اندازی می شوند…
لینک خرید ماژول fp20 و دریافت دیتاشیت ماژول
این ماژول با پروتکل ارتباطی یوزات و باودریت پیش فرض ۱۱۵۲۰۰ با میکرو کنترلر ها ارتباط برقرا میکند…!!!
تغذیه این ماژول ۳٫۳ ولت است و اما سطح ولتاژ یوزارت ۳٫۳ولت یا ۵ ولت باشد فرقی نمیکند…
مشخصات ماژول به شرح زیر است
CPU: AS602 // 120MHz clock speed, 1M Bits Flash Memory, 128KB SRAM
Fingerprint scanner : CMOS image sensors: GC0303, optical reflection principle
Fingerprint enrollment capacity : 500 -5000 pieces scalable, standard configuration for 3000
False Accept Rate (FAR) : <0.001% (Security Level Security Level 3)
False Reject Rate (FRR) : <0.1% (Security Level Security Level 3)
Than on the way : 1: N and 1:1 ratio for
Fingerprint template size : 496 bytes Byte
Security level settings : Level 1 to Level 5 can be set to the factory settings: Level 3
Processing speed : Fingerprint feature extraction takes time <0.45 seconds // 1:. N ratio of the time (3000 at full registration) <1 2 seconds
Communication Interface : UART, 3.3V–TTL level
Serial communication parameters : No parity Parity = NONE, 1 stop bit Stop B it = 1 // No Flow Control Flow Control = NONE // Baud rate 9600,19200,38400,57600,115200 (bps) // Factory setting: 115200bps
Operating Voltage : DC3.3V
Current : Less than 100mA
Work Environment : Working temperature: -10 ℃ – ۶۰ ℃ // Relative Humidity: 20% – ۸۰%
این ماژول اثر انگشت fp20 چهار سیم دارد که رنگ آنها به شرح زیر است:
سیم قرمز=۳٫۳ V
سیم مشکی=GND
سیم سفید=TX
سیم زرد=RX
به ماژول های اثر انگشت باید اطلاعات را به صورت هگز بفرستید که در ابتدا میتوانید با یک ماژول مبدل usb به سریال ماژول را به لبتاب متصل کنید و در اولین قدم led روی ماژول را روشن کنید…!!!
برای این کار شرکت سازنده ماژول نرم افزاری را ارایه کرده است میتوانید آن را از آخر این متلب دانلود کنید.
در قدم اول برای روشن و خاموش کردن led ماژول به عنوان مثال توسط میکروکنترلر atmega32 باید باودریت میکرو را روی ۱۱۵۲۰۰ قرار دهید که برای این کار باید از کریستال خارجی ۱۱٫۰۵۹۲Mhz استفاده کنید اگر به این کریستال دسترسی ندارید میتوانید با نرم افزار شرکت سازنده ماژول اثر انگشت fp20 باودریت ماژول را روی ۹۶۰۰ قرار دهید تا در این صورت حتی بتوانید با اسیلاتور داخلی ۸ مگاهرتز میکرو با ماژول ارتباط برقرار کنید…
برای تغییر باودریت ماژول fp20 توسط نرم افزار مانند زیر عمل کنید
۱-ماژول را با مبدل usb به سریال با درایور ch340 (سطح ولتاژ حتما ۳٫۳ ولت باشد) به لبتاب متصل کنید.
۲-نرم افزار (CAMA(OEM_3000 v را باز کنید و com مورد نظر خود را انتخاب کنید و باودریت را روی ۱۱۵۲۰۰ قرار دهید.
۳-دکمه connect را بزنید و صبر کنید تا نرم افزار به ماژول fp20 متصل شود.
۴-از قسمت کشویی کامند ها گزینه set baud rate را اتخاب کنید.
۵-وقتی قسمت BaudRate باز شد در این قسمت گزینه ۹۶۰۰ را انتخاب کرده سپس بر روی گزینه Send کلیک کنید.
۶-نرم افزار را disconnect و ماژول را ریست کنید(تغذیه را قطع و دوباره وصل کنید).
۷-دوباره تغذیه ماژول را متصل کنید و در نرم افزار پس انتخاب com مورد نظر و باودریت۹۶۰۰ روی connect کلیک کنید که در این صورت اگر اتصال انجام شد باودریت با موفقیت تغییر کرده است.
در قسمت کامند های نرم افزار چند تابع کاربردی رو که خودم تست کردم توضیح میدم.
- تابع Enroll one time :این تابع با گرفتن شماره خانه وظیفه ذخیره کردن اثر انگشت را دارد و تفاوت ان با enroll این است که فقط با یک بار قرار دادن انگشت بر روی ماژول آن را دخیره میکند در حالی که تابع enroll سه بار انگشت را خوانده و اثر انگشت را با کیفیت تربیشتر ذخیره میکند برای استفاده از این تابع میتوانید کد هگز زیر را در یک حلقه فور۲۴ تایی(از ۰ تا ۲۳) از میکرو مانند شکل زیر putchar کنید ,دقت کنید که بیت های ۷ و ۸ برای وارد کردن محل ذخیره اثر انگشت است و همینطور به جای بیت های ۲۳ و ۲۴ هم شماره انگشت را + ۷ را قرار میدهیم که با تابع زیر میتوانید اطلاعات را بفرستید
1 2 3 4 5 6 7 8 9 10 11 |
unsigned char enroll[24]={0x55, 0xAA, 0x04, 0x01, 0x02, 0x00, 0, 0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0, 0}; enroll[6]=khanezakhire; enroll[22]=khanezakhire+6; enroll[23]=0x01; if(khanezakhire+6>=256) enroll[23]=0x02; for(i=0;i<24;i++) { putchar(enroll[i]); } |
۱-حالت اول
1 |
0xaa,0x55,0x04,0x01,0x04,0x00,0x01,0x00,0x21,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x070,0x00, 0x00,0x00,0x00,0x2a,0x01 |
این پاسخ که شامل ۲۴ کاراکتر است(از صفر تا ۲۳) به این معنی است که انگشت مورد نظر به درستس خوانده نشده است.
۲-حالت دوم
1 |
0xaa,0x55,0x04,0x01,0x04,0x00,0x01,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1d,0x01 |
این پاسخ ماژول به این معناست محل خانه دخیره پر است که شامل ۲۴ کاراکتر است
۳- در غیر این صورت ماژول پاسخی شامل ۴۸ کاراکتر مانند زیر می دهد که بیت شماره ۳۳ (شمارش از ۱) شماره خانه انگشت ذخیره شده را بیان میکند
1 |
AA 55 04 01 04 00 00 00 F4 FF 00 00 00 00 00 00 00 00 00 00 00 00 FB 02 AA 55 04 01 04 00 00 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 10 01 |
1 |
AA 55 04 01 04 00 00 00 F4 FF 00 00 00 00 00 00 00 00 00 00 00 00 FB 02 AA 55 04 01 04 00 00 00 09 00 00 00 00 00 00 00 00 00 00 00 00 00 11 01 |
1 |
AA 55 04 01 04 00 00 00 F4 FF 00 00 00 00 00 00 00 00 00 00 00 00 FB 02 AA 55 04 01 04 00 00 00 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 12 01 |
در کد اولی انگشت در خانه ۸ و در دومی درخانه ۹ و در سومس درخانه ۱۰(۰A) ذخیره شده است که برای دریافت این ۴۸ کاراکتر از ماژول میتوانید در دو حلقه فور ۲۴ تایی(از صفر تا ۲۳) در میکرو عمل getchar را مانند شکل زیر انجام دهید
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
unsigned char data[24]; for(i=0;i<24;i++) data[i]=getchar(); if(اگر24 کاراکتر دریافتی با حالت اول برابر بود) { // انگشت مورد نظر به درستی خوانده نشده است } else if(اگر24 کاراکتر دریافتی با حالت دوم برابر بود) { //خانه مورد نظر برای ذخیره انگشت پر است } else { //انگشت به درستی خوانده شده //حلقه فور دومی برای گرفتن 24 کاراکتر بعدی for(i=0;i<24;i++) data[i]=getchar(); } |
- تابع Identify: این تابع عمل شناسایی انگشت را انجام میدهد ودر صورت وجود انگشت شماره template آن را می دهد برای عمل شناسایی کد هگز زیر رو میفرستیم
1 |
0x55, 0xAA, 0X02, 0X01, 0X00, 0X00, 0X00, 0X00, 0X00,0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X02, 0X01 |
در این حالت led ماژول برای سناسایی انگشت روشن می شود و پس از شناسایی سه پاسخ مانند شکل زیر می دهد
۱-حالت اول “error”
1 2 |
unsigned char Error[24]={0xaa,0x55,0x02,0x01,0x04,0x00,0x01,0x00,0x21, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x01}; |
در این حالت انگشت به درستی خوانده نشده است
۲-حالت دوم “not register”
1 2 |
unsigned char NotReg[24]={0xaa,0x55,0x02,0x01,0x04,0x00,0x01,0x00,0x12, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x01}; |
این پاسخ ماژول به معنای این است که انگشت شناسایی سناسایی شده ذخیره نشده است.
۳-حالت سوم”empty”
1 2 |
unsigned char Empty[24]={0xAA,0x55,0x02,0x01,0x04,0x00,0x01,0x00,0x15, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x01}; |
این پاسخ ماژول به معنای خالی بودن کلیه template ها است.
۴-حالت “تایید عملیات”
1 2 |
unsigned char taed[24]={0xAA,0x55,0x02,0x01,0x04,0x00,0x00,0x00,0xf4,0xff, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf9,0x02}; |
در این حالت ماژول ۲۴ کاراکتر به معنای درست بودن عملیات مانند کد بالا میفرستد و بلافاصله ۲۴ کاراکتر دیگر می فرستد که در بیت نهم (شمارش از ۱) شماره خانه انگشت ذخیره شده مانند شکل زیر قرار دارد که در اینجا ۰۱ است.
1 |
AA 55 02 01 04 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 07 01 |
مانند کد شکل زیر میتوانید خانه انگشت ذخیره شده را داشته باشید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
for(i=0;i<24;i++) data[i]=getchar(); if(اگر24 کاراکتر دریافتی با حالت اول یعنی خطا برابر بود) { //خطا در خواندن انگشت } else if(اگر24 کاراکتر دریافتی با حالت دوم برابر بود) { //انگشت مورد نظر ذخیره نشده است } else if(اگر24 کاراکتر دریافتی با حالت سوم برابر بود) { //کل خانه ها خالی است و هیچ انگشتی ذخیره نشده است { else(اگر24 کاراکتر دریافتی با حالت چهارم یعنی تاییدبودن برابر بود) { //انگشت به درستی خوانده شده //حلقه فور دومی برای گرفتن 24 کاراکتر بعدی for(i=0;i<24;i++) data[i]=getchar(); khanezakhireshode=data[8]; } |
- تابع Clear all template: با فرستادن کد هگز زیر کل اطلاعات انگشت های ذخیره شده در ماژول پاک می شود
1 2 |
0x55,0xAA,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x06,0x01 |
در این حالت ماژول پس از پاک کردن تمامی اطلاعات کد هگز ۲۴ کاراکتری مانند شکل زیر میفرستد.
1 |
AA 55 04 01 04 00 01 00 14 00 00 00 00 00 00 00 00 00 00 00 00 00 1D 01 |
همچنین شما میتوانید خانه ای خاص رو که انگشت در اون ذخیره شده رو پاک کنید که میتونید به دیتاشیت ماژول مراجعه کنید
نکته ۱: هر وقت هم خواستید دستوری که برای ماژول فرستادید رو کنسل کنید میتونید کد هگز زیر رو به ماژول بفرستید
1 |
55 AA 30 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 01 |
نکته ۲: برای مقایسه دو رشته هم میتونید از تابع زیر استفاده کنید یا هم میتونید از تابع آماده ای که در کتابخونه string.h وجود داره استفاده کنید
1 2 3 4 5 6 7 8 9 10 11 12 13 |
char chek2str(unsigned char *str1,unsigned char *str2) { char i=0,j=1; for(i=0;str1[i]!='\0';i++) { if(str1[i]!=str2[i]) { j=0; break; } } return j; } |
در صورت مساوی بودن دو رشته به طول رشته اولی، تابع فوق عدد ۱ و در صورت نامساوی بودن عدد ۰ را برمیگرداند!!!
ازاین تابع میتونید در if ها استفاده کنید..!!!
مطالب مرتبط : لینک پروژه راه اندازی FP20 با میکروکنترلر LPC1768
مطالب پیشنهادی:
لینک مطلب بخش نرم افزار پروژه ماژول بلوتوث که تحت #C نوشته شده است.
لینک مطلب بخش سخت افزار پروژه ارتباط ماژول بلوتوث با میکروکنترلر lpc1768 با برنامه اندرویدی و #C )
لینک مطلب بخش نرم افزار پروژه ماژول بلوتوث که تحت اندروید نوشته شده است.
موفق و موثر باشید.
یا علی
برادر عالی بود……..کاش سورس کامل برنامه رو میزاشتی تا بیشتر آنالیز کنیم……..مرسی
سورس کاملش رو برا lpc1768 و avr با کتابخونه کاملش در سایت قرار دادم.