GVHD Ts NGUYỄN HÙNG BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP THIẾT KẾ MÔ HÌNH QUẢN LÝ VÀ ĐIỀU KHIỂN BÃI GỬI XE TRÊN CAO BẰNG SMARTPHONE NGÀNH KỸ THUẬT ĐIỆN GIẢNG VIÊN HƯỚNG DẪN PGS TS NGUYỄN HÙNG Sinh viên thực hiện MSSV Lớp Nguyễn Văn Đào 1915780003 19HDCA1 Đinh Văn Hoài 1915780004 19HDCA1 Hoàng Gia Khánh 1915780005 19HDCA1 TP Hồ Chí Minh, tháng 09 năm 2021 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP THIẾT KẾ MÔ HÌNH QUẢ.
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP THIẾT KẾ MƠ HÌNH QUẢN LÝ VÀ ĐIỀU KHIỂN BÃI GỬI XE TRÊN CAO BẰNG SMARTPHONE NGÀNH: KỸ THUẬT ĐIỆN GIẢNG VIÊN HƯỚNG DẪN: PGS TS NGUYỄN HÙNG Sinh viên thực hiện: MSSV: Lớp: Nguyễn Văn Đào 1915780003 19HDCA1 Đinh Văn Hoài 1915780004 19HDCA1 Hoàng Gia Khánh 1915780005 19HDCA1 TP Hồ Chí Minh, tháng 09 năm 2021 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CƠNG NGHỆ TP HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP THIẾT KẾ MƠ HÌNH QUẢN LÝ VÀ ĐIỀU KHIỂN BÃI GỬI XE TRÊN CAO BẰNG SMARTPHONE NGÀNH: KỸ THUẬT ĐIỆN GIẢNG VIÊN HƯỚNG DẪN: PGS TS NGUYỄN HÙNG Sinh viên thực hiện: MSSV: Lớp: Nguyễn Văn Đào 1915780003 19HDCA1 Đinh Văn Hoài 1915780004 19HDCA1 Hoàng Gia Khánh 1915780005 19HDCA1 TP Hồ Chí Minh, tháng 09 năm 2021 LỜI CẢM ƠN Trước hết nhóm em xin bày tỏ lòng biết ơn sâu sắc đến thầy PGS.TS Nguyễn Hùng tận tình giúp đỡ, hướng dẫn nhóm nhiều suốt q trình nghiên cứu, tìm hiểu hồn thành đồ án tốt nghiệp Nhóm em xin chân thành cảm ơn thầy, cô trường cho chúng em kiến thức cần thiết Tuy nhiên, trình làm đồ án kiến thức chun ngành nhóm cịn hạn chế nên khơng thể tránh khỏi vài thiếu sót trình bày đánh giá vấn đề.Rất mong nhận góp ý, đánh giá thầy mơn để đề tài nhóm em thêm hồn thiện ii MỤC LỤC LỜI CAM ĐOAN i LỜI CẢM ƠN ii MỤC LỤC iii DANH SÁCH CÁC CHỮ VIẾT TẮT vii DANH SÁCH CÁC HÌNH viii LỜI MỞ ĐẦU CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI 1.1 Tính cấp thiết đề tài 1.2 Nhiệm vụ nghiên cứu 1.3 Mục đích nghiên cứu 1.4 Phương pháp nghiên cứu 1.5 Phạm vi nghiên cứu 1.6 Kết cấu đồ án CHƯƠNG 2: TỔNG QUAN VỀ GIẢI PHÁP 2.1 Bãi đỗ xe trời 2.1.1 Ưu điểm 2.1.2 Nhược điểm 2.2 Bãi đỗ xe nhà 2.2.1 Ưu điểm 2.2.2 Nhược điểm 2.3 Bãi đỗ xe cao tự động 2.3.1 Ưu điểm 2.3.2 Nhược điểm 10 2.4 Kết luận chọn giải pháp 11 iii CHƯƠNG 3: PHƯƠNG PHÁP GIẢI QUYẾT 12 3.1 Các phương pháp đặc tính thiết kế 12 3.1.1 Giải pháp hệ thống đỗ xe tự động kiểu xoay vòng trục đứng 12 3.1.2 Giải pháp hệ thống đỗ xe tự động kiểu thang máy 12 3.1.3 Giải pháp hệ thống đỗ xe tự động kiểu thang nâng di chuyển 13 3.1.4 Giải pháp hệ thống đỗ xe tự động xoay vòng kiểu đứng 14 3.1.5 Kết luận đặc tính thiết kế 15 3.2 Các phương pháp điều khiển 15 3.2.1 PLC 15 3.2.2 Arduino-ESP32 16 3.2.3 Kết luận phương pháp điều khiển 17 3.3 Các phương pháp hiển thị, giám sát 18 3.3.1 Phương pháp hiển thị Web 18 3.3.2 Phương pháp hiển thị App điện thoại 20 3.3.3 Kết luận phương pháp hiển thị 21 3.4 Chọn giải pháp cuối 21 3.5 Xác định cấu hình giới thiệu thành phần thực mơ hình 22 3.5.1 Cơ cấu động lực học 22 3.5.2 Phần mềm lập trình 22 3.5.3 Thông số kỹ thuật tính 23 CHƯƠNG 4: THIẾT KẾ MƠ HÌNH BÃI ĐỖ XE TRÊN CAO 25 4.1 Thiết kế khí động lực học cho mơ hình 25 4.1.1 Thanh trượt 25 4.1.1.1 Thanh trượt vuông 25 4.1.1.2 Thanh trượt tròn 26 4.1.1.3 Kết luận 28 4.1.2 Sơ đồ động lực học cho máy 28 4.1.3 Nguyên lý hoạt động máy thiết kế 30 4.1.4 Thiết kế hệ thống khí cho máy 32 iv 4.2 Lựa chọn thông tin linh kiện 34 4.2.1 Module Wifi ESP32 34 4.2.2 Module RFID RC522 38 4.2.3 Động bước driver A4988 40 4.2.4 Động Servo SG90 42 4.2.5 Công tắc hành trình 15A-250V 43 4.2.6 Adapter RUIDE RD1201500-C55-1OG 12V 1.5V 43 4.3 Thiết kế hệ thống điều khiển cho mơ hình 44 4.3.1 Sơ đồ nguyên lý 44 4.3.2 Sơ đồ điều khiển 45 4.3.3 Lưu đồ thuật toán sử lý quét thẻ RFID 46 4.3.3.1 Lưu đồ thuật toán gửi xe 46 4.3.3.2 Lưu đồ thuật toán lấy xe 47 4.4 Tìm hiểu cách thức liên kết Blynk 47 4.4.1 Cách thức liên kết Wifi 47 4.4.2 Truyền nhận Data 49 4.4.3 Cách kết nối ESP với server Blynk 50 4.4.4 Thiết kế App Blynk 57 4.5 Nhận xét 60 CHƯƠNG 5: THI CƠNG MƠ HÌNH VÀ MƠ PHỎNG 61 5.1 Thi công mô hình 61 5.1.1 Chế tạo cụm trục X,Y 61 5.1.2 Chế tạo cụm trục Z 62 5.1.3 Chế tạo palet, khung đỡ 63 5.1.4 Thi công hệ thống mạch 64 5.1.5 Sản phẩm hoàn thiện 66 5.1.6 Lập trình code cho mơ hình thông qua chương Aduino IDE 66 5.2 Kết mô 67 5.2.1 Kết mô xe gửi vào 67 v 5.2.2 Kết mơ hình ảnh hiển thị xe gửi vào 69 5.2.3 Kết mô xe lấy 72 5.2.4 Kết mô hình ảnh hiển thị xe lấy 73 5.2.5 Độ tin cậy an toàn hệ thống 74 5.2.6 Nhận xét 75 CHƯƠNG 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI 76 6.1 Kết luận 76 6.2 Hướng phát triển đề tài 76 TÀI LIỆU THAM KHẢO 77 PHỤ LỤC 78 vi DANH SÁCH CÁC CHỮ VIẾT TẮT Arduino IDE: Arduino Integrated Development Environment-Trình biên soạn code IOT: Internet of thing-Internet vạn vật ESP: Espressif- Hệ thống vi điều khiển CPU: Central Processing Unit- Bộ xử lý trung tâm PWM: Pulse Width Modulation- Điều chế độ rộng xung GPIO: General Purpose Input Output- Ngõ giao tiếp vào/ra ADC: Analog/Digital Conveter- Bộ chuyển đổi Analog sang kỹ thuật số UART: Universal Asynchronous Receiver Transmitter- Giao thức truyền thông DAC: Digital Analog Converter- Bộ chuyển đổi kỹ thuật số sang Analog SPI: System Peripheral Interface- Chuẩn giao tiếp RFID: Radio Frequency Identification- Nhận dạng tần số vơ tuyến GND: Ground-điểm trung tính nguồn PLC: Program Logic Controller- Bộ điều khiển lập trình vii DANH SÁCH CÁC HÌNH HÌNH TRANG Hình 1.1 Tình trạng dừng đỗ xe vỉa hè lòng đường Hình 2.1 Bãi đỗ xe ngồi trời Hình 2.2 Bãi đỗ xe nhà Hình 2.3 Bãi đỗ xe cao Hình 3.1 Hệ thống đỗ xe tự động kiểu xoay vòng trục đứng 12 Hình 3.2 Mơ hình đỗ xe tự động kiểu thang máy 13 Hình 3.3 Hệ thống đỗ xe tự động kiểu thang nâng di chuyển 13 Hình 3.4 Hệ thống đỗ xe tự động xoay vịng kiểu đứng 14 Hình 3.5 Giao thức HTTP 18 Hình 3.6 Giao diện trang chủ 000webhost 19 Hình 3.7 App Blynk 20 Hình 3.8 Mơ hình bãi đỗ xe tự động sử dụng thang nâng 22 Hình 4.1 Thanh trượt vuông 25 Hình 4.2 Thơng số trượt vng 26 Hình 4.3 Thanh trượt trịn 27 Hình 4.4 Sơ đồ động học sử dụng trục vít 28 Hình 4.5 Sơ đồ động học sử dụng cấu trượt vslot truyền đai 29 Hình 4.6 Quá trình đỗ xe vào vị trí gửi quẹt thẻ 30 Hình 4.7 Quá trình hệ thống đưa xe đến vị trí đỗ trống gần 30 Hình 4.8 Quẹt thẻ hệ thống nhận diện thẻ vị trí đỗ đưa xe vị trí định 31 Hình 4.9 Đồ thị biểu diễn nâng hạ tải đầy tải bên trái khơng tải bên phải, đặc tính Mc (ω) nằm bốn góc phần tư 32 Hình 4.10 Đồ thị đặc tính động 33 Hình 4.11 Hình vẽ mơ bãi gửi xe 34 Hình 4.12 Module Wifi ESP 32 35 Hình 4.13 Sơ đồ chân ESP 32 36 viii Hình 4.14 RFID RC522 pinout 40 Hình 4.15 Động bước sử dụng mơ hình 40 Hình 4.16 Driver A4988 41 Hình 4.17 A4988 điều khiển động bước 41 Hình 4.18 Servo SG90 42 Hình 4.19 Cơng tắc hành trình 15A-250V 43 Hình 4.20 Adapter RUIDE RD1201500-C55-1OG 12V 1.5A 43 Hình 4.21 Sơ đồ nguyên lý 44 Hình 4.22 Sơ đồ điều khiển 45 Hình 4.23 Thuật tốn sử lí qt thẻ gửi xe 46 Hình 4.24 Thuật tốn sử lí qt thẻ lấy xe 47 Hình 4.25 Truyền nhận data Blynk 49 Hình 4.26 Cách thức hoạt động Blynk 50 Hình 4.27 Hướng dẫn đăng nhập tài khoản Blynk 51 Hình 4.28 Cách chọn phần cứng lấy mã Auth Token 51 Hình 4.29 Mã Auth Token gửi qua email 52 Hình 4.30 Cách chèn đường links để Arduino IDE nhận board 52 Hình 4.31 Đường links ESP 32 53 Hình 4.32 Tải cài đặt board ESP 32 54 Hình 4.33 Cách chọn chip cần nạp chương trình 54 Hình 4.34 Kết nối cổng giao tiếp 55 Hình 4.35 Driver giao tiếp CP 2102 55 Hình 4.36 Biên dịch chương trình 56 Hình 4.37 Nạp chương trình ESP 32 56 Hình 4.38 Chèn hình ảnh hiển thị App Blynk 57 Hình 4.39 Tạo giao diện Led hiển thị vị trí gửi lấy xe 58 Hình 4.40 Cài đặt cấu hình để hiển thị App Blynk 58 Hình 4.41 Giao diện hiển thị trạng thái Slot App Blynk 59 Hình 4.42 Giao diện cấu hình hồn thiện 59 ix sothe2 = vt; tam2 = 0; } if (ktthe3 == && tam3 == 1) { KTVITRIGUI(); sothe3 = vt; tam3 = 0; } if (ktthe4 == && tam4 == 1) { KTVITRIGUI(); sothe4 = vt; tam4 = 0; } if (ktthe5 == && tam5 == 1) { KTVITRIGUI(); sothe5 = vt; tam5 = 0; } if (ktthe6 == && tam6 == 1) { KTVITRIGUI(); sothe6 = vt; tam6 = 0; } ///////////////////////////////////////////////// if (ktthe1 == && tam1 == 0) { // trùng thẻ kiểm tra xem thẻ xe ứng với vị trí để lấy xe LAYXE(sothe1); // hàm lấy xe theo vị trí tam1 = 1; } if (ktthe2 == && tam2 == 0) { 82 LAYXE(sothe2); tam2 = 1; } if (ktthe3 == && tam3 == 0) { LAYXE(sothe3); tam3 = 1; } if (ktthe4 == && tam4 == 0) { LAYXE(sothe4); tam4 = 1; } if (ktthe5 == && tam5 == 0) { LAYXE(sothe5); tam5 = 1; } if (ktthe6 == && tam6 == 0) { LAYXE(sothe6); tam6 = 1; } } ///////////////////////////////////// void KTVITRIGUI() { // hàm kiểm tra vị trí xe gần cịn trống tongso++; Blynk.virtualWrite(V0, tongso); if (vt1 == 0) { GUIXE1(); // hàm đưa xe đến vị trí gửi vt1 = 1; vt = 1; } else if (vt2 == 0) { 83 GUIXE2(); vt2 = 1; vt = 2; } else if (vt3 == 0) { GUIXE3(); vt3 = 1; vt = 3; } else if (vt4 == 0) { GUIXE4(); vt4 = 1; vt = 4; } else if (vt5 == 0) { GUIXE5(); vt5 = 1; vt = 5; } else { GUIXE6(); vt6 = 1; vt = 6; } } //////////////////////// /////////////////////////////////////////// void LAYXE(int x) { // hàm lấy xe tongso ; Blynk.virtualWrite(V0, tongso); 84 if ( x == ) { Stepper1.runToNewPosition(-590); // cho động bước trục x quay 670 xung theo chiều nghịch Stepper1.setCurrentPosition(0); // set vị trí vừa chạy tới làm vị trí để thực bước for (int pos = 170; pos >= 50; pos -= 1) { // điều khiển servo đẩy lấy xe servo1.write(pos); delay(10); } Stepper2.runToNewPosition(-400); // cho động bước trục y quay 200 xung theo chiều nghịch Stepper2.setCurrentPosition(0); // set vị trí vừa chạy tới làm vị trí để thực bước for (int pos = 50; pos = 50; pos -= 1) { servo1.write(pos); delay(10); } Stepper2.runToNewPosition(-400); 85 Stepper2.setCurrentPosition(0); for (int pos = 50; pos = 50; pos -= 1) { servo1.write(pos); delay(10); } Stepper2.runToNewPosition(-400); Stepper2.setCurrentPosition(0); for (int pos = 50; pos = 50; pos -= 1) { servo1.write(pos); delay(10); } Stepper2.runToNewPosition(-300); Stepper2.setCurrentPosition(0); for (int pos = 50; pos = 50; pos -= 1) { servo1.write(pos); delay(10); } Stepper2.runToNewPosition(-300); Stepper2.setCurrentPosition(0); for (int pos = 50; pos = 50; pos -= 1) { servo1.write(pos); delay(10); } Stepper2.runToNewPosition(-300); Stepper2.setCurrentPosition(0); for (int pos = 50; pos = 50; pos -= 1) { servo1.write(pos); delay(10); } Stepper2.runToNewPosition(400); Stepper2.setCurrentPosition(0); for (int pos = 50; pos = 50; pos -= 1) { servo1.write(pos); delay(10); } Stepper2.runToNewPosition(400); Stepper2.setCurrentPosition(0); for (int pos = 50; pos = 50; pos -= 1) { servo1.write(pos); delay(10); } Stepper2.runToNewPosition(400); Stepper2.setCurrentPosition(0); for (int pos = 50; pos = 50; pos -= 1) { servo1.write(pos); delay(10); 90 } Stepper2.runToNewPosition(400); Stepper2.setCurrentPosition(0); for (int pos = 50; pos = 50; pos -= 1) { servo1.write(pos); delay(10); } Stepper2.runToNewPosition(400); Stepper2.setCurrentPosition(0); for (int pos = 50; pos = 50; pos -= 1) { servo1.write(pos); delay(10); } Stepper2.runToNewPosition(400); Stepper2.setCurrentPosition(0); for (int pos = 50; pos