Arduino Quet Van Tay [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HỒ CHÍ MINH KHOA CƠ KHÍ VÀ CÔNG NGHỆ

TIỂU LUẬN TỐT NGHIỆP

ĐỀ TÀI:

QUẢN LÝ VÀ CẢNH BÁO THÔNG TIN SINH VIÊN BẰNG MÁY QUÉT VÂN TAY

GVHD: NGUYỄN ĐĂNG KHOA SVTH: NGUYỄN HÙNG DUY MSSV: 17153023

TP.HỒ CHÍ MINH-5/2021

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HỒ CHÍ MINH KHOA CƠ KHÍ VÀ CÔNG NGHỆ

TIỂU LUẬN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KĨ THUẬT CƠ ĐIỆN TỬ

ĐỀ TÀI:

QUẢN LÝ VÀ CẢNH BÁO THÔNG TIN SINH VIÊN BẰNG MÁY QUÉT VÂN TAY

GVHD: NGUYỄN ĐĂNG KHOA SVTH: NGUYỄN HÙNG DUY MSSV: 17153023

TP.HỒ CHÍ MINH-5/2021

TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HỒ CHÍ MINH

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

KHOA CƠ KHÍ VÀ CÔNG NGHỆ

ĐỘC LẬP-TỰ DO- HẠNH PHÚC Tp.Hồ Chí Minh, ngày 11 tháng 5 năm 2021

NHIỆM VỤ TIỂU LUẬN TỐT NGHIỆP Họ và tên sinh viên: Nguyễn Hùng Duy

MSSV: 17152023

Chuyên ngành: Công nghệ kĩ thuật cơ điện tử Hệ đào tạo: Chính quy Khóa :2017

Lớp: DH17CD

I. TÊN ĐỀ TÀI: QUẢN LÝ VÀ CẢNH BÁO THÔNG TIN SINH VIÊN BẰNG MÁY QUÉT VÂN TAY II. NHIỆM VỤ: - Tìm hiểu và nghiên cứu về cấu tạo, nguyên lý hoạt động, chức năng của các module Arduino, cảm biến vân tay R307, Module ESP8266 Mode MCU V3, mạch hạ áp LM2965 , ma trận phím. - Tìm hiểu và nghiên cứu về cách lập trình Web Server, Exel , tìm hiểu về ngôn ngữ HTML, CSS, PHP, cơ sở dữ liệu MySQL để tạo nên một trang Web hoàn chỉnh. - Cách thiết kế và thi công một mô hình hoàn thiện. - Thiết kế hệ thống điều khiển, lưu đồ giải thuật và chương trình điều khiển mô hình. - Thiết kế hoàn thiện mô hình thực tế. - Chạy thử nghiệm mô hình hệ thống. - Cân chỉnh mô hình hệ thống. - Viết sách luận văn. - Bảo vệ tiểu luận tốt nghiệp tốt nghiệp. III. NGÀY GIAO NHIỆM VỤ: IV. NGÀY HOÀN THÀNH NHIỆM VỤ: V. HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: NGUYỄN ĐĂNG KHOA CÁN BỘ HƯỚNG DẪN

3

TRƯỜNG ĐẠI HỌC NÔNG LÂM TP.HỒ CHÍ MINH

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

KHOA CƠ KHÍ VÀ CÔNG NGHỆ

ĐỘC LẬP-TỰ DO- HẠNH PHÚC Tp.Hồ Chí Minh, ngày 11 tháng 5 năm 2021

LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ và tên sinh viên:…………………………………………………………………… Lớp: ……………………………………………..MSVV: …………………………. Tên đề tài: ………………………………………………………………………………………… …………………………………………………………………………………………

Tuần/ngày

Nội dung

Xác nhận GVHD

GV HƯỚNG DẪN (Ký và ghi rỏ họ tên )

4

LỜI CAM ĐOAN

Đề tài này là do sinh viên Nguyễn Hùng Duy tự thực hiện, dựa vào một số tài liệu trước đó và không sao chép từ tài liệu hay công trình nào đã có trước đó.

Người thực hiện đề tài

Nguyễn Hùng Duy

5

LỜI CẢM ƠN

Sau quá trình tìm hiểu, nghiên cứu và thực hiện đề tài đồ án tốt nghiệp và hoàn thành đúng tiến độ, chúng em xin chân thành gửi lời cảm ơn sâu sắc nhất đến quý thầy cô, gia đình và những người anh, người bạn đã hết mình giúp đỡ, đưa ra những lời khuyên, lời động viên trong những lúc khó khăn. Chúng em xin gửi lời cảm ơn đến thầy Nguyễn Đăng Khoa, giảng viên trường Đại Học Nông Lâm TP.Hồ Chí Minh đã hướng dẫn và tạo mọi điều kiện điều kiện để nhóm có thể thực hiện tốt đề tài của mình. Và chúng em cũng xin gửi lời tri ân đến các thầy cô trong khoa Điện tử-Công nghệ của Đại Học Nông Lâm TP.Hồ Chí Minh đã tận tình dạy dỗ và giảng dạy cho chúng em những kiến thức cơ bản đến nâng cao tạo cho chúng em một cơ sở kiến thức vững vàng để hoàn thành đề tài này. Gia đình luôn là nguồn động lực và là nguồn cảm hứng để chúng em liên tục phấn đấu và hoàn thành đề tài, xin cảm ơn đấng sinh thành đã luôn động viên chúng em trong những lúc bế tắc và chán nản nhất. Và cuối cùng chúng em xin cảm ơn các anh, chị đi trước và bạn bè đã có những lời khuyên, lời góp ý chân thành để đề tài của chúng em có thể hoàn thiện hơn. Một lần nữa, chúng em xin cảm ơn tất cả mọi người đã luôn ở bên cạnh và giúp đỡ chúng em, tạo động lực để chúng em hoàn thành tốt đề tài này.

Xin chân thành cảm ơn

6

MỤC LỤC TÓM TẮT..................................................................................................................12 CHƯƠNG 1: TỔNG QUAN.....................................................................................13 1.1. Đặt vấn đề.....................................................................................................13 1.2. Mục tiêu..........................................................................................................14 1.3. Nội dung thực hiện........................................................................................14 1.4. Bố cục.............................................................................................................15 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT........................................................................16 2.1. TỔNG QUAN VỀ ARDUINO......................................................................16 2.1.1. Giới thiệu.....................................................................................................16 2.1.2. Phần cứng....................................................................................................17 2.2. NHẬN DẠNG VÂN TAY..............................................................................17 2.2.1. Giới thiệu sơ lược về dấu vân tay và nhận dạng vân tay..............................17 2.2.2. Việc ứng dụng công nghệ nhận dạng vân tay hiện nay................................18 2.2.3. Nguyên lý hoạt động cơ bản của nhận dạng vân tay....................................18 2.2.4. Các bước xử lý trong quá trình nhận dạng vân tay......................................19 2.3. GIỚI THIỆU VỀ PHẦN CỨNG..................................................................21 2.3.1. Arduino Mega 2560.....................................................................................21 2.3.2. Module cảm biến vân tay R307 (Finger print R307)...................................24 2.3.3. Bàn phím ma trận 3x4 (Keypad 3x4)...........................................................32 2.3.4. Màn hình LCD 1602....................................................................................34 2.3.5. Mạch chuyển giao tiếp LCD 1602...............................................................35 2.3.6. Module ESP 8266 MCU V3........................................................................36 2.3.7. Mạch hạ áp LM2596...................................................................................41 CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ............................................................43 7

3.1. GIỚI THIỆU..................................................................................................43 3.2. TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG.................................................43 3.2.1. Thiết kế sơ đồ khối hệ thống.......................................................................43 3.2.2. Tính toán và thiết kế mạch..........................................................................44 3.2.3. Sơ đồ nguyên lý toàn mạch.........................................................................48 CHƯƠNG 4: THI CÔNG HỆ THỐNG...................................................................50 4.1. ĐÓNG GÓI VÀ THI CÔNG MÔ HÌNH.....................................................50 4.1.1. Đóng gói bộ điều khiển...............................................................................50 4.1.2. Thi công mô hình........................................................................................50 4.2. LẬP TRÌNH HỆ THỐNG.............................................................................51 4.2.1. Lưu đồ giải thuật.........................................................................................51 4.2.2. Phần mềm lập trình cho vi điều khiển.........................................................57 4.2.3. Phần mềm Exel............................................................................................61 4.3. VIẾT TÀI LIỆU HƯỚNG DẪN SỬ DỤNG, THAO TÁC.........................61 CHƯƠNG 5: KẾT QUẢ, NHẬN XÉT, ĐÁNH GIÁ...............................................63 5.1. KẾT QUẢ.......................................................................................................63 5.2. Nhận xét và đánh giá.....................................................................................67 CHƯƠNG 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN.........................................69 6.1. Kết luận..........................................................................................................69 6.2. HƯỚNG PHÁT TRIỂN................................................................................70 TÀI LIỆU THAM KHẢO.........................................................................................71 PHỤ LỤC................................................................................................................... 72

8

DANH SÁCH CÁC HÌNH Hình 2.1: Các loại Arduino..........................................................................................16 Hình 2.2: Sơ đồ quá trình xử lý ảnh.............................................................................19 Hình 2.3: Sơ đồ quá trình so sánh vân tay....................................................................20 Hình 2.4: Sơ đồ các chân kết nối trên Arduino Mega 2560.........................................22 Hình 2.5: Mạch Arduino Mega....................................................................................23 Hình 2.6: Module cảm biến vân tay R305...................................................................25 Hình 2.7: Giao thức truyền thông của R307................................................................28 Hình 2.8: Định dạng gói dữ liệu..................................................................................30 Hình 2.91: Sơ đồ nối dây và hình ảnh thực tế của bàn phím ma trận 3x4....................32 Hình 2.10: Màn hình LCD 1602 và các chân kết nốt...................................................34 Hình 2.11: Mạch chuyển giao tiếp LCD 1602.............................................................35 Hình 2.12: Sơ đồ các chân kết nối của Module ESP 8266...........................................37 Hình 2.13: Mạch hạ áp LM2596..................................................................................41 Hình 2.14: Sơ đồ chân kết nối của mạch hạ áp LM2596.............................................41 Y

Hình 3.1: Sơ đồ khối hệ thống.....................................................................................43 Hình 3.2: Khối xử lý trung tâm sử dụng board Arduino Mega 2560...........................44 Hình 3.3: Sơ đồ nguyên lý Cảm biến vân tay kết nối Arduino Mega...........................46 Hình 3.4: LCD 12x6....................................................................................................46 Hình 3.5: Mạch chuyển giao tiếp LCD sang I2C.........................................................47 Hình 3.6: Hình ảnh thực tế của Adapter 12V 3A.........................................................47 Hình 3.7: Module hạ áp LM2596.................................................................................48 Hình 3.8: Sơ đồ chuyên lý toàn mạch..........................................................................49 Hình 4.1: Sơ đồ bố trí linh kiện mặt trước mô hình.....................................................50 9

Hình 4.2: Hình dạng bên ngoài mô hình......................................................................50 Hình 4.3: Hình dạng bên trong mô hình.......................................................................51 Hình 4.4: Lưu đồ menu................................................................................................52 Hình 4.5: Lưu đồ quét vân tay.....................................................................................54 Hình 4.6: Lưu đồ truyền dữ liệu lên wed.....................................................................55 Hình 4.7: Lưu đồ quản trị............................................................................................56 Hình 4.8: Giao diện lập trình arduino..........................................................................57 Hình 4.9: Arduino Toolbar..........................................................................................57 Hình 4.10: Giao diện Web...........................................................................................60 Hình 4.11: Excel..........................................................................................................61

Y

Hình 5.1: Phần check vân tay......................................................................................64 Hình 5.2: Phần thêm vân tay và xóa vân tay................................................................64 Hình 5.3: Phần quản lí Admin.....................................................................................64 Hình 5.4: Đưa ngón tay vào cảm biến..........................................................................65 Hình 5.5: Hệ thống xác nhận vân tay...........................................................................65 Hình 5.6: Phần thêm vân tay và xóa vân tay................................................................65 Hình 5.7: Phần nhập mật mã........................................................................................65 Hình 5.8: Phần thêm vân tay........................................................................................66 Hình 5.9: Thao tác thêm vân tay..................................................................................66 Hình 5.10: Phần xóa vân tay........................................................................................66 Hình 5.11: Phần hiển thị thông tin quét vân tay trên wed server..................................66 Hình 5.12: Hệ thống cảnh báo sinh viên......................................................................67

10

DANH SÁCH CÁC BẢN Bảng 2.1: Các chân kết nối của Module R307.............................................................27 Bảng 2.2: Định dạng gói dữ liệu..................................................................................31 Bảng 2.3: Bảng thông tin các chân kết nối của Module ESP 8266..............................38 Bảng 2.4: Bảng thông tin chân kết nối của mạch hạ áp LM2596.................................42

11

TÓM TẮT Ngày nay, với sự phát triển vượt bậc của khoa học công nghệ, kéo theo các công nghệ nhận dạng sinh trắc học phát triển. Do tính bảo mật cũng như giá thành không quá đắt nên công nghệ nhận dạng vân tay được được sử dụng rộng rãi trong đời sống. Công nghệ nhận dạng vân tay được tích hợp trong nhiều thiết bị điện tử mang lại những ứng dụng cần thiết cho nhu cầu của con người. Những ứng dụng hiện hữu của công nghệ nhận dạng vân tay như quét vân tay để đóng mở cửa, quản lí số lượng cá nhân ra vào hay điểm danh chấm công trong một công ty, bệnh viện hay trường học,… Được sự gợi ý từ giáo viên hướng dẫn cũng như mong muốn tìm hiểu các công nghệ đang phát triển trên thế giới. Nên nhóm thực hiện đồ án này với mong muốn chế tạo ra một hệ thống giám sát và cảnh báo thời gian ra vào lớp học của sinh viên thông qua việc quét vân tay. Hệ thống quét vân tay sử dụng kit Arduino được giám sát và cảnh báo bằng máy tính qua Internet bao gồm: Quá trình quét vân tay sẽ được gửi lên Internet nhằm thống kê thời gian ra vào lớp học, số lần đi trễ, số ngày vắng, thông tin sinh viên, giảng viên… Hệ thống cho phép thêm vân tay hay xóa vân tay người dung, đổi mật khẩu,… Hệ thống sẽ gửi cảnh báo về mail của người dùng về thời gian ra vào cũng như số ngày trễ, vắng thông qua ứng dụng Exel. Mô hình sử dụng kit Arduino Mega làm vi điều khiển trung tâm để điều khiển các module mở rộng như cảm biến vân tay R307, Module ESP8266, ma trận phím,… Người dùng dễ dàng tương tác sử dụng thông qua cảm biến vân tay, ma trận phím. Giám sát và cảnh báo người dùng thông qua mạng Internet.

12

CHƯƠNG 1: TỔNG QUAN

CHƯƠNG 1: TỔNG QUAN 1.1. Đặt vấn đề Trong thời đại ngày nay, sự phát triển không ngừng của khoa học kỹ thuật đã giúp cho con người thuận tiện hơn trong các công việc hằng ngày. Với sự bùng nổ về công nghệ thông tin, quá trình toàn cầu hóa diễn ra nhanh chóng, sự bảo mật riêng tư thông tin cá nhân cũng như để nhận biết một người nào đó trong hàng tỉ người trên trái đất đòi hỏi phải có một tiêu chuẩn, hệ thống đảm nhận các chức năng đó. Công nghệ sinh trắc ra đời và đáp ứng được các yêu cầu trên. Nhiều công nghệ sinh trắc đã và đang được phát triển, một số chúng đang được sử dụng trong các ứng dụng thực tế và phát huy hiệu quả cao. Các đặc trưng sinh trắc thường được sử dụng là vân tay, gương mặt, mống mắt, tiếng nói. Mỗi đặc trưng sinh trắc có điểm mạnh và điểm yếu riêng, nên việc sử dụng đặc trưng sinh trắc cụ thể là tùy thuộc vào yêu cầu của mỗi ứng dụng nhất định. Nhận dạng vân tay được xem là một trong những kỹ thuật nhận dạng hoàn thiện và đáng tin cậy nhất. Với việc kế thừa và phát triển từ đề tài trước đó “Thiết kế và thi công hệ thống đóng mở cửa bằng vân tay sử dụng kit Arduino được giám sát bằng máy tính thông qua Internet”., nhóm sinh viên quyết định thực hiện mở rộng thêm với tên đề tài “QUẢN LÝ VÀ CẢNH BÁO SINH VIÊN THÔNG QUA HỆ THỐNG QUÉT VÂN TAY” nhằm mục đích kiểm soát tốt hơn trong việc quản lý sinh viên trong trường học cũng như thông báo, cảnh báo cho sinh viên biết được số lần vi phạm của mỗi sinh viên trong quá trình tham gia hoạt động học tập trên lớp. Dấu vân tay của mỗi cá nhân là độc nhất và không thay đổi trong suốt cuộc đời. Vân tay là một tham số sinh học bất biến theo tuổi tác đặc trưng cho mỗi cá thể. Mạng Internet đang ngày càng phát triển, nhờ có nó mà cuộc sống và công việc của con người ngày càng hiện đại hơn. Vì vậy, việc truyền dữ liệu lên mạng quản lý dữ liệu vân tay bằng Internet trở nên tiện lợi, nhanh chóng và chính xác. Mặt khác, việc phát triển không ngừng của vi xử lý đã cho ra đời nhiều loại sản phẩm thông minh nhỏ gọn, tích hợp nhiều chứ năng cho người dùng dễ sử dụng. Không thể không kể đến kit Arduino, một sản phẩm được sử dụng trên toàn cầu và 13

CHƯƠNG 1: TỔNG QUAN có cộng đồng người dùng rất lớn. Kit Arduino có thể kết hợp với nhiều module khác để tạo nên những ứng dụng thiết thực cho cuộc sống hiện đại ngày nay. Với những đặc tính trên, nhóm đã quyết định thực hiện mô hình bao gồm Arduino, module cảm biến vân tay và ma trận phím để làm một hệ thống quét vân tay quản lí sinh viên và gửi dữ liệu lên Internet, cảnh báo số lần vi phạm của sinh viên thông qua việc mail thông báo cho sinh viên. 1.2. Mục tiêu Tìm hiểu và nghiên cứu về kit Arduino, module cảm biến vân tay R307, thiết bị điện và cách kết nối giữa các module để hoàn thành mô hình hoàn thiện. Xây dựng hệ thống quét dấu vân tay để điều khiển đóng mở cửa qua cảm biến vân tay và dữ liệu vân tay sẽ được gửi lên Internet thông qua module ESP8266. Dữ liệu vân tay, thống kê thời gian ra vào, số lần ra vào, số lần trễ so với quy định của người dùng sẽ được quản lý thông qua Internet. Cảnh báo sinh viên ra số lần ra vào, số lần trễ, vắng bằng cách gửi cảnh báo về mail của người dùng. 1.3. Nội dung thực hiện Nội dung 1: Tìm hiểu và nghiên cứu về cấu tạo phần cứng, nguyên lí hoạt động, tính năng của các module Adruino, cảm biến vân tay R307, ma trận phím, ESP2688. Nội dung 2: Tìm hiểu và nghiên cứu về lập trình Wed, Exel, cơ sở dữ liệu Database, gửi thông tin đến gmail sinh viên. Nội dung 3: Các giải pháp thiết kế hệ thống và thi công mô hình. Nội dung 4: Thiết kế hệ thống điều khiển, lưu đồ giải thuật và chương trình điều khiển mô hình hệ thống. Nội dung 5: Thiết kế hoàn chỉnh mô hình thực tế. Nội dung 6: Tiến hành chạy thử nghiệm mô hình hệ thống. Nội dung 7: Cân chỉnh mô hình hệ thống. 14

CHƯƠNG 1: TỔNG QUAN Nội dung 8: Viết sách luận văn. Nội dung 9: Bảo vệ tiểu luận tốt nghiệp. 1.4. Bố cục Chương 1: Tổng quan Trình bày về đặt vấn đề dẫn nhập lý do chọn đề tài, mục tiêu, nội dung nghiên cứu,các giới hạn thông số và bố cục đồ án. Chương 2: Cơ sở lí thuyết Trình bày về các lý thuyết có liên quan đến các vấn đề mà đề tài sẽ dùng để thực hiện thiết kế, thi công cho đề tài. Chương 3: Tính toán và thiết kế Giới thiệu tổng quan về các yêu cầu của đề tài mà mình thiết kế và các tính toán, thiết kế gồm những phần nào. Như: thiết kế sơ đồ khối hệ thống, sơ đồ nguyên lý toàn mạch, tính toán thiết kế mạch. Chương 4: Thi công hệ thống Trình bày về quá trình vẽ mạch in lắp ráp các thiết bị, đo kiểm tra mạch, lắp ráp mô hình. Thiết kế lưu đồ giải thuật cho chương trình và viết chương trình cho hệ thống. Hướng dẫn quy trình sử dụng hệ thống. Chương 5: Kết quả-Nhận xét-Đánh giá Trình bày về những kết quả đã được mục tiêu đề ra sau quá trình nghiên cứu thi công. Từ những kết quả đạt được để đánh giá quá trình hoàn thành được bao nhiêu phần trăm. Chương 6: Kết luận và hướng phát triển Trình bày về những kết quả mà đồ án đạt được, những hạn chế, từ đó rút ra kết luận và hướng phát triển để giải quyết các vấn đề tồn đọng để đồ án hoàn thiện hơn.

15

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1. TỔNG QUAN VỀ ARDUINO

Hình 2.1: Các loại Arduino 2.1.1. Giới thiệu -

Arduino thật ra là một bo mạch vi xử lý được dùng để lập trình tương tác với các thiết bị phần cứng như cảm biến, động cơ hoặc các thiết bị khác. Đặc điểm nổi bật của Arduino là môi trường phát triển ứng dụng cực kỳ dễ sử dụng, với một ngôn ngữ lập trình có thể học một cách nhanh chóng ngay cả với người ít am hiểu về điện tử và lập trình cũng có thể sử dụng một cách dễ dàng. Arduino có mức giá thấp, phù hợp với nhu cầu người dùng, có tính chất nguồn mở và cộng đồng người dùng đông đảo. Với lợi thế đến từ giá thành cũng như lợi thế về cộng đồng người dùng, không quá ngạc nhiên khi được biết số người sử dụng Arduino trải rộng từ học sinh phổ thông đến sinh viên đại học.

-

Board mạch Arduino được sử dụng để thực hiện nhiều ứng dụng như: cánh tay robot, điều khiển và giám sát nhiệt độ độ ẩm phòng thí nghiệm, điều khiển động cơ đóng mở cửa, ... 16

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1.2. Phần cứng -

Phần cứng bao gồm một board mạch nguồn mở được thiết kế trên nền tảng vi xử lý AVR Atmel 8-bit, hoặc ARM Atmel 32-bit. Board Arduino sẽ đưa ra hầu hết các chân I/O của vi điều khiển để sử dụng cho những mạch ngoài.

-

Những Model hiện tại được trang bị gồm 1 cổng giao tiếp USB, 6 chân đầu vào analog, 14 chân I/O kỹ thuật số tương thích với nhiều board mở rộng khác nhau giúp dễ dàng lập trình và có thể mở rộng với các mạch khác, các module thêm vào có thể dễ dàng chuyển đổi, được gọi là shield. Vài shield kết nối với board Arduino trực tiếp thông qua các chân khác nhau, nhưng nhiều shield được định địa chỉ thông qua serial bus I2C, nhiều shield có thể được xếp chồng và sử dụng dưới dạng song song. Arduino chính thức thường sử dụng các dòng chip MegaAVR, đặc biệt là ATMega8, ATMega168, ATMega328, ATMega1280, và ATMega2560.

-

Theo nguyên tắc, khi sử dụng phần mềm Arduino, tất cả các board được lập trình thông qua một kết nối RS-232, nhưng cách thức thực hiện lại tùy thuộc vào đời phần cứng. Các board Serial Arduino có chứa một mạch chuyển đổi giữa RS-232 sang TTL. Các board Arduino hiện tại được lập trình thông qua cổng USB, thực hiện thông qua chip chuyển đổi USB-to-serial như là FTDI FT232.

2.2. NHẬN DẠNG VÂN TAY 2.2.1. Giới thiệu sơ lược về dấu vân tay và nhận dạng vân tay a. Khái niệm về dấu vân tay -

Vân tay là do các gai da đội lớp biểu bì lên mà thành. Đó là nơi tập kết miệng các tuyến mồ hôi, tuyến bã nhờn… Nó đã định hình khi con người còn là cái thai 4 tháng trong bụng mẹ. Khi đứa bé ra đời, lớn lên, vân tay được phóng đại nhưng vẫn giữ nguyên dạng cho đến khi về già. Nếu tay có bị bỏng, bị thương, bị bệnh thì khi lành, vân tay lại tái lập y hệt như cũ. Chỉ khi có tổn thương sâu 17

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT huỷ hoại hoàn toàn, sẹo chằng chịt mới xoá mất vân tay.Vân tay không ai giống ai, đặc sắc nhất là vân ngón cái và ngón trỏ. b. Giới thiệu về nhận dạng vân tay -

Từ xa xưa, con người đã nhận ra mỗi cá nhân đều có một vân tay riêng nhưng chưa có một cơ sở khoa học nào để nghiên cứu và nhận dạng. Nhưng đến thế kỷ 16, các kỹ thuật vân tay khoa học hiện đại đã xuất hiện và từ đó các lí thuyết và chương trình mô tả, nhận dạng vân tay mới phát triển mau chóng. Năm 1888, Francis Galton giới thiệu các đặc trưng chi tiết phục vụ cho đối sánh vân tay.

-

Nhưng đến đầu thế kỉ 20, nhận dạng vân tay chính thức được chấp nhận như một phương pháp nhận dạng cá nhân có giá trị và trở thành tiêu chuẩn trong pháp luật. Ví dụ, năm 1924 FBI đã thiết lập một cơ sở dữ liệu có 810.000 thẻ vân tay.

2.2.2. Việc ứng dụng công nghệ nhận dạng vân tay hiện nay -

Trên thế giới hiện nay đã xuất hiện nhiều sản phẩm công nghệ cao sử dụng phương pháp nhận dạng vân tay như khóa vân tay, máy chấm công vân tay, máy tính xách tay, điện thoại thông minh. Tuy nhiên đây vẫn là vấn đề còn chưa được nghiên cứu nhiều ở Việt Nam. Ở nước ta, phương pháp này mới chỉ phổ biến ở việc quản lý nhân sự thông qua chứng minh thư nhân dân và phục vụ điều tra phá án. Các sản phẩm công nghệ cao nói trên chúng ta vẫn phải nhập khẩu với giá thành khá cao, do đó chúng vẫn chưa được phổ biến rộng rãi.

2.2.3. Nguyên lý hoạt động cơ bản của nhận dạng vân tay -

Nguyên lý hoạt động của công nghệ nhận dạng vân tay là khi đặt ngón tay lên trên một thiết bị nhận dạng dấu vân tay, ngay lập tức thiết bị này sẽ quét hình ảnh ngón tay đó và đối chiếu các đặc điểm của ngón tay đó với dữ liệu đã được lưu trữ trong hệ thống. Quá trình xử lý dữ liệu sẽ được thiết bị chuyển sang các dữ liệu số và ra thông báo rằng dấu vân tay đó là hợp lệ hay không hợp lệ để cho phép hệ thống thực hiện các chức năng tiếp theo. Hệ thống sinh trắc học sẽ ghi nhận mẫu vân tay của người dùng và lưu trữ tất cả những dữ liệu đặc biệt

18

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT này thành một mẫu nhận diện được số hoá toàn phần. Có hai phương pháp để lấy dấu vân tay. -

Cách thứ nhất (cổ điển) là sao chép lại hình dạng vân tay (như lăn tay bằng mực, hay chạm vào một vật gì đó) thông qua máy quét ghi nhận và xử lý.

-

Cách thứ hai, hiện tại đa số các nước đều sử dụng phần mềm hoặc thiết bị quét vân tay để nhận dạng vân tay.

2.2.4. Các bước xử lý trong quá trình nhận dạng vân tay -

Quá trình xử lý nhận dạng vân tay được chia làm hai quá trình lớn: quá trình xử lý ảnh và quá trình so sánh vân tay. a. Quá trình xử lý ảnh

Hình 2.2: Sơ đồ quá trình xử lý ảnh -

Mục đích của quá trình này được biểu diễn qua hình 2.2 là tăng cường ảnh vân tay, sau đó, rút trích các đặc trưng vân tay từ ảnh đã được tăng cường. Quá trình này được thực hiện qua các bước nhỏ sau:  Tăng cường ảnh (Image Enhancement): Ảnh được lấy từ thiết bị đầu đọc vân tay sẽ được làm rõ. Do các thiết bị đầu đọc vân tay không lấy ảnh tốt hay do vân tay của người dùng trong lúc lấy bị hao mòn, dơ bẩn, hay do lực ấn ngón tay trong lúc lấy vân tay. Vì vậy, bước này là một trong các bước quan trọng nhất của quá trình này để làm rõ ảnh vân tay để rút trích các đặc trưng đúng và đầy đủ.

19

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  Phân tích ảnh (Image Analysis): Thông qua phân tích ảnh, ảnh sẽ được loại bỏ những thông tin làm nhiễu hay những thông tin không cần thiết.  Nhị phân hóa (Binarization): Nhị phân hóa ảnh vân tay thành ảnh trắng đen. Bước này phục vụ cho bước Làm mỏng vân tay. Bước này có thể có hoặc không vì phục thuộc vào thuật toán rút trích đặc trưng.  Làm mỏng (Thinning): Làm mỏng các đường vân lồi của ảnh vân tay. Bước này nhằm mục đích cho việc rút trích đặc trưng của vân tay. Bước này cũng có thể có hoặc không vì phục thuộc vào thuật toán rút trích đặc trưng.  Rút trích đặc trưng (Minutiae Extraction): Rút trích những đặc trưng cần thiết cho quá trình so sánh vân tay. b. Quá trình so sánh vân tay

Hình 2.3: Sơ đồ quá trình so sánh vân tay -

Mục đích của quá trình này được biểu diễn trên hình 2.3 là so sánh vân tay dựa trên các đặc trưng đã được rút trích. Quá trình này được thực hiện qua các bước nhỏ sau:  Phân tích đặc trưng (Minutiae Analysis): Phân tích các đặc điểm cần thiết của các đặc trưng để phục vụ cho việc so sánh vân tay.  Xét độ tương tự cục bộ (Local Similarily): Thuật toán so sánh vân tay sẽ dựa vào các thông tin cục bộ của các đặc trưng (gồm: tọa độ (x, y), hướng của đặc trưng, góc tạo bởi tiếp tuyến của đường vân tại đặc trưng và trục ngang) của vân tay để tìm ra các cặp đặc trưng giống nhau giữa hai vân tay. 20

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  Xét độ tương tự toàn cục (Global Similarily): Từ nhưng khu vực tương tự nhau trên cục bộ, thuật toán sẽ tiếp tục mở rộng so sánh trên toàn cục.  Tính điểm so sánh (Calculate Matching Score): Tính toán tỷ lệ độ giống nhau giữa các cặp đặc trưng. Điểm so sánh này sẽ cho biết độ giống nhau của hai ảnh vân tay là bao nhiêu. 2.3. GIỚI THIỆU VỀ PHẦN CỨNG  Thiết bị đầu vào: bàn phím ma trận 3x4, module cảm biến vân tay R307.  Thiết bị đầu ra: màn hình LCD, Module ESP8266.  Thiết bị điều khiển trung tâm: Board Arduino Mega 2560.  Các chuẩn truyền dữ liệu UART, Database. 2.3.1. Arduino Mega 2560 -

Arduino Mega 2560 sử dụng chip ATmega2560. Nó có 54 chân digital I/O (trong đó có 15 chân điều chế độ rộng xung PWM), 16 chân đầu vào tương tự (Analog Inputs),4 UARTs (cổng nối tiếp phần cứng), một thạch anh dao động 16 MHz, kết nối USB, một jack cắm điện, một đầu ICSP và một nút reset. Nó chứa tất cả mọi thứ cần thiết để hỗ trợ các vi điều khiển, chỉ đơn giản là kết nối nó với một máy tính bằng cáp USB hoặc với một bộ chuyển đổi điện AC-DC hoặc có thể sử dụng pin.

-

Board có khả năng tự động reset nhờ phần mềm thay vì đòi hỏi phải ấn nút reset trước khi tải lên. Phần mềm Arduino sử dụng khả năng này để cho phép nạp code lên chỉ cần nhấn vào nút Upload trong Arduino IDE. Điều này có nghĩa rằng bộ nạp khởi động có thể có một thời gian chờ ngắn hơn. Arduino Mega 2560 có thể bảo vệ cổng USB của máy tính khi xảy ra hiện tượng quá dòng. Mặc dù hầu hết các máy tính cung cấp bảo vệ nội bộ, các cầu chì cung cấp thêm một lớp bảo vệ. Nếu dòng cao hơn 500mA được áp dụng cho các cổng USB, cầu chì sẽ tự động phá vỡ các kết nối cho đến khi ngắt hoặc hiện tượng quá tải được khắc phục. a. Thông số kỹ thuật Arduino Mega 2560 -

Chip vi điều khiển: ATmega2560.

-

Điện áp cấp nguồn: 5V.

-

Điện áp đầu vào (kiến nghị): 7-12V. 21

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT -

Điện áp đầu vào (giới hạn): 6-20V.

-

Số chân Digital I/O: 54 (có 15 chân điều chế độ rộng xung PWM).

-

Số chân Analog (Input): 16.

-

Dòng DC trên chân I/O: 40 mA.

-

Dòng DC cho chân 3.3V: 50 mA.

-

Flash Memory: 256KB trong đó có 8KB được sử dụng bởi bộ nạp khởi động (bootloader).

-

SRAM: 8 KB.

-

EEPROM: 4 KB.

-

Xung nhịp: 16 MH.

-

Chiều dài: 101,52 mm.

-

Chiều rộng: 53,3 mm.

-

Cân nặng: 37 g.

b. Sơ đồ kết nối chân của Arduino Mega 2560 -

Trong hình 2.4 bên dưới là hình ảnh sơ đồ các chân kết nối trên Arduino Mega 2560 cùng với hình 2.5 là vị trí các chân của Arduino Mega 2560.

Hình 2.4: Sơ đồ các chân kết nối trên Arduino Mega 2560 22

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

Hình 2.5: Mạch Arduino Mega -

USB (1): Arduino sử dụng cáp USB để giao tiếp với máy tính. Thông qua cáp USB chúng ta có thể Upload chương trình cho Arduino hoạt động, ngoài ra USB còn là nguồn cho Arduino.

-

Nguồn (2 và 3): Khi không sử dụng USB làm nguồn thì chúng ta có thể sử dụng nguồn ngoài thông qua jack cắm 2.1mm (cực dương ở giữa) hoặc có thể sử dụng 2 chân Vin và GND để cấp nguồn cho Arduino. Bo mạch hoạt động với nguồn ngoài ở điện áp từ 5 – 20 volt. Chúng ta có thể cấp một áp lớn hơn tuy nhiên chân 5V sẽ có mức điện áp lớn hơn 5 volt. Và nếu sử dụng nguồn lớn hơn 12 Volt thì sẽ có hiện tượng nóng và làm hỏng bo mạch. Khuyến cáo nên dùng nguồn ổn định từ 6 đến dưới 12 volt. Chân 5V và chân 3.3V (Output voltage): các chân này dùng để lấy nguồn ra từ nguồn mà chúng ta đã cung cấp cho Arduino để cấp cho các thiết bị giao tiếp khác. Lưu ý: không được cấp nguồn vào các chân này vì sẽ làm hỏng Arduino.

-

Ngõ vào tương tự (4): Arduino Mega 2560 có 16 ngõ vào tương tự (các chân từ A0 đến A15), mỗi ngõ vào này đều có độ phân giải 10 bit (1024 giá trị). Mặc định đo từ 0 đến 5V, có thể thiết ập giá trị bằng cách điều chỉnh chân AREF và sử dụng hàm Analog Referency() để chuyển đổi.

-

Ngõ vào số (5 và 6): Mỗi một chân trong 54 chân số của board đều có thể sử dụng như một ngõ vào hoặc ngõ ra. Mỗi chân có thể cung cấp hoặc nhận 23

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT được tối đa 40 mA và có một điện trở kéo lên bên trong 20-50 kOhms. Ngoài ra, một số chân có chức năng đặc biệt:  Serial: để truyền và nhận dữ liệu nối tiếp. Gồm các chân: Serial 0: 0 (RX) và 1 (TX); Serial 1: 19 (RX) và 18 (TX); Serial 2: 17 (RX) và 16 (TX); Serial 3: 15 (RX) và 14 (TX).  External Interrupt: Các chân này có thể được cấu hình để kích hoạt sự kiện ngắt mức thấp, ngắt cạnh lên hoặc xuống. Gồm các chân: 2 (interrupt 0), 3 (interrupt 1), 18 (interrupt 5), 19 (interrupt 4), 20 (interrupt 3), 21 (interrupt 2).  PWM: Cung cấp ngõ ra PWM 8 bit. Gồm các chân từ chân 2 đến 13 và 44 đến 46.  SPI: Các chân này hỗ trợ giao tiếp SPI bằng cách sử dụng thư viện SPI. Có các chân: 50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS).  TWI: Hỗ trợ giao tiếp TWI bằng việc sử dụng thư viện WIRE. Có các chân: 20 (SDA) và 21 (SCL). -

