Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 76 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
76
Dung lượng
1,61 MB
Nội dung
TRƯỜNG ĐẠI HỌC LÂM NGHIÊP VIỆT NAM KHOA CƠ ĐIỆN VÀ CƠNG TRÌNH BỘ MƠN KỸ THUẬT ĐIỆN VÀ TỰ ĐỘNG HÓA BÁO CÁO KHÓA LUẬN TỐT NGHIỆP Tên đề tài: Thiết kế, chế tạo Robot tự hành mini có kết nối điện thoại Giáo viên hướng dẫn : TS Đinh Hải Lĩnh Sinh viên thực : Đặng Khương Duy MSV : 1951081052 Lớp : 64 – CNCĐT Khóa : 2019 - 2023 HÀ NỢI – NĂM 2023 LỜI MỞ ĐẦU Lý chọn đề tài Cùng với phát triển nhanh chóng lĩnh vực Khoa học – Kỹ thuật, robot ngày trở nên phổ biến trong đời sống người Nhờ có phát triển cơng nghệ chế tạo robot, người ngày thay máy móc nhiều cơng việc khác như: tham gia dây chuyền sản xuất, trị liệu y tế, thám hiểm môi trường khắc nghiệt, Xe tự hành (AGV – automated guided vehicle) xuất nhà máy từ đầu năm 1950, xe không người lái, sản xuất Barrett Electronics, Illinois, theo trường điện từ sợi dây đặt trần nhà máy nhúng sàn nhà máy Tuy nhiên, kể từ Amazon mua lại nhà sản xuất AGV Kiva Systems vào năm 2012 định ngừng bán sử dụng robot Kiva Amazon để cải thiện hậu cần họ, có gia tăng lợi ích ngành công nghiệp AGV Theo báo năm 2017 từ nhà phân tích Loup Ventures, thị trường AGV vào năm 2025, thị trường phụ phát triển nhanh toàn ngành công nghiệp robot, với tỷ lệ tăng trưởng hàng năm 35% thập kỷ 2015-2025 Những lợi ích robot vận chuyển (AGV) An toàn Giảm thiệt hại vận hành Giảm chi phí hoạt động Với lợi ích mục tiêu áp dụng kiến thức tìm hiểu từ công nghệ xe tự hành, em lựa chọn đề tài: “Thiết kế, chế tạo robot tự hành mini có kết nối điện thoại” Mục tiêu nghiên cứu đề tài Mục tiêu đề tài nghiên cứu chế tạo mơ hình Robot vận chuyển với nhiệm vụ Robot vận chuyển hàng vị trí khác khơng gian Đối tượng nghiên cứu Đối tượng: Mơ hình robot vận chuyển hàng hoá Phạm vi nghiên cứu Phạm vi: Nghiên cứu kỹ thuật thiết kế, xây dựng mơ hình; tích hợp kỹ thuật vốn kiến thức học để thiết kế mơ hình với tính thơng minh Phương pháp nghiên cứu Phân tích, kế thừa lý thuyết Chế tạo mơ hình Robot tự hành mini vận chuyển hàng hóa AGV thử nghiệm i Bố cục đề tài Đề tài bao gồm chương: Chương Tổng quan Robot AGV Chương Cơ sở lý thuyết Chương Thiết kế hệ thống điều khiển cho Robot AGV Chương Chế tạo thử nghiệm Hà Nội, ngày… tháng … năm…… Sinh viên thực hiện ii NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Họ tên sinh viên: Đặng Khương Duy Mã sinh viên: 1951081052 Lớp: 64 - CNCĐT Kết luận: Đồng ý/Khơng đồng ý cho sinh viên…………nộp báo cáo khóa luận tốt nghiệp Hà Nội, ngày…… tháng……năm…… GIÁO VIÊN HƯỚNG DẪN (Chữ ký, Họ tên) iii NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN Họ tên sinh viên: Đặng Khương Duy Mã sinh viên: 1951081052 Lớp: 64 - CNCĐT GIÁO VIÊN PHẢN BIỆN (Chữ ký, Họ tên) iv MỤC LỤC LỜI MỞ ĐẦU i MỤC LỤC .v DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT vi 1.1 Lịch sử phát triển 1.2 Cấu tạo Robot AGV .3 1.3 Một số loại Robot tự hành vận chuyển hàng hóa .4 CHƯƠNG CƠ SỞ LÝ THUYẾT 2.1 Mơ hình động học robot .8 2.1.1 Khái niệm 2.2 Bộ điều khiển PID 10 CHƯƠNG THIẾT KẾ HỆ THỐNG ĐIỀU KHIỂN CHO 14 ROBOT AGV 14 3.1 Yêu cầu thiết kế Robot AGV 14 3.2 Nguyên lý hoạt động chung Robot AGV 14 3.3 Sơ đồ khối hệ thống Robot AGV .15 b) Nguyên lý hoạt động cảm biến siêu âm HC-SR04: 21 3.4 Nguyên lý hoạt động lưu đồ thuật toán hệ thống điều khiển 26 3.5 Lập trình điều khiển cho Robot AGV 28 CHƯƠNG CHẾ TẠO VÀ THỬ NGHIỆM 32 4.1 Thi công phần cứng 32 4.4 Thử nghiệm chức hệ thống 44 KẾT LUẬN 47 v DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT STT Kí hiệu Chú thích Đơn vị q Ma trận vị trí 𝜃 Rad 𝜃 𝜃𝜃 , 𝜃𝜃 Góc robot so với phương ngang Vận tốc tuyến tính robot Vận tốc bánh phải, trái 𝜃 Vận tốc góc robot Rad/s R Bán kính bánh xe mm L mm 𝜃𝜃𝜃 𝜃𝜃 10 𝜃𝜃 Nửa khoảng cách bánh xe Động tịnh tiến thân xe Động quay bánh xe Vận tốc dài xe 11 𝜃𝜃𝜃 , 𝜃𝜃𝜃 m/s 12 𝜃𝜃𝜃 , 𝜃𝜃𝜃 Kg/𝜃2 m/s m/s J J m/s 13 𝜃𝜃 Vận tốc dài bánh phải, trái Momen quán tính bánh Khối lượng bánh xe 14 𝜃𝜃 Khối lượng thân xe Kg 15 𝜃𝜃𝜃 Momen động N.m 16 𝜃𝜃𝜃𝜃 N.m 17 u 18 19 𝜃𝜃𝜃𝜃 k Momen hao tổn trục Hệ số tổn thất trục động Momen ma sát lăn 20 Kg N.m g Hệ số ma sát bánh xe mặt đường Gia tốc trọng trường m/𝜃2 21 𝜃 Vận tốc góc bánh Rad/s 22 𝜃 Gia tốc góc bánh rad/𝜃2 23 a Gia tốc dài m/𝜃2 24 𝜃 𝜃, 𝜃 𝜃 m/s 25 t Vận tốc điểm đầu A, điểm cuối B Thời gian xe di chuyển 26 𝜃𝜃𝜃 Công suất động W vi s 27 ξ Ma trận vị trí robot 28 d Đường kính trục vít me mm 29 u Bước vít me mm 30 𝜃1, 𝜃2 mm 31 𝜃1, 𝜃2 32 x Đường kính bánh 1, Số bánh 1, Số mắt xích 33 AGV 34 SDV Automated Guided Vehicle Self Driving Vehicle vii CHƯƠNG TỔNG QUAN VỀ ROBOT AGV 1.1 Lịch sử phát triển Khái niệm Robot tự hành AVG khái niệm chung tất hệ thống có khả vận chuyển mà khơng cần người lái Trong công nghiệp Robot tự hành AGV hiểu xe chuyên chở tự động áp dụng lĩnh vực: Cung cấp, xếp linh kiện khu vực kho sản xuất Vận chuyển hàng trạm sản xuất Phân phối, cung ứng sản phẩm hệ thống kho hàng tự động hệ thống logictics Ứng dụng lĩnh vực đặc biệt bệnh viện, siêu thị, văn phịng Trong q trình phát triển Robot tự hành AGV chia thành thời kì phân biệt với thơng qua trình độ cơng nghệ phản hồi tương tác từ môi trường làm việc hệ thống Đây đánh giá giai đoạn phát triển thời kỳ khoa học, công nghệ giới: a) Thời kì Robot tự hành AGV Sáng chế Robot tự hành AGV ứng dụng công nghiệp Mỹ từ năm 1953, sau vài năm nước châu Âu Khoa học công nghệ phát triển, Robot tự hành tạo dẫn đường cách đơn giản cách sử dụng sensor thay cho cơng tắc hành trình Hình 1.1: Robot tự hành AGV giai đoạn đầu b) Thời kì thứ - Bùng nổ tự động hóa Kỷ nguyên thứ hai phát triển 20 năm năm 1970 kết thúc vào đầu năm 1990 Trong giai đoạn tương tác Robot tự hành AGV với môi trường làm việc bắt đầu thực tích hợp với hệ thống sản xuất Khả ứng dụng AGV tăng lên như: có khả đảo chiều, dỡ hàng, di chuyển dừng vị trí định trước Điều khiển, truyền tín hiệu sóng vơ tuyến tín hiệu hồng ngoại, dẫn đường day dẫn hướng vạch kẻ Lĩnh vực ứng dụng phố biến nhiều thời kỳ ngành công nghiệp sản xuất Ô tô, đặc biệt nhà máy sản xuất ô Đức, Robot tự hành AGV trở thành thành phần quan trọng dây chuyền sản xuất ô tô như: Trong lắp ráp ô tô, Robot tự hành AGV ứng dụng trạm lắp ráp di động Trong sản xuất linh kiện, Robot tự hành AGV mô đun liên kết máy móc sản xuất theo quy trình Các loại Robot tự hành AGV kéo, nâng dùng để cung cấp linh kiện dây chuyền sản xuất Trong công tác kho vận Robot tự hành AGV ứng dụng để vận hành phân phối sản phẩm Hình 1.2: Robot tự hành AGV hoạt động nhà máy sản xuất Ơ tơ c) Thời kì thứ 3- Công nghệ chứng minh Kỷ nguyên thứ ba kéo dài từ năm 1990 đến năm 2010, tiêu chuẩn cơng nghệ thiết lập Các Robot tự hành AGV trang bị loại cảm biến không tiếp xúc công nghệ nhận dạng hình ảnh xử lý tín hiệu vi xử lý truyền liệu thông qua hệ thống mạng WLAN Trong giai đoạn hệ thống dẫn đường day vạch kẻ không vai trò Ở thời kỳ Robot tự hành AGV có tính vượt trội thời kỳ thứ như: Tốc độ di chuyển cao vận chuyển, vận tải nhờ cải tiến công nghệ cảm biến Robot tự hành AGV có chi phí thấp hơn, hoạt động tin cậy Tích kiệm niệm lượng có khả tự nạp lượng Các Robot tự hành AGV trang bị máy tính cơng nghiệp để xử lý, kiểm sốt thiết bị tương tác với mơi trường làm việc cảm biến thông minh Truyền liệu chủ yếu qua WLAN d) Thời kì thứ Bùng nổ thách thức Kỷ nguyên thứ năm 2010 đến nay, thách thức chức đặt ra: //motor_run(255,-255); //quay phai QuayDauXeHuongPhai(); xacNhanVaoTram=1; } else if(arrDirTram[diemDen-1]==1 && xacNhanVaoTram==0 && flagHuongXe==0) //tram huong ben trai , huong xe tu duoi len { QuayDauXeHuongTrai(); xacNhanVaoTram=1; } if(arrDirTram[diemDen-1]==0 && xacNhanVaoTram==0 && flagHuongXe==1) //tram huong ben phai , huong xe tu tren xuong { QuayDauXeHuongTrai(); xacNhanVaoTram=1; } else if(arrDirTram[diemDen-1]==1 && xacNhanVaoTram==0 && flagHuongXe==1) //tram huong ben trai , huong xe tu tren xuong { QuayDauXeHuongPhai(); xacNhanVaoTram=1; } } else { //gui so tram qua esp32 DynamicJsonDocument doc(200); doc["idUart"]=0; doc["tramDangDung"]=tramDangDung; serializeJson(doc, mySerial); mySerial.println(); } //mySerial.println("soTram:"+String(tram)); //Serial.println("tramDangDung:"+String(tramDangDung)); // gui so tram len esp de esp truyen len app blynk } } else if(cheDoXe==1 && buttonXacNhanVC==0 && hieuChinhLineFirst==1) { motor_run(0,0); //dung xe } //nhan chuoi uart while (mySerial.available()) { // get the new byte: char inChar = (char)mySerial.read(); // add it to the inputString: inputString += inChar; // if the incoming character is a newline, set a flag so the main loop can // something about it: if (inChar == '\n') { stringComplete = true; } } //xu li str uart if (stringComplete) { //Serial.println(inputString); StaticJsonDocument doc; // Deserialize the JSON document DeserializationError error = deserializeJson(doc, inputString); int idCmd=doc["idCmd"]; if(idCmd==0) //che xe { cheDoXe=doc["cheDoXe"]; //Serial.println("che xe:"+String(cheDoXe)); } else if(idCmd==2) //toc xe { tocDoXe=doc["tocDoXe"]; //Serial.println("toc xe:"+String(tocDoXe)); } else if(idCmd==5) //reset all thong so { cheDoXe=1; tramDangDung=0; xacNhanVaoTram=0; xacNhanRaTram=0; xacNhanChuyenTram=0; hieuChinhLineFirst=0; buttonXacNhanVC=0; enableCBvatcan=0; //Serial.println("vi tri xe:"+String(tramDangDung)); } else if(idCmd==6) //xac nhan van chuyen che tu hanh { buttonXacNhanVC=doc["buttonXacNhanVC"]; if(buttonXacNhanVC==1) { digitalWrite(led1, LOW); //den sang diemDen=doc["diemDen"]; if(diemDen > tramDangDung) { flagHuongXe=0; //xe di tu duoi len tren } else if(diemDen < tramDangDung) { flagHuongXe=1; //xe di tu tren xuong duoi } } else { digitalWrite(led1, HIGH); } //Serial.println("button xac nhan VC:"+String(buttonXacNhanVC)); } else if(idCmd==7) //thong so x,y cua joystick che thu cong { x=doc["x"]; y=doc["y"]; if (y < maxRange && y > minRange && x < maxRange && x > minRange) // dừng xe { motor_run(0,0); //dung xe Serial.println("Dừng"); } else if (y >= maxRange && x >= minRange && x= maxRange && y >= minRange && y 10 BLYNK_WRITE(V4) { if(XacNhanThietLapTram==1) { diemDen = param.asInt(); if(diemDen>soTram) { diemDen = soTram; Blynk.virtualWrite(V4,diemDen); Blynk.notify("Vi tri den khong duoc vuot qua so tram!"); } } else { Blynk.virtualWrite(V4,1); Blynk.notify("Ban chua thiet lap cac tram"); } } //reset all thong so BLYNK_WRITE(V5) { int pinValue = param.asInt(); if(pinValue==1) { if(buttonXacNhanVC==0) { cheDoXe=1; tramDangDung=0; diemDen=1; XacNhanThietLapTram=0; hieuChinhLineFirst=0; lcd.clear(); lcd.setCursor(0,1); lcd.print(" Da Reset "); sprintf(str,"{\"idCmd\":5}\n"); uart_write_bytes(EX_UART_NUM, (const char*)str, String(str).length()); } else if(buttonXacNhanVC==1) { Blynk.notify("Xe dang di chuyen khong the thuc hien tac vu nay"); } } } //button xac nhan van chuyen hoac stop che tu hanh : la van chuyen , la stop BLYNK_WRITE(V6) { if(XacNhanThietLapTram==1) { if(hieuChinhLineFirst==1) { if (cheDoXe == 1) //che tu hanh { buttonXacNhanVC = param.asInt(); if(buttonXacNhanVC==1) //van chuyen { if(diemDen==tramDangDung) { Blynk.virtualWrite(V6,0); Blynk.notify("Xe dang dung o tram "+String(tramDangDung)); } else { sprintf(str,"{\"idCmd\":6,\"diemDen\":%d,\"buttonXacNhanVC\":%d}\n",diemDen,buttonXacNha nVC); uart_write_bytes(EX_UART_NUM, (const char*)str, String(str).length()); lcd.setCursor(0,0); sprintf(str,"To:%d,",diemDen); lcd.print(str); led1.on(); } } else { sprintf(str,"{\"idCmd\":6,\"buttonXacNhanVC\":%d}\n",buttonXacNhanVC); uart_write_bytes(EX_UART_NUM, (const char*)str, String(str).length()); lcd.setCursor(0,0); lcd.print("Stop, "); led1.off(); } } else { Blynk.virtualWrite(V6,0); Blynk.notify("Xe dang o che THU CONG"); } } else { Blynk.virtualWrite(V6,0); Blynk.notify("Ban chua hieu chinh line"); } } else { Blynk.virtualWrite(V6,0); Blynk.notify("Ban chua thiet lap cac tram"); } } //joystick che thu cong BLYNK_WRITE(V7) { if (cheDoXe == 2) //che thu cong { int x = param[0].asInt(); int y = param[1].asInt(); sprintf(str,"{\"idCmd\":7,\"x\":%d,\"y\":%d}\n",x,y); uart_write_bytes(EX_UART_NUM, (const char*)str, String(str).length()); //Serial.println(String(x) + ":" + String(y)); } else { Blynk.notify("Xe dang o che TU HANH"); } } //hieu chinh line : la hieu chinh BLYNK_WRITE(V8) { int hieuChinhLine = param.asInt(); if(hieuChinhLine==1 && buttonXacNhanVC==0) { hieuChinhLineFirst=1; sprintf(str,"{\"idCmd\":8,\"hieuChinhLine\":%d}\n",hieuChinhLine); uart_write_bytes(EX_UART_NUM, (const char*)str, String(str).length()); lcd.setCursor(0,1); lcd.print(" Line Editing "); led1.on(); } else if(hieuChinhLine==1 && buttonXacNhanVC==1) { Blynk.notify("Xe dang di chuyen khong the hieu chinh line"); } } //thiet lap so tram tu blynk BLYNK_WRITE(V9) { soTram = param.asInt(); //Serial.println("so tram:" + String(soTram)); } //thiet lap tung tram tu 1->10 BLYNK_WRITE(V10) { arrDirTram[0] = param.asInt(); } BLYNK_WRITE(V11) { arrDirTram[1] = param.asInt(); } BLYNK_WRITE(V12) { arrDirTram[2] = param.asInt(); } BLYNK_WRITE(V13) { arrDirTram[3] = param.asInt(); } BLYNK_WRITE(V14) { arrDirTram[4] = param.asInt(); } BLYNK_WRITE(V15) { arrDirTram[5] = param.asInt(); } BLYNK_WRITE(V16) { arrDirTram[6] = param.asInt(); } BLYNK_WRITE(V17) { arrDirTram[7] = param.asInt(); } BLYNK_WRITE(V18) { arrDirTram[8] = param.asInt(); } BLYNK_WRITE(V19) { arrDirTram[9] = param.asInt(); } //xac nhan thiet lap cac tram BLYNK_WRITE(V20) { int buttonXacNhanThietLapTram = param.asInt(); if(buttonXacNhanThietLapTram==1) { XacNhanThietLapTram=1; //xac nhan da thiet lap cac tram sprintf(str,"{\"idCmd\":20,\"soTram\":%d,\"tram1\":%d,\"tram2\":%d,\"tram3\":%d,\"tram4\":%d,\" tram5\":%d,\"tram6\":%d,\"tram7\":%d,\"tram8\":%d,\"tram9\":%d,\"tram10\":%d}\n",soTram,arr DirTram[0],arrDirTram[1],arrDirTram[2],arrDirTram[3],arrDirTram[4],arrDirTram[5],arrDirTram [6],arrDirTram[7],arrDirTram[8],arrDirTram[9]); uart_write_bytes(EX_UART_NUM, (const char*)str, String(str).length()); } } //xac nhan bat cam bien vat can hay khong BLYNK_WRITE(V22) { int pinValue = param.asInt(); if(buttonXacNhanVC==0) { sprintf(str,"{\"idCmd\":22,\"enableCBvatcan\":%d}\n",pinValue); uart_write_bytes(EX_UART_NUM, (const char*)str, String(str).length()); } else if(buttonXacNhanVC==1) { Blynk.virtualWrite(V22,(pinValue==1)?0:1); Blynk.notify("Xe dang di chuyen khong the thuc hien tac vu nay"); } } Hàm Main: void loop() { if(flagCheDoDieuKhien==1) //web { ws.cleanupClients(); if(flagConnectWeb==1) //web da connected { lcd.clear(); lcd.setCursor(6,0); sprintf(str," Mode:%s ",(cheDoXe==1)?"AUTO":"EDIT"); lcd.print(str); lcd.setCursor(0,1); lcd.print(" CONNECTED "); flagConnectWeb=0; } while(flagLcdWeb==1) { DynamicJsonDocument doc(250); deserializeJson(doc, dataWeb); int idCmd=doc["idCmd"]; if(idCmd==0) //che xe { cheDoXe=doc["cheDoXe"]; lcd.setCursor(6,0); sprintf(str," Mode:%s ",(cheDoXe==1)?"AUTO":"EDIT"); lcd.print(str); //Serial.println("che xe:"+String(cheDoXe)); } else if(idCmd==5) //reset all thong so { lcd.clear(); lcd.setCursor(6,0); sprintf(str," Mode:%s ",(cheDoXe==1)?"AUTO":"EDIT"); lcd.print(str); lcd.setCursor(0,1); lcd.print(" Da Reset "); //Serial.println("vi tri xe:"+String(tramDangDung)); } else if(idCmd==6) //xac nhan van chuyen che tu hanh { buttonXacNhanVC=doc["buttonXacNhanVC"]; if(buttonXacNhanVC==1) { diemDen=doc["diemDen"]; lcd.setCursor(0,0); sprintf(str,"To:%d,",diemDen); lcd.print(str); } else { lcd.setCursor(0,0); lcd.print("Stop, "); //Serial.println("button xac nhan VC:"+String(buttonXacNhanVC)); } } else if(idCmd==8) //hieu chinh line { int hieuChinhLine=doc["hieuChinhLine"]; if(hieuChinhLine==1) { lcd.setCursor(0,1); lcd.print(" Line Editing "); //Serial.println("Hieu Chinh Line:"+String(hieuChinhLine)); } } dataWeb=""; flagLcdWeb=0; } } else //app { Blynk.run(); } while(flagUart==1) { DynamicJsonDocument doc(200); // Deserialize the JSON document deserializeJson(doc, (const char*)rxbuf); int idUart=doc["idUart"]; if(idUart==0) //gui vi tri hien tai cua xe { tramDangDung=doc["tramDangDung"]; lcd.setCursor(0,1); sprintf(str," Di Qua Tram %d ",tramDangDung); lcd.print(str); if(flagCheDoDieuKhien==1) //web { //ws.textAll( (tramDangDung