1. Trang chủ
  2. » Luận Văn - Báo Cáo

HỆ THỐNG KIỂM TRA LỖI TRÊN BOARD MẠCH ĐIỆN TỬ

70 23 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP HCM KHOA CÔNG NGHỆ ĐIỆN – ĐIỆN TỬ 🙣🙣🙣 NH KHÓA LUẬN TỐT NGHIỆP HỆ THỐNG KIỂM TRA LỖI TRÊN BOARD MẠCH ĐIỆN TỬ GVHD: SVTH : Lớp : MSSV : TP HỜ CHÍ MINH, THÁNG NĂM 202 BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP HCM KHOA CÔNG NGHỆ ĐIỆN – ĐIỆN TỬ 🙣🙣🙣 H KHÓA LUẬN TỐT NGHIỆP HỆ THỐNG KIỂM TRA LỖI TRÊN BOARD MẠCH ĐIỆN TỬ GVHD: SVTH : Lớp : MSSV : TP HỜ CHÍ MINH, THÁNG NĂM 2021 NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN TP Hồ Chí Minh, ngày… tháng… năm 2021 Giáo viên hướng dẫn NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN TP Hồ Chí Minh, ngày… tháng… năm 2021 Giáo viên phản biện LỜI CẢM ƠN Để hoàn thành khóa luận tốt nghiệp, trước hết em xin gửi đến quý thầy, cô giáo Khoa Điện-Điện tử, trường Đại học Cơng nghiệp Thực phẩm TP Hồ Chí Minh lời cảm ơn chân thành Đặc biệt, em xin gửi đến Cơ Trần Thị Như Hà, người tận tình hướng dẫn, giúp đỡ em hồn thành khóa luận tốt nghiệp lời cảm ơn sâu sắc Trong trình tìm hiểu đề tài, với kiến thức cịn hạn hẹp nên khơng tránh khỏi thiếu sót Em mong nhận đóng góp ý kiến quý thầy cô khoa để em học thêm nhiều kinh nghiệm hoàn thành tốt Sau cùng, em kính chúc q thầy thật dồi sức khỏe, tràn đầy nhiệt huyết thành công nghiệp cao quý TP Hồ Chí Minh, ngày 22 tháng năm 2021 Sinh viên thực Huỳnh Quốc Khải TĨM TẮT KHĨA LUẬN Cơng phát triển khoa học công nghệ ngày diễn mạnh mẽ tự động hóa phần thiết yếu tương lai Hiện việc người sử dụng thiết bị điện tử khơng ngừng gia tăng Theo thống kê cho thấy, số lượng thiết bị IoT toàn giới tăng vọt Ước tính có 75 tỷ thiết bị IoT lắp đặt vào năm 2025, gấp lần so với năm 2015 Đây thị trường lớn, hội cho doanh nghiệp tham gia xây dựng sản phẩm IoT sáng tạo Tuy nhiên trình sản xuất, việc kiểm tra mạch điện cho thiết bị IOT cịn có nhiều bất cập Vì đa số sử dụng người để kiểm tra thiết bị mạch, kiểm tra thiếu sót linh kiện Cách cho thấy hạn chế mặt cần có nhân cơng xử lý địa điểm đó, dễ xảy sai sót, xử lý chậm chạp, khơng linh hoạt Theo tìm hiểu, em thấy giới người ta sử dụng hệ thống nhận dạng, kiểm soát linh kiện, bảng mạch Camera phổ biến Một phương pháp hiệu ứng dụng việc sử dụng công nghệ xử lý hình ảnh Cùng với tị mị, hào hứng với vấn đề nhận thấy công nghệ kiểm tra thiết bị mạch tự động Việt Nam có tiềm nên em chọn nghiên cứu đề tài “Hệ thống kiểm tra lỗi board mạch điện tử” làm đề tài nghiên cứu tốt nghiệp MỤC LỤ NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN i NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN .ii LỜI CẢM ƠN iii TÓM TẮT KHÓA LUẬN iv MỤC LỤC v DANH MỤC BẢNG BIỂU v DANH MỤC HÌNH ẢNH vi CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI .1 1.1 Đặt vấn đề 1.2 Các phương pháp kiểm tra bảng mạch 1.2.2 Phương pháp truyền thống 1.2.2 Một số phần mềm có sử dụng nhà máy để kiểm tra linh kiện, mạch điện 1.3 Mục tiêu đề tài CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 Nghiên cứu tổng quan công nghệ xử lý ảnh .5 2.1.1 Ảnh số điểm ảnh 2.1.2 Độ phân giải ảnh 2.2 Đối tượng nhận diện .12 2.4.2 Camera .14 2.2.3 Nhơm định hình tạo khung đồ gá cho camera 14 2.2.4 Bộ nguồn cho đèn 15 2.2.5 Nguồn sáng 16 2.2.6 Đồ gá mạch 16 2.3 Thư viện ngơn ngữ lập trình .16 2.3.1 Giới thiệu thư viện OpenCV 16 2.3.2 Ngơn ngữ lập trình 18 2.3.3 Thu nhận ảnh .18 CHƯƠNG 3: CƠ SỞ THỰC HIỆN 19 3.1 Sơ đồ nguyên lý lưu đồ thuật toán hệ thống 19 3.2 Chuyển đổi sang ảnh xám .21 3.3 Xử lý nhiễu 22 3.3 Chuyển ảnh xám dạng nhị phân 23 3.4 Chương trình cắt vùng ROI .24 3.4.1 Thuật toán SUFT 25 3.4.3 FLANN(Fast Library for Approximate Nearest Neighbors) 25 3.4.4 Giải thuật tìm kiếm vùng ROI dùng Feature Matching 25 3.5 Xử vùng cần phân tích ảnh 26 3.5.1 Contour 27 3.5.2 Phân đoạn ảnh dùng HSV 27 3.5.3 Vùng số 1,2,3- Kiểm tra tụ điện, nút nhấn .28 3.5.4 Vùng 4,5 Kiểm tra led điện trở 29 CHƯƠNG 4: KẾT QUẢ THỰC NGHIỆM 31 4.1 Kết phần cứng hệ thống .31 4.2 Xây dựng chương trình cho hệ thống kiểm tra mạch 32 4.3 Giao diện hệ thống 34 4.4 Kết kiểm tra .35 CHƯƠNG KẾT LUẬN VÀ ĐỊNH HƯỚNG ĐỀ TÀI 37 5.1 Kết đạt 37 5.2 Hạn chế 37 5.3 Kết luận 37 5.4 Hướng phát triển đề tài 37 TÀI LIỆU THAM KHẢO 39 PHỤ LỤC 40 DANH MỤC BẢNG BI Bảng Kết kiểm tra bảng mạch 100 lần 40 Bảng Một số mẫu kiểm tra cụ thể .40 DANH MỤC HÌNH ẢNHY Hình Phân tích ảnh màu Hình 2 Phân tích ảnh theo điểm ảnh Hình Độ phân giải ảnh Hình Màu ảnh .7 Hình Các bước thu nhận ảnh Hình Một số ví dụ ảnh số Hình Xử lý ảnh .9 Hình Giảm nhiễu 10 Hình Điều chỉnh độ tương phản 11 Hình 10 Tìm cạnh 11 Hình 11 Nén ảnh 12 Hình 12 Phân vùng 12 Hình 13 Khơi phục ảnh 13 Hình 14 Bảng mạch cần kiểm tra tốn 13 Hình 15 Các vùng cần kiểm tra bảng mạch .14 Hình 16 Kích thước bảng mạch .14 Hình 17 Camera sử dụng ứng dụng kiểm tra .15 Hình 18 Camera sử dụng ứng dụng kiểm tra .15 Hình 19 Nhơm định hình .16 Hình 20 Đèn hộp làm nguồn chiếu sáng thiết kế Solidwork 17 Hình 21 Đèn hộp làm nguồn chiếu sáng 17 Hình 22 Đồ gá bo mạch để kiểm tra 18 Hình 23 Thư viện Open CV 18 Hình 24 Ngơn ngữ lập trình C# 20 Y Hình Sơ đồ nguyên lý hệ thống 21 Hình Lưu đồ thuật toán hệ thống 22 m_RawImage.Image.ROI = roi; m_MainImg = m_RawImage.Image.Copy().Clone(); ptbMainImage.Image = m_MainImg.AsBitmap(); CvInvoke.Imwrite(@"C:\Temp\anhMain.jpg", m_MainImg); } btnInspection.Enabled = true; } private void btnInspection_Click(object sender, EventArgs e) { if (m_MainImg != null) { Image[] ImageL = new Image[4]; //Hsv minR = new Hsv(0, 100, 138); //Hsv maxR = new Hsv(190, 180, 240); //Image temp = new Image(@"C:\Temp\anhMain.jpg"); ////ptbMainImage.Image = temp.ToBitmap(); //int numButton = ProcessROI.GetRegionProcess.CountComponentContour_HSV(temp, minR, maxR); Image[] lImgs; Image ImgRegion; GetRegionProcess(m_MainImg, out ImgRegion, out lImgs); ptbMainImage.Image = ImgRegion.ToBitmap(); if(isConnected) { Send_Data("OK"); } } } // Ham phu tro private void openImage(ref MainImage image_) { try { OpenFileDialog fl = new OpenFileDialog(); fl.Filter = "Image|*.bmp;*.jpg;*.png"; fl.Multiselect = false; if(fl.ShowDialog() == DialogResult.OK) { image_.Mat = new Mat(fl.FileName); image_.Image = new Image(fl.FileName); ptbMainImage.Image = new Bitmap(fl.FileName); } } catch(Exception ex) { MessageBox.Show("Lỗi mở ảnh, kiểm tra lại.\n"+ ex.Message); } return; } private void openCamera() { if (m_Capture == null) { m_Capture = new VideoCapture(1); } m_mFrame = new Mat(); m_Capture.ImageGrabbed += ProcessFrame; m_Capture.Start(); } private void ProcessFrame(object sender,EventArgs e) { try { m_Capture.Retrieve(m_mFrame,0); m_RawImage.Mat = m_mFrame; m_RawImage.Image = m_RawImage.Mat.ToImage(); ptbMainImage.Image = m_RawImage.Image.ToBitmap(); if (m_bDetectPCB == true) { updateMainImageCallBack _mainImage = new updateMainImageCallBack(DetectPCB); this.Invoke(_mainImage, new object[] { m_RawImage.Image }); } } catch (Exception ex) { Console.WriteLine("Khong the mo camera, kiem tra lai.\n Loi:" + ex.Message); } } public delegate void updateMainImageCallBack(Image mainImage); public void DetectPCB(Image _mainImage) { btnSample.PerformClick(); btnInspection.PerformClick(); } private void GetRegionProcess(Image _Image, out Image Image_, out Image[] Images_) { Images_ = new Image[6]; //MCvFont font = new MCvFont(Emgu.CV.CvEnum.FONT.CV_FONT_HERSHEY_SIMPLEX, 0.3f, 0.3f); Bgr green = new Bgr(0, 255, 0); // VUNG KIEM TRA THIEU TU DIEN - NGUOC TU DIEN Rectangle region0 = new Rectangle(240, 0, _Image.Width-240,160); _Image.ROI = region0; Images_[0] = _Image.Copy(); Inspection.CountComponentContour(Images_[0], out Images_[0]); _Image.ROI = Rectangle.Empty; _Image.Draw(region0, green, 2); CvInvoke.Imwrite(@"C:\Temp\anh0.jpg", Images_[0]); // VUNG - KIEM TRA SO LUONG TU DIEN Rectangle region1 = new Rectangle(0, 55, 140, 86); _Image.ROI = region1; Images_[1] = _Image.Copy(); Inspection.CountComponentContour(Images_[1], out Images_[1]); _Image.ROI = Rectangle.Empty; _Image.Draw(region1, green, 2); CvInvoke.Imwrite(@"C:\Temp\anh1.jpg", Images_[1]); // VUNG - KIEM TRA SO LUONG NUT NHAN Rectangle region2 = new Rectangle(0, 129, 80, 160); _Image.ROI = region2; Images_[2] = _Image.Copy(); Inspection.CountComponentContour(Images_[2], out Images_[2]); _Image.ROI = Rectangle.Empty; _Image.Draw(region2, green, 2); CvInvoke.Imwrite(@"C:\Temp\anh2.jpg", Images_[2]); // VUNG - KIEM TRA SO LUONG LED Rectangle region3 = new Rectangle(300, 170, 60, 270); _Image.ROI = region3; Images_[3] = _Image.Copy(); _Image.ROI = Rectangle.Empty; _Image.Draw(region3, green, 2); CvInvoke.Imwrite(@"C:\Temp\anh3.jpg", Images_[3]); // VUNG - KIEM TRA SO LUONG Transitor //Rectangle region4 = new Rectangle(530, 417, 350, 90); //_Image.ROI = region4; //Images_[4] = _Image.Copy(); // _Image.ROI = Rectangle.Empty; //_Image.Draw(region4, green, 2); // VUNG - KIEM TRA DIEN TRO // Rectangle region5 = new Rectangle(460,280, 80, 180); // _Image.ROI = region5; // Images_[5] = _Image.Copy(); //_Image.ROI = Rectangle.Empty; //_Image.Draw(region5, green, 2); //for (int i =0; i=4) { m_homography = Features2DToolbox.GetHomographyMatrixFromMatchedFeatures(m_templateKeyPoi nts, m_sceneKeyPoints, m_matches, mask, 5); } if(m_homography != null) { Rectangle rect = new Rectangle(Point.Empty, template.Size); PointF[] pts = new PointF[] { new PointF(rect.Left, rect.Bottom), new PointF(rect.Right, rect.Bottom), new PointF(rect.Right, rect.Top), new PointF(rect.Left, rect.Top) }; pts = CvInvoke.PerspectiveTransform(pts, m_homography); Point[] points = Array.ConvertAll(pts, Point.Round); vp = new VectorOfPoint(points); } } catch( Exception ex) { } finally { // continue program; } } } } // Part 2.Process ROI using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using Emgu.CV; using Emgu.CV.Structure; using Emgu.CV.Util; using Emgu.CV.CvEnum; namespace Kiemtramach.ProcessROI { public class Inspection { // Count component based on FindContour - Region0, Region2, region3 public static int CountComponentContour(Image _img, out Image Img_) { int numComponent = 0; Mat ImgSource = _img.Mat; Mat ImgDest = new Mat(); Mat ResultImage = Mat.Zeros( ImgSource.Height, ImgSource.Width, DepthType.Cv8U,3); ImgDest = ImgSource.Clone(); CvInvoke.CvtColor(ImgDest, ImgDest, Emgu.CV.CvEnum.ColorConversion.Bgr2Gray); CvInvoke.GaussianBlur(ImgDest, ImgDest, new Size(9, 9), 0, 0); CvInvoke.Threshold(ImgDest, ImgDest, 0, 150, ThresholdType.Binary| ThresholdType.Triangle); CvInvoke.Imwrite(@"C:\Temp\anhB.jpg", ImgDest); Mat kernel = CvInvoke.GetStructuringElement(ElementShape.Rectangle, new Size(5,5), new Point(-1, -1)); CvInvoke.MorphologyEx(ImgDest, ImgDest,MorphOp.Close, kernel, new Point(-1, -1), 2, BorderType.Constant, new MCvScalar(0, 0, 255)); VectorOfVectorOfPoint contour = new VectorOfVectorOfPoint(); CvInvoke.FindContours(ImgDest, contour, null, Emgu.CV.CvEnum.RetrType.External, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple); for(int i = 0; i < contour.Size; i++) { Rectangle rect = CvInvoke.BoundingRectangle(contour[i]); if ( rect.Width < || rect.Height < 8) continue; if (rect.Width > 80|| rect.Height > 80) continue; _img.DrawPolyline(contour[i].ToArray(), false, new Bgr(0, 0, 255), 2); numComponent++; } Img_ = _img.Clone(); return numComponent; } public static int CountComponentContour_HSV(Image _img, Hsv _valueLow, Hsv _valueHeight, out Image Img_) { int numComponent = 0; Mat temp = new Mat(); Image hsvImg = _img.Convert(); Image grayimg = hsvImg.InRange(_valueLow, _valueHeight); Mat kernel = CvInvoke.GetStructuringElement(ElementShape.Ellipse, new Size(1, 1), new Point(-1, -1)); CvInvoke.MorphologyEx(grayimg, grayimg, MorphOp.Close, kernel, new Point(-1, -1), 2, BorderType.Isolated, new MCvScalar(0, 0, 255)); VectorOfVectorOfPoint contour = new VectorOfVectorOfPoint(); CvInvoke.FindContours(grayimg, contour, null, Emgu.CV.CvEnum.RetrType.External, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple); for (int i = 0; i < contour.Size; i++) { Rectangle rect = CvInvoke.BoundingRectangle(contour[i]); if (rect.Width < 15 || rect.Height < 15) continue; if (rect.Width > 60 || rect.Height > 60) continue; _img.DrawPolyline(contour[i].ToArray(), false, new Bgr(0, 0, 255), 2); numComponent++; } Img_ = _img.Clone(); return numComponent; } } } ... khoanh màu đỏ báo vùng kiểm tra bị lỗi Hình Kết kiểm tra hệ thống 4.4 Kết kiểm tra Kết kiểm tra 100 lần với mẫu bảng mạch khác Bảng Kết kiểm tra bảng mạch 100 lần Số lần kiểm Phát tra 100 85 Phát Không... định phù hợp cho hệ thống chụp ảnh kiểm tra Hoạt động:  Mở nguồn cấp điện cho hệ thống đèn camera  Đưa bảng mạch cần kiểm tra bàn gá bảng mạch  Hệ thống chụp ảnh đưa hình ảnh hệ thống máy tính... ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP HCM KHOA CÔNG NGHỆ ĐIỆN – ĐIỆN TỬ

Ngày đăng: 18/03/2022, 14:04

Xem thêm:

TỪ KHÓA LIÊN QUAN

Mục lục

    NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN

    NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN

    TÓM TẮT KHÓA LUẬN

    DANH MỤC BẢNG BI

    DANH MỤC HÌNH ẢNHY

    CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI

    1.2. Các phương pháp kiểm tra bảng mạch

    1.2.2 Phương pháp truyền thống

    1.2.2. Một số phần mềm có đang được sử dụng ở nhà máy để kiểm tra các linh kiện, mạch điện

    1.3. Mục tiêu đề tài

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w