Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 150 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
150
Dung lượng
2,55 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP NGÀNH CƠNG NGHỆ KỸ THUẬT MÁY TÍNH HỆ THỐNG QUẢN LÝ QUÁN CÀ PHÊ GVHD: TS PHAN VĂN CA SVTH : NGUYỄN ĐỨC PHÚ AN MSSV: 11119048 SKC004642 Tp Hồ Chí Minh, tháng 01 năm 2016 TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUÂT THANH PHỐ HỒ CHI MINH KHOA ĐAO TẠO CHẤT LƯƠNG CAO ĐỒ ÁN TỐT NGHIỆP HỆ THỐNG QUẢN LÝ QUÁN CÀ PHÊ SVTH : Nguyễn Đức Phú An MSSV: 11119048 Khóa: 2011 Ngành: Cơng Nghệ Kỹ Thuật Máy Tính GVHD: TS Phan Văn Ca Tp Hồ Chí Minh, tháng năm 2016 TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUÂT THANH PHỐ HỒ CHI MINH KHOA ĐAO TẠO CHẤT LƯƠNG CAO ĐỒ ÁN TỐT NGHIỆP HỆ THỐNG QUẢN LÝ QUÁN CÀ PHÊ SVTH : Nguyễn Đức Phú An MSSV: 11119048 Khóa: 2011 Ngành: Cơng Nghệ Kỹ Thuật Máy Tính GVHD: TS Phan Văn Ca Tp Hồ Chí Minh, tháng năm 2016 i Khoa ĐT CLC – ĐH SPKT TP.HCM 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 28 tháng 12 năm 2016 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Nguyễn Đức Phú An Ngành: Công Nghệ Kỹ Thuật Máy Tính Giảng viên hướng dẫn: TS Phan Văn Ca Ngày nhận đề tài: 21/09/2016 MSSV: 11119048 Lớp: 11119CL1 ĐT: Ngày nộp đề tài: 13/2/2017 Tên đề tài: Hệ thống quản lý quán cà phê Các số liệu, tài liệu ban đầu Nội dung thực đề tài: Nghiên cứu hệ thống quản lý quán cà phê ứng dụng vào đời sống ngày Sản phẩm: Hệ thống quản lý quán cà phê TRƯỞNG NGÀNH GIẢNG VIÊN HƯỚNG DẪN ii Khoa ĐT CLC – ĐH SPKT TP.HCM CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc ******* PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Họ tên sinh viên: Nguyễn Đức Phú An MSSV: 11119048 Ngành: Công Nghệ Kỹ Thuật Máy Tính Tên đề tài: Hệ thống quản lý quán cà phê Họ tên giảng viên hướng dẫn: Phan Văn Ca NHẬN XÉT: Về nội dung đề tài & khối lượng thưcc̣ hiện: Ưu điểm: Khuyết điểm: Đề nghi chọ bảo vệ hay không? Đánh giá loại: Điểm:……………….(Bằng chữ: ) Tp Hồ Chí Minh, ngày 10 tháng 02 năm 2017 Giáo viên hướng dẫn (Ký & ghi rõ họ tên) iii Khoa ĐT CLC – ĐH SPKT TP.HCM CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc ******* PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN Họ vàtên Sinh viên: Nguyễn Đức Phú An MSSV: 11119048 Ngành: Công nghệ kỹ thuật máy tính Tên đề tài: Hệ thống quản lý quán cà phê Họ vàtên Giáo viên phản biện: NHÂṆ XÉT Về nội dung đề tài & khối lượng thưcc̣ hiện: Ưu điểm: Khuyết điểm: Đề nghi chọ bảo vệ hay không? Đánh giá loại: Điểm:……………….(Bằng chữ: ) Tp Hồ Chí Minh, ngày tháng năm 20… Giáo viên phản biện (Ký & ghi rõ họ tên) iv Khoa ĐT CLC – ĐH SPKT TP.HCM LỜI CẢM ƠN Trong trình thực đề tài “Hệ thống quản lý quán cà phê”, em nhận giúp đỡ nhiều thầy trưởng ngành Nguyễn Ngô Lâm, thầy hướng dẫn Phan Văn Ca để em hồn thành đồ án Em xin bày tỏ lịng cảm ơn chân thành sâu sắc giúp đỡ Em xin chân thành cảm ơn gia đình hỗ trợ tạo điều kiện tối đa kinh phí để em hồn thành đồ án Em xin cảm ơn nhiều bạn bè anh chị diễn đàn giúp đỡ em trình thực đồ án v Khoa ĐT CLC – ĐH SPKT TP.HCM MỤC LỤC Nhiệm vụ đồ án tốt nghiệp Phiếu nhận xét giáo viên hướng dẫn Phiếu nhận xét giáo viên phản biện Lời cảm ơn Danh mục từ viết tắt Danh mục bảng biểu Danh sách hình ảnh, biểu đồ Chương TỔNG QUAN 1.1 Giới thiệu: 1.2 1.2.1 Mục tiêu tổng quát: 1.2.2 Mục tiêu chi tiết: 1.3 1.4 1.5 1.6 Mục tiêu nghiên cứu: Nhiệm vụ nghiên cứu: Đối tượng phạm vi nghiên cứu: Phương pháp nghiên cứu: Bố cục Đồ Án: -Chương CƠ SỞ LÝ THUYẾT LIÊN QUAN 2.1 Board Arduino promini: 2.1.1 Giới thiệu board Arduino pro mini: 2.1.2 Chi tiết board Arduino promini: 2.2 Công nghệ Bluetooth: 2.2.1 Giới thiệu Bluetooth: 2.2.2 Bluetooth Low Energy (BLE): 2.2.2.1 Giới thiệu BLE: 2.2.2.2 Thông số kỹ thuật: 2.3 Module BLE 4.0 HM – 10: 2.3.1 Đặc điểm kỹ thuật: vi Khoa ĐT CLC – ĐH SPKT TP.HCM 2.3.2 Chip CC2541: 2.3.3 Sơ đồ cấu hình chân HM – 10: 2.3.4 Các tập lệnh AT thường dùng: 2.4 Cảm biến chuyển động PIR 5V: 2.4.1 Giới thiệu cảm biến chuyển động PIR: 2.4.2 Cấu trúc cảm biển PIR: 2.4.3 Nguyên lý hoạt động: -Chương BLUETOOTH LOW ENERGY 3.1 Kiến trúc Bluetooth: 3.2 Các thành phần truyền thông Bluetooth: 3.2.1 Master Unit: 3.2.2 Slave Unit: 3.2.3 Piconet: 3.2.4 Scatternet: 3.2.5 Quá trình hình thành scatternet: 3.3 Cấu trúc mạng Bluetooth 4.0: 3.3.1 Cấu trúc mạng Broadcast: 3.3.2 Cấu trúc mạng Conection: 3.4 Protocol stack: 3.4.1 Physical Layer (PHY): 3.4.2 Link Layer: 3.4.3 Advertiser and Scanner 3.4.4 Thiết lập kết nối: 3.5 Host Controller Interface (HCI) 3.6 Logical Link Control and Adaptation Protocol (L2CAP) 3.7 Attribute Protocol (ATT) 3.8 ATT Operations: 3.9 Security Manager (SM) 3.10 Generic Attribute Profile (GATT) 3.10.1 Các vai trị GATT: 3.10.2 UUID 3.10.3 Thuộc tính (attribute): vii Khoa ĐT CLC – ĐH SPKT TP.HCM 3.10.4 Handle 3.10.5 Type 3.10.6 Permissions 3.10.7 Value 3.10.8 Attribute Data Hierarchy (Attribute hệ thống phân cấp data): 3.10.9 Service 3.10.10 Characteristics 3.11 Generic Access Profile (GAP) -Chương HỆ THỐNG QUẢN LÝ QUÁN CÀ PHÊ 4.1 Yêu cầu hệ thống: 4.2 Thiết kế hệ thống: 4.3 Hoạt động chi tiết hệ thống: 4.3.1 Thiết bị android: 4.3.2 Giao diện máy tính: 4.3.3 Phần thu nhận thông tin: 4.5 Lưu đồ giải thuật: 4.5.1 Lưu đồ giải thuật arduino: 4.5.2 Lưu đồ giải thuật thiết bị android: 4.5.3 Lưu đồ giải thuật máy tính: -Chương KẾT QUẢ, THỰC NGHIỆM, KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 5.1 5.2 5.3 5.4 5.4.1 Kết Luận: 5.4.2 Hướng phát triển: TÀI LIỆU THAM KHẢO Kết đạt được: Kết triển khai thực tế: Phân tích ưu điểm, nhược điểm: Kết luận hướng phát triển: PHỤ LỤC viii Khoa ĐT CLC – ĐH SPKT TP.HCM 113 Khoa ĐT CLC – ĐH SPKT TP.HCM Group_item.xml Listitem_device.xml Code java máy tính Constants.java package wifi; public class Constants { } public static final String CLOSED_CONNECTION = "An_closed_connection"; public static final String LOGIN_NAME = "An_login_name"; MainScreen 114 Khoa ĐT CLC – ĐH SPKT TP.HCM package wifi; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.JTextField; import java.awt.Font; import javax.swing.SwingConstants; import java.awt.Component; public class MainScreen extends JFrame { private JTextArea messagesArea; private JButton sendButton; private JButton startServer; private JButton stopServer; private TcpServer mServer; public static final String SERVER_NAME = "Server"; private JPanel panel; private JTextField txtBnS; private JPanel panel_1; boolean flag = false; /** * Launch the application */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { MainScreen frame = new MainScreen(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace() ; } } }); } /** * Create the frame */ public MainScreen() { 115 Khoa ĐT CLC – ĐH SPKT TP.HCM super("MainScreen"); setTitle("AnCoffee"); JPanel panelFields = new JPanel(); panelFields.setLayout(new BoxLayout(panelFields, BoxLayout.Y_AXIS)); JPanel panelFields2 = new JPanel(); panelFields2.setLayout(new BoxLayout(panelFields2, BoxLayout.Y_AXIS)); //here we will have the text messages screen messagesArea = new JTextArea(); messagesArea.setColumns(30); messagesArea.setRows(10); messagesArea.setEditable(false); panel = new JPanel(); panelFields.add(panel); txtBnS = new JTextField(); txtBnS.setEditable(false); txtBnS.setHorizontalAlignment(SwingConstants.CENTER); txtBnS.setFont(new Font("Tahoma", Font.BOLD, 13)); txtBnS.setText("B\u00E0n S\u1ED1 1"); panel.add(txtBnS); txtBnS.setColumns(10); //add the buttons and the text fields to the panel panelFields.add(messagesArea); panel_1 = new JPanel(); panelFields.add(panel_1); startServer = new JButton("Start"); panel_1.add(startServer); stopServer = new JButton("Stop"); panel_1.add(stopServer); stopServer.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (mServer != null) { mServer.close(); } / disable the stop button and enable the start one startServer.setEnabled(true); stopServer.setEnabled(false); } 116 Khoa ĐT CLC – ĐH SPKT TP.HCM }); startServer.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { //creates the object OnMessageReceived asked by the TCPServer constructor mServer = new TcpServer(new TcpServer.OnMessageReceived() { @Override //this method declared in the interface from TCPServer class is implemented here //this method is actually a callback method, because it will run every time when it will be called from //TCPServer class (at while) public void messageReceived(String message) { //Clear message if(flag){ messagesArea.setText(null); flag = false; } if(message.equals("TT")){ flag = true; }else { messagesArea.append("\n " + message); } if(message.equals("Off")){ messagesArea.setText(null); } } }); mServer.start(); / disable the start button and enable the stop one startServer.setEnabled(false); stopServer.setEnabled(true); } }); getContentPane().add(panelFields); getContentPane().add(panelFields2); getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); sendButton = new JButton("XONG"); sendButton.setAlignmentX(0.5f); getContentPane().add(sendButton); sendButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (mServer != null) { // send the message to the client mServer.sendMessage(new User(SERVER_NAME,"XONG")); } 117 Khoa ĐT CLC – ĐH SPKT TP.HCM } }); setSize(343, 302); setVisible(true); } } TCPServer.java package wifi; import javax.swing.*; import wifi.UserManager.UserManagerDelegate; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; public class TcpServer extends Thread implements UserManagerDelegate { public static final int SERVERPORT = 4444; / while this is true the server will run private boolean running = false; / callback used to notify new messages received private OnMessageReceived messageListener; private ServerSocket serverSocket; private ArrayList connectedUsers; /** * Constructor of the class * * @param messageListener listens for the messages */ public TcpServer(OnMessageReceived messageListener) { this.messageListener = messageListener; connectedUsers = new ArrayList(); } public static void main(String[] args) { //opens the window where the messages will be received and sent MainScreen frame = new MainScreen(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } /** * Close the server 118 Khoa ĐT CLC – ĐH SPKT TP.HCM */ public void close() { running = false; try { serverSocket.close(); } catch (Exception e) { e.printStackTrace(); } System.out.println("S: Done."); serverSocket = null; //todo close all user connections } /** * Method to send the messages from server to all clients * * @param user a user object containing the message to be sent and also its username */ public void sendMessage(User user) { if (connectedUsers != null) { for (UserManager userManager : connectedUsers) { if (userManager.getUser().getUserID() != user.getUserID()) { userManager.sendMessage(user.getMessage()); } } } } /** * Builds a new server connection */ private void runServer() { running = true; try { //create a server socket A server socket waits for requests to come in over the network serverSocket = new ServerSocket(SERVERPORT); while (running) { / create a loop and get all the incoming connections and create users with them System.out.println("S: Waiting for a client "); 119 Khoa ĐT CLC – ĐH SPKT TP.HCM //create client socket the method accept() listens for a connection to be made to this socket and accepts it Socket client = serverSocket.accept(); UserManager userManager = new UserManager(client, this); / add the new user to the stack of users connectedUsers.add(userManager); / start reading messages from the client userManager.start(); System.out.println("S: New client connected "); } } catch (Exception e) { System.out.println("S: Error"); e.printStackTrace(); } } @Override public void run() { super.run(); runServer(); } @Override public void userConnected(User connectedUser) { messageListener.messageReceived("User " + connectedUser.getUsername() + " is now connected."); } @Override public void userDisconnected(UserManager userManager) { / remove the user from the list of connected users connectedUsers.remove(userManager); } @Override public void messageReceived(User fromUser, User toUser) { messageListener.messageReceived(fromUser.getMessage()); / send the message to the other clients sendMessage(fromUser); } 120 Khoa ĐT CLC – ĐH SPKT TP.HCM //Declare the interface The method messageReceived(String message) will/must be implemented in the ServerBoard //class at on startServer button click public interface OnMessageReceived { public void messageReceived(String message); } } User.java package wifi; public class User { private String username; private String message; private User userToSendMessage; private int userID; public User(String username, String message) { this.username = username; this.message = message; } public User() { } public int getUserID() { return userID; } public void setUserID(int userID) { this.userID = userID; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public User getUserToSendMessage() { return userToSendMessage; } public void setUserToSendMessage(User userToSendMessage) { this.userToSendMessage = userToSendMessage; 121 Khoa ĐT CLC – ĐH SPKT TP.HCM } } UserManager.java package wifi; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; public class UserManager extends Thread { / contains information about the current user private User user; / the socket that links the user(client) to this server private Socket socket; private PrintWriter bufferSender; / flag used to stop the read operation private boolean running; / used to notify certain user actions like receiving a message or disconnect private UserManagerDelegate managerDelegate; public UserManager(Socket socket, UserManagerDelegate managerDelegate) { this.user = new User(); this.socket = socket; this.managerDelegate = managerDelegate; running = true; } public User getUser() { return user; } public Socket getSocket() { return socket; } @Override public void run() { super.run(); System.out.println("S: Receiving "); try { //sends the message to the client 122 Khoa ĐT CLC – ĐH SPKT TP.HCM bufferSender = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8")), true); //read the message received from client BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8")); //in this while we wait to receive messages from client (it's an infinite loop) //this while it's like a listener for messages while (running) { String message = null; try { message = in.readLine(); } catch (IOException e) { System.out.println("Error reading message: " + e.getMessage()); } if (hasCommand(message)) { continue; } if (message != null && managerDelegate != null) { user.setMessage(message); / notify message received action managerDelegate.messageReceived(user, null); } } } catch (Exception e) { System.out.println("S: Error"); e.printStackTrace(); } } /** * Close the server */ public void close() { running = false; if (bufferSender != null) { bufferSender.flush(); bufferSender.close(); bufferSender = null; } try { socket.close(); } catch (Exception e) { e.printStackTrace() ; 123 Khoa ĐT CLC – ĐH SPKT TP.HCM } System.out.println("S: User " + user.getUsername() + " leaved the room."); socket = null; //todo close all user connections } /** * Method to send the messages from server to client * * @param message the message sent by the server */ public void sendMessage(String message) { if (bufferSender != null && !bufferSender.checkError()) { bufferSender.println(message); bufferSender.flush(); } } public boolean hasCommand(String message) { if (message != null) { if (message.contains(Constants.CLOSED_CONNECTION)) { close(); / let the server know that this user was disconnected managerDelegate.userDisconnected(this); return true; } else if (message.contains(Constants.LOGIN_NAME)) { / parse the username user.setUsername(message.replaceAll(Constants.LOGIN_NAME, "")); user.setUserID(socket.getPort()); / send a user connected message managerDelegate.userConnected(user); return true; } } return false; } /** * Used to talk with the TcpServer class or whoever wants to receive notifications from this manager */ public interface UserManagerDelegate { /** * Called whenever a user is connected to the server * * @param connectedUser the connected user */ public void userConnected(User connectedUser); 124 Khoa ĐT CLC – ĐH SPKT TP.HCM /** * Called when a user is disconnected from the server * * @param userManager the manager of the disconnected user */ public void userDisconnected(UserManager userManager); /** * Called when the manager receives a new message from the client * * @param fromUser the user that sent the message * @param toUser the user that should receive the message */ public void messageReceived(User fromUser, User toUser); } } 125 Khoa ĐT CLC – ĐH SPKT TP.HCM ... tài: Hệ thống quản lý quán cà phê Các số liệu, tài liệu ban đầu Nội dung thực đề tài: Nghiên cứu hệ thống quản lý quán cà phê ứng dụng vào đời sống ngày Sản phẩm: Hệ thống quản lý quán cà phê. .. 2014 Quán cà phê - Chuỗi quán cà phê độc lập - Quán cà phê độc lập Cửa hàng chuyên cà phê - Chuỗi cửa hàng chuyên cà phê - Cửa hàng chuyên cà phê độc lập “Bên cạnh đó, nhu cầu tiêu thụ cà phê. .. Các hệ thống quán cà phê lớn vừa Hệ thống quán cà phê cần giải quyết vấn đề nhân viên Hệ thống quán cà phê cần nâng cao chất lượng dịch vụ, tạo thoải mái cho khách hàng - Các chuỗi qn cà phề