Nút Retset (7): Mang dòng mức thấp để thiết lập lại vi điều khiển.

2.3.2. Module cảm biến vân tay R307 (Finger print R307) -

Hiện tại trên thị trường có rất nhiều loại cảm biến để nhận dạng và phát hiện người dùng như: cảm biến nhận dạng khuôn mặt, cảm biến hồng ngoại, cảm biến giọng nói, RFID,… nhưng với tính bảo mật và tiện lợi của cảm biến vân tay rất phù hợp cho việc quản lý khóa và mở cửa.

-

Đây là module nhận dạng vân tay giao tiếp trực tiếp qua giao thức UART có thể kết nối trực tiếp đến vi điều khiển hoặc qua PC adapter Max232/USB-Serial. Người sử dụng có thể lưu trữ dữ liệu vân tay trực tiếp vào module. Module có thể dễ dàng giao tiếp với các loại vi điều khiển chuẩn 3.3V hoặc 5V. Có một con Led xanh được bật sáng nằm sẵn trong ống kính trong suốt quá trình chụp vân tay. Cảm biến với độ chính xác cao và có thể được nhúng vào các thiết bị như: điều khiển truy cập, két sắt, khóa cửa nhà, khóa cửa xe,… 24

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

Hình 2.6: Module cảm biến vân tay R305 a. Nguyên lý hoạt động  Nguyên lý hoạt động của module cảm biến vân tay cơ bản có 2 phần: -

