Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 66 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
66
Dung lượng
2,52 MB
Nội dung
ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CƠ KHÍ ĐỒ ÁN TỐT NGHIỆP NGÀNH: CƠ ĐIỆN TỬ CHUYÊN NGÀNH: CƠ ĐIỆN TỬ ĐỀ TÀI: C C THIẾT KẾ VÀ CHẾ TẠO ROBOT SCARA R L T PHÂN LOẠI BÁNH RĂNG U D Người hướng dẫn: Người duyệt: Sinh viên thực hiện: Lớp: TS ĐẶNG PHƯỚC VINH PGS TS TRẦN XUÂN TÙY ĐẶNG CÔNG ANH KHOA NGUYỄN TUẤN TÚ 14CDT2 Đà Nẵng, 6/2019 ` TÓM TẮT ĐỒ ÁN ĐỀ TÀI: THIẾT KẾ VÀ CHẾ TẠO ROBOT SCARA PHÂN LOẠI BÁNH RĂNG Họ tên SV : Đặng Công Anh Khoa Mã SV : 101140186 Lớp : 14CDT2 Họ tên SV : Nguyễn Tuấn Tú Mã SV : 101140206 Lớp : 14CDT2 GV hướng dẫn : TS Đặng Phước Vinh Nội dung làm bao gồm vấn đề sau: Nhu cầu thực tế đề tài C C Đồ án tốt nghiệp học phần bắt buộc sinh viên ngành Cơ điện R L T tử nói riêng sinh viên khối ngành kĩ thuật nói chung Để thiết kế thành công cấu, cụm chi tiết máy hay máy hồn chỉnh địi hỏi sinh viên phải có hiểu biết nắm kiến thức lĩnh vực khí điện tử Đây điều U D kiện thuận lợi cho tác giả để ứng dụng kiến thức học vào thực tế Cơng nghiệp ngày xác nhanh chóng để đáp ứng xu đại hóa Các ngành ngành cơng nghiệp đóng gói, dược phẩm lĩnh vực điện, điện tử nghành đỏi hỏi xác cao kiểm tra đầu để thay người việc kiểm tra thành phẩm với tốc độ nhanh độ sác cao Trong q trình sản xuất bánh không tránh khỏi xuất bánh không đạt chất lượng (gãy răng, mẻ răng, thiếu răng) mà lỗi người cơng nhân khó phát kịp thời dây chuyền tự động Vì vậy, nhóm chọn đề tài “Thiết kế chế tạo robot SCARA phân loại bánh răng” để giải vấn đề i Phạm vi nghiên cứu đề tài: Trong đề tài nhóm thiết kế hệ thống băng tải sản phẩm, robot SCARA nghiên cứu ứng dụng xử lý ảnh để phân loại bánh - Tình tốn thiết kế cánh tay robot SCARA - Tính tốn thiết kế hệ truyền động băng tải - Xử lý ảnh - Thiết kế, thi công mơ hình Nội dung đề tài thực : - Một báo cáo thuyết minh - vẽ A0 - Một mơ hình C C Kết đạt được: R L T Phần lý thuyết tìm hiểu: - Tổng quan quy trình sản xuất phân loại bánh - Nguyên lý thiết kế băng tải - Thiết kế cánh tay robot SCARA - Phần mềm xử lý ảnh ứng dụng xử lí ảnh U D Đã lựa chọn thiết kế phần: - Lựa chọn đưa phương án tối ưu để thiết kế băng tải - Lựa chọn đưa phương án tối ưu để thiết kế cánh tay robot - Thiết kế phận chống nhiễu cho hệ thống xử lý ảnh Thiết kế mơ hình tổng thể ii ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CƠ KHÍ CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự - Hạnh phúc NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: ĐẶNG CÔNG ANH KHOA NGUYỄN TUẤN TÚ Lớp: 14CDT2 Khoa: Cơ khí MSSV: 101140186 MSSV: 101140206 Ngành: Kỹ thuật Cơ Điện Tử Tên đề tài đồ án: Thiết kế chế tạo robot SCARA phân loại bánh Đề tài thuộc diện: ☐ Có ký kết thỏa thuận sở hữu trí tuệ kết thực Các số liệu liệu ban đầu: …………………………………… …………………………………………… …… ………………………………………………………………………………………… Nội dung phần thuyết minh tính tốn: Chương 1: Giới thiệu đề tài Chương 2: Thiết kế hệ thống khí Chương 3: Thiết kế hệ thống điều khiển Chương 4: Ứng dụng xử lý ảnh Chương 5: Đánh giá kết C C R L T U D Các vẽ, đồ thị: Bản vẽ lắp tổng thể - A0 Bản vẽ sơ đồ động – A0 Bản vẽ lắp cụm khâu – A0 Bản vẽ lưu đồ thuật toán – A0 Bản vẽ sơ đồ mạch điện – A0 Họ tên người hướng dẫn: TS Đặng Phước Vinh Ngày giao nhiệm vụ đồ án: 01/02/2019 Ngày hoàn thành đồ án: 01/06/2019 Đà Nẵng, ngày 01 tháng 06 năm 2019 Trưởng Bộ môn Người hướng dẫn TS Đặng Phước Vinh iii LỜI NĨI ĐẦU Trong thời kỳ khoa học cơng nghệ chiếm vị trí quan trọng để hòa nhập với kinh tế giới ngành công nghiệp Việt Nam thay đổi cách nhanh chóng Cơng nghệ thiết bị đại dần thay thiết bị cũ kỹ, công nghệ ngày ứng dụng rộng rãi sở sản xuất để tạo dây chuyền bán tự động, tự động để nâng cao xuất, nâng cáo chất lượng sản phẩm Các dây chuyền tự động robot áp dụng vào ngành ngành công nghiệp để thay người công việc việc với tốc độ nhanh độ sác cao Với đồ án tốt nghiệp chuyên ngành điện tử, nhóm chọn đề tài là: “Thiết kế C C chế tạo robot SCARA phân loại bánh răng” Trong trình sản xuất bánh R L T không tránh khỏi xuất bánh không đạt chất lượng (gãy răng, mẻ răng, thiếu răng) mà lỗi người cơng nhân khó phát kịp thời U D dây chuyền tự động Vì vậy, nhóm dùng xử lý ảnh để tối ưu hóa điều Mặc dù hướng dẫn nhiệt tình thầy Đặng Phước Vinh, cơng nghệ cịn hạn chế, kinh nghiệm thiết kế chưa trau dồi nhiều, tài liệu phục vụ cho công việc thiết kế cịn q nên khơng tránh khỏi sai sót Sau thời gian tháng làm đề tài nổ lực nhóm hướng dẫn thầy Đặng Phước Vinh, thầy cô giáo giúp đỡ bạn sinh viên khác khoa nhóm hồn thành xong đồ án thời gian quy định Một lần cho phép nhóm gửi đến q thầy bạn lòng biết ơn sâu sắc Tác giả xin chân thành cảm ơn! Đà Nẵng, ngày 01 tháng 06 năm 2019 Sinh viên thực Đặng Công Anh Khoa Nguyễn Tuấn Tú iv CAM ĐOAN Kính gửi: - Trường Đại học Bách khoa Đà Nẵng - Khoa Cơ Khí Tơi tên là: ĐẶNG CƠNG ANH KHOA NGUYỄN TUẤN TÚ Lớp: 14CDT2 Khoa: Cơ Khí Đề tài: Thiết kế chế tạo robot SCARA phân loại bánh Tác giả xin cam đoan nội dung đồ án chép đồ án hay cơng trình có trước Mọi giúp đỡ cho việc thực đồ án C C cảm ơn, thơng tin trích dẫn đồ án ghi nguồn gốc rõ ràng phép R L T công bố U D Sinh viên thực hiện: Đặng Công Anh Khoa Nguyễn Tuấn Tú vi MỤC LỤC Tóm tắt Nhiệm vụ đồ án Lời nói đầu Cam đoan Mục lục Danh mục hình vẽ Danh sách ký hiệu, chữ viết tắt Mở đầu CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI C C 1.1 Đặt vấn đề 1.2 Các dạng hỏng bánh 1.3 Giải pháp đề đánh giá 1.4 Ý tưởng thiết kế robot cho hệ thống phân loại bánh R L T U D CHƯƠNG 2: THIẾT KẾ HỆ THỐNG CƠ KHÍ .8 2.1 Thiết kế băng tải .8 2.1.1 Phương án thiết kế 2.1.2 Phương án truyền động 2.1.3 Tính tốn thiết kế băng tải .8 2.2 Thiết kế robot SCARA 11 2.2.1 Giới thiệu robot SCARA 11 2.2.3 Động học Robot SCARA .16 CHƯƠNG : THIẾT KẾ HỆ THỐNG ĐIỀU KHIỂN 21 3.1 Sơ đồ hệ thống điện 21 3.1.1 Sơ đồ hệ thống chiếu sáng 21 3.1.2 Sơ đồ kết nới hệ thớng xử lý tín hiệu Camera 22 3.2 Giới thiệu phần tử hệ thống .23 3.2.1 Giới thiệu Arduino Mega .23 3.2.4 Một số phần tử khác mạch điện .27 3.2.4.1 Module hạ áp DC-DC LM2596 27 vii 3.2.4.3 Động RC Servo SG-90 28 CHƯƠNG 4: ỨNG DỤNG XỬ LÝ ẢNH 29 4.1 Tổng quan xử lý ảnh .29 4.1.1 Giới thiệu xử lý ảnh 29 4.1.2 Các công đoạn xử lý ảnh .29 4.1.3 Một số khái niệm xử lý ảnh 31 4.2 Ứng dụng vào đề tài 33 4.2.1 Quá trình xử lý ảnh .33 4.2.1.1 Lưu đồ thuật tốn hệ thớng 33 4.2.1.2 Lưu đồ thuật toán xử lý ảnh 35 CHƯƠNG 5: ĐÁNH GIÁ VÀ KẾT QUẢ 37 5.1 Đánh giá đề tài 37 5.2 Kết hướng phát triển đề tài 39 C C TÀI LIỆU THAM KHẢO 40 R L T PHỤ LỤC PHỤ LỤC U D PHỤ LỤC PHỤ LỤC viii DANH SÁCH CÁC BẢNG, HÌNH ẢNH Bảng 1: Bảng thơng số D-H Robot Scara 17 Bảng 1: Bảng giá trị chân vi điều khiển 24 Hình 1 Mơ hình hệ thống .3 Hình Robot có tọa độ Decac Hình Robot dạng tọa độ trụ Hình Robot dạng tọa độ cầu .5 Hình Robot dạng khớp nối Hình Robot có cấu trúc động học vịng kín Hình Biểu diễn băng tải vật thể Hình 2 Động chọn .10 Hình Hình ảnh 3D băng tải 11 Hình Robot SCARA cơng nghiệp 12 Hình Robot SCARA kỹ thuật tạo mẫu in 3D 13 Hình Robot SCARA siết chặt vít .13 Hình Robot SCARA lắp ráp vị trí ngược .14 Hình Robot SCARA gắp nhiều sản phẩm .14 Hình Robot SCARA xếp đĩa .15 Hình 10 Hình ảnh 3D robot .15 Hình 11 Robot Scara bậc tự 16 Hình 12 Đặt hệ quy chiếu theo phương pháp D-H 17 Hình 13 Tọa độ làm việc robot 20 C C R L T U D Hình Sơ đồ kết nối mạch điện 21 Hình Hệ thống chiếu sáng 22 Hình 3 Sơ đồ kết nối hệ thống xử lý tín hiệu Camera .22 Hình Sơ đồ chân bo mạch ARDUINO MEGA 2560 23 Hình Bộ điều khiển ramps 1.4 25 Hình Sơ đồ chân Driver A4988 26 Hình Module hạ áp DC-DC LM2596 .27 Hình Động Servo MG966R .27 Hình Động RC Servo SG-90 28 Hình Ảnh xám 32 Hình Ảnh nhị phân 32 Hình Ảnh màu 33 Hình 4 Lưu đồ thuật tốn hệ thống .34 Hình Lưu đồ thuật tốn xử lý ảnh 35 Hình Hình ảnh thực tế hệ thống 37 Hình Giao diện ứng dụng xử lý ảnh Windows 38 ix Hình Giao diện điều khiển robot bằng tay .38 C C R L T U D x Thiết kế chế tạo robot SCARA phân loại bánh procTimer.Interval = procTimerInterval; procTimer.Elapsed += procTimer_Tick; stopTimer.Interval = stopTimerInterval; stopTimer.Elapsed += stopTimer_Tick; delayTimer.Interval = delayTimerInterval; delayTimer.Elapsed += pushTimer_Tick; } private void procTimer_Tick(object sender, EventArgs e) { procTimer.Enabled = false; isFirst = true; } private void stopTimer_Tick(object sender, EventArgs e) { stopTimer.Enabled = false; myCmr.Retrieve(frame); using (Image capImg = frame.ToImage()) { Image preProcImg = gear0.PreProcess(capImg); //pictureBox1.Image = preProcImg.Bitmap; Image teethOnlyImg = gear0.ROIcutter(preProcImg, inDia); //ptbTeethOnly.Image = teethOnlyImg.Bitmap; int num = gear0.gTeethCounter(teethOnlyImg); C C R L T ptbInf.Image = gear0.shaftDetect(capImg).Bitmap; delayTimer.Enabled = true; } startConveyor(); } U D private void pushTimer_Tick(object sender, ElapsedEventArgs e) { delayTimer.Enabled = false; stopConveyor(); if (gear0.isGearGood() == false) { grabTheBadGear(); } else if (gear0.isGearGood() == true) { grabTheGoodGear(); } } #endregion #region COM ports Functions private void serialPortInit() { //String[] portsName = SerialPort.GetPortNames(); //cbbPortsName.Items.AddRange(portsName); //cbbPortsName2.Items.AddRange(portsName); //cbbPortsName.SelectedIndex = 0; //cbbPortsName2.SelectedIndex = 0; } Sinh viên thực hiện: Đặng Công Anh Khoa Nguyễn Tuấn Tú Hướng dẫn: TS Đặng Phước Vinh Thiết kế chế tạo robot SCARA phân loại bánh private void startConveyor() { if (mySerialPort1.IsOpen) { mySerialPort1.WriteLine("s"); } } private void stopConveyor() { if (mySerialPort1.IsOpen) { mySerialPort1.WriteLine("t"); } } //private void push() //{ // if (mySerialPort.IsOpen) // { // mySerialPort.WriteLine("Push"); // } //} C C #endregion #region All Camera Functions //Khởi tạo camera private void CameraInit() { myCmr = new Capture(0); // tạo camera ngồi myCmr.SetCaptureProperty(Emgu.CV.CvEnum.CapProp.FrameWidth, 800); // Kích thước khung hình myCmr.SetCaptureProperty(Emgu.CV.CvEnum.CapProp.FrameHeight, 600); // R L T U D if (isCameraOpen()) { myCmr.ImageGrabbed += ProcessFrame; } } // xử lý khung hình private void ProcessFrame(object sender, EventArgs e) { myCmr.Retrieve(frame); ptbCamera.Image = frame.Bitmap; using (Image capImg = frame.ToImage()) { Image preProcImg = gear0.PreProcess(capImg); if (isFirst == true && gear0.isGearFound(preProcImg)== true) //if (gear0.isGearFound(preProcImg) == true) { isFirst = false; stopConveyor(); procTimer.Enabled = true; stopTimer.Enabled = true; } } } //Kiểm tra camera mở Sinh viên thực hiện: Đặng Công Anh Khoa Nguyễn Tuấn Tú Hướng dẫn: TS Đặng Phước Vinh Thiết kế chế tạo robot SCARA phân loại bánh private bool isCameraOpen() { if (myCmr != null) { return true; } return false; } // mở camera private void OpenCamera() { if (isCameraOpen() == false) { CameraInit(); } // camera đóng if (isCameraOpen()) { myCmr.Start(); } } // đóng camera private void CloseCamera() { if (myCmr != null) { myCmr.Stop(); } } C C R L T #endregion U D #region All Form Functions // nút chạy băng tải // nút dừng băng tải // Khi mở form private void GearInspection_Load(object sender, EventArgs e) { OpenCamera(); try { //cbbPortsName.SelectedIndex = 1; //cbbPortsName2.SelectedIndex = 2; //mySerialPort.PortName = cbbPortsName.Text; //mySerialPort1.PortName = cbbPortsName2.Text; mySerialPort.PortName = "COM5"; mySerialPort1.PortName = "COM8"; mySerialPort.Open(); mySerialPort1.Open(); startConveyor(); //MessageBox.Show("Controller connected!", "INFORMATION", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch { MessageBox.Show("No SerialPorts found","WARNING",MessageBoxButtons.OK,MessageBoxIcon.Warning); } } Sinh viên thực hiện: Đặng Công Anh Khoa Nguyễn Tuấn Tú Hướng dẫn: TS Đặng Phước Vinh Thiết kế chế tạo robot SCARA phân loại bánh // đóng form private void GearInspection_FormClosed(object sender, FormClosedEventArgs e) { stopConveyor(); if (isCameraOpen()) { CloseCamera(); } if (mySerialPort.IsOpen) { mySerialPort.Close(); } } private void txtHome_Click(object sender, EventArgs e) { if (mySerialPort1.IsOpen) { mySerialPort1.WriteLine("home"); txtPostX.Text = "255"; txtPostY.Text = "0"; txtPostZ.Text = "142"; txtPostA.Text = "0"; txtPostTool.Text = "off"; } C C } R L T #endregion #region All Robot Functions private void grabTheBadGear() { mySerialPort.WriteLine(myScara.positionToString(255, to grab the gear Thread.Sleep(2500); mySerialPort.WriteLine(myScara.positionToString(150, move to badbox's position Thread.Sleep(4500); mySerialPort.WriteLine(myScara.positionToString(150, release the gripper Thread.Sleep(700); mySerialPort.WriteLine(myScara.positionToString(255, reset position Thread.Sleep(3500); startConveyor(); } U D private void grabTheGoodGear() { mySerialPort.WriteLine(myScara.positionToString(255, to grab the gear Thread.Sleep(2700); mySerialPort.WriteLine(myScara.positionToString(150, move to bad box position Thread.Sleep(3500); mySerialPort.WriteLine(myScara.positionToString(150, release the gripper Thread.Sleep(500); mySerialPort.WriteLine(myScara.positionToString(255, reset position Thread.Sleep(3500); startConveyor(); } Sinh viên thực hiện: Đặng Công Anh Khoa Nguyễn Tuấn Tú 0, 85, 0, "on")); // move 50, 142, 0, "on")); // 50, 95, 0, "off")); // 0, 142, 0, "off")); // 0, 85, 0, "on")); // move 150, 142, 0, "on")); // 150, 95, 0, "off")); // 0, 142, 0, "off")); Hướng dẫn: TS Đặng Phước Vinh // Thiết kế chế tạo robot SCARA phân loại bánh #endregion private void button1_Click(object sender, EventArgs e) { startConveyor(); } private void button2_Click(object sender, EventArgs e) { stopConveyor(); } private void button5_Click(object sender, EventArgs e) { try { double px = double.Parse(txtX.Text, CultureInfo.InvariantCulture); double py = double.Parse(txtY.Text, CultureInfo.InvariantCulture); double pz = double.Parse(txtZ.Text, CultureInfo.InvariantCulture); double alpha = double.Parse(txtA.Text, CultureInfo.InvariantCulture); string state = cbbToolState.Text; mySerialPort.WriteLine(myScara.positionToString(px, py, pz, alpha, state)); txtPostX.Text = px.ToString(); txtPostY.Text = py.ToString(); txtPostZ.Text = pz.ToString(); txtPostA.Text = alpha.ToString(); txtPostTool.Text = state.ToString(); } catch { MessageBox.Show("Error!"); } C C R L T U D } private void button4_Click(object sender, EventArgs e) { if (mySerialPort.IsOpen) { mySerialPort.WriteLine(myScara.positionToString(255, 0, 142, 0, "off")); // reset position txtPostX.Text = "255"; txtPostY.Text = "0"; txtPostZ.Text = "142"; txtPostA.Text = "0"; txtPostTool.Text = "off"; } } private void pictureBox2_Click(object sender, EventArgs e) { this.Close(); } } } Sinh viên thực hiện: Đặng Công Anh Khoa Nguyễn Tuấn Tú Hướng dẫn: TS Đặng Phước Vinh Thiết kế chế tạo robot SCARA phân loại bánh PHỤ LỤC *Code Class Gear using using using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Threading.Tasks; System.Windows.Forms; using using using using using Emgu; Emgu.CV; Emgu.CV.Structure; Emgu.CV.Util; Emgu.CV.Cvb; namespace _20_10_18_GearInspectionApp { class Gear { // thuộc tính private int gTeeth; private int bTeeth; private float shaftDiameter; C C R L T //public int areaarea; // thuộc tính camera float ratio = 0.0956F; U D //ratio = W/P Tỉ số xác định thực nghiệm //P: số pixel ảnh vật; W: Kích thước thực vật // // // // phương thức tiền xử lý public Image PreProcess(Image img0) { Image grayImg = img0.Convert().SmoothMedian(3); Image binImg = grayImg.ThresholdBinary(new Gray(70), new Gray(255)); return binImg; } // // // // Tìm biên, trả vector private VectorOfVectorOfPoint contoursFinder(Image binImg) { VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint(); Mat hierachy = new Mat(); CvInvoke.FindContours(binImg.Clone(), contours, hierachy, Emgu.CV.CvEnum.RetrType.Tree, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple); return contours; } // // // // Vẽ đường biên BR private Image drawExContour(Image inputImg) { VectorOfVectorOfPoint myContours = new VectorOfVectorOfPoint(); Sinh viên thực hiện: Đặng Công Anh Khoa Nguyễn Tuấn Tú Hướng dẫn: TS Đặng Phước Vinh Thiết kế chế tạo robot SCARA phân loại bánh Image exContourImg = inputImg.Clone(); myContours = this.contoursFinder(PreProcess(inputImg)); for (int i = 0; i < myContours.Size; i++) // lọc đường biên nhiễu { double area = CvInvoke.ContourArea(myContours[i]); if (area < 100000) { myContours[i].Clear(); } } CvInvoke.DrawContours(exContourImg, myContours, -1, new MCvScalar(0, 255, 255), 5); return exContourImg; } // // // // Lọc nhiễu, Cắt phần theo bán kính nhập vào, trả ảnh vùng ROI public Image ROIcutter(Image preProcImg, float inDia) { float radius = (inDia / 2) / ratio; VectorOfVectorOfPoint myContours = new VectorOfVectorOfPoint(); Image teethOnlyImg = new Image(preProcImg.Width, preProcImg.Height); myContours = contoursFinder(preProcImg); for (int i = 0; i < myContours.Size; i++) // lọc đường biên nhiễu { double area = CvInvoke.ContourArea(myContours[i]); if (area < 100000) { myContours[i].Clear(); } } CvInvoke.DrawContours(teethOnlyImg, myContours, -1, new MCvScalar(255, 255, 255), -1); // vẽ lại bánh đường biên BR C C R L T U D myContours = contoursFinder(teethOnlyImg); for (int i = 0; i < myContours.Size; i++) { CircleF minCircle = CvInvoke.MinEnclosingCircle(myContours[i]); PointF mCenterPoint = minCircle.Center; float mRadius = minCircle.Radius; CircleF fillCircle = new CircleF(mCenterPoint, radius + 4); // cắt lớn bán kính teethOnlyImg.Draw(fillCircle, new Gray(0), -1); Rectangle rect = new Rectangle((int)(mCenterPoint.X - mRadius), (int)(mCenterPoint.Y - mRadius), (int)(2 * mRadius), (int)(2 * mRadius)); teethOnlyImg.ROI = rect; } return teethOnlyImg; } // // // // phương thức tìm số phần BR cắt riêng lọc theo diện tích public int gTeethCounter(Image cutImg) { bTeeth = gTeeth = 0; CvBlobs blobs = new CvBlobs(); CvBlobDetector detector = new CvBlobDetector(); detector.Detect(cutImg, blobs); int aTeeth = blobs.Count; blobs.FilterByArea(1500, 3000); gTeeth = blobs.Count; bTeeth = aTeeth - gTeeth; return gTeeth; } Sinh viên thực hiện: Đặng Công Anh Khoa Nguyễn Tuấn Tú Hướng dẫn: TS Đặng Phước Vinh Thiết kế chế tạo robot SCARA phân loại bánh // // // // phát bánh vùng camera public bool isGearFound(Image frameImg) { //areaarea = 0; Image roiCut = frameImg.Clone(); roiCut.ROI = new Rectangle(200, 0, 400, 600); int numOfWhitePx = CvInvoke.CountNonZero(roiCut); //return số px trắng //areaarea = CvInvoke.CountNonZero(roiCut); if (numOfWhitePx < 90000) { return false; } else return true; } // // // // tìm đường trịn trục cập nhật thông tin bánh lên ảnh public Image shaftDetect(Image Img) { shaftDiameter = 0; CircleF detectedCircle = new CircleF(); C C Image newImg = new Image(Img.Width, Img.Height); R L T //int radius; Gray cannyThreshold = new Gray(100); Gray accumulatorThreshold = new Gray(100); double resolution = 8; double minDistance = Img.Width; int minRadius = 50; int maxRadius = 80; newImg = Img.Clone(); U D CircleF[] circles = Img.Clone().Convert().HoughCircles(cannyThreshold, accumulatorThreshold, resolution, minDistance, minRadius, maxRadius)[0]; foreach (CircleF myCircle in circles) { detectedCircle = new CircleF(Point.Round(myCircle.Center), myCircle.Radius); newImg.Draw(detectedCircle,new Bgr(Color.Yellow) , 5); shaftDiameter = * myCircle.Radius * ratio; } newImg = drawExContour(newImg); newImg.Draw("ShaftDia= " + shaftDiameter.ToString("0.0") + "mm", new Point(10, 30), Emgu.CV.CvEnum.FontFace.HersheyTriplex, 1.2, new Bgr(Color.White),2); newImg.Draw("No.OfTeeth= " + gTeeth.ToString(), new Point(450, 30), Emgu.CV.CvEnum.FontFace.HersheyTriplex, 1.2, new Bgr(Color.White), 2); if (this.isGearGood()) { newImg.Draw("Quality: GOOD", new Point(10, 75), Emgu.CV.CvEnum.FontFace.HersheyTriplex, 1.2, new Bgr(Color.White), 2); } else { newImg.Draw("Quality: BAD", new Point(10, 75), Emgu.CV.CvEnum.FontFace.HersheyTriplex, 1.2, new Bgr(Color.White), 2); } ; return newImg; } // // Sinh viên thực hiện: Đặng Công Anh Khoa Nguyễn Tuấn Tú Hướng dẫn: TS Đặng Phước Vinh Thiết kế chế tạo robot SCARA phân loại bánh // // trả BR good/Bad public bool isGearGood() { if (bTeeth > 0) { return false; } return true; } } } C C R L T U D Sinh viên thực hiện: Đặng Công Anh Khoa Nguyễn Tuấn Tú Hướng dẫn: TS Đặng Phước Vinh Thiết kế chế tạo robot SCARA phân loại bánh PHỤ LỤC *Code class SCARA: using using using using using System; System.Collections.Generic; System.Linq; System.Text; System.Threading.Tasks; using System.Globalization; namespace _20_10_18_GearInspectionApp { class scara { private const double a1 = 130.00; private const double a2 = 125.00; private const double d1 = 250.00; private const double d4 = 85.00; public public public public public public double double double double double double cosT2; sinT2; T2; T1; d3; T4; C C R L T public string home = "0,0,0,0,off,"; public string currStr = ""; // return a string to send public string positionToString(double Px, double Py, double Pz, double Alpha, string State){ cosT2 = Math.Round((Px * Px + Py * Py - a2 * a2 - a1 * a1) / (2 * a1 * a2), 2); sinT2 = Math.Round(Math.Sqrt(1 - cosT2 * cosT2), 2); U D T2 = Math.Round(Math.Atan2(sinT2, cosT2) * 180.0 / Math.PI, 2); double top = Math.Round((a2 * cosT2 + a1) * Py - a2 * sinT2 * Px, 2); double bot = Math.Round(a2 * sinT2 * Py + (a2 * cosT2 + a1) * Px, 2); T1 = Math.Round(Math.Atan2(top, bot) * 180 / Math.PI, 2); d3 = Math.Round(d1 - d4 - Pz, 2); T4 = Math.Round(T1 + T2 - Alpha, 2); string outStr = T1.ToString(CultureInfo.InvariantCulture) + "," + T2.ToString(CultureInfo.InvariantCulture) + "," + (d325).ToString(CultureInfo.InvariantCulture) + "," + T4.ToString(CultureInfo.InvariantCulture) + "," + State + ","; currStr = outStr; return outStr; } } } Sinh viên thực hiện: Đặng Công Anh Khoa Nguyễn Tuấn Tú Hướng dẫn: TS Đặng Phước Vinh Thiết kế chế tạo robot SCARA phân loại bánh PHỤ LỤC *Code Arduino #include #include #include #include #include "A4988.h" "MultiDriver.h" "SyncDriver.h" "myServo.h" // //Information // #define uSTEP // for convert function #define STEP_NUM 200 #define ratioX 16 #define ratioY 16 #define ratioZ #define ratioR 0.66667; // //Control mosfet gate // #define CONVEYOR 24 //Servo // #define SERVO0 #define SERVO1 // // Limit Switches // #define X_MIN_PIN #define Y_MIN_PIN #define Z_MIN_PIN C C 11 12 14 18 // // Steppers // R L T U D #define X_STEP_PIN 54 #define X_DIR_PIN 55 #define X_ENABLE_PIN 38 A4988 xstp(STEP_NUM, X_DIR_PIN, X_STEP_PIN, X_ENABLE_PIN); #define Y_STEP_PIN 60 #define Y_DIR_PIN 61 #define Y_ENABLE_PIN 56 A4988 ystp(STEP_NUM, Y_DIR_PIN, Y_STEP_PIN,Y_ENABLE_PIN); #define Z_STEP_PIN 46 #define Z_DIR_PIN 48 #define Z_ENABLE_PIN 62 A4988 zstp(STEP_NUM, Z_DIR_PIN, Z_STEP_PIN,Z_ENABLE_PIN); // limit Degree #define X_MAX_DEG_PS #define X_MAX_DEG_NG #define Y_MAX_DEG_PS #define Y_MAX_DEG_NG #define Z_MAX_VAL_PS 127 -127 133 -133 75 SyncDriver syncXY(xstp, ystp); int n1, n2, n3, n4; String n5; Sinh viên thực hiện: Đặng Công Anh Khoa Nguyễn Tuấn Tú Hướng dẫn: TS Đặng Phước Vinh Thiết kế chế tạo robot SCARA phân loại bánh float a, b, c, d; float prv_a, prv_b, prv_c; bool ror = false; void setup() { // put your setup code here, to run once: pinMode(CONVEYOR, OUTPUT); initPort(); // initializing PWM port to control Servo Motor initMotor(120, 120, 250); setDeg(SERVO1, 0); // init value for servo setDeg(SERVO0, 90); Serial.begin(9600); // to getting data Serial2.begin(9600); } void loop() { // put your main code here, to run repeatedly: getData(); if (ror == true) { cal(a, b, c, d); // tinh toan: deg -> step //show(); motRun(); ror = false; } } void initMotor(int xSpeed, int ySpeed, int zSpeed){ xstp.begin(xSpeed, uSTEP); ystp.begin(ySpeed, uSTEP); zstp.begin(zSpeed, uSTEP); xstp.setEnableActiveState(LOW); ystp.setEnableActiveState(LOW); zstp.setEnableActiveState(LOW); holdingMotor(); } C C R L T void holdingMotor(){ xstp.enable(); ystp.enable(); zstp.enable(); } U D void releaseMotor(){ xstp.disable(); ystp.disable(); zstp.disable(); } // Set toc (RPM) cho cac dong co X,Y,Z void setSpeedXYZ(int xSpeed, int ySpeed, int zSpeed){ xstp.setRPM(xSpeed); ystp.setRPM(ySpeed); zstp.setRPM(zSpeed); } // Chay robot ve VT ban dau void robHome() { Serial2.println("Homing "); prv_a = 0; prv_b = 0; prv_c = 0; setDeg(SERVO1, 60); setSpeedXYZ(50, 50, 100); while (digitalRead(Z_MIN_PIN) == 0) { zstp.move(-20); } while (digitalRead(Z_MIN_PIN) != 0) { zstp.move(20); Sinh viên thực hiện: Đặng Công Anh Khoa Nguyễn Tuấn Tú Hướng dẫn: TS Đặng Phước Vinh Thiết kế chế tạo robot SCARA phân loại bánh } while (digitalRead(Y_MIN_PIN) == 0) { ystp.move(-20); } while (digitalRead(Y_MIN_PIN) != 0) { ystp.move(20); } while (digitalRead(X_MIN_PIN) == 0) { xstp.move(-20); } while (digitalRead(X_MIN_PIN) != 0) { xstp.move(20); } setSpeedXYZ(100, 150, 250); syncXY.move(degToStep(127)*ratioX,degToStep(133)*ratioY); //set (0,0,0,0,off) offset from Home point at teta1 = 127 deg, teta2 = 133deg Serial2.println("Done!"); } // chay cac dong co void motRun() { Serial.println("Running "); if (n3 >= 0) { syncXY.move(n1,n2); setDeg(SERVO0, n4); zstp.move(n3); } else { zstp.move(n3); setDeg(SERVO0, n4); syncXY.move(n1,n2); } if (n5 == "on") { setDeg(SERVO1, 180); } else if(n5 == "off") { setDeg(SERVO1, 0); } Serial.println("Done!"); C C R L T U D } //for X,Y int degToStep(float deg) { return (int) (deg * 200 * uSTEP / 360); } //for only Z-Axis int mmToStep(float mm) { return (int) (mm * 200 * uSTEP / ratioZ); } //Tinh toan cac thong so void cal(float ai, float bi, float ci, float n1 = (int)(degToStep(ai) * ratioX); n2 = (int)(degToStep(bi) * ratioY); n3 = mmToStep(ci); n4 = map(di, -135, 135, 270, 0) * ratioR; } di) { // hien thi thong so cac goc void show() { Serial.print("teta1 ="); Serial.println(a); Serial.print("teta2 ="); Sinh viên thực hiện: Đặng Công Anh Khoa Nguyễn Tuấn Tú Hướng dẫn: TS Đặng Phước Vinh zero point Thiết kế chế tạo robot SCARA phân loại bánh Serial.println(b); Serial.print("d3 ="); Serial.println(c); Serial.print("teta4 ="); Serial.println(d); } // doc du lieu tu Serial void getData() { while (Serial2.available() > 0) { char inChr = Serial2.read(); if (inChr == 'h') { robHome(); } if (inChr == 's') { digitalWrite(CONVEYOR, 1); //Serial2.println("ok"); } if (inChr == 't') { digitalWrite(CONVEYOR, 0); //Serial2.println("ok"); } } while (Serial.available() > 5) { for (int i = 0; i < 5; i++) { float temp = 0; String inStr = Serial.readStringUntil(','); if (inStr != "") { ror = true; switch (i) { case 0: temp = inStr.toFloat(); if (temp > X_MAX_DEG_PS) { a = X_MAX_DEG_PS - prv_a; prv_a = X_MAX_DEG_PS; } else if (temp < X_MAX_DEG_NG) { C C R L T U D a = X_MAX_DEG_NG - prv_a; prv_a = X_MAX_DEG_NG; } else { a = temp - prv_a; prv_a = temp; } temp = 0; break; case 1: temp = inStr.toFloat(); if (temp > Y_MAX_DEG_PS) { b = Y_MAX_DEG_PS - prv_b; prv_b = Y_MAX_DEG_PS; } else if (temp < Y_MAX_DEG_NG) { b = Y_MAX_DEG_NG - prv_b; prv_b = Y_MAX_DEG_NG; } else { b = temp - prv_b; prv_b = temp; } temp = 0; Sinh viên thực hiện: Đặng Công Anh Khoa Nguyễn Tuấn Tú Hướng dẫn: TS Đặng Phước Vinh Thiết kế chế tạo robot SCARA phân loại bánh break; case 2: temp = inStr.toFloat(); if (temp > Z_MAX_VAL_PS) { c = Z_MAX_VAL_PS - prv_c; prv_c = Z_MAX_VAL_PS; } else { c = temp - prv_c; prv_c = temp; } temp = 0; break; case 3: d = inStr.toFloat(); break; case 4: n5 = inStr; break; } } } } } C C R L T U D Sinh viên thực hiện: Đặng Công Anh Khoa Nguyễn Tuấn Tú Hướng dẫn: TS Đặng Phước Vinh ... Phước Vinh Thiết kế chế tạo robot SCARA phân loại bánh - Robot SCARA xếp đĩa C C R L T Hình Robot SCARA xếp đĩa 2.2.2 Ý tưởng ban đầu cho thiết kế robot U D Hình 10 Hình ảnh 3D robot 15 Sinh... Robot phân loại bánh hỏng tốt sang hộp riêng biệt 38 Sinh viên thực hiện: Đặng Công Anh Khoa Nguyễn Tuấn Tú Hướng dẫn: TS Đặng Phước Vinh Thiết kế chế tạo robot SCARA phân loại bánh 5.2 Kết... Phước Vinh Thiết kế chế tạo robot SCARA phân loại bánh - Lắp ráp sản phẩm với vị trí ngược C C R L T Hình Robot SCARA lắp ráp vị trí ngược - U D Gắp nhiều sản phẩm dây truyền Hình Robot SCARA gắp