Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 88 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
88
Dung lượng
3,22 MB
Nội dung
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á KHOA ĐIỆN – ĐIỆN TỬ BÁO CÁO ĐỒ ÁN TỐT NGHIỆP ĐỀ TÀI: NGHIÊN CỨU, THIẾT KẾ, CHẾ TẠO MƠ HÌNH ROBOT TỰ HÀNH PHUN KHỬ KHUẨN Giảng viên hướng dẫn : Th.S Nguyễn Hữu Nguyện Sinh viên thực : Lê Tiểu Niên Ngày sinh : 16/09/2000 Mã sinh viên : 187510303161 Lớp : DCTĐH9.10 Ngành : CNKT Điều khiển – Tự động hóa Khoa : Điện – Điện tử Khóa : Bắc Ninh, năm 2022 TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á KHOA ĐIỆN – ĐIỆN TỬ Lê Tiểu Niên TÊN ĐỀ TÀI: NGHIÊN CỨU, THIẾT KẾ, CHẾ TẠO MƠ HÌNH ROBOT TỰ HÀNH PHUN KHỬ KHUẨN Giáo viên hướng dẫn: Th.S Nguyễn Hữu Nguyện Bắc Ninh, năm 2022 LỜI CAM ĐOAN Em xin cam đoan đề tài: “NGHIÊN CỨU, THIẾT KẾ, CHẾ TẠO MƠ HÌNH ROBOT TỰ HÀNH PHUN KHỬ KHUẨN” tiến hành cách minh bạch, công khai Mọi thứ dựa cố gắng nỗ lực thân với giúp đỡ không nhỏ từ thầy cô giảng viên Khoa Điện – Điện tử trường Đại học Công nghệ Đông Á Các số liệu kết nghiên cứu đưa đồ án trung thực không chép hay sử dụng kết đề tài nghiên cứu tương tự Nếu phát có chép kết nghiên cứu đề đề tài khác thân tơi xin chịu hồn tồn trách nhiệm Bắc Ninh, ngày tháng năm Sinh viên thực Lê Tiểu Niên LỜI CẢM ƠN Trong thời gian làm đồ án tốt nghiệp, em nhận nhiều giúp đỡ, đóng góp ý kiến bảo nhiệt tình thầy cơ, gia đình bạn bè Em xin gửi lời cảm ơn chân thành đến thầy Nguyễn Hữu Nguyện giảng viên khoa Điện - Điện tử trường Đại Học Cơng Nghệ Đơng Á người tận tình hướng dẫn, bảo em suốt q trình làm khố luận Em xin chân thành cảm ơn thầy cô giảng viên trường Đại Học Công Nghệ Đông Á nói chung, thầy giang viên mơn kĩ thuật nói riêng giảng, dạy cho em kiến thức môn đại cương môn chuyên ngành, giúp em có sở lý thuyết vững vàng tạo điều kiện giúp đỡ em suốt trình học tập Cuối cùng, em xin chân thành cảm ơn gia đình bạn bè ln tạo điều kiện, quan tâm, giúp đỡ, động viên em suốt q trình học tập hồn thành đồ án tốt nghiệp Với điều kiện thời gian kinh nghiệm hạn chế sinh viên, đồ án khơng thể tránh thiếu sót Em mong nhận dạy, đóng góp ý kiến thầy để tơi có điều kiện bổ sung, nâng cao ý thức mình, phục vụ tốt công tác thực tế sau Bắc Ninh, ngày tháng năm Sinh viên thực Lê Tiểu Niên i MỤC LỤC MỤC LỤC i DANH MỤC HÌNH ẢNH iv DANH MỤC BẢNG BIỂU vi DANH MỤC TỪ VIẾT TẮT vii MỞ ĐẦU TỔNG QUAN TÌNH HÌNH NGHIÊN CỨU LÝ DO LỰA CHỌN ĐỀ TÀI MỤC TIÊU, NỘI DUNG, PHƯƠNG PHÁP NGHIÊN CỨU CỦA ĐỀ TÀI KẾT QUẢ NGHIÊN CỨU VÀ THẢO LUẬN CHƯƠNG 1: TỔNG QUAN 1.1 Tổng quan robot 1.1.1 Giới thiệu 1.1.2 Lịch sử phát triển .5 1.2 Phân loại robot tự hành 1.2.1 Robot tự hành di chuyển chân (legged robot) 1.2.2 Robot tự hành di chuyển bánh (Wheel Robot tự hành) 10 1.3 Một số dạng điều khiển 11 1.3.1 Điều khiển từ xa .11 1.3.2 Thực thi theo lộ trình .12 1.3.3 Ngẫu nhiên hoạt động độc lập 12 1.4 Ứng dụng robot tự hành 13 1.5 Hoạt động Robot tự hành phun khử khuẩn 13 1.5.1 Nguyên lý hoạt động Robot tự hành phun khử khuẩn 13 1.5.2 Điều khiển từ xa .15 1.5.3 Điều khiển tự động dò đường 15 1.6 Ưu điểm, nhược điểm Robot tự hành phun khử khuẩn 15 1.6.1 Ưu điểm 15 1.6.2 Nhược điểm 16 KẾT LUẬN CHƯƠNG .16 ii CHƯƠNG 2: THIẾT KẾ VÀ LỰA CHỌN PHƯƠNG PHÁP ĐIỀU KHIỂN ROBOT TỰ HÀNH PHUN KHỬ KHUẨN 17 2.1 Sơ lược phần mềm thiết kế .17 2.2 Thiết kế khí 18 2.2.1 Khung khí 18 2.2.2 Bánh xe đa hướng 19 2.2.3 Cầu động 20 2.2.4 Một số chi tiết khác 22 2.3 Hệ thống điện 23 2.3.1 Thiết bị điện 23 2.3.2 Thiết bị điều khiển 27 2.4 Sơ đồ khối hệ thống 35 2.4.1 Sơ đồ cấu trúc .35 2.4.2 Sơ đồ khối hệ thống .36 2.5 Phương pháp điều khiển 37 2.5.1 Phương pháp điều khiển dẫn đường( dò line) 37 2.5.2 Phương pháp điều khiển từ xa thông qua bluetooth 39 2.6 PID 40 2.6.1 Giới thiệu PID 40 2.6.2 Hàm truyền .41 2.6.3 Đặc tính điều khiển PID 41 2.6.4 Tìm hệ số cho điều khiển PID 42 KẾT LUẬN CHƯƠNG .54 CHƯƠNG 3: THỰC NGHIỆM ĐÁNH GIÁ KẾT QUẢ 55 3.1 Lưu đồ thuật toán điều khiển 55 3.2 Kết đạt 57 3.2.2 Về mặt lý thuyết .58 3.2.3 Về mặt thực nghiệm .58 3.3 Hạn chế 58 3.4 Hướng phát triển 58 KẾT LUẬN VÀ KIẾN NGHỊ 59 iii TÀI LIỆU THAM KHẢO 60 PHỤ LỤC PHỤ LỤC iv DANH MỤC HÌNH ẢNH Hình 1.1: Robot SDR-4X, chế tạo năm 2003 hãng Sony .9 Hình 1.2: Robot ASIMO hãng Honda 10 Hình 1.3: Robot chân .10 Hình 1.4: Military-Robot iRobot’s PackBot 12 Hình 1.5: Robot hút bụi Rooma Robot cắt cỏ Friendly 12 Hình 1.6: Robot Sojourner .13 Hình 1.7: Nguyên lý hoạt động robot 14 Hình 2.1: Khung khí robot 18 Hình 2.2: Nhơm định hình .19 Hình 2.3: Bánh xe Onmi 20 Hình 2.4: Cầu động robot 20 Hình 2.5: Gối đỡ vịng bi trục đứng 21 Hình 2.6: Trục inox 21 Hình 2.7: Gá đỡ động 22 Hình 2.8: Khớp nối bánh xe omni 22 Hình 2.9: Bulong trượt nhơm định hình .23 Hình 2.10: Động planet .24 Hình 2.11: Động phun sương 24 Hình 2.12: Đầu phun sương .25 Hình 2.13: Động khơng chổi than gắn cánh quạt 26 Hình 2.14: Ác quy 12VDC 7.5Ah 26 Hình 2.15: Pin samsung 18650 27 Hình 2.16: Sơ đồ linh kiện Arduino Mega 28 Hình 2.17: Sơ đồ chân mạch điều khiển Arduino Mega 29 Hình 2.18: Mạch driver smart PID 30 Hình 2.19: Remote điều khiển PS2 khơng dây 31 Hình 2.20: Các nút nhấn, stick tay PS2 .31 Hình 2.21: Jack kết nối PS2 đến thiết bị khác 31 Hình 2.22: Cảm biến dị line mắt 33 Hình 2.23: Sơ đồ kết nối Arduino Mega 2560 cảm biến led 34 v Hình 2.24: Sơ đồ cấu trúc hệ thống 35 Hình 2.25: Sơ đồ khối Robot 36 Hình 2.26: Đường dẫn màu đen trắng .37 Hình 2.27: Đường dẫn từ cảm biến từ 38 Hình 2.28: Nguyên lý dẫn đường cảm ứng điện .38 Hình 2.29: Sơ đồ khối hệ thống 41 Hình 2.30: Đồ thị xác định hàm truyền cho hệ thống 45 Hình 2.31: Sơ đồ khối điều khiển PID 46 Hình 3.1: Lưu đồ thuật tốn điều khiển hệ thống 55 Hình 3.2: Hình Mơ hình Robot thực tế 57 vi DANH MỤC BẢNG BIỂU Bảng 2.1 : Thông số kỹ thuật bánh xe omni 19 Bảng 2.2 : Thơng số kỹ thuật gối đỡ vịng bi trục đứng 21 Bảng 2.3 : Thông số kỹ thuật tay cầm PS2 30 Bảng 2.4 : Thông số kỹ thuật cảm biến dò line led 33 analogWrite(pwm4,255-tocDo); digitalWrite(dir4,HIGH); } void luitrai(int tocDo) { analogWrite(pwm1,255); analogWrite(pwm2,255-tocDo); digitalWrite(dir2,LOW); analogWrite(pwm3,255); analogWrite(pwm4,255-tocDo); digitalWrite(dir4,HIGH); } void tienphai(int tocDo) { analogWrite(pwm1,255); analogWrite(pwm2,255-tocDo); digitalWrite(dir2,HIGH); analogWrite(pwm3,255); analogWrite(pwm4,255-tocDo); digitalWrite(dir4,LOW); } void tientrai(int tocDo) { analogWrite(pwm1,255-tocDo); digitalWrite(dir1,HIGH); analogWrite(pwm2,255); analogWrite(pwm3,255-tocDo); digitalWrite(dir3,LOW); analogWrite(pwm4,255); } void luiphai(int tocDo) { analogWrite(pwm1,255-tocDo); digitalWrite(dir1,LOW); analogWrite(pwm2,255); analogWrite(pwm3,255-tocDo); digitalWrite(dir3,HIGH); analogWrite(pwm4,255); } void trai(int tocDo){ analogWrite(pwm1, 255-tocDo); digitalWrite(dir1, HIGH); analogWrite(pwm2, 255-tocDo); digitalWrite(dir2, LOW); analogWrite(pwm3, 255-tocDo); digitalWrite(dir3, LOW); analogWrite(pwm4, 255-tocDo); digitalWrite(dir4, HIGH); } void lui(int tocDo){ analogWrite(pwm1, 255-tocDo); digitalWrite(dir1, LOW); analogWrite(pwm2, 255-tocDo); digitalWrite(dir2, LOW); analogWrite(pwm3, 255-tocDo); digitalWrite(dir3, HIGH); analogWrite(pwm4, 255-tocDo); digitalWrite(dir4, HIGH); } void phai(int tocDo){ analogWrite(pwm1, 255-tocDo); digitalWrite(dir1, LOW); analogWrite(pwm2, 255-tocDo); digitalWrite(dir2, HIGH); analogWrite(pwm3, 255-tocDo); digitalWrite(dir3, HIGH); analogWrite(pwm4, 255-tocDo); digitalWrite(dir4, LOW); } void tien(int tocDo){ analogWrite(pwm1, 255-tocDo); digitalWrite(dir1, HIGH); analogWrite(pwm2, 255-tocDo); digitalWrite(dir2, HIGH); analogWrite(pwm3, 255-tocDo); digitalWrite(dir3, LOW); analogWrite(pwm4, 255-tocDo); digitalWrite(dir4, LOW); } void stopp1() { analogWrite(pwm1, 255); analogWrite(pwm2, 255); analogWrite(pwm3, 255); analogWrite(pwm4, 255); } void stopp2() { firstESC.writeMicroseconds(1100); analogWrite(pwm5, 255); analogWrite(pwm6, 255); } void dongco(int tocDo){ analogWrite(pwm5, 255-tocDo); digitalWrite(dir5, LOW); } void quat(int tocDo){ firstESC.writeMicroseconds(tocDo); } void bom(int tocDo){ analogWrite(pwm6, 255-tocDo); } int vt0 = 0b11111; int vt1 = 0b11011; int vt2 = 0b11001; int vt3 = 0b11000; int vt4 = 0b00011; int vt5 = 0b10011; int vt6 = 0b00000; int vt7 = 0b11101; int vt8 = 0b10111; void doLine(){ int t1,t2,t3,t4; t1 = digitalRead (A1);// có line =1 t2 = digitalRead (A2);// có line =1 t3 = digitalRead (A3);// có line =1 t4 = digitalRead (A4);// có line =1 t5 = digitalRead (A5);// có line =1 code = t1*16+ t2*8 +t3*4 + t4*2 + t5; Serial.print(t1);Serial.print(" "); Serial.print(t2);Serial.print(" "); Serial.print(t3);Serial.print(" "); Serial.print(t4);Serial.print(" "); Serial.print(t5);Serial.print(" Serial.println(code); if(code==vt0)tien(7); else if(code==vt1)tien(7); "); else if(code==vt2)phai(7); else if(code==vt3)phai(10); else if(code==vt4)trai(10); else if(code==vt5)trai(7); else if(code==vt6)stopp1(); else if(code==vt7)trai(7); else if(code==vt8)phai(7); } #include "tayps.h" void setup() { Serial.begin(9600); initPS(); pinMode(pwm1,OUTPUT); pinMode(dir1,OUTPUT); pinMode(pwm2,OUTPUT); pinMode(dir2,OUTPUT); pinMode(pwm3,OUTPUT); pinMode(pwm4,OUTPUT); pinMode(dir3,OUTPUT); pinMode(dir4,OUTPUT); pinMode(pwm5,OUTPUT); pinMode(dir5,OUTPUT); pinMode(pwm6,OUTPUT); pinMode(A1, INPUT);//Set chân cảm biến input pinMode(A2, INPUT);//Set chân cảm biến input pinMode(A3, INPUT);//Set chân cảm biến input pinMode(A4, INPUT);//Set chân cảm biến input pinMode(A5, INPUT);//Set chân cảm biến input firstESC.attach(3); stopp2(); stopp1(); } int isDoLine = 0; void loop(){ ps2(); if(Select)isDoLine = 0; if(Start)isDoLine = 1; if(isDoLine){ doLine(); if(tamgiac){ isBom = !isBom; while(tamgiac){ ps2(); } } if(isBom){ Serial.println("Bom chay"); bom(255); quat(1800); dongco(100); }else{ Serial.println("Bom tat"); stopp2(); } } else { thaoTac(); } } PHỤ LỤC #include //for v1.6 #define PS2_DAT 30 #define PS2_CMD 32 #define PS2_SEL 34 #define PS2_CLK 36 #define pressures false #define rumble false PS2X ps2x; int error = 0; byte type = 0; byte vibrate = 0; int up, down, left, right, tron, vuong, tamgiac, X, L1, L2, L3, R1, R2, R3, Start, Select; bool isBom = false; void initPS(){ while(1){ delay(300); //added delay to give wireless ps2 module some time to startup, before configuring it error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, pressures, rumble); if(error == 0){ Serial.print("Found Controller, configured successful "); Serial.print("pressures = "); if (pressures) Serial.println("true "); else Serial.println("false"); Serial.print("rumble = "); if (rumble) Serial.println("true)"); else Serial.println("false"); Serial.println("Try out all the buttons, X will vibrate the controller, faster as you press harder;"); Serial.println("holding L1 or R1 will print out the analog stick values."); Serial.println("Note: Go to www.billporter.info for updates and to report bugs."); } else if(error == 1) Serial.println("No controller found, check wiring, see readme.txt to enable debug visit www.billporter.info for troubleshooting tips"); else if(error == 2) Serial.println("Controller found but not accepting commands see readme.txt to enable debug Visit www.billporter.info for troubleshooting tips"); else if(error == 3) Serial.println("Controller refusing to enter Pressures mode, may not support it"); Serial.print(ps2x.Analog(1), HEX); type = ps2x.readType(); switch(type) { case 0: Serial.print("Unknown Controller type found "); break; case 1: Serial.print("DualShock Controller found "); break; case 2: Serial.print("GuitarHero Controller found "); break; case 3: Serial.print("Wireless Sony DualShock Controller found "); break; } if(type!=0)break; } } int tocdo; void ps2() { if(error == 1) //skip loop if no controller found return; if(type == 2){ //Guitar Hero Controller ps2x.read_gamepad(); //read controller if(ps2x.ButtonPressed(GREEN_FRET)) Serial.println("Green Fret Pressed"); if(ps2x.ButtonPressed(RED_FRET)) Serial.println("Red Fret Pressed"); if(ps2x.ButtonPressed(YELLOW_FRET)) Serial.println("Yellow Fret Pressed"); if(ps2x.ButtonPressed(BLUE_FRET)) Serial.println("Blue Fret Pressed"); if(ps2x.ButtonPressed(ORANGE_FRET)) Serial.println("Orange Fret Pressed"); if(ps2x.ButtonPressed(STAR_POWER)) Serial.println("Star Power Command"); if(ps2x.Button(UP_STRUM)) //will be TRUE as long as button is pressed Serial.println("Up Strum"); if(ps2x.Button(DOWN_STRUM)) Serial.println("DOWN Strum"); if(ps2x.Button(PSB_START)) //will be TRUE as long as button is pressed Serial.println("Start is being held"); if(ps2x.Button(PSB_SELECT)) Serial.println("Select is being held"); if(ps2x.Button(ORANGE_FRET)) { // print stick value IF TRUE Serial.print("Wammy Bar Position:"); Serial.println(ps2x.Analog(WHAMMY_BAR), DEC); } } else { //DualShock Controller ps2x.read_gamepad(false, vibrate); //read controller and set large motor to spin at 'vibrate' speed Select = ps2x.Button(PSB_SELECT); Start = ps2x.Button(PSB_START); up = ps2x.Button(PSB_PAD_UP); down left = ps2x.Button(PSB_PAD_DOWN); = ps2x.Button(PSB_PAD_LEFT); right = ps2x.Button(PSB_PAD_RIGHT); tron = ps2x.Button(PSB_CIRCLE); tamgiac = ps2x.Button(PSB_TRIANGLE); X = ps2x.Button(PSB_CROSS); vuong = ps2x.Button(PSB_SQUARE); L1 = ps2x.Button(PSB_L1); L2 = ps2x.Button(PSB_L2); L3 = ps2x.Button(PSB_L3); R1 = ps2x.Button(PSB_R1); R2 = ps2x.Button(PSB_R2); R3 = ps2x.Button(PSB_R3); } } void testTayPS(){ if(up){ Serial.println("UP"); } if(down){ Serial.println("down"); } if(left){ Serial.println("left"); } if(right){ Serial.println("right"); } if(tamgiac){ Serial.println("tam giac"); } } void thaoTac(){ if(up && !left && !right && !L2 && !R2)tien(11); if(down && !left && !right && !L2 && !R2)lui(11); if(up && left && !right && !L2 && !R2)tientrai(11); if(!up && left && !down && !L2 && !R2)trai(11); if(!up && right && !down && !L2 && !R2)phai(11); if(up && !left && right && !L2 && !R2)tienphai(11); if(down && left && !right && !L2 && !R2)luitrai(11); if(down && !left && right && !L2 && !R2)luiphai(11); if(!up && !down && !left && !right && !L2 && R2)xoayphai(11); if(!up && !down && !left && !right && L2 && !R2)xoaytrai(11); if(!up && !down && !left && !right && !L2 && !R2)stopp1(); // TANGTOC if(up && !left && !right && !L2 && !R2 && R1)tien(20); if(down && !left && !right && !L2 && !R2 && R1)lui(20); if(up && left && !right && !L2 && !R2 && R1)tientrai(20); if(!up && left && !down && !L2 && !R2 && R1)trai(20); if(!up && right && !down && !L2 && !R2 && R1)phai(20); if(up && !left && right && !L2 && !R2 && R1)tienphai(20); if(down && left && !right && !L2 && !R2 && R1)luitrai(20); if(down && !left && right && !L2 && !R2 && R1)luiphai(20); if(!up && !down && !left && !right && !L2 && R2 && R1)xoayphai(20); if(!up && !down && !left && !right && L2 && !R2 && R1)xoaytrai(20); if(!up && !down && !left && !right && !L2 && !R2 && !R1)stopp1(); if(tron){ doline(); } if(tamgiac){ isBom = !isBom; while(tamgiac){ ps2(); } } if(isBom){ Serial.println("Bom chay"); bom(255); quat(1500); dongco(100); }else{ Serial.println("Bom tat"); stopp2(); } } BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CƠNG NGHỆ ĐƠNG Á CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc BẢN GIẢI TRÌNH CHỈNH SỬA ĐỒ ÁN/KHĨA LUẬN TỐT NGHIỆP (Theo yêu cầu Hội đồng đánh giá) Tên đề tài: NGHIÊN CỨU, THIẾT KẾ, CHẾ TẠO MƠ HÌNH ROBOT TỰ HÀNH PHUN KHỬ KHUẨN Giảng viên hướng dẫn: Th.S Nguyễn Hữu Nguyện Họ tên sinh viên: Lê Tiểu Niên Ngày sinh: 16/09/2000 Mã sinh viên: 187510303161 Ngành: CNKT Điều khiển – Tự động hóa Lớp: DCTĐH9.10 Ngày bảo vệ: 20/12/2022 Căn theo yêu cầu biên họp Hội đồng đánh giá ĐA/KLTN Tôi xin giải trình ĐA/KLTN chỉnh sửa nội dung sau: - Phần phụ lục không cần đánh số trang - Mục 2.7 chương chuyển sang chương Bắc Ninh, ngày tháng năm… CHỦ TỊCH/THƯ KÝ HỘI ĐỒNG (Ký ghi rõ họ tên) GIẢNG VIÊN HƯỚNG DẪN (Ký ghi rõ họ tên) SINH VIÊN (Ký ghi rõ họ tên)