Lấy dữ liệu hình ảnh của vân tay: Khi lấy dữ liệu, người dùng cần phải thực hiện quét dấu vân tay hai lần thông qua cảm biến quang học. Hệ thống sẽ tiến hành thuật toán xử lý hình ảnh của 2 lần quét vân tay, tạo ra một khuôn mẫu của các vân tay dựa trên kết quả xử lý và lưu trữ lại các bản mẫu.

-

So sánh dấu vân tay (có thể theo chế độ 1:1 hoặc theo 1:N): Khi người dùng thực hiện quét dấu vân tay, module sẽ chụp lại dữ liệu hình ảnh vân tay và so sánh với các mẫu vân tay đã được lưu trữ sẵn trong thư viện. Đối với 1:1, hệ thống sẽ so sánh trực tiếp vân tay với mẫu được chỉ định cụ thể trong module; đối với 1:N, hoặc tìm kiếm, hệ thống sẽ tìm kiếm trong thư viện để tìm vân tay phù hợp. Sau đó trả về kết quả đúngnếu trùng khớp hoặc kết quả sai nếu không trùng khớp dữ liệu đã được lưu trữ.

b. -

Các đặc tính Module tích hợp nhiều loại chip xử lý trong cùng 1 module: cảm biến dấu vân tay quang học, bộ vi xử lý DSP tốc độ cao, bộ nhớ PLASH…

-

Dễ dàng sử dụng với các tính năng bảo mật cao, thông minh. Mức độ bảo mật điều chỉnh được: thích hợp cho các ứng dụng khác nhau, mức độ bảo mật có thể được thiết lập điều chỉnh bởi người sử dụng. 25

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT -

Người dùng có thể tiến hành phát triển kết hợp với các module khác để làm ra một loạt các sản phẩm cuối cùng, chẳng hạn như: kiểm soát quyền truy cập, điểm danh vào lớp học hoặc chấm công, két an toàn, khóa cửa nhà hay cửa xe…

-

Tiêu thụ điện năng thấp, giá thành không cao, kích thước nhỏ gọn, hiệu năng tuyệt vời.

-

Khả năng chống tĩnh điện mạnh mẽ, chỉ số chống tĩnh điện đạt 15KV trở lên.

-

Khả năng xử lý hình ảnh tốt, có thể chụp được hình ảnh có độ phân giải lên đến 500 dpi.

c.

Thông số kỹ thuật

-

Điện áp cung cấp: DC 3.6 ~ 6.0V.

-

Dòng cung cấp:  Dòng làm việc bình thường 40 mA  Dòng đỉnh 150 mA  So sánh với một mẫu duy nhất (1:1)  Tìm kiếm và so sánh với mẫu lưu trong bộ nhớ (1:N). Bộ nhớ lưu mẫu: 256 Bytes

-

Mức độ an toàn: năm (từ thấp đến cao: 1, 2, 3, 4, 5 (cao nhất)).

-

Tỷ lệ lỗi chấp nhận nhầm (FAR): < 0,001.

-

Tỷ lệ từ chối nhầm (FRR): < 0.1%.

-

Thời gian tìm kiếm: < 0.8 giây (1: 880, trung bình).

-

Giao tiếp với máy tính: UART (TTL mức logic) hoặc USB 1:1

-

Tốc độ truyền thông tin liên lạc (UART): (9600 x N) bps đó N = 1 ~ 12 (giá trị mặc định N = 6, tức là 57600bps)  Nhiệt độ: -10ºC ~ +40ºC  Độ ẩm tương đối: 40ºC - 85ºC

-

Môi tường bảo quản  Nhiệt độ: -40ºC ~ +85ºC  Độ ẩm tương đối: < 85%

26

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

d. -

Giao tiếp phần cứng Giao tiếp phần cứng của module R305 được thể hiện qua bảng 2.1: Số

Tên

chân

chân

1

VCC

Nguồn vào

2

GND

Tín hiệu nối đất

3

TXD

Dữ liệu đầu ra. Kiểu TTL logic

4

RXD

Dữ liệu đầu vào. Kiểu TTL logic

5

VCC

+5V DC

6

D-

Dữ liệu âm

7

D+

Dữ liệu dương

8

e. -

Chức năng

GND Ground Bảng 2.1: Các chân kết nối của Module R307

Giao thức truyền thông nối tiếp không đồng bộ UART Được truyền theo chế độ nối tiếp bán song công bất đồng bộ. Tốc độ baud truyền mặc định là 57600 bps và có thể cài đặt tốc độ này trong dải từ 9600 – 115200. Tại thời điểm bật nguồn, nó sẽ tốn 300ms cho việc thiết lập.

-

Khung truyền với định dạng 10bit: với 1 bit bắt đầu (start bit) ở mức logic ‘0’, 8 bit dữ liệu với bit đầu LBS và 1 bit kết thúc (stop bit). Không có bit kiểm tra (check bit).

-

Dữ liệu được truyền đi trên chân TX gồm 1 start bit (mức ‘0’), data và 1 stop bit (mức ‘1’). Tốc độ truyền: đơn vị bit per second (bps) còn gọi là Baud (số lần thay đổi tín hiệu trong 1 giây – thường sử dụng cho modem). UART là phương thức truyền nhận bất đồng bộ, nghĩa là bên nhận và bên phát không cần phải có chung tốc độ xung clock (ví dụ: xung clock của vi điều khiển khác xung clock của máy tính). Khi đó bên truyền muốn truyền dữ liệu sẽ gửi start bit (bit ‘0’)

27

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT để báo cho bên thu biết để bắt đầu nhận dữ liệu và khi truyền xong dữ liệu thì stop bit (bit ‘1’) sẽ được gửi để báo cho bên thu biết kết thúc quá trình truyền. -

Khi có start bit thì cả hai bên sẽ dùng chung 1 xung clock (có thể sai khác một ít) với độ rộng 1 tín hiệu (0 hoặc 1) được quy định bởi baud rate, ví dụ baud rate = 9600 bps nghĩa là độ rộng của tín hiệu 0 (hoặc 1) là 1/9600 = 104 ms và khi phát thì bên phát sẽ dùng baud rate chính xác (ví dụ 9600 bps) còn bên thu có thể dùng baud rate sai lệch 1 ít (9800bps chẳng hạn). Truyền bất đồng bộ sẽ truyền theo từng frame và mỗi có cấu trúc như trong hình 2.10 sau đây:

Hình 2.7: Giao thức truyền thông của R307 -

Ngoài ra trong frame truyền có thể có thêm bit odd parity (bit lẻ) hoặc even parity (bit chẵn) để kiểm tra lỗi trong quá trình truyền. Bit parity này có đặc điểm nếu sử dụng odd parity thì số các bit ‘1’ + odd parity bit sẽ ra một số lẻ còn nếu sử dụng even parity thì số các bit ‘1’ + even parity bit sẽ ra một số chẵn.

-

Module sẽ kết nối với MCU theo kết nối sau: TXD (chân 3 của module) kết nối với RXD (chân nhận của MCU), RXD (chân 4 của module) kết nối với TXD (chân truyền của MCU).

f.

Tài nguyên hệ thống

-

Bộ đệm: Có một bộ đệm hình ảnh và hai 512byte tệp kí tự đệm bên trong không gian bộ nhớ RAM của module. Người dùng có thể đọc và viết bất kỳ của bộ đệm bằng cách hướng dẫn.  Lưu ý: Nội dung của bộ đệm trên sẽ bị mất khi tắt nguồn.  Bộ đệm hình ảnh: Bộ đệm hình ảnh phục vụ cho việc lưu trữ hình ảnh và các định dạng hình ảnh là 256 * 288 pixel. Khi truyền qua UART, để đẩy nhanh tốc độ, chỉ có 4bit cao của các điểm ảnh được truyền (có nghĩa là 16 28

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT độ xám). Và hai điểm ảnh lân cận của cùng hàng sẽ hình thành một byte trước khi truyền. Khi tải lên máy tính, hình ảnh 16-xám-độ sẽ được mở rộng sang định dạng 256 mức xám. Đó là định dạng BMP 8-bit. Khi chuyển qua USB, hình ảnh 8bit pixel, đó là 256 mức xám.  Bộ đếm ký tự: Bộ đệm kí tự CharBuffer1, CharBuffer2, có thể được sử dụng để lưu trữ cả tệp kí tự và tệp mẫu. -

Thư viện vân tay:  Hệ thống đặt ra một không gian nhất định trong Flash cho mẫu dấu vân tay lưu trữ, đó là thư viện vân tay. Nội dung của thư viện vẫn còn khi tắt nguồn.  Dung lượng của thư viện thay đổi dung lượng của Flash, hệ thống sẽ nhận biết sau khi tự động. Lưu trữ dấu vân tay mẫu trong Flash là theo tuần tự.

-

Cấu hình các thông số:  Kiểm soát tốc độ baud: Các thông số điều khiển UART tốc độ truyền thông của Module. Giá trị của nó là một số nguyên N, N = [1, 12]. Tỷ lệ tương ứng là 9600 baud * N bps.  Mức độ bảo mật: Các thông số kiểm soát các giá trị ngưỡng phù hợp với tìm kiếm của dấu vân tay và đối chiếu. Mức độ bảo mật được chia thành 5 lớp và giá trị tương ứng là 1, 2, 3, 4, 5. Ở cấp độ 1, FAR là cao nhất và FRR là thấp nhất. Tuy nhiên ở cấp độ 5, FAR là thấp nhất và FRR là cao nhất.  Độ dài gói dữ liệu: Các thông số quyết định độ dài tối đa của các gói dữ liệu chuyển giao khi giao tiếp với máy tính trên. Giá trị của nó là 0, 1, 2, 3, tương ứng với 32 bytes, 64 byte, 128 byte, 256 byte tương ứng.

