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
7,74 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 KHĨA LUẬN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT Ô TÔ NGHIÊN CỨU, XÂY DỰNG XE TỰ HÀNH PHỤC VỤ VẬN CHUYỂN TRONG NHÀ MÁY SẢN XUẤT GVHD: ThS NGUYỄN THÀNH TUYÊN SVTH: NGUYỄN HOÀNG HUY NGUYỄN TUẤN VŨ S K L0 Tp Hồ Chí Minh, tháng 8/2022 TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA CƠ KHÍ ĐỘNG LỰC - - ĐỒ ÁN TỐT NGHIỆP Chuyên ngành: Công nghệ Kỹ thuật Ơ tơ Tên đề tài NGHIÊN CỨU, XÂY DỰNG XE TỰ HÀNH PHỤC VỤ VẬN CHUYỂN TRONG NHÀ MÁY SẢN XUẤT SVTH: Nguyễn Hoàng Huy MSSV: 18145360 SVTH: Nguyễn Tuấn Vũ MSSV: 18145492 GVHD: ThS Nguyễn Thành Tuyên Tp Hồ Chí Minh, tháng 08 năm 2022 LỜI CẢM ƠN Để đạt kết ngày hơm nhóm khơng ngừng nỗ lực, tham khảo nhiều nguồn tài liệu, tìm hiểu thêm nhiều kiến thức mới, áp dụng kiến thức quý Thầy giảng dạy giảng đường nhà xưởng vào đề tài Những bước đầu vào nghiên cứu đề tài nguồn tài liệu tham khảo dồi lợi lớn, thật tuyệt vời nhóm học ngơi trường Đại học Sư Phạm Kỹ Thuật TP Hồ Chí Minh nơi mà thư viện nhà trường nơi lưu trữ nguồn tài liệu phong phú in ấn lẫn tài liệu số để bọn em thoả sức tham khảo ứng dụng, nhóm biết ơn điều Trong q trình thực đề tài nhóm Ban lãnh đạo Khoa Cơ Khí Động Lực quý Thầy xưởng Điện, Động Cơ, Khung Gầm tạo điều kiện thuận lợi, cho nhóm mượn trang thiết bị cần thiết kịp thời, nhóm xin biết ơn sâu sắc Đặc biệt nhóm xin gửi lởi cảm ơn chân thành tới ThS Nguyễn Thành Tuyên, người Thầy lắng nghe trình bày nhóm, đưa hướng dẫn đắn, kịp thời Trong trình thực đề tài nhóm có nhiều điều chưa rõ, hướng lệch lạc, đổi lại tận tuỵ, tâm huyết, Thầy giúp nhóm tháo gỡ khúc mắc xác định hướng để để tài đạt kết cao Xin chúc Thầy gia đình nhiều sức khoẻ, ln cống hiến cho nghiệp giảng dạy trường Đại học Sư Phạm Kỹ Thuật TP Hồ Chí Minh Mặc dù nhóm ln cố gắng, nỗ lực để luận văn đạt kết tốt nhất, có tính ứng cao lao động, sản xuất Song đề tài có thiếu sót định, mong ghi nhận, đóng góp ý kiến từ phía q Thầy để luận văn hồn thiện Cuối nhóm xin chúc tập thể Ban lãnh đạo Khoa Cơ Khí Động Lực, quý Thầy Cô nhiều sức khoẻ, ngày phát triển đạt nhiều thành cơng nghiệp i TĨM TẮT Xe AGV tự hành phục vụ vận chuyển dây chuyền sản xuất nhà máy nhóm nghiên cứu, thiết kế, chế tạo, có khả hoạt động tốt ứng dụng cao nhà máy sản xuất Cấu tạo xe gồm ba phần Phần cứng xe nhóm thiết kế phần mềm Autocad Inventor, khung làm vật liệu Nhôm, bánh xe Nhơm có vỏ cao su ngồi Phần linh kiện điện tử: Trên xe sử dụng bo mạch Arduino Mega 2560, mạch điều khiển động L298N, Kit thu phát Wifi ESP8266, động DC, cảm biến hồng ngoại, cảm biến siêu âm Ultrasonic HC – SR04, cảm biến dò line QTR – 5RC Phần điều khiển xe: Áp dụng kiến thức lập trình C++ vào lập trình điều khiển Arduino NodeMCU Lập trình ứng dụng điều khiển xe dựa tảng MIT App Inventor Cuối lưu trữ liệu nhập từ điện thoại lên Firebase Xe AGV nhóm nghiên cứu kiểm sốt ba chế độ: chế độ an tồn, thủ cơng (Manual), tự động (Automatic) Chế độ an toàn giúp AGV nhận biết vật cản có đường đi, cảnh người đối diện, dừng lại báo còi cảnh báo trước vật cản với khoảng cách an toàn 40cm Chế độ Manual sử dụng người sử dụng muốn điều khiển xe theo ý muốn mình, giảm khiêng vác số vị trí chưa có chế độ Auto Chế độ Auto chế độ lập trình sẵn đường đi, người dùng cần chọn đích đến thơng qua ứng dụng AGVControl điện thoại, AGV tự động chuyển hàng hố tới đích người dùng chọn quay vị trí ban đầu ii QTRSensorsRC qtrrc((unsigned char[]) {A4,A3,A2,A1,A0} ,NUM_SENSORS, 2500, 2); unsigned int sensorValues[NUM_SENSORS]; unsigned short arrList[10]; unsigned short arrBack[10]; String trueArray; unsigned short counter = 0, lastIndex = 0,lastError = 0; short indexList = 0,totalList = ,totalBack = ; short iposition = qtrrc.readLine(sensorValues); short rightMotorSpeed = 0, leftMotorSpeed = 0; bool flagGoal = false,flagHand = false,flagRe = false,flagStop = false; bool isLoop = false; int dem=0; void receiveGoal(void); void checkReceive(void); void Automatic(void); void Manual(void); void CalculaterPID(void); void Handle3(void); void HandleTurn(int corner); void HandleGoal(int goal); void HandleBack(int goal); void applyTrueArray(); void Safe(); void moveMotor(int ispeedLeft, int ispeedRight); void direcMotor(int motor, int dir); void setup() { Serial.begin(9600); pinMode(trig0,OUTPUT); 67 pinMode(echo0,INPUT); pinMode(horn, OUTPUT); pinMode(rightMotor1, OUTPUT); pinMode(rightMotor2, OUTPUT); pinMode(rightMotorPWM, OUTPUT); pinMode(leftMotor1, OUTPUT); pinMode(leftMotor2, OUTPUT); pinMode(leftMotorPWM, OUTPUT); pinMode(SENSO1, INPUT); pinMode(SENSO2, INPUT); digitalWrite(rightMotor1, HIGH); digitalWrite(rightMotor2, LOW); digitalWrite(leftMotor1, LOW); digitalWrite(leftMotor2, HIGH); for (int i = 0; i < 100; i++) { if(i==99){i=0; dem++;} if(dem ==1){ direcMotor(0,1); direcMotor(1,1); moveMotor(0,0); break; } if ( i < 30|| i> 70) { direcMotor(1,1); direcMotor(0,0); moveMotor(110,110); } else{ direcMotor(1,0); 68 direcMotor(0,1); moveMotor(140,140); } qtrrc.calibrate(QTR_EMITTERS_ON); delay(20); } direcMotor(0,1); direcMotor(1,1); delay(5000); } void loop() { checkReceive(); receiveGoal(); if(flagHand) Manual(); else Automatic(); } void applyTrueArray(){ totalList =trueArray.length()-1; for(int i=0;i MaxSpeed ) rightMotorSpeed = MaxSpeed; if (leftMotorSpeed > MaxSpeed ) leftMotorSpeed = MaxSpeed; if (rightMotorSpeed < 0) rightMotorSpeed = 0; if (leftMotorSpeed < 0) leftMotorSpeed = 0; } void HandleTurn(int corner){ int pos = 0; if(corner == 3){ pos = 4000; direcMotor(1, 0); for (int i=0;i50) pos = qtrrc.readLine(sensorValues); if(pos < 3100){moveMotor(0,0); delay(1000); break;} moveMotor(180, 130); delay(20); } direcMotor(1, 1); moveMotor(100,100); }else if(corner == 2){ pos = 0; direcMotor(0,0); for (int i=0;i50)pos = qtrrc.readLine(sensorValues); 74 if(pos > 900) {moveMotor(0,0); delay(1000); break;} moveMotor(130, 180); delay(20); } direcMotor(0,1); moveMotor(100,100); } else if(corner ==4) { delay(5000); pos = 0; digitalWrite (horn, HIGH); direcMotor(0, 0); direcMotor(1, 1); for(int i=0;i550)pos = qtrrc.readLine(sensorValues); if(pos > 300){moveMotor(0,0); delay(1000); break;} moveMotor(150,150); delay(5); } direcMotor(0, 1); moveMotor(120,120); digitalWrite (horn, LOW); } else{ for (int i=0;i