cửa AN NINH DÙNG cảm BIẾN vân TAY dùng microsoft visual studio (có code và sơ đồ mạch) cửa AN NINH DÙNG cảm BIẾN vân TAY dùng microsoft visual studio (có code và sơ đồ mạch) cửa AN NINH DÙNG cảm BIẾN vân TAY dùng microsoft visual studio (có code và sơ đồ mạch) cửa AN NINH DÙNG cảm BIẾN vân TAY dùng microsoft visual studio (có code và sơ đồ mạch)
Trang 1CẢM BIẾN VÂN TAY
Trang 2DANH MỤC CÁC HÌNH VẼ VIII DANH MỤC CÁC BẢNG BIỂU IX DANH MỤC CÁC TỪ VIẾT TẮT X
CHƯƠNG 1 TÌM HIỂU LINH KIỆN 1
1.1 CẢM BIẾN VÂN TAY R305 1
1.1.1 Giới thiệu: 1
1.1.2 Một vài thông số của cảm biến R305 2
1.1.3 Nguyên lý hoạt động 3
1.1.4 Giao tiếp với vi điều khiển thông qua UART 3
1.1.5 Giao thức truyền gói dữ liệu 4
1.2 PIC16F877A 4
1.2.1 Giới thiệu 4
1.2.2 Chức năng 6
1.2.3 Các cổng xuất nhập của PIC16F877A 7
CHƯƠNG 2 THIÊT KẾ MẠCH 8
2.1 SƠ ĐỒ KHỐI 8
2.2 MÔ PHỎNG TRÊN PROTEUS 9
2.3 LƯU ĐỒ GIẢI THUẬT 10
CHƯƠNG 3 THI CÔNG 11
3.1 GIAO TIẾP UART GIỮA PIC VÀ MÁY TÍNH 11
3.1.1 Giới thiệu 11
3.1.2 Các thông số cơ bản trong truyền nhận UART 12
3.2 PHẦN MỀN MICROSOFT VISUAL STUDIO 12
3.3 THIẾT KẾ PHẦN MỀM 14
3.4 NGUYÊN LÝ HOẠT ĐỘNG 15
3.5 THI CÔNG PHẦN CỨNG 16
Trang 33.5.2 Mạch thực tế 17
CHƯƠNG 4 KẾT LUẬN, ỨNG DỤNG VÀ HƯỚNG PHÁT TRIỂN 19
4.1 KẾT LUẬN 19
4.2 ỨNG DỤNG 19
4.3 HƯỚNG PHÁT TRIỂN 19
TÀI LIỆU THAM KHẢO 20
PHỤ LỤC A 21
Trang 4HÌNH 1-1: HÌNH ẢNH CẢM BIẾN VÂN TAY R305 1
HÌNH 1-2: KHUNG TRUYỀN ĐỊNH DẠNG 10BIT 3
HÌNH 1-3: ĐỊNH DẠNG GÓI DỮ LIỆU 4
HÌNH 1-3: SƠ ĐỒ CHÂN CỦA CHIP 40 CHÂN 5
HÌNH 1-4: CÁC CHỨC NĂNG CƠ BẢN 6
HÌNH 2-1: SƠ ĐỒ KHỐI CỦA MẠCH 8
HÌNH 2-2: HÌNH MÔ PHỎNG 9
HÌNH 3-1: GIAO TIẾP UART 11
HÌNH 3-2: GIAO DIỆN CHÍNH CỦA PHẦN MỀM 13
HÌNH 3-3: CỬA SỔ LÀM VIỆC 13
HÌNH 3-4: GIAO DIỆN SO SÁNH VÂN TAY 14
HÌNH 3-5: GIAO DIỆN ĐĂNG NHẬP 14
HÌNH 3-6: GIAO DIỆN ĐIỀU KHIỂN 15
HÌNH 3-7: LAYOUT MẠCH IN 16
HÌNH 3-8: SƠ ĐỒ MẠCH IN 17
HÌNH 3-9: MẠCH THỰC TẾ 17
HÌNH 3-10: MẠCH IN THỰC TẾ 18
DANH MỤC CÁC BẢNG BIỂU
Trang 5CCP Capture / Compare/ PWM
Trang 6ICSP In-Circuit Serial Programming
RISC Reduced Instruction Set Computer
UART Universal Asynchronous Receiver/Transmitte
Trang 7CHƯƠNG 1 TÌM HIỂU LINH KIỆN
1.1 Cảm biến vân tay R305
Bảo mật thông tin
Tham gia kiểm soát truy cập, an toàn (tủ), máy POS, quầy đạn, các sản phẩm ô tôvân tay
Đặc tính sản phẩm:
Trang 8Chức năng hoàn hảo, các mô-đun vân tay có thể hoàn thành việc thu thập dấu vântay, đăng ký dấu vân tay, vân tay tương phản và chức năng tìm kiếm dấu vân tay một cáchđộc lập.
Khả năng thích ứng mạnh và các thuật toán hiệu suất cao, nó có khả năng mạnh mẽ
để loại khác nhau, chẳng hạn như những ngón tay khô, ướt ngón tay, ngón tay và kết cấuánh sáng đều có tỷ lệ biết chữ cao và điều chỉnh tốt, biểu diễn chịu lỗi
Mạnh mẽ khả năng kháng tĩnh điện, đó là tốt áp dụng cho các khu vực nơi mà môitrường khô và dễ dàng tĩnh điện
Phát triển ứng dụng đơn giản, các nhà phát triển không cần phải có chuyên mônvân tay, họ có thể phù hợp với từ lệnh cung cấp, phát triển các sản phẩm ứng dụng vântay của mình
1.1.2 Một vài thông số của cảm biến R305
Thông số kỹ thuật:
Loại cảm biến vân tay: Quang học
Cảm biến Cuộc sống: 100 triệu lần
Chỉ số tĩnh: 15KVBacklight: sáng màu xanh lá cây
Giao diện: USB1.1 / UART (mức logic logic TTL)
Tốc độ truyền thông RS232: 4800BPS ~ 115200BPS có thể thay đổi
Kích thước khuôn mẫu: 512 byte
Dung lượng lưu trữ: 250
Mức độ an ninh: 5 (1,2,3,4,5 (cao nhất))
Tỷ lệ chấp nhận sai (FAR): 0.0001%
Tỷ lệ từ chối sai (FRR): 0.1%
Nghị quyết 500 DPI
Trang 9Nguyên lí hoạt động của module cảm biến vân tay cơ bản gồm 2 phần.
Lấy dữ liệu hình ảnh của vân tay: Khi lấy dữ liệu ,modul sẽ lấy dữ liệu hình ảnh vântay 2 lần thông qua cảm biến quang học và xử lí 2 hình ảnh này để tạo ra một mẫu
Kết hợp các dữ liệu để tạo ra mẫu vân tay: Quá trình này sảy ra sau khi đã có hình ảnhvân tay Đây là quá trình kết hợp 2 mẫu hình ảnh vân tay để tạo ra một mẫu Hệ thống sẽ
xử lí để lưu chữ vào thư viện vân tay của module
1.1.4 Giao tiếp với vi điều khiển thông qua UART
Giao tiếp thông qua UART với tốc độ Baud mặc định là 57600 và có thể cài đặt tốc độnày trong dải từ 9600 -> 115200
Hình 1-2: Khung truyền định dạng 10bit.
1.1.5 Giao thức truyền gói dữ liệu
Trang 100x07 : Gói xác nhận
0x08 : Gói kết thúc dữ liệu
Package length(2 byte): chiều dài gói dữ liệu tính từ Package content đến ChecksumĐơn vị chiều dài là byte
Package content : Dữ liệu Có thể là lệnh,dữ liệu,xác nhận
Checksum(2 byte) : Là tổng số học của Package identifier ,Package length ,Packageconten
1.2 PIC16F877A
1.2.1 Giới thiệu
Là loại vi điều khiển 8bit tầm trung của hãng microchip
Có kiến trúc Havard, sử dụng tập lệnh kiểu RISC với chỉ 35 lệnh cơ bản
Tất cả các lệnh được thực hiện trong một chu kì lệnh ngoại trừ các lệnh rẽ nhánh
Hình 1-3: Sơ đồ chân của chip 40 chân.
Trang 11 Cấu trúc tổng quát:
8 K Flash ROM
368 Bytes RAM
256 Bytes EEPROM
5 ports (A, B, C, D, E) vào ra với tín hiệu điều khiển độc lập
2 bộ định thời 8 bits (Timer 0 và Timer 2)
Một bộ định thời 16 bits (Timer 1) có thể hoạt động trong chế độ tiết kiệm nănglượng (SLEEP MODE) với nguồn xung Clock ngoài
2 bô CCP
1 bộ biến đổi AD 10 bits, 8 ngõ vào
2 bộ so sánh tương tự (Compartor)
1 bộ định thời giám sát (WatchDog Timer)
Một cổng song song 8 bits với các tín hiệu điều khiển
Một cổng nối tiếp
15 nguồn ngắt
Có chế độ tiết kiệm năng lượng
Nạp chương trình bằng cổng nối tiếp ICSP
Được chế tạo bằng công nghệ CMOS
35 tập lệnh có độ dài 14 bits
Tần số hoạt động tối đa 20MHz
1.2.2 Chức năng
Trang 12Hình 1-4: Các chức năng cơ bản.
1.2.3 Các cổng xuất nhập của PIC16F877A
Cổng xuất nhập (I/O port) chính là phương tiện mà vi điều khiển dùng để tương tácvới thế giới bên ngoài Sự tương tác này rất đa dạng và thông qua quá trình tương tác đó,chức năng của vi điều khiển được thể hiện một cách rõ ràng
Một cổng xuất nhập của vi điều khiển bao gồm nhiều chân ( I/O pin), tùy theo cách bốtrí và chức năng của vi điều khiển mà số lượng cổng xuất nhập thông thường, một số chânxuất nhập còn có thêm chức năng khác để thể hiện sự tác động của các đặc tính nêu trênđối với thế giới bên ngoài
Chức năng của từng chân xuất nhập trong mỗi cổng hoàn toàn có thể được xác lập vàđiều khiển được thông qua các thanh ghi SFR liên quan đến chân xuất nhập đó
Vi điều khiển PIC16F877A có 5 cổng xuất nhập, bao gồm PORTA, PORTB, PORTC,PORTD và PORTE
Trang 13CHƯƠNG 2 THIÊT KẾ MẠCH
2.1 Sơ đồ khối
Trang 14Hình 2-1: Sơ đồ khối của mạch.
Trong đó:
Khối máy tính (laptop): điều khiển thiết bị dùng lệnh on/ off thiết bị, hiển thị và sosánh dấu vân tay
Khối vi xử lý (Pic16F877A): Xử lý lệnh từ máy tính để điều khiển thiết bị
Khối cảm biến vân tay: đọc dấu vân tay
Khối relay board: thực hiện lệnh on/ off từ máy tính bằng cách đóng ngắt công tắc.Các khối thiết bị: biểu thị lênh từ máy tinh bằng cách bật/ tắt
Khối nguồn: cung cấp nguồn cho thiết bị
Ghi chú: có thể thay thế khối relay board, khối thiết bị, khối nguồn thành 1 đènLED để dễ dàng kiểm tra kết quả
Trang 152.2 Mô phỏng trên Proteus.
Hình 2-2: Hình mô phỏng.
2.3 Lưu đồ giải thuật
Bắt đầuKhởi tạo hệ thống
Nhập dấu vân
So sánh vân tay
Trang 16CHƯƠNG 3 THI CÔNG
3.1 Giao tiếp UART giữa Pic và máy tính
3.1.1 Giới thiệu
UART là viết tắt của Universal Asynchronous Receiver – Transmitter Thường làmột mạch tích hợp được sử dụng trong việc truyền dẫn dữ liệu nối tiếp giữa máy tính vàcác thiết bị ngoại vi Rất nhiều vi điều khiển hiện nay đã được tích hợp UART, vì vấn đềtốc độ và độ điện dụng của UART không thể so sánh với các giao tiếp mới hiện nay nêncác dòng PC & Laptop đời mới không còn tích hợp cổng UART Như các bạn đã biết giaotiếp SPI và I2C có 1 dây truyền dữ liệu và 1 dây được sử dụng để truyền xung clock(SCL) để đồng bộ trong giao tiếp Với UART thì không có dây SCL, vấn đề được giải
Nhập username và pass
Điều khiển
Chọn cổng COM
Thiết bị 1, ,4 ON/OFFGiá trị =
Ngắt cổng COM
Kết thúc
Trang 17quyết khi mà việc truyền UART được dùng giữa 2 vi xử lý với nhau, đồng nghĩa với việcmỗi vi xử lý có thể tự tạo ra xung clock cho chính nó xử dụng.
Để bắt đầu cho việc truyền dữ liệu bằng UART, một START bit được gửi đi, sau đó làcác bit dữ liệu và kết thúc quá trình truyền là STOP bit
Hình 3-1: Giao tiếp UART.
Như hình các bạn có thể thấy Khi ở trạng thái chờ mức điện thế ở mức 1 (high) Khibắt đầu truyền START bit sẻ chuyển từ 1 xuống 0 để báo hiệu cho bộ nhận là quá trìnhtruyền dữ liệu sắp xảy ra Sau START bit là đến các bit dữ liệu D0-D7 (Theo hình vẽ cácbit này có thể ở mức High or Low tùy theo dữ liệu) Sau khi truyền hết dữ liệu thì đến BitParity để bộ nhận kiểm tra tính đúng đắn của dữ liệu truyền (vấn đề này mình sẽ giải thích
rõ hơn trong tài liệu CRC trong thời gian tới) Cuối cùng là STOP bit là 1 báo cho thiết bịrằng các bit đã được gửi xong Thiết bị nhận sẽ tiến hành kiểm tra khung truyền nhằmđảm báo tính đúng đắn của dữ liệu
3.1.2 Các thông số cơ bản trong truyền nhận UART
Baund rate (tốc độ baund ): Khoảng thời gian dành cho 1 bit được truyền Phải đượccài đặt giống nhau ở gửi và nhận
Frame (khung truyền ): Khung truyền quy định về số bit trong mỗi lần truyền
Start bit : là bit đầu tiên được truyền trong 1 Frame Báo hiệu cho thiết bị nhận có mộtgói dữ liệu sắp đc truyền đến Bit bắt buộc
Data : dữ liệu cần truyền Bit có trọng số nhỏ nhất LSB được truyền trước sau đó đếnbit MSB
Parity bit : kiểm tra dữ liệu truyền có đúng không
Trang 18Stop bit : là 1 hoặc các bit báo cho thiết bị rằng các bit đã được gửi xong Thiết bịnhận sẽ tiến hành kiểm tra khung truyền nhằm đảm bảo tính đúng đắn của dữ liệu Bit bắtbuộc.
3.2 Phần mền Microsoft Visual Studio
Là một môi trường phát triển tích hợp (IDE) từ Microsoft
Sử dụng để phát triển chương trình máy tính cho Microsoft Windows, cũng như cáctrang web, các ứng dụng web và các dịch vụ web
Sử dụng nền tảng phát triển phần mềm của Microsoft như Windows API, WindowsForms, Windows Presentation Foundation, Windows Store và Microsoft Silverlight
Có thể sản xuất cả hai ngôn ngữ máy và mã số quản lý
Visual Studio hỗ trợ nhiều ngôn ngữ lập trình khác nhau và cho phép trình biên tập mã
và gỡ lỗi để hỗ trợ (mức độ khác nhau) hầu như mọi ngôn ngữ lập trình Các ngôn ngữtích hợp gồm có C,[4] C++ và C++/CLI (Visual C++), VB.NET (Visual Basic.NET), C#(Visual C#) và F# Hỗ trợ cho các ngôn ngữ khác như J++/J#, Python và Ruby thông quadịch vụ cài đặt riêng rẽ Ngoài ra cũng hỗ trợ XML/XSLT, HTML/XHTML, JavaScript
và CSS
Hình 3-2: Giao diện chính của phần mềm.
Trang 19Hình 3-3: Cửa sổ làm việc.
Trang 203.3 Thiết kế phần mềm.
Giao diện điều khiển:
Hình 3-4: Giao diện so sánh vân tay.
Hình 3-5: Giao diện đăng nhập.
Trang 21Hình 3-6: Giao diện điều khiển.
Ở Form điều khiển này ta có thể chọn cổng COM của phòng cần điều khiển sau
đó điều khiển các thiết bị theo ý muốn
Nếu muốn kết thúc ta nhấn nút “Thoát”
3.5 Thi công phần cứng
3.5.1 Sơ đồ mạch in
Để tạo mach in chúng ta có thê sử dụng nhiều phần mềm khác nhau Ở đâychúng ta sử dụng Proteus 8
Trang 22Hình 3-7: Layout mạch in
Cuối cùng ta vào Output -> Print Layout -> Printer -> Name: Foxit Reader PDFPrinter -> OK, ta được mạch như sau:
Trang 23Hình 3-8: Sơ đồ mạch in.
3.5.2 Mạch thực tế
Hình 3-9: Mạch thực tế.
Trang 24Hình 3-10: Mạch in thực tế.
CHƯƠNG 4 KẾT LUẬN, ỨNG DỤNG VÀ HƯỚNG PHÁT TRIỂN
4.1 Kết luận
Trang 25Mach hoạt động đúng theo yêu cầu:
Hiển thị được đươc dấu vân tay và so sánh được
Có thê điều khiển được thiết bị
Sử dụng được mật khẩu để đăng nhập
Điều khiển thiết bị có thời gian trễ
So sánh dấu vân tay khá chính xác
4.2 Ứng dụng
Mạch có thể được sử dụng ở nhiều nơi khác nhau như cửa nhà, cửa phòng, cửacác loại dùng để bảo hiểm
4.3 Hướng phát triển
Có thể thay thế sử dụng kết hợp mạng Internet để thông báo
Có thể thêm chức năng lưu thời gian biểu của người sử dụng
Kết hợp nhiều thiết bị vô tuyến để có thể điều khiển từ xa
TÀI LIỆU THAM KHẢO
Trang web:
[1] https://www.youtube.com
[2] https://docs.microsoft.com/en-us/windows/uwp/security
Trang 26[3] http://www.mycircuits9.com/
[4] http://doan.edu.vn/
Trang 28#region Windows Form Designer generated code
private void InitializeComponent()[ ]{
((System.ComponentModel.ISupportInitialize)(this.pic2)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pic1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.statusBarPanel1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.statueP2)).BeginInit();
Trang 29this.label2.TabIndex = 7;
this.label2.Text = "Vân tay 2";
this.label1.Location = new System.Drawing.Point(82, 33);
Trang 30this.button1.Location = new System.Drawing.Point(235, 320);
this.button1.Click += new System.EventHandler(this.button1_Click);
this.button2.Location = new System.Drawing.Point(375, 320);
this.button2.Click += new System.EventHandler(this.button2_Click);
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(544, 376);
Trang 31this.Text = "Đối sánh vân tay";
this.Load += new System.EventHandler(this.FingerCompare_Load);
((System.ComponentModel.ISupportInitialize)(this.pic2)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pic1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.statusBarPanel1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.statueP2)).EndInit();
this.ResumeLayout(false);}
#endregion
private void menuItem10_Click(object sender, System.EventArgs e)[ ]private void menuItem4_Click(object sender, System.EventArgs e)[ ]private void menuItem2_Click(object sender, System.EventArgs e)[ ]private void menuItem3_Click(object sender, System.EventArgs e)[ ]private void toolBar1_ButtonClick(object sender,
System.Windows.Forms.ToolBarButtonClickEventArgs e)[ ]
private void menuItem6_Click(object sender, System.EventArgs e)
{try{ int i,j;
if(!isFirst1){ int[,] input1 = new int[width1,height1];
for(i=0;i<width1;i++)for(j=0;j<height1;j++)input1[i,j] = image1Data[i,j];
image1.SetImage(input1,width1,height1,widthSquare);}
if(!isFirst2){ int[,] input2 = new int[width2,height2];
Trang 32for(i=0;i<width2;i++)for(j=0;j<height2;j++)input2[i,j] = image2Data[i,j];
image2.SetImage(input2,width2,height2,widthSquare);}this.Cursor = Cursors.WaitCursor;
int deltaXStart = -image1.Width;
int deltaXFinish = image1.Width;
Trang 33deltaX += deltaXUnit;}
int deltaYStart = -image1.Height;
int deltaYFinish = image1.Height;
i++;
deltaY += deltaYUnit;}
double[] scaleSet = {0.8,0.9,1.0,1.1,1.2};
minuResult = Functions.GetMinutiaeChanging_UseHoughTransform(minus1,minus2,angleSet,deltaXSet,deltaYSet,angleLimit*Math.PI/180,image1.Width/2,image1.Height/2);
int count = Functions.CountMinuMatching(minus1,minus2,minuResult,distanceLimit,angleLimit*Math.PI/180);
Trang 34private void menuItem7_Click(object sender, System.EventArgs e)
{CompareInfo ciDialog = new CompareInfo(sResult);
ciDialog.ShowDialog();}
private void menuItem13_Click(object sender, System.EventArgs e)[ ]private void menuItem14_Click(object sender, System.EventArgs e){RegionSelectPadding regionDialog = new
RegionSelectPadding(left1,top1,right1,bottom1,left2,top2,right2,bottom2);regionDialog.ShowDialog();
Trang 35private void menuItem16_Click(object sender, System.EventArgs e)
{CompareOption comOptionDialog = new
private void UpdateMaskGaborCollection()[ ]
private void ViewMinus()
{ Pen pen = new Pen(Color.Red,1);
Pen pen1 = new Pen(Color.Blue,2);
}pic2.Refresh();
g1.Dispose();}
private int[] BuildHoughInput(int start,int finish,int unit)
Trang 36{ int count = Convert.ToInt32((finish - start)/unit) + 1;
int[] valueSet = new int[count];
int valueMember = start;
System.Windows.Forms.MouseEventArgs e)
{try{ statusBarPanel1.Text = " Vân tay 2:X:" + e.X.ToString() + " Y:" + e.Y.ToString() + " Hướng cục bộ:" +
Convert.ToString(image2.Direct[e.X,e.Y]*180/Math.PI);} catch{}} private void button1_Click(object sender, EventArgs e)