-

Mật khẩu Module:  Khi mở nguồn lại, hệ thống kiểm tra đầu tiên cho dù mật khẩu bắt tay đã được sửa đổi. Nếu không, hệ thống máy tính trên xét thấy không có yêu cầu xác minh mật khẩu và sẽ bước vào chế độ hoạt động bình thường. Đó là, khi mật khẩu vẫn là mặc định, quá trình xác minh có thể được bỏ qua. Chiều dài 29

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT mật khẩu là 4 byte, và giá trị nhà máy mặc định của nó là 0xFF, 0xFF, 0xFF, 0xFF.  Nên thay đổi mật khẩu, tham khảo hướng dẫn SetPwd, sau đó Module (hoặc thiết bị) bắt tay mật khẩu phải được xác nhận trước khi hệ thống đi vào chế độ hoạt động bình thường. Hoặc nếu không, hệ thống sẽ từ chối thực hiện và lệnh. -

Địa chỉ Module:  Mỗi module có một địa chỉ xác định. Khi giao tiếp với máy tính trên, mỗi lệnh / dữ liệu được chuyển giao theo hình thức gói dữ liệu, trong đó có các mục địa chỉ. Module hệ thống chỉ phản ứng với các gói dữ liệu có mục địa chỉ giá trị là giống với địa chỉ xác định của nó. Chiều dài địa chỉ là 4 byte, và giá trị mặc định của nó là 0xFFFFFFFF. Người dùng có thể thay đổi địa chỉ qua SetAdder. Địa chỉ đổi mới vẫn còn lưu lại khi tắt nguồn.

-

Bộ tạo số ngẫu nhiên:  Module tích hợp một phần cứng 32-bit Bộ tạo số ngẫu nhiên (RNG). Qua GetRandomCode, hệ thống sẽ tạo ra một số ngẫu nhiên và tải nó lên.

g. -

Giao thức truyền gói dữ liệu Khi module R308 thực hiện việc giao tiếp, truyền và nhận các câu lệnh/ dữ liệu/ kết quả thì tất cả được gói trong một định dạng gói dữ liệu được biểu diễn qua hình 2.9:

Hình 2.8: Định dạng gói dữ liệu

-

Trong đó, các thông số chi tiết hơn được biểu diễn qua bảng 2.2 sau:

30

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

Bảng 2.2: Định dạng gói dữ liệu

h.

Kiểm tra và xác nhận gói dữ liệu

 Lưu ý: lệnh chỉ được gửi từ VXL đến cảm biến, cảm biến chỉ trả về các gói xác nhận. -

Định nghĩa bytes xác nhận:  0x00h: thực thi hoàn tất.  0x01h: lỗi nhận dữ liệu.  0x02h: không phải vân tay.  0x03h: thất bại đăng ký vân tay.  0x06h: không tạo được đặt điểm nhân dạng.  0x07h: dấu vân quá nhỏ để lấy mẫu.  0x08h: dấu vân không trùng.  0x09h: thất bại tìm kiếm dấu vân tay. 31

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  0x0Ah: lỗi kết hợp đặc điểm dấu vân tay.  0x0Bh: đại chỉ ID vượt khung.  0xCh: lỗi đọc từ dữ liệu vân tay. Dữ liệu xấu.  0xDh: lỗi nạp dữ liệu.  0xEh: không thể nhận dữ liệu  0xFh: lỗi gửi hình ảnh.  0x10h: lỗi xoá dữ liệu.  0x11h: lỗi xoá một ID.  0x15h: lỗi tạo ảnh.  0x18h: lỗi ghi flash.  0x19h: không xác định được lỗi.  0x1Ah: số đăng ký không hợp lệ.  0x1Bh: gói dữ liệu sai.  0x1Ch: sai số trang.  0x1Dh: lỗi cổng giao tiếp.  others: dự phòng. 2.3.3. Bàn phím ma trận 3x4 (Keypad 3x4) -

Sơ đồ nối dây và hình ảnh thực tế của bàn phím ma trận 4x4 được giới thiệu qua hình 2.9 bên dưới.

Hình 2.91: Sơ đồ nối dây và hình ảnh thực tế của bàn phím ma trận 3x4 32

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT a. Khái niệm -

Keypad là một "thiết bị nhập" chứa các nút nhấn cho phép người dùng nhập các chữ số, chữ cái hoặc ký hiệu vào bộ điều khiển. Keypad không chứa tất cả bảng mã ASCII như keyboard và vì thế keypad thường được tìm thấy trong các thiết bị chuyên dụng. Các nút nhấn trên các máy tính điện tử cầm tay là một ví dụ về keypad. Số lượng nút nhấn của một keypad thay đổi phụ thuộc vào yêu cầu ứng dụng. Gọi là keypad 3x4 vì keypad này có 12 nút nhấn được bố trí dạng ma trận 4 hàng và 3 cột. Cách bố trí ma trận hàng và cột là cách chung mà các keypad sử dụng. Cũng giống như các ma trận LED, các nút nhấn cùng hàng và cùng cột được nối với nhau, vì thế với keypad 3x4 sẽ có tổng cộng 7 ngõ ra (4 hàng và 3 cột).

b. Hoạt động của Keypad 3x4 -

Theo hình trên, giả sử nút ‘2’ được nhấn, khi đó đường R1 và C2 được nối với nhau. Giả sử đường C2 được nối với GND (mass, 0V) thì R1 cũng sẽ là GND. Tuy nhiên, bằng cách kiểm tra trạng thái đường R1 chúng ta sẽ không kết luận nút ‘2’ được nhấn. Giả sử tất cả các đường C1, C2, C3 đều nối với GND, nếu R1= GND thì rõ ràng ta không thể kết luận nút ‘1’ hay nút ‘2’ hay nút ‘3’. Kỹ thuật để khắc phục vấn đề này chính là kỹ thuật “quét” keypad. Có 2 cách quét phím là quét theo cột hoặc quét theo hàng. Sau đây là ví dụ về quét theo hàng, quét cột cũng hoàn toàn tương tự:  Ta lần lượt xuất tín hiệu mức 0 ra các hàng (khi một hàng là mức ‘0’ thì tất cả các hàng khác phải là mức 1).  Sau đó kiểm tra các cột nếu cột nào có mức logic 0 thì phím có tọa độ hàng và cột đó được ấn.

c. Thông số kỹ thuật -

Độ dài cáp: 88mm.

-

Nhiệt độ hoạt động 0 ~ 70oC.

-

Đầu nối ra 7 chân.

-

Kích thước bàn phím 76.9 x 69.2 mm 33

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT d. Ứng dụng của Keypad 4x4 -

Hệ thống an ninh bảo vệ bằng mật khẩu.

-

Nhập liệu lựa chọn menu, điều khiển thiết bị.

-

Nhập dữ liệu cho các hệ thống nhúng.

2.3.4. Màn hình LCD 1602

Hình 2.10: Màn hình LCD 1602 và các chân kết nốt

 Chức năng của từng chân LCD 1602: -

Chân số 1 - VSS: chân nối đất cho LCD được nối với GND của mạch điều khiển.

-

Chân số 2 - VDD: chân cấp nguồn cho LCD, được nối với VCC=5V của mạch điều khiển.

-

Chân số 3 - VE: điều chỉnh độ tương phản của LCD.

-

Chân số 4 - RS: chân chọn thanh ghi, được nối với logic "0" hoặc logic "1":  Logic “0”: Bus DB0 - DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ “ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read).  Logic “1”: Bus DB0 - DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD.

-

Chân số 5 - R/W: chân chọn chế độ đọc/ghi (Read/Write), được nối với logic “0” để ghi hoặc nối với logic “1” đọc.

-

Chân số 6 - E: chân cho phép (Enable). Sau khi các tín hiệu được đặt lên bus DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân này như sau: 34

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào thanh ghi bên trong khi phát hiện một xung (high-to-low transition) của tín hiệu chân E.  Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên (low-to-high transition) ở chân E và được LCD giữ ở bus đến khi nào chân E xuống mức thấp. -

Chân số 7 đến 14 - D0 đến D7: 8 đường của bus dữ liệu dùng để trao đổi thông tin với MPU. Có 2 chế độ sử dụng 8 đường bus này là: Chế độ 8bit (dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7) và Chế độ 4 bit (dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là DB7).

-

Chân số 15 - A: nguồn dương cho đèn nền.

-

Chân số 16 - K: nguồn âm cho đèn nền.

2.3.5. Mạch chuyển giao tiếp LCD 1602

Hình 2.11: Mạch chuyển giao tiếp LCD 1602

-

Bằng việc sử dụng giao tiếp I2C, việc điều khiển trực tiếp màn hình được chuyển sang cho IC xử lý nằm trên mạch. Chỉ cần việc gửi mã lệnh cùng nội dung hiển thị, do vậy giúp vi điều khiển có nhiều thời gian xử lý các tiến trình phức tạp khác.

-

Ưu điểm của việc sử dụng giao tiếp I2C:  Giao tiếp I2C chỉ sử dụng duy nhất 2 dây tín hiệu: SDA và SCL giúp tiết kiệm chân trên vi điều khiển.  Tốc độ truyền dữ liệu lên đến 400Kbps 35

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  Dữ liệu truyền nhận đảm bảo tính toàn vẹn vì sử dụng cơ chế phản hồi (ACK) trên mỗi byte dữ liệu.  Có khả năng kết nối nhiều thiết bị với nhau: trên mạch có sẵn các mối hàn A0, A1, A2 để thay đổi địa chỉ của module. -

Địa chỉ mặc định: 0x27, có thể mắc vào I2C bus tối đa 8 module

-

Điện áp hoạt động: 3V-6V.

-

Đề điều khiển độ tương phản điều chỉnh biến trở màu xanh.

2.3.6. Module ESP 8266 MCU V3 a. Giới thiệu -

Module ESP8266 là kit phát triển dựa trên nền chip Wifi SoC ESP8266 với thiết kế dễ dàng sửa dụng vì tích hợp sẵn mạch nạp sử dụng chíp CP2102 trên borad. Bên trong ESP8266 có sẵn một lõi vi xử lý vì thế bạn có thể trực tiếp lập trình cho ESP8266 mà không cần thêm bất kì con vi xử lý nào nữa. Hiện tại có hai ngôn ngữ có thể lập trình cho ESP8266, sử dụng trực tiếp phần mềm IDE của Arduino để lập trình với bộ thư viện riêng hoặc sử dụng phần mềm node MCU.

b. Thông số kỹ thuật -

IC chính: ESP8266 Wifi SoC.

-

Phiên bản firmware: NodeMCU Lua.

-

Chip nạp và giao tiếp UART: CH340.

-

GPIO tương thích hoàn toàn với firmware Node MCU.

-

Cấp nguồn: 5VDC MicroUSB hoặc Vin.

-

GIPO giao tiếp mức 3.3VDC.

-

Tích hợp Led báo trạng thái, nút Reset, Flash.

-

Tương thích hoàn toàn với trình biên dịch Arduino.

-

Kích thước: 59 x 32mm.

36

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT c. Các chân kết nối

Hình 2.12: Sơ đồ các chân kết nối của Module ESP 8266

Nhãn

GPIO

Đầu vào

Đầu ra

D0

GPIO16

Không gián đoạn

Không hỗ trợ

Ghi chú MỨC CAO khi khởi động

PWM hoặc 12c

Sử dụng để đánh thức khi

OK

ngủ sâu Thường được sử dụng

D1

GPIO5

OK

như SCL (I2C) D2 D3

GPIO4 GPIO0

OK Kéo lên

OK

Thường được sử dụng

OK

như SDA (I2C) Kết nối với nút FLASH, khởi động không thành công nếu kéo MỨC

D4

GPIO2

Kéo lên

OK

THẤP MỨC CAO khi khởi động kết nối với đèn LED trên bo mạch, khởi động không thành công nếu kéo MỨC THẤP

D5

GPIO14

OK

OK 37

SPI (SCLK)

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT D6

GPIO12

OK

OK

SPI (MISO)

D7

GPIO13

OK

OK

D8

GPIO15

Kéo đến GND

OK

SPI (MOSI) SPI (CS) Khởi động không thành

RX

GPIO3

OK

Chân RX

công nếu kéo MỨC CAO MỨC CAO khi khởi động

TX

GPIO1

Chân TX

OK

MỨC CAO khi khởi động đầu ra gỡ lỗi khi khởi động, khởi động không thành công nếu kéo MỨC THẤP

A0

-

ADC0 Đầu vào analog X Bảng 2.3: Bảng thông tin các chân kết nối của Module ESP 8266

GPIO được kết nối với Chip Flash  GPIO6 đến GPIO11 thường được kết nối với chip flash trong bo mạch ESP8266. Vì vậy, những chân này không được khuyến khích sử dụng.

-

Chân được sử dụng trong khi khởi động  ESP8266 có thể bị ngăn không cho khởi động nếu một số chân được kéo MỨC THẤP hoặc MỨC CAO. Danh sách sau đây cho thấy trạng thái của các chân khi khởi động:  GPIO16: chân ở mức cao khi khởi động  GPIO0: lỗi khởi động nếu kéo mức thấp  GPIO2: chân ở mức cao khi khởi động, không khởi động được nếu kéo mức thấp  GPIO15: lỗi khởi động nếu kéo mức cao  GPIO3: chân ở mức cao khi khởi động  GPIO1: chân ở mức cao khi khởi động, không khởi động được nếu kéo mức thấp  GPIO10: chân ở mức cao khi khởi động  GPIO9: chân ở mức cao khi khởi động 38

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT -

Chân mức cao khi khởi động  Có một số chân xuất ra tín hiệu 3.3V khi ESP8266 khởi động. Điều này sẽ là vấn đề cần phải quan tâm nếu bạn có relay hoặc thiết bị ngoại vi khác được kết nối với các GPIO đó. Các GPIO sau xuất tín hiệu mức cao khi khởi động:  GPIO16  GPIO3  GPIO1  GPIO10  GPIO9  Ngoài ra, các GPIO khác, ngoại trừ GPIO5 và GPIO4, có thể xuất ra tín hiệu điện áp thấp khi khởi động, có thể có vấn đề nếu chúng được kết nối với transistor hoặc relay.

-

Đầu vào analog  ESP8266 chỉ hỗ trợ đọc analog trong một GPIO. GPIO đó được gọi là ADC0 và nó thường được đánh dấu trên màn lụa là A0.  Điện áp đầu vào tối đa của chân ADC0 là 0 đến 1V nếu bạn đang sử dụng chip trần ESP8266. Nếu bạn đang sử dụng bo phát triển như bộ ESP8266 12-E NodeMCU, thì dải điện áp đầu vào là 0 đến 3,3V vì bo này có bộ chia điện áp bên trong.

-

Đèn LED trên bo mạch  Hầu hết các bo phát triển ESP8266 đều có đèn LED tích hợp. Đèn LED này thường được kết nối với GPIO2.  Đèn LED hoạt động với logic ngược. Gửi tín hiệu CAO để tắt và tín hiệu THẤP để bật.

-

Chân RST 39

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  Khi chân RST được kéo THẤP, ESP8266 sẽ reset. Thao tác này cũng giống như nhấn nút reset trên bo mạch. -

GPIO0  Khi GPIO0 được kéo THẤP, nó sẽ đặt ESP8266 vào chế độ bộ nạp khởi động. Thao tác này cũng giống như nhấn nút FLASH / BOOT trên bo mạch.

-

GPIO16  GPIO16 có thể sử dụng để đánh thức ESP8266 khỏi chế độ ngủ sâu. Để đánh thức ESP8266 khỏi chế độ ngủ sâu, GPIO16 phải được kết nối với chân RST.

-

I2C  ESP8266 không có chân I2C phần cứng, nhưng nó có thể được triển khai trong phần mềm. Vì vậy, bạn có thể sử dụng bất kỳ GPIO nào làm I2C. Thông thường, các GPIO sau được sử dụng làm chân I2C:  GPIO5: SCL  GPIO4: SDA

-

SPI  Các chân được sử dụng làm SPI trong ESP8266 là:  GPIO12: MISO  GPIO13: MOSI  GPIO14: SCLK  GPIO15: CS

-

Các chân PWM  ESP8266 cho phép phần mềm PWM ở tất cả các chân I / O: GPIO0 đến GPIO16. Tín hiệu PWM trên ESP8266 có độ phân giải 10-bit.

