Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 64 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
64
Dung lượng
1,76 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á NGHIÊN CỨU KHOA HỌC SINH VIÊN NĂM HỌC 2021-2022 ĐỀ TÀI: NGHIÊN CỨU XE ROBOT TỰ HÀNH PHUN KHỬ KHUẨN Y TẾ CÓ ĐIỀU KHIỂN TỪ XA 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 Sinh viên Lớp : DCTĐH9.10 : Điện – Điện Tử Khoa Bắc Ninh, Tháng năm 2022 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ ĐÔNG Á NGHIÊN CỨU KHOA HỌC SINH VIÊN NĂM HỌC 2021-2022 ĐỀ TÀI: NGHIÊN CỨU XE ROBOT TỰ HÀNH PHUN KHỬ KHUẨN Y TẾ CÓ ĐIỀU KHIỂN TỪ XA Giảng viên hướng dẫn Sinh viên thực : Th.S Nguyễn Hữu Nguyện : Lê Tiểu Niên Ngày sinh : 16/09/2000 Mã sinh viên : 187510303161 Sinh viên Lớp : DCTĐH9.10 Khoa : Điện – Điện Tử Bắc Ninh, Tháng năm 2022 MỤC LỤC MỤC LỤC DANH MỤC HÌNH ẢNH DANH MỤC BẢNG BIỂU LỜI MỞ ĐẦU LỜI CẢM Ơ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: 1.2 Phân loại robot tự hành 11 1.2.1 Robot tự hành di chuyển chân (legged robot) 11 1.2.2 Robot tự hành di chuyển bánh (Wheel Robot tự hành) 13 1.3 Một số dạng điều khiển 14 1.3.1 Điều khiển từ xa tay 14 1.3.2 Thực thi theo lộ trình 15 1.3.3 Ngẫu nhiên hoạt động độc lập 15 1.4 Ứng dụng robot tự hành 16 1.5 Hoạt động robot tự hành phun khử khuẩn 16 1.5.1 Nguyên lý hoạt động robot tự hành phun khử khuẩn 16 1.5.2 Điều khiển tay từ xa 18 1.5.3 Điều khiển tự động dò đường 18 1.6 Ưu nhược điểm robot tự hành phun khử khuẩn 18 1.6.1 Ưu điểm 18 1.6.2 Nhược điểm 19 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 20 2.1 Sơ lược phần mềm thiết kế 20 2.2 Thiết kế khí 21 2.2.1 Khung khí 21 2.2.2 Bánh xe đa hướng 22 2.2.3 Cầu động 23 2.2.4 Một số chi tiết khác 25 2.3 Hệ thống điện 26 2.3.1 Thiết bị điện 26 2.3.2 Thiết bị điều khiển 29 2.4 Sơ đồ khối hệ thống 37 2.4.1 Sơ đồ cấu trúc 37 2.4.2 Sơ đồ khối hệ thống 38 2.5 Phương pháp điều khiển 39 2.5.1 Phương pháp điều khiển dẫn đường( dò line) 39 2.5.2 Phương pháp điều khiển từ xa thông qua bluetooth 41 CHƯƠNG 3: THỰC NGHIỆM ĐÁNH GIÁ KẾT QUẢ 43 3.1 Kết đạt được: 43 3.1.2 Về mặt lý thuyết: 44 3.1.3 Về mặt thực nghiệm: 44 3.2 Hạn chế: 44 3.3 Hướng phát triển: 44 TÀI LIỆU THAM KHẢO 45 PHỤ LỤC 46 PHỤ LỤC 55 DANH MỤC HÌNH ẢNH Hình 1.1: Robot SDR-4X, chế tạo năm 2003 hãng Sony 12 Hình 1.2: Robot ASIMO hãng Honda 13 Hình 1.3: Robot chân 13 Hình 1.4: Military-Robot iRobot’s PackBot 15 Hình 1.5: Robot hút bụi Rooma Robot cắt cỏ Friendly 15 Hình 1.6: Robot Sojourner 16 Hình 1.7: Nguyên lý hoạt động robot 17 Hình 2.1: Khung khí robot 21 Hình 2.2: Nhơm định hình 22 Hình 2.3: Bánh xe Onmi 23 Hình 2.4: Cầu động robot 23 Hình 2.5: Gối đỡ vòng bi trục đứng 24 Hình 2.6: Trục inox 25 Hình 2.7: Gá đỡ động 25 Hình 2.8: khớp nối bánh xe omni 26 Hình 2.9: Bulong trượt nhơm định hình 26 Hình 2.10: Động planet 27 Hình 2.11: Động phun sương 27 Hình 2.12: Đầu phun sương 28 Hình 2.13: Động khơng chổi than gắn cánh quạt 28 Hình 2.14: Ác quy 12V 7.5Ah 29 Hình 2.15: Pin SAMSUNG 18650 29 Hình 2.16: Sơ đồ linh kiện Arduino Mega 31 Hình 2.17: Sơ đồ chân mạch điều khiển Arduino Mega 32 Hình 2.18: Mạch driver smart PID 33 Hình 2.19: Remote điều khiển PS2 không dây 34 Hình 2.20: Các nút nhấn, stick tay PS2 34 Hình 2.21: Jack kết nối PS2 đến thiết bị khác 34 Hình 2.22: Cảm biến dò line mắt 36 Hình 2.23: Sơ đồ kết nối Arduino Mega 2560 cảm biến led 37 Hình 2.24: Sơ đồ cấu trúc hệ thống 37 Hình 2.25: Sơ đồ khối Robot 38 Hình 2.26: Đường dẫn màu đen trắng 39 Hình 2.27: Đường dẫn từ cảm biến từ 40 Hình 2.28: Nguyên lý dẫn đường cảm ứng điện 40 Hình 3.1: Mơ hình Robot thực tế 43 DANH MỤC BẢNG BIỂU Bảng 2.1 : Thông số kỹ thuật bánh xe omni 22 Bảng 2.2 : Thơng số kỹ thuật gối đỡ vịng bi trục đứng 24 Bảng 2.3 : Thông số kỹ thuật tay PS2 33 Bảng 2.4 : thơng số kỹ thuật cảm biến dị line led 36 LỜI MỞ ĐẦU Cùng với phát triển không ngừng ngành khoa học kỹ thuật, ngành công nghiệp phát triển nhanh chóng Việc áp dụng máy mọc đại vào sản xuất yêu cầu thiếu nhà máy nhằm tăng xuất, tăng chất lượng, giảm giá thành sản phẩm Song song với phát triển đó, cơng nghệ chế tạo Robot phát triển nhanh chóng đăc biệt nước phát triển nhằm đạp ứng nhu cầu sản xuất, sinh hoạt, quốc phịng… Robot thực cơng việc mà người khó thực chí khơng thực như: làm cơng việc địi hỏi xác cao, làm việc mơi trường nguy hiểm (như lò phản ứng hạt nhân, dò phá mìn tỏng qn sự), thám hiểm khơng gian vũ trụ… Trong họ Robot, không nhắc tới Robot với đặc thù riêng mà loại Robot khác khơng có Với khả di chuyển linh hoạt vùng hoạt động rộng, thu hút nhiều đầu tư nghiên cứu Robot phân chia thành nhiều loại theo cách vận hành (Robot di chuyển chân, bánh xe, xích…) Để góp phần vào phát triển khoa học kỹ thuật nước nhà, nhóm chúng e chọn Robot di chuyển đa hướng bánh xe omni với hệ thống điều khiển thơng qua điều khiển Từ Xa dị Line Từ suy nghĩ chúng em sử dụng kiến thực cịn hạn chế để nghiên cứu chế tạo Robot tự hành phạm vi đồ án tốt nghiệp, với ước muốn đóng góp vào cơng nghệ chế tạo Robot cú nước nhà thời gian tới LỜI CẢM ƠN Sau trình học tập rèn luyện nghiêm túc khoa Điều khiển- Tự động hóa với hướng dẫn đơn đốc tận tình thầy Nguyễn Hữu Nguyện chúng em hồn thành đồ án với đề tài Nghiên cứu, Thiết kế, Chế tạo mơ hình Robot Omni tự hành phun khử khuẩn Chúng em xin chân thành cảm ơn sâu sắc đến thầy Nguyễn Hữu Nguyện, thầy động viên giúp đỡ chúng em nhiều mặt tinh thần kiến thức để chúng em vượt qua ngày tháng khó khăn tìm tịi hiểu biết lĩnh vực để cuối hoàn thành đề tài Một lần xin gửi lời cảm ơn đến Thầy, chúc Thầy mạnh khỏe có tháng năm cơng tác tốt Thầy mong đợi Chúng em xin chân thành gửi lời cảm ơn sâu sắc đến Thầy Nguyễn Sơn Hải quý thầy khoa Điều khiển – Tự động hóa trường Đại học cơng nghệ đơng á, dìu dắt em, cho chúng em kiến thức chuyên ngành kinh nghiệm quý báu để với nỗ lực chúng em hoàn thành đồ án hôm Một lần chúng em xin chân thành cảm ơn đến tất quý thầy cô khoa ngành giúp đỡ em khóa học vừa qua Trân trọng! CHƯƠNG 1: TỔNG QUAN 1.1 Tổng quan robot 1.1.1 Giới thiệu Ngày nay, Robot học đạt thành tựu to lớn sản xuất công nghiệp Những cánh tay robot có khả làm việc với tốc độ cao, xác liên tục làm suất lao động tăng nhiều lần Chúng làm việc môi trường độc hại hàn, phun sơn, nhà máy hạt nhân, hay lắp ráp linh kiện điện tử tạo điện thoại, máy tính…một cơng việc địi hỏi tỉ mỉ, xác cao Tuy nhiên robot có hạn chế chung hạn chế không gian làm việc Không gian làm việc chúng bị giới hạn số bậc tự tay máy vị trí gắn chúng Ngược lại, Robot tự hành lại có khả hoạt động cách linh hoạt môi trường khác Robot tự hành loại robot có khả tự hoạt động, thực thi nhiệm vụ mà không cần can thiệp người Với cảm biến, chúng có khả nhận biết môi trường xung quanh Robot tự hành ngày có nhiều ý nghĩa ngành công nghiệp, thương mại, y tế, ứng dụng khoa học phục vụ đời sống người Với phát triển ngành Robot học, robot tự hành ngày có khả hoạt động môi trường khác nhau, tùy lĩnh vực áp dụng mà chúng có nhiều loại khác robot sơn, robot hàn, robot cắt cỏ, robot thám hiểm đại dương, robot làm việc vũ trụ 1.1.2 Lịch sử phát triển: Hình dạng Robot xuất nước Hoa Kỳ, loại tay máy chép hình dung phịng thí nghiệm vật liệu phóng xạ vào năm 50 kỷ trước, bên cạnh loại tay máy chép hình khí, loại tay máy chép hình thủy lực điện tử xuất Tuy nhiên tay máy thương mại có chung nhược điểm thiếu di động, tay máy hoạt động hạn chế quanh vị trí Ngược lại, Robot tự hành loại Robot di động di chuyển từ không gian đến không gian khác cách độc lập hay điều khiển từ xa, tạo khơng gian hoạt động lớn Từ năm 1939 đến năm 1945: chiến đấu tranh lần thứ II, Robot di động xuất Nó kết thành tựu cơng nghệ lính vực nghiên cứu có liên quan khoa học máy tính điều khiển học, analogWrite(pwm3,255-tocDo); digitalWrite(dir3,HIGH); 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) { 48 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); 49 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); 50 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(" "); 51 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 52 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(); } 53 } else { thaoTac(); } } 54 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 = "); 55 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 "); 56 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; 57 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"); 58 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 down = ps2x.Button(PSB_PAD_UP); = ps2x.Button(PSB_PAD_DOWN); left = 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); 59 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); 60 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; 61 while(tamgiac){ ps2(); } } if(isBom){ Serial.println("Bom chay"); bom(255); quat(1500); dongco(100); }else{ Serial.println("Bom tat"); stopp2(); } } 62