Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 99 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
99
Dung lượng
8,2 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM KHOA ĐIỆN - ĐIỆN TỬ ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ - TRUYỀN THƠNG HỆ THỐNG ĐĨNG MỞ CỬA DÙNG NFC ĐIỆN THOẠI GVHD: ThS NGUYỄN VĂN HIỆP SVTH: TRƯƠNG VĂN NGÂN MSSV: 11241012 SVTH: NGUYỄN HỮU TIẾN MSSV: 11241022 SKL 0 Tp Hồ Chí Minh, tháng 1/2016 an BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP ĐỒ ÁN TỐT NGHIỆP HCMUTE Đề tài:HỆ THỐNG ĐĨNG MỞ CỬA DÙNG NFC ĐIỆN THOẠI NGÀNH CƠNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG Sinh viên: Trương Văn Ngân MSSV: 11241012 Nguyễn Hữu Tiến MSSV: 11241022 GVHD: ThS Nguyễn Văn Hiệp Tp Hồ Chí Minh – 01/2016 an PHIẾU GIAO NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Thông tin sinh viên Họ tên: Trương Văn Ngân MSSV: 11241012 Tel: 0982022566 Email: ngantruong1508@gmail.com Họ tên: Nguyễn Hữu Tiến MSSV: 11241022 Tel: 0988399033 Email: tiennhspkt@gmail.com Thông tin đề tài Tên đề tài: Hệ thống đóng mở cửa dùng NFC điện thoại Mục đích đề tài: Hệ thống đóng mở cửa dùng NFC điện thoại giúp khơng cần chìa khố mà thay vào sử dụng thiết bị di động ln bên người để mở với tốc độ nhanh chóng, gọn gàng, khơng cịn ám ảnh nỗi lo qn hay chìa khố Đồ án tốt nghiệp thực tại: Bộ môn Điện Tử Viễn Thông, Khoa Điện Điện Tử, Trường Đại Học Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh Thời gian thực hiện: Từ ngày 10/10/2015 đến 31/01/2016 Các nhiệm vụ cụ thể đề tài - Tìm hiểu giao tiếp NFC, điện thoại android có hỗ trợ NFC - Nguyên tắc kết nối truyền liệu PN532 với Arduino Mega 2560 - Nguyên tắc truyền liệu PN532 điện thoại chạy Android - Thiết lập giao diện quản lý vào cửa điện thoại Android - Tìm giải thuật chương trình, vẽ lưu đồ bắt đầu lập trình - Kiểm tra chương trình, thử nghiệm thực tế - Viết báo cáo luận văn - Báo cáo đề tài tốt nghiệp Lời cam đoan sinh viên Chúng – Trương Văn Ngân Nguyễn Hữu Tiến cam đoan ĐATN cơng trình nghiên cứu thân chúng tơi hướng dẫn thạc sỹ Nguyễn Văn Hiệp Các kết công bố ĐATN trung thực khơng chép từ cơng trình khác Tp.HCM, ngày 31 tháng 01 năm 2016 SV thực đồ án Trương Văn Ngân Nguyễn Hữu Tiến Tp.HCM, ngày… tháng….năm 2016 Giáo viên hướng dẫn (Ký ghi rõ họ tên học hàm học vị) Xác nhận Bộ Môn i an TRƯỜNG ĐẠI HỌC SPKT TPHCM Khoa Điện - Điện Tử Bộ Môn Điện Tử Công Nghiệp CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự - Hạnh phúc Tp Hồ Chí Minh, ngày 31 tháng 01 năm 2015 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP (Bản lịch trình đóng vào đồ án) Họ tên sinh viên 1: Trương Văn Ngân Lớp: 112410B MSSV: 11241012 Họ tên sinh viên 2: Nguyễn Hữu Tiến Lớp: 112410A MSSV: 11241022 Tên đề tài: Hệ thống đóng mở cửa dùng NFC điện thoại Tuần/ngày Tuần Nội dung Xác nhận GVHD Nhận đề tài Tuần 7-8 Tìm tài liệu liên quan đưa hướng thực đề tài, thiết kế sơ đồ khối Tuần 9-10 Thiết kế sơ đồ nguyên lý Tuần 11-12 Viết giao diện điện thoại android Tuần 13-14 Thi công phần cứng Tuần 15-16 Viết chương trình giao tiếp PN532 với Arduino Mega 2560 Tuần 17 28/12/201510/01/2016 11/01/201625/01/2016 Thi học kỳ 2015-2016 Viết báo cáo lần 1, chỉnh sửa hoàn thiện đề tài Viết báo cáo hoàn tất GV HƯỚNG DẪN (Ký ghi rõ họ tên) ii an LỜI CẢM ƠN Nhóm thực đề tài xin chân thành cảm ơn thầy ThS Nguyễn Văn Hiệp tận tình hướng dẫn, bảo kinh nghiệm quý báu hỗ trợ phương tiện thí nghiệm suốt trình tìm hiểu, nghiên cứu đề tài Đồng thời chúng em xin cảm ơn thầy cô Khoa Điện - Điện Tử tạo điều kiện, cung cấp cho nhóm kiến thức bản, cần thiết để chúng em có điều kiện đủ kiến thức để thực q trình nghiên cứu Đồng thời, nhóm xin cám ơn thành viên lớp 112410 có ý kiến đóng góp, bổ sung giúp nhóm hồn thành tốt đề tài Ngồi ra, nhóm nhận bảo anh (chị) trước Các anh (chị) hướng dẫn giới thiệu tài liệu tham khảo thêm việc thực nghiên cứu Xin chân thành cảm ơn! iii an MỤC LỤC Phiếugiao nhiệm vụ đồ ántốtnghiệp i Lịch trình thực đồ án tốt nghiệp ii Lời cảm ơn iii Mục lục iv Liệt kê hình vi Liệt kê bảng vii Tómtắt .viii CHƯƠNG I: DẪN NHẬP 1.1 Đặt vấn đề 1.2 Lý chọn đề tài 1.3 Nội dungthựchiện 1.4 Giới hạn đề tài 1.5 Dàn ý tìmhiểu 1.6 Tình hình nghiên cứu 1.7 Ý nghĩa thực tiễn đề tài CHƯƠNG II: CƠ SỞ LÝ THUYẾT 2.1 Cổng giao tiếp trường gần 2.1.1 Giới thiệu 2.1.2 Lịch sử phát triển 2.1.3 Các đặc tính kỹ thuật NFC 2.1.4 So sánh với kết nối Bluetooth 2.1.5 Các ứng dụng thực tế NFC 2.2 Hệ điều hành Android 2.2.1 Giới thiệu 2.2.2 Lịch sử phát triển 2.2.2.1 Kiến trúc hệ điều hành Android 10 2.2.2.2 Applications 10 2.2.2.3 Applications Framework 11 2.2.2.4 Libraries 12 2.2.2.5 Android Runtime 12 iv an 2.2.2.6 Kernel Linux 13 2.2.3 Các phần mềm hỗ trợ lập trình Android 13 2.3 Giới thiệu board Arduino Mega 2560 14 2.4 Sơ lược ic chuyên dụng PN532 15 2.4.1 Tổng quan PN532 15 2.4.2 Truyền liệu Arduino Mega 2560 PN532 17 CHƯƠNG III: THIẾT KẾ VÀ THI CÔNG 19 3.1 Bài toán thiết kế 19 3.2 Sơ đồ khối 21 3.3 Thiết kế 21 3.3.1 Thiết kế phần cứng 21 3.3.1.1 Khối động lực 22 3.3.2 Thiết kế phần mềm 24 3.3.2.1 Khối thiết bị NFC 24 3.3.2.1.1 Thiết kế giao diện đăng nhập 25 3.3.2.1.2 Thiết kế giao diện mở cửa 26 3.3.2.1.3 Thiết kế giao diện thêm người sử dụng 27 3.3.2.1.4 Thiết kế giao diện thay đổi mật 28 3.3.2.1.5 Thiết kế giao diện thông tin tác giả 29 3.3.2.2 Khối điều khiển trung tâm khối giao tiếp NFC 29 3.4 Thi công 30 3.5 Lưu đồ giải thuật chương trình điều khiển 30 3.5.1 Lưu đồ gải thuật 30 3.5.2 Chương trình điều khiển 36 CHƯƠNG IV: KẾT QUẢ THỰC HIỆN 37 4.1.Khối thiết bị NFC 37 4.1.1Giao diện đăng nhập 37 4.1.2 Giao diện mở cửa 37 4.1.3 Giao diện thay đổi mật 39 4.1.4 Giao diện thêm người sử dụng 39 4.1.5 Giao diện thông tin tác giả 40 4.2 Khối điều khiển trung tâm khối giao tiếp NFC 42 v an CHƯƠNG V: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI 45 5.1 Kết luận 45 5.2 Hướng phát triển đề tài 45 Tài liệu tham khảo 46 Phụ lục 59 Liệt kê hình Hình 2.1 Chia sẻ liệu điện thoại qua giao tiếp NFC Hình 2.2 Các ứng dụng thực tế NFC Hình 2.3 Cấu trúc Stack Android OS 10 Hình 2.4 Board Arduino Mega 2560 14 Hình 2.5 Sơ đồ khối PN532 16 Hình 2.6 Sơ đồ chân PN532 16 Hình 2.7 Chọn kết nối giao thức kết nối PN532 17 Hình 2.8 Sơ đồ truyền liệu 17 Hình 2.9 Khung truyền liệu 18 Hình 2.10 Khung ACK 18 Hình 3.1 Cửa sử dụng cơng nghệ NFC 19 Hình 3.2 Mơ tả hoạt động hệ thống 20 Hình 3.3 Các khối hệ thống cửa 20 HÌnh 3.4 Sơ đồ khối hệ thống 21 Hình 3.5 Sơ đồ nguyên lý mạch động lực 22 Hình 3.6 Thiết kế giao diện đăng nhập 25 Hình 3.7 Thiết kế giao diện mở cửa 26 Hình 3.8 Thiết kế giao diện thêm người sử dụng 27 Hình 3.9 Thiết kế giao diện thay đổi mật 28 Hình 3.10 Thiết kế giao diện thông tin tác giả 29 Hình 3.11 Sơ đồ nguyên lý mạch in khối động lực 30 Hình 3.12 Lưu đồ chương trình 31 Hình 3.13 Lưu đồ chương trình mở cửa 32 Hình 3.14 Lưu đồ chương trình đóng cửa 34 Hình 3.15 Lưu đồ chương trình đăng nhập điện thoại 35 Hình 3.16 Lưu đồ chương trình điều khiển cửa điện thoại 36 vi an Hình 4.1 Giao diện đăng nhập 37 Hình 4.2 Giao diện điều khiển mở cửa 38 Hình 4.3 Giao diện thay đổi mật 39 Hình 4.4 Giao diện thêm người sử dụng 39 Hình 4.5 Giao diện thông tin tác giả 40 Hình 4.6 Thơng tin ứng dụng Android OS 41 Hình 4.7 Giao diện Samsung Note 42 Hình 4.8 Giao diện Sony Z 42 Hình 4.9 Mơ hình sau thi cơng 42 Hình 4.10 Mơ hình đóng gói sản phẩm 43 Hình 4.11 Giao diện xem logfile 44 Liệt kê bảng Bảng 2.1 So sánh NFC với Bluetooth Bảng 2.2 Các phiên Android Bảng 2.3 Các thông số chi tiết Arduino Mega 2560 15 Bảng 3.1 Bảng kết nối chân Arduino với PN532 30 Bảng 3.2 Bảng kết nối chân Arduino với Step Motor 30 Bảng 3.3 Bảng kết nối chân Arduino với Sensor 30 Bảng 3.4 Bảng trạng thái tạo xung chương trình mở cửa 33 Bảng 3.5 Bảng trạng thái tạo xung chương trình đóng cửa 34 vii an TÓM TẮT Đề tài đề xuất phương pháp điều khiển cửa sử dụng phần mềm android điện thoại Trên điện thoại android thiết lập giao diện như: giao diện đăng nhập, giao diện điều khiển mở cửa, giao diện thêm người sử dụng, giao diện thay đổi mật khẩu, giao diện thông tin tác giả Để điều khiển cửa android trước tiên người sử dụng phải đăng nhập tên tài khoản mật Khi đăng nhập đến giao diện điều khiển mở cửa, giao diện ta chạm vào nút “mở cửa” đồng thời áp điện thoại lại gần board PN532, lúc diễn trình giao tiếp điện thoại android PN532 Khi q trình giao tiếp thành cơng PN532 lấy địa ID (Username,Password,ngày,giờ,lệnhcần thực hiện) gửi xuống vi điều khiển arduino Mega2560, arduino nhận địa ID kích hoạt transisitor mạch động lực đóng ngắt để điều khiển động chạy, lúc cửa mở Khi cửa mở sau khoảng thời gian giây cửa tự động đóng lại kết thúc q trình mở cửa viii an strCommandHeader = userActive + ";" + str_date + ";" + str_time + ";" + "WRITEDB;"; strCommandData = strHex2strAscii(strConfig) + "#"; Toast.makeText(v.getContext(), "Vui lòng áp điện thoại vào cửa để cập nhật liệu!", Toast.LENGTH_LONG).show(); } }); mButtonOpenDoor.setOnClickListener(new OnClickListener() { @Override publicvoid onClick(View v) { String userActive = readUserActive(); Time time = new Time(); time.setToNow(); String str_date = time.format("%Y-%m-%d"); String str_time = time.format("%H:%M:%S"); strCommandHeader = userActive + ";" + str_date + ";" + str_time + ";" + "OPENDOOR;"; strCommandData = "#"; Toast.makeText(v.getContext(), "Vui lòng áp điện thoại vào cửa để mở cửa!", Toast.LENGTH_LONG).show(); } }); mButtonCloseDoor.setOnClickListener(new OnClickListener() { @Override publicvoid onClick(View v) { String userActive = readUserActive(); Time time = new Time(); time.setToNow(); String str_date = time.format("%Y-%m-%d"); String str_time = time.format("%H:%M:%S"); strCommandHeader = userActive + ";" + str_date + ";" + str_time + ";" + "CLOSEDOOR;"; strCommandData = "#"; 74 an Toast.makeText(v.getContext(), "Vui lòng áp điện thoại vào cửa để đóng cửa!", Toast.LENGTH_LONG).show(); } }); mButtonViewLogfile.setOnClickListener(new OnClickListener() { @Override publicvoid onClick(View v) { String userActive = readUserActive(); Time time = new Time(); time.setToNow(); String str_date = time.format("%Y-%m-%d"); String str_time = time.format("%H:%M:%S"); strCommandHeader = userActive + ";" + str_date + ";" + str_time + ';' + "VIEWLOG;"; strCommandData = "#"; Toast.makeText(v.getContext(), "Vui lòng áp điện thoại vào cửa để tải logfile!", Toast.LENGTH_LONG).show(); } }); } @Override publicvoid onNdefPushComplete(NfcEvent arg0) { } @Override public NdefMessage createNdefMessage(NfcEvent event) { Time time = new Time(); time.setToNow(); NdefMessage msg = new NdefMessage( new NdefRecord[] { createMimeRecord(strCommandHeader, strCommandData.getBytes())}); return msg; } 75 an public NdefRecord createMimeRecord(String mimeType, byte[] payload) { byte[] mimeBytes = mimeType.getBytes(Charset.forName("US-ASCII")); NdefRecord mimeRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA, mimeBytes, newbyte[0], payload); return mimeRecord; } @Override publicboolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); returntrue; } @Override publicboolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_addUser) { if(strUserActive.equals("MasterAdmin") strUserActive.equals("Admin")) { Intent intent = new Intent(this, AddUser.class); this.startActivity(intent); || returntrue; } else { Toast.makeText(this, "Bạn khơng có đủ quyền tạo account mới!", Toast.LENGTH_LONG).show(); returnfalse; } } elseif (id == R.id.action_changePW) { this.startActivity(intent); 76 an returntrue; } elseif (id == R.id.action_about) { this.startActivity(intent); returntrue; } returnsuper.onOptionsItemSelected(item); } publicstatic String readUserActiveName () { String strConfig strHex2strAscii(readConfigFile(FILE_CONFIG).toString()); String[] parts = strConfig.split(";"); String strEnableAutoLogin = null; String strUserActive = null; String strUserActive_username = null; String strUserActive_password = null; = if(parts.length > 1) { strEnableAutoLogin = parts[0]; strUserActive = parts[1]; parts = strUserActive.split(":"); if(parts.length == 2) { strUserActive_username = parts[0]; strUserActive_password = parts[1]; } } return strUserActive_username; } publicstatic String readUserActive () { 77 an String strConfig strHex2strAscii(readConfigFile(FILE_CONFIG).toString()); String[] parts = strConfig.split(";"); String strEnableAutoLogin = null; String strUserActive = null; String strUserActive_username = null; String strUserActive_password = null; = if(parts.length > 1) { strEnableAutoLogin = parts[0]; strUserActive = parts[1]; } return strUserActive; } publicstaticvoid writeDataConfig(String fileName, String data) { String path = FILE_PATH + "/" + fileName; String result = data; try { OutputStreamWriter writer = new OutputStreamWriter( new FileOutputStream(path)); writer.write(result); writer.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } publicstatic String readConfigFile(String fileName) { String path = FILE_PATH; File file = new File(path, fileName); if (!file.exists()) { return ""; } else { StringBuilder text = new StringBuilder(); try { 78 an BufferedReader br = new BufferedReader(new FileReader(file)); String line; while ((line = br.readLine()) != null) { text.append(line); } br.close(); } catch (IOException e) { } return text.toString(); } } publicstatic String strAscii2strHex(String strdata) { StringBuilder sb = new StringBuilder(strdata.length() * 2); for(int i=0; i