-

Chân ngắt 40

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT  ESP8266 hỗ trợ chân ngắt trong bất kỳ GPIO nào, ngoại trừ GPIO16. 2.3.7. Mạch hạ áp LM2596 a. Giới thiệu

Hình 2.13: Mạch hạ áp LM2596

-

Bộ điều chỉnh LM2596 là mạch tích hợp nguyên khối rất phù hợp lý tưởng cho thiết kế dễ dàng và thuận tiện của bộ điều chỉnh điện áp một chiều điện áp giảm (bộ chuyển đổi buck). Nó có khả năng cung cấp cho tải một dòng điện có giá trị lên đến 3.0 A. Nó được bù nội bộ để giảm thiểu số lượng các thành phần bên ngoài để đơn giản hóa thiết kế nguồn cung cấp điện.

-

Do bộ chuyển đổi LM2596 là nguồn cung cấp năng lượng chuyển đổi, hiệu suất của nó cao hơn đáng kể so với các bộ điều chỉnh tuyến tính ba chân phổ biến, đặc biệt là với điện áp đầu vào cao hơn. LM2596 hoạt động ở tần số chuyển đổi 150 kHz, do đó cho phép các thành phần bộ lọc có kích thước nhỏ hơn mức cần thiết với các bộ điều chỉnh chuyển đổi tần số thấp hơn.

b. Sơ đồ chân và chức năng

41

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT Hình 2.14: Sơ đồ chân kết nối của mạch hạ áp LM2596 Chân

Tên

Chức năng

1

VIN

Đây là đầu vào điện áp áp dương cho IC. Chân này phải được nối với một tụ điện có giá trị thích hợp để giảm thiểu quá độ điện áp và để cung cấp dòng chuyển mạch cần thiết bởi bộ điều chỉnh.

2

GND

Chân nối đất.

3

OUTPUT

Công tắc bên trong. Điện áp ở chân này chuyển đổi giữa (+ VIN – VSAT) và khoảng -0,5V, với chu kỳ làm việc xấp xỉ VOUT/VIN.

4

FEEDBACK Cảm biến điện áp đã điều chỉnh ở ngõ ra để hoàn tất vòng phản hồi

5

ON/OFF

Cho phép tắt mạch điều chỉnh chuyển mạch bằng cách sử dụng tín hiệu mức logic, do đó giảm dòng tổng cung cấp đầu vào xuống khoảng 80. Kéo chân này xuống dưới mức điện áp ngưỡng khoảng 1,3V, bật bộ điều chỉnh và kéo chân này lên trên 1,3V (tối đa 25V) để tắt bộ điều chỉnh.

Bảng 2.4: Bảng thông tin chân kết nối của mạch hạ áp LM2596

c. Thông số cơ bản -

Điện áp đầu ra cố định: 5V

-

Phạm vi điện áp đầu vào rộng, lên đến 40V

-

Kích thước PCB: 2,5 x 5,0 cm

-

Dòng điện ra tối đa 3.0 A

-

Bộ dao động nội tần số cố định 150 kHz

-

Chế độ chờ công suất thấp

-

Tắt máy nhiệt và bảo vệ giới hạn dòng điện

-

Mức độ nhạy cảm độ ẩm (MSL) bằng 1

-

Hiệu suất chuyển đổi lên đến 92%

42

CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ

CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ 3.1. GIỚI THIỆU  Đề tài “Quản lý và cảnh báo sinh viên qua hệ thống quét vân tay” bao gồm: -

Hệ thống có chức năng chính như sau: hệ thống chính là hệ thống quét vân tay. Sau đó, thông tin quét vân tay sẽ được gửi lên wed để hiển thị giờ vào của sinh viên. Sau đó sẽ nhập liệu thông tin qua Exel và tính toán số lần đi trễ, thời gian đi trễ, số ngày vắng học. Khi sinh viên đi trễ hoặc vắng học hệ thống sẽ gửi cảnh báo về gmail của sinh viên. Thêm nữa là hệ thống sẽ them vân tay, xóa vân tay, và quản lí dữ liệu.

3.2. TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG 3.2.1. Thiết kế sơ đồ khối hệ thống -

Hệ thống gồm 6 khối ghép lại với nhau theo nhiều hướng tạo nên một hệ thống hoạt động ổn định được trình bày trong sơ đồ khối hình 3.1 như sau:

KHỐI

KHỐI CẢM

MODULE

BIẾN VÂN

ESP8266

TAY KHỐI XỬ LÝ TRUNG TÂM

KHỐI HIỂN

KHỐI CHẤP

THỊ

HÀNH

KHỐI NGUỒN Hình 3.1: Sơ đồ khối hệ thống 43

CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ -

Chức năng của từng khối:  Khối nguồn: nguồn 12V 3A cung cấp nguồn cho toàn bộ hệ thống.  Khối xử lý trung tâm: thu thập dữ liệu từ các thiết bị sau đó xử lý và điều khiển khối chấp hành và khối hiển thị. Khối này do Arduino Mega 2560 thực hiện.  Khối cảm biến vân tay: tiến hành quét dấu vân tay để đóng mở cửa và nơi lưu trữ dấu vân tay. Khối này do module cảm biến vân tay R307 thực hiện.  Khối Module ESP8266: dùng để gửi dữ liệu vân tay người dùng lên mạng Internet.  Khối hiển thị: hiển thị thông tin chế độ hoạt động khi người dùng thao tác.  Khối chấp hành: ma trận phím bấm điều khiển.

3.2.2. Tính toán và thiết kế mạch a. Khối xử lý trung tâm -

Arduino Mega 2560 sử dụng chip ATmega2560. Nó có 54 chân digital I/O 16 chân đầu vào tương tự (Analog Inputs), 4 UARTs (cổng nối tiếp phần cứng), một thạch anh dao động 16 MHz, kết nối USB, một jack cắm điện, một đầu ICSP và một nút reset như trong hình 3.2. Nó chứa tất cả mọi thứ cần thiết để tạo thành khối xử lý trung tâm với đầy đủ các port.

-

Ý tưởng thiết kế của nhóm là kết hợp nhiều module lại với nhau, do vậy sẽ có nhiều chân kết nối nên việc lựa chọn Arduino Mega 2560 là rất phù hợp.

Hình 3.2: Khối xử lý trung tâm sử dụng board Arduino Mega 2560 44

CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ -

Trong quá trình kết nối các module và lập trình cho hệ thống:

-

Bộ nhớ sử dụng hết 2958 bytes vào khoảng 36% bộ nhớ

-

Tổng số chân I/O sử dụng là 20 chân, công thức tính dòng tiêu thụ

-

Dòng tiêu thụ = 20 x 40ma = 800ma

b. Khối cảm biến vân tay -

Khối cảm biến vân tay sẽ gửi tín hiệu về khối xử lý, khối xử lý sẽ nhận tín hiệu và chuyển đến khối khác để chuyển tín hiệu đó đi. Đồng thời, khối cảm biến vân tay chỉ hoạt động khi khối xử lý trung tâm yêu cầu.

-

Trên thị trường có rất nhiều loại cảm biến vân tay như đầu đọc vân tay R303S có khả năng lưu trữ 1000 mẫu vân tay, đầu đọc vân tay R101 có khả năng lưu trữ 1000 mẫu, module R301 có khả năng lưu trữ 500 mẫu vân tay, module R307 có khả năng lưu trữ 120 vân tay,… Do đề tài của nhóm thực hiện quét vân tay cho một lớp học, mà số lượng sinh viên một lớp đại trà chỉ khoảng 100 sinh viên nên nhóm lựa chọn module cảm biến vân tay R307 để thực hiện trong đề tài này.

-

Cảm biến vân tay R307 tích hợp xử lý hình ảnh và thuật toán xử lý trên cùng một chip. Khả năng xử lý ảnh chụp tốt với độ phân giải lên đến 500dpi. Chuẩn giao tiếp: USB - UART (TTL logical logic) từ 9600 – 115200bps, sử dụng tốc độ mặc định là 57600 bps đảm bảo truyền nhận chính xác dữ liệu. Bên cạnh đó là các thông số khác như:  Điện áp cung cấp: 3.6V ~ 6V DC.  Dòng điện tiêu thụ: < 120mA.

-

Cách nối dây cho cảm biến vân tay R305 vào Arduino Mega 2560 theo thứ tự chân:  Dây số 1 nối vào nguồn 5V và dây số 2 nối vào chân GND của arduino.  Dây số 3 nối vào chân số 19 RX1 và dây số 4 nối chân 18 TX1 của Arduino Mega. 45

CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ

Hình 3.3: Sơ đồ nguyên lý Cảm biến vân tay kết nối Arduino Mega c. Khối Module ESP8266 -

Đề tài cần một phương tiện để gửi dữ liệu người dùng khi quét vân tay lên mạng Internet. Với cách kết nối đơn giản cũng như thao tác lập trình dễ dàng nên nhóm quyết định chọn module ESP8266 để gửi dữ liệu lên Internet. Tuy tính kinh tế khi chọn module này là không cao nhưng module vẫn có những ưu điểm. Nếu hệ thống mất điện, module vẫn có thể gửi dữ liệu khi sử dụng nguồn dự phòng, hệ thống mạng GPRS được phủ sống liên tục. Nếu ta chuyển hệ thống đến nơi khác vẫn có thể cập nhật dữ liệu dễ dàng mà không cần phải cấu hình lại hệ thống.

d. Khối hiển thị -

Hiển thị trạng thái làm việc của hệ thống lên màng hình LCD 20X4, với 4 hàng ta có thể dễ dàng thao tác giữa người dùng với mô hình hệ thống.

Hình 3.4: LCD 12x6 46

CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ -

Vì ta sử dụng mạch chuyển giao tiếp LCD 20x4 sang I2C, chỉ cần 2 chân SDA và SCL của Arduino Mega 2560 kết nối với 2 chân SDA và SCL của module là đã có thể hiển thị thông tin lên LCD.

-

Hình ảnh thực tế của mạch chuyển giao tiếp được thể hiện ở hình 3.7:

Hình 3.5: Mạch chuyển giao tiếp LCD sang I2C  Hai chân nguồn VCC và GND được kết nối với Adapter 5V 2A để dòng điện cho sim hoạt động ổn định lâu dài.  SDA được nối vào chân số 20 SDA và SCL nối vào chân số 21 SCL của Arduino Mega để truyền nhận dữ liệu theo chuẩn I2C. e. Khối nguồn -

Sử dụng nguồn Adapter 12V 3A sau đó sử dụng Module hạ áp LM2596 để hạ áp 12V xuống 5V.

Hình 3.6: Hình ảnh thực tế của Adapter 12V 3A 47

CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ -

Thông số kỹ thuật của Adapter 12V 3A:  Điện áp đầu vào: 100-240V 50/60Hz  Điện áp đầu ra: 12V 3A  Kích thước đầu chân cắm: 5.5mm *2.5mm

Hình 3.7: Module hạ áp LM2596

-

Thông số kỹ thuật của LM2596:  Điện áp đầu vào: Từ 3V đến 30V.  Điện áp đầu ra: Điều chỉnh được trong khoảng 1.5V đến 30V.  Dòng đáp ứng tối đa là 3A.  Hiệu suất: 92%  Công suất: 15W

3.2.3. Sơ đồ nguyên lý toàn mạch -

Dưới đây là hình 3.10 là sơ đồ nguyên lý toàn mạch thể hiện tất cả các khối và kết nối các thiệt bị lại với nhau rồi cắm vào Arduino Mega.

48

CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ

Hình 3.8: Sơ đồ chuyên lý toàn mạch

49

CHƯƠNG 4: THI CÔNG HỆ THỐNG

CHƯƠNG 4: THI CÔNG HỆ THỐNG 4.1. ĐÓNG GÓI VÀ THI CÔNG MÔ HÌNH 4.1.1. Đóng gói bộ điều khiển -

Sau khi kiểm tra mạch hoạt động tốt ta tiến hành đóng hộp thành mô hình hoàn chỉnh. Hình 4.1 là sơ đồ bố trí linh kiện hiển thị ra bên ngoài mặt trước.

Hình 4.1: Sơ đồ bố trí linh kiện mặt trước mô hình

4.1.2. Thi công mô hình

Hình 4.2: Hình dạng bên ngoài mô hình 50

CHƯƠNG 4: THI CÔNG HỆ THỐNG

Hình 4.3: Hình dạng bên trong mô hình

4.2. LẬP TRÌNH HỆ THỐNG 4.2.1. Lưu đồ giải thuật -

Hệ thống thực hiện được ba chức năng đó là quét vân tay điểm danh,quản lí admin và thêm vân tay để quản lý sinh viên trong một lớp học. Điểm danh để quản lý thời gian ra vào lớp của sinh viên được thực hiện bằng cách quét vân tay. Sau khi quét vân tay, dữ liệu ID của người quét sẽ được gửi lên mạng Internet để hiện thông tin:Thời gian ra vào, số lần đi trễ, thời gian đi trễ, số ngày vắng, thông tin sinh viên,…. Hệ thống còn cho phép thêm vân tay, xóa vân tay một cách dễ dàng.

-

Khi cấp điện vào hệ thống, khởi động Arduino, module ESP 8266, cảm biến vân tay, LCD, ….. Kết nối wifi: (chỉ làm 1 lần khi muốn đổi mạng wifi)

-

Ngay sau khi cấp nguồn, bấm giữ nút reset màu vàng trong 5 giây (đèn wifi nhấp nháy rồi sáng luôn) thì sẽ xóa toàn bộ cấu hình wifi đã lưu.

-

Sau đó module sẽ phát 1 wifi có tên FINGERPRINT_SERVER. Dùng điện thoại kết nối tới wifi này pass: 12345678. Sau đó mở trình duyệt chrom nhập IP 192.168.4.1 để vào trang cấu hình wifi cho hệ thống.

-

Sau hi chọn mạng wifi kết nối cho hệ thống xong bấm nút save để lưu lại.

-

Sử dụng hệ thống.  Hệ thống sau khi khởi động và kết nối wifi đèn wifi sẽ chớp 3 cái rồi tắt. Màn hình LCD sẽ hiện địa chỉ IP Web của hệ thống để truy cập xem dữ liệu. 51

CHƯƠNG 4: THI CÔNG HỆ THỐNG  Sauk hi hệ thống khởi động xong, Sẽ vào màn hình chính.  Bấm nút * để hiện lại IP Web.  Bấm nút # đề vào menu  Các chức năng gồm có: Thêm vân tay, xóa vân tay, xóa hết dữ liệu vân tay hệ thống và đồi pass. Các chức năng thực hiện theo hướng dẫn trên màn hình LCD  Lưu đồ hệ thống menu tự chọn Bắt đầu

Khởi động Arduino, module ESP 8266, cảm biến vân tay, LCD

Vào chế độ 0 (hiển thị menu tự chọn)

Quét ma trận phím

Đ

Thêm hoặc xóa vân tay

Chế độ 1 S

Đ Chế độ 2

Đ Nhập đúng mật khẩu

Bắt đầu

52

Quản lí Admin

CHƯƠNG 4: THI CÔNG HỆ THỐNG Hình 4.4: Lưu đồ menu -

Giải thích lưu đồ:  Quy trình làm việc của hệ thống như thể hiện trong sơ đồ hình 4.4.. Chương trình bắt đầu vào khởi động ESP8266, LCD, khởi tạo các biến. Sau đó kiểm tra có cảm biến vân tay kết nối chưa. Nếu chưa kết nối thì chương trình sẽ dừng đợi đến khi nào có kết nối. Vòng lặp chương trình được thực hiện. Mặc định chương trình sẽ vào chế độ 0. Ở chế độ 0 thì cho phép hiển thị menu lựa chọn bao gồm: 1.Quét vân tay, 2.Xóa vân tay. Sau đó nhấn nút # để qua phần quản lí Admin. Cùng lúc đó, kiểm tra bàn phím ma trận, nếu phím 1 được nhấn thì sẽ vào chế độ 1, nếu phím 2 được nhấn thì sẽ vào chế độ 2.  Ở chế độ 1 thì cho phép quét dấu vân tay. Sau đó, dữ liệu ID của người sử dụng (tương ứng với vân tay của người đó đã được lưu trữ trước đó) được cập nhật lên website thông qua Wifi trên ModuleESP8266. Khi việc gửi dữ liệu hoàn tất thì trở về menu lựa chọn.  Ở chế độ 2 cho phép quản trị Admin. Trước khi vào menu quản trị Admin, người dùng phải nhập đúng mật khẩu Admin thì hệ thống mới cho phép thêm vân tay, xóa vân tay.

53

CHƯƠNG 4: THI CÔNG HỆ THỐNG  Lưu đồ quét vân tay

Hình 4.5: Lưu đồ quét vân tay

-

Giải thích lưu đồ:  Quá trình quét vân tay bằng dấu vân tay thực hiện theo lưu đồ hình 4.5 phía trên. Chương trình kiểm tra nếu đang ở chế độ 1 thì ta đưa vân tay vào. Nếu vân tay được quét so sánh trùng với vân tay đã được lưu trước đó thì màn hình LCD sẽ thông báo đã quét vân tay.

54

CHƯƠNG 4: THI CÔNG HỆ THỐNG  Lưu đồ truyền dữ liệu Wed

Hình 4.6: Lưu đồ truyền dữ liệu lên wed -

Giải thích Lưu đồ truyền dữ liệu Wed  Quy trình chuyển dữ liệu ID người dùng lên web như lưu đồ hình 4.6. Chương trình kiểm tra nếu có dữ liệu từ serial 12 thì kết nối wifi. Sau khi kết nối thành công thì tiến hành gửi dữ liệu ID người dùng lên web. Sau khi quá trình hoàn tất thì kết nối sẽ được ngắt. 55

CHƯƠNG 4: THI CÔNG HỆ THỐNG  Lưu đồ quản lý admin

Hình 4.7: Lưu đồ quản trị

-

Giải thích Lưu đồ  Quy trình quản trị admin thực hiện theo lưu đồ hình 4.7. Chương trình kiểm tra có đang ở chế độ bằng 3 không. Nếu đúng thì nhập mật khẩu để vào menu hiển thị tùy chọn quản trị admin. Menu tùy chọn này gồm 2 chế độ:  Ở chế độ 1 cho phép thêm vân tay. Sau khi hoàn tất quay về menu quản trị admin. 56

CHƯƠNG 4: THI CÔNG HỆ THỐNG  Ở chế độ 2 cho phép xóa vân tay. Sau khi hoàn tất quay về menu quản trị admin 4.2.2. Phần mềm lập trình cho vi điều khiển  Giới thiệu phần mềm lập trình Arduino IDE -

Arduino IDE là phần mềm giúp ta lập trình cho các dòng sản phẩm của Arduino như Arduino Uno, Arduino Mega, nano, ,.. Lập trình trên Arduino IDE là cách tiếp cận đơn giản cho những người đam mê điện tử và muốn tạo ra những sản phẩm nhúng ấn tượng mà không cần quá nhiều kiến thức chuyên sâu về điện tử. Môi trường phát triển tích hợp Arduino IDE là một ứng dụng đa nền tảng được viết bằng Java.

-

Arduino IDE hình 4.8 là nơi để soạn thảo code, kiểm ra lỗi và upload code.

Hình 4.8: Giao diện lập trình arduino

-

Arduino Toolbar có một số button và chức năng của chúng như sau:

Hình 4.9: Arduino Toolbar  Verify (1): kiểm tra code có lỗi hay không.  Upload (2): nạp code đang soạn thảo vào Arduino. 57

CHƯƠNG 4: THI CÔNG HỆ THỐNG  New, Open, Save (3): Tạo mới, mở và lưu sketch.  Serial Monitor (4): Đây là màn hình hiển thị dữ liệu từ Arduino gửi lên máy tính. -

Để viết chương trình cho ESP8266 Espressif hiện đã hỗ trợ 3 nền tảng SDK (Software Development Kit – Gói phát triển phần mềm) độc lập là: NONOS SDK, RTOS SDK và Arduino. Cả 3 đều có những ưu điểm riêng phù hợp với từng ứng dụng nhất định. Hiện nay Arduino đang đƣợc sử dụng rộng rãi bởi tính dễ sử dụng, kiến trúc phần mềm tốt và tận dụng được nhiều thư viện cộng đồng.

-

Arduino là một IDE tích hợp sẵn editor, compiler, programmer và đi kèm với nó là các firmware có bootloader, các bộ thư viện được xây dựng sẵn và dễ dàng tích hợp.

-

Ngôn ngữ sử dụng là C/C++. Tất cả đều opensource và được đóng góp, phát triển hàng ngày bởi cộng đồng. Triết lý thiết kế và sử dụng của Arduino giúp cho người mới, không chuyên rất dễ tiếp cận, các công ty, hardware dễ dàng tích hợp. Tuy nhiên, với trình biên dịch C/C++ và các thư viện chất lượng được xây dựng bên dưới thì mức độ phổ biến ngày càng tăng và hiệu năng thì không hề thua kém các trình biên dịch chuyên nghiệp cho chip khác.

-

Đại diện cho Arduino ban đầu là chip AVR, nhưng sau này có rất nhiều nhà sản xuất sử dụng các chip khác nhau nhƣ ARM, PIC, STM32 gần đây nhất là ESP8266, ESP32, và RISCV với năng lực phần cứng và phần mềm đi kèm mạnh mẽ hơn nhiều.

-

Đặc điểm của Arduino:

-

Arduino che dấu đi sự phức tạp của điện tử bằng các khái niệm đơn giản, che đi sự phức tạp của phần mềm bằng các thủ tục ngắn gọn. Việc setup output cho 1 MCU bằng cách setup thanh ghi rõ ràng phức tạp đến độ người 58

CHƯƠNG 4: THI CÔNG HỆ THỐNG chuyên củng phải lật datasheet ra xem, nhƣng với Arduino thì chỉ cần gọi 1 hàm. -

Bởi vì tính phổ biến và dễ dùng, với các thư viện được tích hợp sẵn. Ta chỉ cần quan tâm đến tính năng sản phẩm mà bỏ qua các tiểu tiết (protocol, datasheet …) Nên giúp người không chuyên dễ dàng tiếp cận và làm ra các sản phẩm tuyệt vời mà không cần phải biết nhiều về điện tử.

-

Chính vì không quan tâm nhiều đến cách thức hoạt động của các Module đi kèm, nên đa phần người dùng sẽ khó xử lý được khi có các vấn đề phát sinh ngoài tầm của thư viện.

-

Các module prototype làm sẵn cho Arduino có độ bền không cao, mục tiêu đơn giản hóa quá trình làm sản phẩm.

 Các lợi ích khi sử dụng Arduino -

Thiết kế IDE tốt, có thể dễ dàng tích hợp nhiều loại compiler, nhiều loại hardware mà không hề giảm hiệu năng. Ví dụ: Arduino gốc cho AVR, nhưng có nhiều phiên bản cho STM32, PIC32, ESP8266, ESP32… tận dụng tối đa các thư viện sẵn có.

-

Các thư viện được viết dựa trên lớp API trên cùng, nên đa số các thư viện cho Arduino có thể dùng được cho tất cả các chip. Điển hình là Arduino cho ESP8266 có thể tận dụng trên 90% các thư viện cho Arduino khác.

-

Trình biên dịch cho Arudino là C/C++, khi biên dịch ESP8266 non-os SDK và ESP8266 Arduino cùng dùng chung trình biên dịch, hiệu năng không hề thua kém.

-

Cách tơ chức các thư viện C/C++ theo dạng OOP giúp phân lớp, kế thừa và quản lý cực kỳ tốt cho các ứng dụng lớn. Các MCU ngày càng mạnh mẽ và ứng dụng cho nó sẽ ngày càng lớn. Các mô hình quản lý code đơn giản trƣớc đây (thuần C) sẽ khó. 59

CHƯƠNG 4: THI CÔNG HỆ THỐNG -

Các project cho Arduino đều opensource, ta dễ dàng lấy nó và đưa vào sản phẩm với chất lượng tốt và học hỏi được nhiều từ cách thức thiết kế chương trình.

-

Arduino chú trọng tính đa nền tảng, module hóa cao, phù hợp với các ứng dụng từ phức tạp tới cực kỳ phức tạp. Các ứng dụng kiểu này rất ph biến trong thực tế. Nếu không dùng C++, hoặc arduino mà gặp vấn đề về overcontrol thì nên thử qua Arduino. Tiết kiệm đựợc rất rất nhiều thời gian cho việc tập trung vào tính năng sản phẩm.

 Arduino cho ESP8266 -

Với Arduino ta có thể viết 1 Sketch sử dụng các thư viện và hàm tương tự của Arduino cho ESP8266.

-

ESP8266 Arduino core đi kèm với thư viện kết nối Wifi hỗ trợ TCP, UDP và các ứng dụng HTTP, mDNS, SSDP, DNS Servers. Ngoài ra còn có thể thực hiện cập nhật OTA, sử dụng Filesystem dùng bộ nhớ Flash hay SDcard, điều khiển servo, ngoại vi SPI, I2C, …

 Giao diện hệ thống wedserver

Hình 4.10: Giao diện Web 60

CHƯƠNG 4: THI CÔNG HỆ THỐNG 4.2.3. Phần mềm Exel -

Sử dụng phần mềm exel để thống kê số lần đi trễ để cảnh báo sinh viên qua gmail,

Hình 4.11: Excel 4.3. VIẾT TÀI LIỆU HƯỚNG DẪN SỬ DỤNG, THAO TÁC  Viết tài liệu hướng dẫn sử dụng hệ thống quét vân tay -

Bước 1: Cấp nguồn cho hệ thống, hệ thống sử dụng nguồn là 12V 3A. Hệ thống khởi động, sau đó kết nối wifi: (chỉ làm 1 lần khi muốn đổi mạng wifi)  Ngay sau khi cấp nguồn, bấm giữ nút reset màu vàng trong 5 giây (đèn wifi nhấp nháy rồi sáng luôn) thì sẽ xóa toàn bộ cấu hình wifi đã lưu.  Sau đó module sẽ phát 1 wifi có tên FINGERPRINT_SERVER. Dùng điện thoại kết nối tới wifi này pass: 12345678. Sau đó mở trình duyệt google nhập IP 192.168.4.1 để vào trang cấu hình wifi cho hệ thống. Sau khi chọn mạng wifi kết nối cho hệ thống xong bấm nút save để lưu lại. Hệ thống sau khi khởi động và kết nối wifi đèn wifi sẽ chớp 3 cái rồi tắt. Màn hình LCD sẽ hiện địa chỉ IP Web của hệ thống để truy cập xem dữ

61

CHƯƠNG 4: THI CÔNG HỆ THỐNG liệu. Sau khi hệ thống khởi động, màn hình LCD sẽ hiển thị chế độ quét vân tay. Bấm nút * để hiện lại IP Web, bấm nút # đề vào menu. -

Bước 2: Nếu muốn quét vân tay thì đưa vân tay người dùng đã được lưu trữ trước đó vào cảm biến cho đến khi màn hình LCD thông báo đã xác nhận. Dữ liệu ID người dùng khi quét vân tay sẽ được gửi lên trang web. Sau khi dữ liệu được gửi thành công thì màn hình LCD sẽ quay về menu lựa chọn.

-

Bước 3: Bấm # 1 lần có 2 chế độ: Thêm vân tay và xóa vân tay, bấm phím 1 để vào chế độ thêm vân tay, màn hình sẽ hiển thị nhập mật mã, nhập mật mã xong nhấn # để xác nhận, màn hình hiển thị đặt ngón tay vào, đưa tay ngón tay người thêm vân tay vào, màn hình hiển thị lưu tên, sau đó nhấn # để lưu, hệ thống sẽ quay về chế độ quét vân tay. Bấm phím 2 để xóa vân tay, màn hình hiển thị nhậo mật mã, lựa chọn tên người cần xóa vân tay bằng phím 0, sau đó nhấn phím # để xóa.

-

Bước 4: Muốn vào chế độ quản lý Admin bấm phím # 2 lần có 2 chế độ là: Đổi pass Admin và xóa hết tất cả dữ liệu. Bấm phím 1 để đổi pass Admin, màn hình hiển thị nhập mật mã, nhập mật mã cũ vào sau đó nhấn phím # để xác nhận, màn hình hiển thị nhập mật mã mới, nhập mật mã mới vào rồi nhấn # để lưu. Muốn chọn chế độ xóa hết tất cả dữ liệu nhấn phím 2, màn hình hiển thị nhập mật mã, nhập mật mã đúng màn hình hiển thị 2 chế độ hủy và xác nhận, nhấn * để hủy và nhấn # để xác nhận xóa.

-

Bước 5: Nếu admin muốn kiểm tra thông tin người dùng về thời gian ra vào, thông tin người dung. Bấm phím * để màn hình hiển thị IP Wed, sử dụng điện vào đã kết nối wifi với hệ thống lên google để vào IP Wed.

-

Bước 6: Sau một khoảng thời gian sẽ tổng hợp lại những sinh viên vắng học và trễ học sau đó vào ứng dụng exel để thực hiện cảnh báo sinh viên.

 Lưu ý: Khi đang sử dụng hệ thống muốn quay về chế độ quét vân tay thì nhấn *

62

CHƯƠNG 5: KẾT QUẢ, NHẬN XÉT, ĐÁNH GIÁ

CHƯƠNG 5: KẾT QUẢ, NHẬN XÉT, ĐÁNH GIÁ 5.1. KẾT QUẢ -

Sau quãng thời gian tìm hiểu, nghiên cứu song song giữa các tài liệu chuyên ngành tiếng Việt và tiếng Anh, quá trình tổng hợp lại các kiến thức đã học trong suốt 4 năm học và tìm hiểu qua mạng Internet cũng như được sự hướng dẫn tận tình của GVHD Nguyễn Đăng Khoa. Nhóm chúng em cũng đã hoàn thành được đồ án tốt nghiệp với đề tài “QUẢN LÍ VÀ CẢNH BÁO SINH VIÊN THÔNG QUA HỆ THỐNG QUÉT VÂN TAY”.

-

Sau quá trình thực hiện đồ án này, nhóm em đã tích lũy được thêm nhiều kiến thức mới, bổ sung thêm hành trang kiến thức phục vụ cho công việc sau này.  Biết cách sử dụng và khai thác các tính năng của Arduino như giao tiếp giữa Arduino với các module mở rộng như: cảm biến vân tay R307, module ESP 8266, ma trận phím, màn hình LCD.  Tìm hiểu và tiến hành kết nối Arduino với các module mở rộng như cảm biến vân tay R375, module ESP 8266, ma trận phím, màn hình LCD.  Cách sử dụng module ESP 8266, nguyên lý hoạt động, các thông số kỹ thuật, tính năng của ESP 8266. Thiết lập cho module ESP 8266, gửi dữ liệu lên website nhờ WIFI.  Biết được nguyên lý hoạt động của cảm biến, các thông số kỹ thuật, các tính năng cũng như cách sử dụng của cảm biến vân tay R307. Biết được quy trình lấy mẫu dấu vân tay cũng như lịch sử hình thành và phát triển của ngành sinh trắc học vân tay.  Lập trình được một website với giao diện trực quan, thao tác đơn giản.

-

Sau quá trình nghiên cứu, thi công đề tài “QUẢN LÝ VÀ CẢNH BÁO SINH VIÊN THÔNG QUA HỆ THỐNG QUÉT VÂN TAY” của nhóm đã hoàn thành và thực hiện được tính năng sau:

 Hiển thị trên màn hình LCD -

Khi khởi động hệ thống, màn hình LCD sẽ hiển thị phần check vân tay 63

CHƯƠNG 5: KẾT QUẢ, NHẬN XÉT, ĐÁNH GIÁ

Hình 5.1: Phần check vân tay

-

Nếu người dùng muốn thêm vân tay hay xóa vân tay cũng như thay quản lí Admin chỉ cần ấn chọn phím # từ ma trận phím. Khi đó menu quản trị admin sẽ hiện trên mà hình LCD.

Hình 5.2: Phần thêm vân tay và xóa vân tay

Hình 5.3: Phần quản lí Admin 64

CHƯƠNG 5: KẾT QUẢ, NHẬN XÉT, ĐÁNH GIÁ  Thao tác quét vân tay -

Sau khi hệ thống khởi động xong đưa ngón tay của người cần quét vân tay vào để quét vân tay

Hình 5.4: Đưa ngón tay vào cảm biến

-

Hình 5.5: Hệ thống xác nhận vân tay

Khi hệ thống xác nhận quét vân tay thành công thì dữ liệu sẽ được chuyển từ Arduino mega thông qua Module ESP8266 để gửi dữ liệu lên Wedserver

 Thao tác thêm vân tay và xóa vân tay -

Sau khi hệ thống khởi động bấm phím # để vào phần thêm vân tay và xóa vân tay.

Hình 5.6: Phần thêm vân tay và xóa vân tay

65

Hình 5.7: Phần nhập mật mã

CHƯƠNG 5: KẾT QUẢ, NHẬN XÉT, ĐÁNH GIÁ -

Sau đó bấm phím 1 để thêm vân tay và bấm phím 2 để xóa vân tay, khi muốn vào phần thêm vân tay hoặc xóa vân tay sẽ phải nhập mật mã.

-

Khi đăng nhập đúng mật mã sẽ vào phần thêm vân tay hoặc vào phần xóa vân tay, thao tác thêm vân tay như sau:

Hình 5.8: Phần thêm vân tay

Hình 5.9: Thao tác thêm vân tay

Hình 5.10: Phần xóa vân tay

 Giao diện wedserver -

Người dung truy cập vào ip hiển thị trên màn hình led qua phím bấm *.

Hình 5.11: Phần hiển thị thông tin quét vân tay trên wed server 66

CHƯƠNG 5: KẾT QUẢ, NHẬN XÉT, ĐÁNH GIÁ  Giao diện exel cảnh báo sinh viên -

Sử dụng Exel để thống kể và gửi cảnh báo về gmail của sinh viên.

Hình 5.12: Hệ thống cảnh báo sinh viên

5.2. Nhận xét và đánh giá -

Tuy vấp phải nhiều khó khăn trong quá trình thực hiện nhưng cuối cùng nhóm đã hoàn thiện được đề tài: “QUẢN LÝ VÀ CẢNH BÁO THÔNG TIN SINH VIÊN BẰNG MÁY QUÉT VÂN TAY”.

-

Mô hình hoạt động ổn định, có thể làm việc liên tục và đáp ứng được các yêu cầu đã đề ra. Người dùng thao tác một cách đơn giản, dễ sử dụng. Hê thống đảm bảo an toàn và bảo mật cho người dùng.

-

Việc sử dụng nguồn cấp từ 12V trở xuống nên an toàn cho người sử dụng.

-

Như chúng ta đã biết, công nghệ nhận dạng vân tay có tính bảo mật rất cao nên tính bảo mật của mô hình là khá cao.

-

Wedserver hiển thị thông tin sinh viên và phần mềm Exel cảnh báo sinh viên dễ sử dụng, tiết kiệm thời gian cho giản viên có thể quản lí được sinh viên. 67

CHƯƠNG 5: KẾT QUẢ, NHẬN XÉT, ĐÁNH GIÁ -

Cảnh báo sinh viên bằng cách gửi mail thông báo về việc đi trễ, số ngày vắng của sinh viên bằng mail.

-

Thời gian đáp ứng khi cập nhật dữ liệu vân tay lên website liên tục mỗi khi có vân tay được quét.

-

Song song với mặt đặt được vẫn còn tồn động một số hạn chế do thời gian thực hiện có hạn, lượng kiến thức cũng như nguồn tài liệu tham khảo còn hạn chế, chủ yếu thông qua mạng internet nên đề tài không thể tránh khỏi sai sót:  Không tạo được một wedserver sử dụng ngôn ngữ Mysql để quản lí dữ liệu sinh viên.  Việc gửi mail cảnh báo sinh viên chưa tự động.  Thống kê dữ liệu sinh viên chưa tự động được.

68

CHƯƠNG 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

CHƯƠNG 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 6.1. Kết luận -

Sau thời gian tìm hiểu, nghiên cứu và thực hiện, nhóm đã hoàn thành đề tài “QUẢN LÝ VÀ CẢNH BÁO THÔNG TIN SINH VIÊN BẰNG MÁY QUÉT VÂN TAY” Hệ thống đáp ứng đầy đủ các tính năng, nội dung và mục tiêu ban đầu đã đề ra:  Giao tiếp và truyền dữ liệu thành công giữa Arduino Mega 2560 với các module cảm biến vân tay R307, module ESP 8266, màn hình LCD, ma trận phím.  Điểm danh thành công thông qua việc quét nhận dạng dấu vân tay.  Có thể thêm hoặc xóa vân tay khi quản trị viên cần lấy mẫu vân tay một lớp.  Cập nhật dữ liệu vân tay lên webserver thành công.  Quản lý người dùng trên website bao gồm thời gian vào, số lần trễ, số ngày vắng, thông tin người dùng.  Cảnh báo sinh viên đi trễ hoặc vắng để sinh viên có hướng khắc phục.  Gửi về mail sinh viên thông tin trễ học hoặc vắng thông qua giao diện trên website.

-

Nhóm đã cố gắng thực hiện nhưng vẫn còn tồn động một số hạn chế về mặt kiến thức cũng như thời gian thực hiện nên đề tài khó tránh khỏi sai sót và hạn chế:  Thay thể phần tự động cảnh báo sinh viên bằng phần mềm Exel để cảnh báo sinh viên  Sử dụng Wedserver có sẵn trển module ESP 8266 để thay thế

-

Tuy còn tồn động những mặt hạn chế nhưng nhìn chung mô hình hoạt động tốt so với những yêu cầu đã đề ra:  Hệ thống chạy tương đối ổn định, dữ liệu vân tay được cập nhật liên tục.  Module cảm biến vân tay R307 hoạt động tốt, ổn định, độ chính xác rất cao. Module ESP 8266 hoạt động khá ổn định. 69

CHƯƠNG 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN  Hệ thống website quản lý thời gian ra vào của người dùng dễ sử dụng, nhiều tính năng đáp ứng nhu cầu thực tiễn.  Gửi email thông báo về thời gian ra vào cũng như số lần đi trễ đến mail. 6.2. HƯỚNG PHÁT TRIỂN -

Có thể gửi dữ liệu người dùng lên website quản lý thời gian thông qua Wifi.

-

Mở rộng khả năng lấy nhiều mẫu vân tay hơn để nâng cao khả năng ứng dụng của đề tài không chỉ dừng lại ở việc quản lý lớp học mà có thể quản lý nhà máy, xí nghiệp,… Thiết kế giao diện website sinh động hơn, giao diện dễ dàng tương tác với người dùng. Tự động gửi email đến những sinh viên đã đi trễ, vắng.

70

TÀI LIỆU THAM KHẢO

TÀI LIỆU THAM KHẢO Sách tham khảo http://arduino.vn/bai-viet/1226-web-server-voi-arduino-va-esp8266 https://dientu24h.com/bai-viet/cach-gui-du-lieu-nhiet-do-len-webserver-bang-arduinonhanh-nhat-100-thanh-cong-3.html https://arduinokit.vn/giao-tiep-i2c-lcd-arduino/ https://nshopvn.com/product/ban-phim-ma-tran-mem-3x4/ http://arduino.vn/bai-viet/1172-lap-trinh-esp8266-bang-arduino-ide https://vietmachine.com.vn/mo-dun-cam-bien-van-tay-voi-arduino-fpm10a.html https://blog.hocexcel.online/gui-email-tu-excel.html http://arduino.vn/tutorial/1446-huong-dan-lap-trinh-arduino-bang-javascript-trongmoi-truong-nodejs

71

PHỤ LỤC

PHỤ LỤC  Source code #include #include #include #define FGPSerial Serial1 #define ESPSerial Serial2 #define KEY0 0 #define KEY1 1 #define KEY2 2 #define KEY3 3 #define KEY4 4 #define KEY5 5 #define KEY6 6 #define KEY7 7 #define KEY8 8 #define KEY9 9 #define KEYSTAR 10 #define KEYHASH 11 #define NOKEY 12 #define Keycol1 30 #define Keycol2 32 #define Keycol3 34 #define KeyrowA 22 #define KeyrowB 24 #define KeyrowC 26 #define KeyrowD 28 #define STAMAIN 0 #define STAMENU1 1 #define STAMENU2 2 #define STACHANGEPASS 3 #define STACHECKPASS 4 #define STAADDFINGER 5 #define STADELETEFINGER 6 #define STADELETEALLFINGER 7 #define STAINPUTNAME 8 72

PHỤ LỤC #define STAINPUTID 9 #define STARTINDEXDATA 20 #define STARTEEPROMFORDATA 300 #define MAXDATANUMBER 120 Adafruit_Fingerprint finger = Adafruit_Fingerprint( & FGPSerial); LiquidCrystal_I2C MyLCD(0x27, 16, 2); byte NumberOfID; byte LastID; bool IncheckFingerPrint = false; byte CurrentState; byte NextState; byte CurrentPass[6]; byte PassWord[6]; byte CurrentPassIndex; String NameData = ""; byte NameLengh = 0; byte PressCount = 0; byte LastKey = NOKEY; char CurrentCharacter; byte DataRecordArray[MAXDATANUMBER]; byte CurrentID; byte IDToSave; String ReceiveESPData; void InitFingerPrint() { if (finger.verifyPassword()) { Serial.println("Found fingerprint sensor!"); } else { Serial.println("Did not find fingerprint sensor :("); while (1) { delay(1); } } Serial.println(F("Reading sensor parameters")); finger.getParameters(); Serial.print(F("Status: 0x")); 73

PHỤ LỤC Serial.println(finger.status_reg, HEX); Serial.print(F("Sys ID: 0x")); Serial.println(finger.system_id, HEX); Serial.print(F("Capacity: ")); Serial.println(finger.capacity); Serial.print(F("Security level: ")); Serial.println(finger.security_level); Serial.print(F("Device address: ")); Serial.println(finger.device_addr, HEX); Serial.print(F("Packet len: ")); Serial.println(finger.packet_len); Serial.print(F("Baud rate: ")); Serial.println(finger.baud_rate); finger.getTemplateCount(); NumberOfID = finger.templateCount; if (NumberOfID == 0) { Serial.print("Sensor doesn't contain any fingerprint data. Please run the 'enroll' example."); } else { Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates"); } } uint8_t getFingerprintEnroll(byte ID) // Ham nhap dau van tay vao vi tri ID { int p = -1; byte KeyCode = NOKEY; Serial.print("Waiting for valid finger to enroll as #"); Serial.println(ID); MyLCD.setCursor(0, 1); MyLCD.print("DAT NGON TAY VAO"); while (p != FINGERPRINT_OK && KeyCode != KEYSTAR) { KeyCode = ScanKeyboard(); p = finger.getImage(); switch (p) { 74

PHỤ LỤC 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; } } if (KeyCode == KEYSTAR) return 255; MyLCD.setCursor(0, 1); MyLCD.print("DANG XU LY... "); // 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: 75

PHỤ LỤC Serial.println("Could not find fingerprint features"); return p; default: Serial.println("Unknown error"); return p; } MyLCD.setCursor(0, 1); MyLCD.print("HAY BO TAY RA "); 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"); MyLCD.setCursor(0, 1); MyLCD.print("DAT LAI NGON TAY"); 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"); 76

PHỤ LỤC break; } } // OK success! MyLCD.setCursor(0, 1); MyLCD.print("DANG XU LY... "); 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) { 77

PHỤ LỤC Serial.println("Fingerprints did not match"); return p; } else { Serial.println("Unknown error"); return p; } MyLCD.setCursor(0, 1); MyLCD.print("DANG LUU... "); 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; } return true; } int getFingerprintID() // ham check dau van tay { uint8_t p = finger.getImage(); switch (p) { case FINGERPRINT_OK: Serial.println("Image taken"); 78

PHỤ LỤC MyLCD.setCursor(0, 1); MyLCD.print("DANG QUET VT... "); IncheckFingerPrint = true; break; case FINGERPRINT_NOFINGER: Serial.println("No finger detected"); return -1; case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); return -1; case FINGERPRINT_IMAGEFAIL: Serial.println("Imaging error"); return -1; default: Serial.println("Unknown error"); return -1; } // OK success! p = finger.image2Tz(); switch (p) { case FINGERPRINT_OK: Serial.println("Image converted"); MyLCD.setCursor(0, 1); MyLCD.print("DANG KIEM TRA VT"); break; case FINGERPRINT_IMAGEMESS: Serial.println("Image too messy"); return -1; case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); return -1; case FINGERPRINT_FEATUREFAIL: Serial.println("Could not find fingerprint features"); return -1; case FINGERPRINT_INVALIDIMAGE: Serial.println("Could not find fingerprint features"); return -1; 79

PHỤ LỤC default: Serial.println("Unknown error"); return -1; } // OK converted! p = finger.fingerSearch(); if (p == FINGERPRINT_OK) { Serial.println("Found a print match!"); } else if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println("Communication error"); return -1; } else if (p == FINGERPRINT_NOTFOUND) { Serial.println("Did not find a match"); return 0; } else { Serial.println("Unknown error"); 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; } uint8_t deleteFingerprint(uint8_t ID) { uint8_t p = -1; p = finger.deleteModel(ID); if (p == FINGERPRINT_OK) { Serial.println("Deleted!"); return p; } else if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println("Communication error"); return p; } else if (p == FINGERPRINT_BADLOCATION) { Serial.println("Could not delete in that location"); 80

PHỤ LỤC return p; } else if (p == FINGERPRINT_FLASHERR) { Serial.println("Error writing to flash"); return p; } else { Serial.print("Unknown error: 0x"); Serial.println(p, HEX); return p; } } void SavePasswordToEEPROM() { EEPROM.write(0x00, PassWord[0]); EEPROM.write(0x01, PassWord[1]); EEPROM.write(0x02, PassWord[2]); EEPROM.write(0x03, PassWord[3]); EEPROM.write(0x04, PassWord[4]); EEPROM.write(0x05, PassWord[5]); } void GetPasswordFromEEPROM() { char i; byte CurrentValue; { for (i = 0; i < 6; i++) { CurrentValue = EEPROM.read(i); if (CurrentValue == 0xFF) // blank eeprom save default pass { PassWord[0] = 0; PassWord[1] = 2; PassWord[2] = 4; PassWord[3] = 6; PassWord[4] = 8; PassWord[5] = 1; SavePasswordToEEPROM(); return; } else { PassWord[i] = CurrentValue; 81

PHỤ LỤC } } } } void SaveInforToEEPROM(byte ID, String Name) { char NameCharacter[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; byte Index; Name.toCharArray(NameCharacter, 16); for (Index = 0; Index < 16; Index++) { EEPROM.write(STARTEEPROMFORDATA + (ID - 1) * 25 + Index, NameCharacter[Index]); } } String GetInforFromEEPROM(byte ID) { String Name = ""; byte Index; char Character; for (Index = 0; Index < 16; Index++) { 82

PHỤ LỤC Character = EEPROM.read(STARTEEPROMFORDATA + (ID - 1) * 25 + Index); if (Character == 0) break; Name += Character; } return Name; } void WriteIndextoEEPROM(byte Index, byte Status) { EEPROM.write(STARTINDEXDATA + Index - 1, Status); } void ReadIndexDatafromEEPROM() { byte Status; byte Index; Status = EEPROM.read(STARTINDEXDATA); if (Status == 0xFF) ResetDataRecordArray(); // empty EEPROM else { for (Index = 0; Index < MAXDATANUMBER; Index++) { DataRecordArray[Index] = EEPROM.read(STARTINDEXDATA + Index); } } } byte ScanKeyboard(void) { digitalWrite(Keycol1, HIGH); digitalWrite(Keycol2, HIGH); digitalWrite(Keycol3, HIGH); digitalWrite(Keycol1, LOW); if (!digitalRead(KeyrowA)) { while (!digitalRead(KeyrowA)); delay(10); return KEY1; } if (!digitalRead(KeyrowB)) { while (!digitalRead(KeyrowB)); delay(10); 83

PHỤ LỤC return KEY4; } if (!digitalRead(KeyrowC)) { while (!digitalRead(KeyrowC)); delay(10); return KEY7; } if (!digitalRead(KeyrowD)) { while (!digitalRead(KeyrowD)); delay(10); return KEYSTAR; } digitalWrite(Keycol1, HIGH); digitalWrite(Keycol2, LOW); if (!digitalRead(KeyrowA)) { while (!digitalRead(KeyrowA)); delay(10); return KEY2; } if (!digitalRead(KeyrowB)) { while (!digitalRead(KeyrowB)); delay(10); return KEY5; } if (!digitalRead(KeyrowC)) { while (!digitalRead(KeyrowC)); delay(10); return KEY8; } if (!digitalRead(KeyrowD)) { while (!digitalRead(KeyrowD)); delay(10); return KEY0; } 84

PHỤ LỤC digitalWrite(Keycol2, HIGH); digitalWrite(Keycol3, LOW); if (!digitalRead(KeyrowA)) { while (!digitalRead(KeyrowA)); delay(10); return KEY3; } if (!digitalRead(KeyrowB)) { while (!digitalRead(KeyrowB)); delay(10); return KEY6; } if (!digitalRead(KeyrowC)) { while (!digitalRead(KeyrowC)); delay(10); return KEY9; } if (!digitalRead(KeyrowD)) { while (!digitalRead(KeyrowD)); delay(10); return KEYHASH; } digitalWrite(Keycol3, HIGH); return NOKEY; } void ResetDataRecordArray() { byte Index; for (Index = 0; Index < MAXDATANUMBER; Index++) { DataRecordArray[Index] = 0; WriteIndextoEEPROM(Index, 0); SaveInforToEEPROM(Index + 1, ""); } } byte CheckNextIDAvailable() { byte Index; 85

PHỤ LỤC for (Index = 0; Index < MAXDATANUMBER; Index++) { if (DataRecordArray[Index] == 0) return Index + 1; } return MAXDATANUMBER + 1; // no record found; } byte CheckNextIDInUse(byte StartID) { byte Index; for (Index = StartID; Index < MAXDATANUMBER; Index++) { if (DataRecordArray[Index] == 1) return Index + 1; } return MAXDATANUMBER + 1; // no record found; } byte DeleteIDArray(byte ID) { DataRecordArray[ID - 1] = 0; WriteIndextoEEPROM(ID, 0); } byte AddIDArray(byte ID) { DataRecordArray[ID - 1] = 1; WriteIndextoEEPROM(ID, 1); }

byte SetupNewFingerPrint(byte IDSave) { byte Result; Result = getFingerprintEnroll(IDSave); switch (Result) { case true: { MyLCD.setCursor(0, 1); MyLCD.print("DA LUU VAN TAY! "); break; } case FINGERPRINT_ENROLLMISMATCH: { MyLCD.setCursor(0, 1); MyLCD.print("2 VAN TAY KHAC "); 86

PHỤ LỤC break; } case 255: { return 255; break; } default: { MyLCD.setCursor(0, 1); MyLCD.print("CO LOI XAY RA! "); } } delay(1000); return Result; } int CheckFingerPrint() { int CheckID; CheckID = getFingerprintID(); if (CheckID != -1) { if (CheckID == 0) { MyLCD.setCursor(0, 1); MyLCD.print("VT KHONG KHOP! "); delay(1000); DisplayMain(); } else { return CheckID; } } else { if (IncheckFingerPrint == true) { IncheckFingerPrint = false; } } return 1500; } void DeleteFingerPrint(byte ID) { byte Result; 87

PHỤ LỤC Result = deleteFingerprint(ID); if (Result == FINGERPRINT_OK) { MyLCD.setCursor(0, 1); MyLCD.print("DA XOA VAN TAY "); } else { MyLCD.setCursor(0, 1); MyLCD.print("CO LOI XAY RA! "); } } void DeleteAllFinger() { MyLCD.setCursor(0, 1); MyLCD.print("DANG XOA... "); finger.emptyDatabase(); ResetDataRecordArray(); MyLCD.setCursor(0, 1); MyLCD.print("DA XOA HET DATA "); } void DisplayMenu1() { MyLCD.clear(); MyLCD.setCursor(0, 0); MyLCD.print("1: THEM VAN TAY"); MyLCD.setCursor(0, 1); MyLCD.print("2: XOA VAN TAY"); } void DisplayMenu2() { MyLCD.clear(); MyLCD.setCursor(0, 0); MyLCD.print("1:DOI PASS ADMIN"); MyLCD.setCursor(0, 1); MyLCD.print("2:XOA HET DULIEU"); } void DisplayMain() { MyLCD.clear(); 88

PHỤ LỤC MyLCD.noBlink(); MyLCD.noCursor(); MyLCD.setCursor(0, 0); MyLCD.print("HT DIEM DANH VT"); MyLCD.setCursor(0, 1); MyLCD.print("BAM # CAI DAT"); } void ActionFunction(byte State) { MyLCD.clear(); byte Result; switch (State) { case STACHANGEPASS: { MyLCD.setCursor(3, 0); MyLCD.print("NHAP MA MOI"); MyLCD.setCursor(3, 1); CurrentPassIndex = 0; break; } case STAADDFINGER: { MyLCD.setCursor(0, 0); MyLCD.print("THEM VAN TAY"); delay(100); IDToSave = CheckNextIDAvailable(); Result = SetupNewFingerPrint(IDToSave); while (Result != true && Result != 255) { Result = SetupNewFingerPrint(IDToSave); } if (Result == true) { CurrentState = STAINPUTNAME; DisplayInputName(); } else { CurrentState = STAMAIN; DisplayMain(); } break; } 89

PHỤ LỤC case STADELETEFINGER: { MyLCD.setCursor(0, 0); MyLCD.print("XOA VAN TAY"); CurrentID = 0; CurrentID = CheckNextIDInUse(CurrentID); if (CurrentID == MAXDATANUMBER + 1) { MyLCD.setCursor(0, 1); MyLCD.print("KHONG CO DU LIEU"); } else { DisplayInformation(CurrentID); } break; } case STADELETEALLFINGER: { MyLCD.setCursor(0, 0); MyLCD.print("XOA HET DU LIEU"); MyLCD.setCursor(0, 1); MyLCD.print("*:HUY #:XAC NHAN"); break; } } } void DisPlayCheckPass() { MyLCD.clear(); MyLCD.setCursor(3, 0); MyLCD.print("NHAP MAT MA:"); MyLCD.setCursor(3, 1); CurrentPassIndex = 0; CurrentPass[0] = 0; CurrentPass[1] = 0; CurrentPass[2] = 0; CurrentPass[3] = 0; CurrentPass[4] = 0; CurrentPass[5] = 0; } 90

PHỤ LỤC bool VerifyPass() { char i; for (i = 0; i < 6; i++) { if (CurrentPass[i] != PassWord[i]) return false; } return true; } void DisplayInputName() { NameData = ""; PressCount = 0; NameLengh = 0; CurrentCharacter = ' '; MyLCD.clear(); MyLCD.setCursor(5, 0); MyLCD.print("NHAP TEN"); MyLCD.setCursor(NameLengh, 1); MyLCD.blink(); MyLCD.cursor(); } void InputCharacter(byte Key) { if (Key != LastKey) { PressCount = 0; CurrentCharacter = Key + 48; // convert to ascii number LastKey = Key; } else { PressCount++; if (Key == KEY0) { if (PressCount == 1) { CurrentCharacter = 32; //space } else { CurrentCharacter = Key + 48; // convert to ascii PressCount = 0; } } else { 91

PHỤ LỤC if (Key == KEY9) { if (PressCount == 3) PressCount = 0; } else { if (PressCount == 4) PressCount = 0; } if (PressCount == 0) { CurrentCharacter = Key + 48; } else { CurrentCharacter = 65 + (Key - 1) * 3 + PressCount - 1; // to Ascii character } } } MyLCD.write(CurrentCharacter); MyLCD.setCursor(NameLengh, 1); } void NextCharacter() { if (NameLengh < 16) // only 16 character for name { NameData += CurrentCharacter; NameLengh++; MyLCD.setCursor(NameLengh, 1); } } void SaveNewFinger() { SaveInforToEEPROM(IDToSave, NameData); AddIDArray(IDToSave); MyLCD.setCursor(0, 1); MyLCD.print("DA LUU DU LIEU "); delay(500); CurrentState = STAMAIN; DisplayMain(); } void DisplayInformation(byte ID) { String Name; 92

PHỤ LỤC Name = GetInforFromEEPROM(ID); MyLCD.setCursor(0, 1); MyLCD.print(" "); MyLCD.setCursor(0, 1); MyLCD.print(Name); } void DisplayNextIDInfo() { CurrentID = CheckNextIDInUse(CurrentID); if (CurrentID == MAXDATANUMBER + 1) { MyLCD.setCursor(0, 1); MyLCD.print("DA HET DU LIEU "); } else { DisplayInformation(CurrentID); } } void DeleteIDInfor() { DeleteIDArray(CurrentID); DeleteFingerPrint(CurrentID); SaveInforToEEPROM(CurrentID, ""); MyLCD.setCursor(0, 1); MyLCD.print("DA XOA THONG TIN"); delay(1000); ActionFunction(CurrentState); } void setup() { pinMode(Keycol1, OUTPUT); pinMode(Keycol2, OUTPUT); pinMode(Keycol3, OUTPUT); pinMode(KeyrowA, INPUT_PULLUP); pinMode(KeyrowB, INPUT_PULLUP); pinMode(KeyrowC, INPUT_PULLUP); pinMode(KeyrowD, INPUT_PULLUP); Serial.begin(9600); ESPSerial.begin(9600); 93

PHỤ LỤC delay(100); Serial.println("\n\nAdafruit Fingerprint sensor enrollment"); // set the data rate for the sensor serial port finger.begin(57600); MyLCD.init(); MyLCD.backlight(); MyLCD.setCursor(0, 0); MyLCD.print(" HT DIEM DANH "); MyLCD.setCursor(0, 1); MyLCD.print(" VAN TAY "); //InitFingerPrint(); ReadIndexDatafromEEPROM(); delay(1000); GetPasswordFromEEPROM(); DisplayMain(); CurrentState = STAMAIN; } void loop() // run over and over again { byte KeyCode; int FoundID; if (CurrentState == STAMAIN) { FoundID = CheckFingerPrint(); if (FoundID != 1500) { MyLCD.setCursor(0, 0); MyLCD.print(" DA XAC NHAN "); DisplayInformation((byte) FoundID); ESPSerial.write(0xFE); delay(1); ESPSerial.print(GetInforFromEEPROM(FoundID)); delay(1); ESPSerial.write(0xFD); delay(1000); DisplayMain(); } if (ESPSerial.available()) { ReceiveESPData = ESPSerial.readString(); 94

PHỤ LỤC MyLCD.setCursor(0, 1); MyLCD.print(" "); MyLCD.setCursor(0, 1); MyLCD.print(ReceiveESPData); delay(3000); DisplayMain(); } } KeyCode = ScanKeyboard(); if (KeyCode != NOKEY) { switch (CurrentState) { case STAMAIN: { if (KeyCode == KEYHASH) { CurrentState = STAMENU1; DisplayMenu1(); } else if (KeyCode == KEYSTAR) { MyLCD.setCursor(0, 1); MyLCD.print(" "); MyLCD.setCursor(0, 1); MyLCD.print(ReceiveESPData); // display IP again delay(3000); DisplayMain(); } break; } case STAMENU1: { if (KeyCode == KEYSTAR) { CurrentState = STAMAIN; DisplayMain(); } else if (KeyCode == KEYHASH) { CurrentState = STAMENU2; DisplayMenu2(); } else if (KeyCode == KEY1) { CurrentState = STACHECKPASS; NextState = STAADDFINGER; DisPlayCheckPass(); } else if (KeyCode == KEY2) { 95

PHỤ LỤC CurrentState = STACHECKPASS; NextState = STADELETEFINGER; DisPlayCheckPass(); } break; } case STAMENU2: { if (KeyCode == KEYSTAR) { CurrentState = STAMAIN; DisplayMain(); } else if (KeyCode == KEY1) { CurrentState = STACHECKPASS; NextState = STACHANGEPASS; DisPlayCheckPass(); } else if (KeyCode == KEY2) { CurrentState = STACHECKPASS; NextState = STADELETEALLFINGER; DisPlayCheckPass(); } break; } case STACHECKPASS: { switch (KeyCode) { case KEY0: case KEY1: case KEY2: case KEY3: case KEY4: case KEY5: case KEY6: case KEY7: case KEY8: case KEY9: { if (CurrentPassIndex < 6) // max is 6 digit { CurrentPass[CurrentPassIndex] = KeyCode; 96

PHỤ LỤC //MyLCD.write(CurrentPass[CurrentPassIndex]+48); MyLCD.print("*"); CurrentPassIndex++; } break; } case KEYHASH: { if (VerifyPass() == true) { CurrentState = NextState; ActionFunction(CurrentState); } else { MyLCD.setCursor(3, 1); MyLCD.print("SAI MAT MA! "); delay(1000); CurrentPassIndex = 0; CurrentPass[0] = 0; CurrentPass[1] = 0; CurrentPass[2] = 0; CurrentPass[3] = 0; CurrentPass[4] = 0; CurrentPass[5] = 0; MyLCD.setCursor(3, 1); MyLCD.print(" "); MyLCD.setCursor(3, 1); } break; } case KEYSTAR: { CurrentPassIndex = 0; CurrentPass[0] = 0; CurrentPass[1] = 0; CurrentPass[2] = 0; CurrentPass[3] = 0; CurrentPass[4] = 0; CurrentPass[5] = 0; 97

PHỤ LỤC CurrentState = STAMAIN; DisplayMain(); } } break; } case STACHANGEPASS: { switch (KeyCode) { case KEY0: case KEY1: case KEY2: case KEY3: case KEY4: case KEY5: case KEY6: case KEY7: case KEY8: case KEY9: { if (CurrentPassIndex < 6) // max is 6 digit { CurrentPass[CurrentPassIndex] = KeyCode; //MyLCD.write(CurrentPass[CurrentPassIndex]+48); MyLCD.print("*"); CurrentPassIndex++; } break; } case KEYHASH: { if (CurrentPassIndex < 6) { MyLCD.setCursor(3, 1); MyLCD.print("CHUA DU 6 KT"); delay(1000); CurrentPassIndex = 0; CurrentPass[0] = 0; CurrentPass[1] = 0; CurrentPass[2] = 0; CurrentPass[3] = 0; 98

PHỤ LỤC CurrentPass[4] = 0; CurrentPass[5] = 0; MyLCD.setCursor(3, 1); MyLCD.print(" "); MyLCD.setCursor(3, 1); } else { PassWord[0] = CurrentPass[0]; PassWord[1] = CurrentPass[1]; PassWord[2] = CurrentPass[2]; PassWord[3] = CurrentPass[3]; PassWord[4] = CurrentPass[4]; PassWord[5] = CurrentPass[5]; SavePasswordToEEPROM(); MyLCD.setCursor(3, 1); MyLCD.print("DA LUU MA MOI"); delay(1000); CurrentPassIndex = 0; CurrentPass[0] = 0; CurrentPass[1] = 0; CurrentPass[2] = 0; CurrentPass[3] = 0; CurrentPass[4] = 0; CurrentPass[5] = 0; CurrentState = STAMAIN; DisplayMain(); } break; } case KEYSTAR: { CurrentPassIndex = 0; CurrentPass[0] = 0; CurrentPass[1] = 0; CurrentPass[2] = 0; CurrentPass[3] = 0; CurrentPass[4] = 0; CurrentPass[5] = 0; CurrentState = STAMAIN; 99

PHỤ LỤC DisplayMain(); break; } } break; } case STADELETEALLFINGER: { if (KeyCode == KEYSTAR) { CurrentState = STAMAIN; DisplayMain(); } else if (KeyCode == KEYHASH) { DeleteAllFinger(); delay(1000); CurrentState = STAMAIN; DisplayMain(); } break; } case STAINPUTNAME: { switch (KeyCode) { case KEY0: case KEY1: case KEY2: case KEY3: case KEY4: case KEY5: case KEY6: case KEY7: case KEY8: case KEY9: { InputCharacter(KeyCode); break; } case KEYSTAR: { NextCharacter(); break; 100

PHỤ LỤC } case KEYHASH: { SaveNewFinger(); break; } } break; } case STADELETEFINGER: { switch (KeyCode) { case KEYSTAR: { CurrentState = STAMAIN; DisplayMain(); break; } case KEY0: { DisplayNextIDInfo(); break; } case KEYHASH: { DeleteIDInfor(); break; } } break; } } } }

101