Đồ án tốt nghiệp xuất sắc chương trình cơ điện tử trường đại học bách khoa hà nội năm 2021Đồ án tốt nghiệp “Hệ thống tự động phân loại pin tái chế ứng dụng công nghệhọc sâu” có nội dung áp dụng công nghệ học sâu để dự đoán, phân loại các viên pincũ làm nguyên liệu cho quá trình tái chế pin sau đó. Dựa trên mô hình dự đoán củamạng học sâu, em đã tính toán, thiết kế và xây dựng mô hình hệ thống phân loại pincũ trong thực tế
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CƠ KHÍ BỘ MÔN CƠ ĐIỆN TỬ ĐỒ ÁN TỐT NGHIỆP Thiết kế hệ thống tự động phân loại pin tái chế ứng dụng cơng nghệ học sâu LÊ QUỐC ĐỒN doan.lq155363@sis.hust.edu.vn Ngành Cơ Điện Tử Giảng viên hướng dẫn: TS Nguyễn Thành Hùng Bộ mơn: Viện: Cơ điện tử Cơ khí HÀ NỘI, 12/2020 Chữ ký GVHD BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI CỘNG HỒ XÃ HỘI CHỦ NGHÍA VIỆT NAM Độc lập – Tự – Hạnh phúc NHIỆM VỤ THIẾT KẾ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Lê Quốc Đoàn MSSV: 20155363 Lớp: CN – Cơ điện tử 01 – K60 Bộ môn: Cơ Điện Tử Viện: Cơ Khí I/ ĐỀ TÀI THIẾT KẾ “Hệ thống tự động phân loại pin tái chế ứng dụng công nghệ học sâu.” II/ CÁC SỐ LIỆU BAN ĐẦU - Phân loại loại pin: Carbon, Lithium-ion , Niken-Cadimi, Alkaline - Pin hình trụ: Kích cỡ AA: cao 50mm, đường kính ∅ = 14mm Kích cỡ loại 18650: cao 65mm, đường kính ∅ = 18mm - Pin hình hộp có kích cỡ: 45x25x15mm - Khối lượng pin: mmin 0,02kg , mmax 0,04kg - Năng suất là: 15 sp/ph III/ NỘI DUNG THUYẾT MINH VÀ TÍNH TỐN - Tổng quan - Thiết kế hệ thống khí - Thiết kế hệ thống điều khiển - Xây dựng phần mềm điều khiển ứng dụng công nghệ học sâu - Xây dựng mơ hình thực nghiệm IV/ CÁC BẢN VẼ VÀ ĐỒ THỊ - Bản vẽ kết cấu khí hệ thống (A0) - Bản vẽ mạch điện (A0) V/ CÁN BỘ HƯỚNG DẪN: TS Nguyễn Thành Hùng VI/ NGÀY GIAO NHIỆM VỤ THIẾT KẾ: 01/09/2020 VII/ NGÀY HOÀN THÀNH ĐỒ ÁN: 31/12/2020 Hà Nội, ngày tháng năm 2020 Giảng viên hướng dẫn Đánh giá giảng viên hướng dẫn ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… Kết đánh giá Họ tên Lê Quốc Đoàn Điểm Hà Nội, ngày tháng năm 2020 Giảng viên hướng dẫn Đánh giá giảng viên phản biện ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… ………………………………………………………………………………………… Kết đánh giá Họ tên Lê Quốc Đoàn Điểm Hà Nội, ngày tháng năm 2020 Giảng viên phản biện MỤC LỤC LỜI NÓI ĐẦU TÓM TẮT NỘI DUNG DANH MỤC HÌNH ẢNH DANH MỤC BẢNG CHƯƠNG I: GIỚI THIỆU CHUNG VỀ HỆ THỐNG PHÂN LOẠI SỬ DỤNG XỬ LÝ ẢNH 1.1 Giới thiệu hệ thống phân loại sản phẩm 1.1.1 Phân loại sản phẩm theo kích thước sử dụng cảm biến quang 1.1.2 Phân loại sản phẩm theo màu sắc sử dụng cảm biến màu sắc 1.1.3 Phân loại sản phẩm xử lý ảnh 1.1.4 Ý nghĩa ứng dụng hệ thống 10 1.2 Giới thiệu hệ thống xử lý ảnh trình tái chế pin 11 CHƯƠNG II: TÍNH TỐN, THIẾT KẾ HỆ THỐNG CƠ KHÍ .16 2.1 Yêu cầu thiết kế chung .16 2.2 Mơ hình đề xuất .16 2.3 Tính tốn, thiết kế, chọn lựa phận hệ thống Cơ khí .16 2.3.1 Băng tải 16 2.3.2 Động 20 2.3.3 Ổ lăn 22 2.3.4 Hệ thống chiếu sáng 23 2.3.5 Hệ thống khí nén 28 2.3.6 Hệ thống cấp phôi tự động .29 CHƯƠNG III: HỆ THỐNG ĐIỆN, ĐIỀU KHIỂN 35 3.1 Các thành phần hệ thống điều khiển 35 3.1.1 Cảm biến 35 3.1.2 Camera .36 3.1.3 Vi điều khiển 37 3.1.4 Giao tiếp UART/Serial với PC 38 3.2 Thiết kế chương trình giao tiếp serial với PC Arduino IDE 39 3.2.1 Các biến sử dụng chương trình 39 3.2.2 Sử dụng Timer Arduino .41 CHƯƠNG IV: PHẦN MỀM XỬ LÝ ẢNH .44 4.1 Tổng quan công nghệ xử lý ảnh 44 4.2 Ứng dụng Convolutional Neural Network YOLO để giải bải toán .44 4.2.1 Xây dựng database cho việc huấn luyện mạng 46 4.2.2 Xây dựng mạng dự đoán pin qua sử dụng 47 4.2.3 Kết thu 55 4.3 Kết luận chương 55 CHƯƠNG V: XÂY DỰNG MƠ HÌNH HỆ THỐNG VÀ THỰC NGHIỆM 56 5.1 Xây dựng mơ hình thực nghiệm 56 5.2 Kết thực nghiệm 58 KẾT LUẬN 59 TÀI LIỆU THAM KHẢO 60 PHỤ LỤC 62 LỜI NĨI ĐẦU Trong thời đại cơng nghiệp hóa đại hóa đất nước, sống người ngày đầy đủ, hoàn thiện Cùng với phát triển mạnh mẽ tình trạng nhiễm mơi trường rác thải ngày tăng, rác thải pin qua sử dụng chiếm phần không nhỏ Khi pin qua sử dụng thải mơi trường chất độc hại chì, kẽm, lithium, thủy ngân, cadmium ngấm vào đất, thoát khơng khí, rị rỉ chảy vào nguồn nước gây ô nhiễm môi trường ảnh hưởng đến sức khỏe người Từ vấn đề thực tế trên, với kiến thức trang bị, nhóm đồ án chọn thực đề tài “ Hệ thống tự động phân loại pin tái chế ứng dụng công nghệ học sâu” Việc tạo hệ thống giúp cho người phân loại loại pin qua sử dụng, để dễ dàng việc tái chế thay vứt bừa bãi gây nhiễm mơi trường Trong phạm vi đồ án, nhóm xây dựng mơ hình mơ hoạt động hệ thống phân loại pin tái chế mà nhóm đề cập Trong trình thực hồn thành đề tài khơng tránh khỏi thiếu sót Vì vậy, nhóm mong nhận đánh góp ý thầy nhằm giúp nhóm hồn thiện đề tài TĨM TẮT NỘI DUNG Đồ án tốt nghiệp “Hệ thống tự động phân loại pin tái chế ứng dụng cơng nghệ học sâu” có nội dung áp dụng cơng nghệ học sâu để dự đốn, phân loại viên pin cũ làm nguyên liệu cho trình tái chế pin sau Dựa mơ hình dự đốn mạng học sâu, em tính tốn, thiết kế xây dựng mơ hình hệ thống phân loại pin cũ thực tế Đồ án bao gồm chương phần phụ lục code: Chương 1: Giới thiệu hệ thống xử lý ảnh hệ thống phân loại pin tái chế Chương 2: Tính tốn thiết kế khí: - Nội dung chương tính tốn, thiết kế mơ hình khí hệ thống phân loại - Tạo vẽ lắp đính kèm đồ án - Mơ hình gồm có băng tải, buồng sáng, hệ thống khí nén hộp chứa sản phẩm Chương 3: Thiết kế hệ thống điện, điều khiển: Hệ thống điều khiển vi điều khiển Arduino Trong chương em thực hiện: - Chọn cảm biến thiết bị điện - Tạo lưu đồ thuật toán điều khiển hệ thống - Nêu phương pháp lập trình kết nối Arduino với PC thơng qua giao tiếp Serial - Sử dụng Timer Arduino để lập trình - Tạo vẽ điện + khí nén - Phần lập trình Arduino có phần phụ lục code Chương 4: Phần mềm xử lý ảnh: - Giới thiệu phương pháp học sâu, đặc biệt mô hình mạng YOLO sử dụng đồ án - Hướng dẫn cách huấn luyện mạng YOLO để nhận dạng pin - Kết huấn luyện thu đánh giá kết - Nêu lỗi sai thường mắc phải huấn luyện mạng YOLO cách khắc phục - Phần lập trình giao diện C# file huấn luyện có phần phụ lục code Chương 5: Mơ hình thực tế: - Đưa kết xây dựng mơ hình khí điện - Đưa kết vận hành - Đưa kết luận nhược điểm, ưu điểm mơ hình Sinh viên thực (Ký ghi rõ họ tên) DANH MỤC HÌNH ẢNH Chương I: Hình 1.1: Cảm biến quang ứng dụng Hình 1.2: Các loại cảm biến màu sắc Hình 1.3: Mẫu máy OBS500 hãng Refind .11 Hình 1.4: Các loại pin máy OBS500 phân loại 11 Hình 1.5: Các loại pin Carbon .12 Hình 1.6: Pin carbon Việt Nam 12 Hình 1.7: Pin Alkaline 12 Hình 1.8: Pin Lithium-ion trụ 12 Hình 1.9: Pin Nickel-Metal hydride 13 Hình 1.10: Pin Niken-Cadimi (Ni-Cd) 13 Hình 1.11: Pin thỏ AA bạc 13 Hình 1.12: Zinc Cacbon 9V 14 Hình 1.13: Pin Lithium-ion trụ 14 Hình 1.14: Pin Niken-Cadimi 14 Hình 1.15: Pin Alkaline .14 Hình 1.16: Pin Alkaline .14 Chương II: Hình 2.1: Một số loại băng tải công nghiệp 17 Hình 2.2: Sơ đồ băng tải 18 Hình 2.3: Mặt cắt dây đai 19 Hình 2.4: Các lực tác dụng lên băng tải 19 Hình 2.5: Động DS-42RP7750248000-25K 22 Hình 2.6: Ánh sáng ban ngày 24 Hình 2.7: Ánh sáng LED .24 Hình 2.8: Ánh sáng halogen 24 Hình 2.9: Ánh sang neon .24 Hình 2.10: So sánh đặc điểm loại ánh sáng 25 Hình 2.11: Chiếu sáng thẳng (direct lighting) .25 Hình 2.12: Chiếu sáng phản xạ (diffuse lighting) .25 Hình 2.13: Chiếu sáng vùng tối (dark-field lighting) 26 Hình 2.14: Chiếu sáng phía (back lighting) 26 Hình 2.15: Nguyên lý ánh sáng chiếu vào vật thể .26 Hình 2.16: Nguyên lý chiếu sáng hầm-vòm 27 Hình 2.17: Hộp chiếu sáng dạng hầm-vịm thực tế .27 Hình 2.18: Hình ảnh thực tế thu phương pháp dome lighting 27 Hình 2.19: Kích thước van khí nén 2V025-08 28 Hình 2.20: Ý nghĩa mã số ghi van khí nén 29 Hình 2.21: Các dạng đầu phun với vùng thổi khí khác 29 Hình 2.22: Thơng số đầu phun ALVA 29 Hình 2.23: Cấu tạo phễu cấp phơi rung động 30 Hình 2.24: Cơ cấu cấp phơi rung động dạng phễu có máng xoắn vít 31 [2] file cfg cấu hình mạng yolo tiny v3 [net] # Testing #batch=1 #subdivisions=1 # Training batch=64 subdivisions=64 width=640 height=480 channels=3 momentum=0.9 decay=0.0005 angle=0 saturation = 1.5 exposure = 1.5 hue=.1 learning_rate=0.001 burn_in=1000 max_batches = 12000 policy=steps steps=9600,10800 scales=.1,.1 [convolutional] batch_normalize=1 filters=16 size=3 stride=1 pad=1 activation=leaky [maxpool] size=2 stride=2 [convolutional] 64 batch_normalize=1 filters=32 size=3 stride=1 pad=1 activation=leaky [maxpool] size=2 stride=2 [convolutional] batch_normalize=1 filters=64 size=3 stride=1 pad=1 activation=leaky [maxpool] size=2 stride=2 [convolutional] batch_normalize=1 filters=128 size=3 stride=1 pad=1 activation=leaky [maxpool] size=2 stride=2 [convolutional] batch_normalize=1 filters=256 size=3 stride=1 65 pad=1 activation=leaky [maxpool] size=2 stride=2 [convolutional] batch_normalize=1 filters=512 size=3 stride=1 pad=1 activation=leaky [maxpool] size=2 stride=1 [convolutional] batch_normalize=1 filters=1024 size=3 stride=1 pad=1 activation=leaky ########### [convolutional] batch_normalize=1 filters=256 size=1 stride=1 pad=1 activation=leaky [convolutional] batch_normalize=1 filters=512 size=3 66 stride=1 pad=1 activation=leaky [convolutional] size=1 stride=1 pad=1 filters=33 activation=linear [yolo] mask = 3,4,5 anchors = 118, 41, 46,120, 120, 52, 114, 72, 118, 89, 101,112 classes=6 num=6 jitter=.3 ignore_thresh = truth_thresh = random=1 [route] layers = -4 [convolutional] batch_normalize=1 filters=128 size=1 stride=1 pad=1 activation=leaky [upsample] stride=2 [route] layers = -1, [convolutional] batch_normalize=1 filters=256 67 size=3 stride=1 pad=1 activation=leaky [convolutional] size=1 stride=1 pad=1 filters=33 activation=linear [yolo] mask = 0,1,2 anchors = 118, 41, 46,120, 120, 52, 114, 72, 118, 89, 101,112 classes=6 num=6 jitter=.3 ignore_thresh = truth_thresh = random=1 [3] File obj.names Pin_Con_Tho_AA Pin_Zinc_Carbon_9V Pin_Ni-Cd_AA Pin_Alkaline_Panasonic Pin_Alkaline_Bexel Pin_Lithium-Ion 68 [4] Chương trình nhận diện máy tính using using using 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; System.Threading; System.Diagnostics; System.IO; using using using using Emgu.CV; Emgu.CV.CvEnum; Emgu.CV.Structure; Emgu.Util; using System.IO.Ports; using Alturos.Yolo.Model; using Alturos.Yolo; namespace BarterryRecycling_1 { public partial class Form1 : Form { bool isConnected = false; String[] ports; SerialPort port = new SerialPort(); private VideoCapture _capture = null; private bool _captureInProgress; private Mat _frame; int count = 0; public Form1() { InitializeComponent(); // Serial Port Initialize getAvailableComPorts(); foreach (string port in ports) { comboBox1.Items.Add(port); Console.WriteLine(port); if (ports[0] != null) { comboBox1.SelectedItem = ports[0]; } } // EmguCV Initiallize CvInvoke.UseOpenCL = false; try { _capture = new VideoCapture(0); _capture.ImageGrabbed += ProcessFrame; } catch (NullReferenceException excpt) { MessageBox.Show(excpt.Message); } _frame = new Mat(); 69 } private void Form1_Load(object sender, EventArgs e) { //Thread for handling serial communications Thread updateIO = new Thread(new ThreadStart(UpdateSerial)); updateIO.IsBackground = true; updateIO.Start(); } /// /// Connect to arduino void /// private delegate void output_delegate(string output); void getAvailableComPorts() { ports = SerialPort.GetPortNames(); } private void disconnectFromArduino() { isConnected = false; port.Write("#STOP\n"); port.Close(); openButton.Text = "Connect"; //disableControls(); //resetDefaults(); } private void connectToArduino() { isConnected = true; string selectedPort = comboBox1.GetItemText(comboBox1.SelectedItem); port = new SerialPort(selectedPort, 9600, Parity.None, 8, StopBits.One); port.Open(); port.Write("#STAR\n"); openButton.Text = "Disconnect"; //enableControls(); } private void display_output(string output) { serial_output_textbox.Text = output; } private void UpdateSerial() { //serial operations //polling function while (true) { //If serial is connected if (port.IsOpen == true) { //save the input from the Arduino string received = port.ReadLine(); //Basic error checking - input to the PC should contain the start/end characters "A" and "Z" //If it meets this requirement, send out instructions to Arduino via serial if (received.Contains("co vat") ) 70 { count++; string filePathSave = ("E:\\DoAn2020\\Battery_Recycling\\BarterryRecycling_1\\BarterryRecycling_1\\Image s\\OiDoiOI_" + count + ".bmp"); _frame.Save(filePathSave); ImageProcessing(filePathSave); received = "\n"; } //Set poll frequency to 100Hz Thread.Sleep(10); } else { serial_output_textbox.Invoke(new output_delegate(display_output), "No connection"); } if (port.IsOpen == false) { Thread.Sleep(20); } } } /// /// EmguCV void /// private void ProcessFrame(object sender, EventArgs arg) { if (_capture != null && _capture.Ptr != IntPtr.Zero) { _capture.Retrieve(_frame, 0); captureImageBox.Image = _frame; //pictureBox1.Image = _frame.Bitmap; } } /// /// Alturos Yolo void /// private Pen GetBrush(double confidence, int width) { var size = width / 100; if (confidence > 0.5) { return new Pen(Brushes.GreenYellow, size); } else if (confidence > 0.2 && confidence "Person, Car, " //items[0].Confidence -> 0.0 (low) -> 1.0 (high) //items[0].X -> bounding box //items[0].Y -> bounding box //items[0].Width -> bounding box //items[0].Height -> bounding box foreach (var item in items) { var x = item.X; var y = item.Y; var width = item.Width; var height = item.Height; var typePin = item.Type; string resultType = typePin; if (resultType == "Pin_Con_Tho_AA" || resultType == "Pin_Zinc_Carbon_9V" || resultType == "Pin_Ni-Cd_AA" || resultType == "Pin_Alkaline_Panasonic" || resultType == "Pin_Lithium-Ion" || resultType == "Pin_Alkaline_Bexel") { if (resultType == "Pin_Con_Tho_AA") port.Write("Pin_Con_Tho_AA"); if (resultType == "Pin_Zinc_Carbon_9V") port.Write("Pin_Zinc_Carbon_9V"); if (resultType == "Pin_Ni-Cd_AA") port.Write("Pin_Ni-Cd_AA"); if (resultType == "Pin_Alkaline_Panasonic") port.Write("Pin_Alkaline_Panasonic"); if (resultType == "Pin_Lithium-Ion") port.Write("Pin_Lithium-Ion"); if (resultType == "Pin_Alkaline_Bexel") port.Write("Pin_Alkaline_Bexel"); serial_output_textbox.Invoke(new output_delegate(display_output), resultType); } else { port.Write("unknown"); serial_output_textbox.Invoke(new output_delegate(display_output), "Unknown"); } resultType = "/n"; // Modify the image using g here // Create a brush with an alpha value and use the g.FillRectangle function using (var overlayBrush = new SolidBrush(Color.FromArgb(150, 255, 255, 102))) using (var pen = this.GetBrush(item.Confidence, image.Width-145)) { 72 if (item.Equals(null)) { canvas.FillRectangle(overlayBrush, x, y, width, height); } canvas.DrawString(typePin, new Font("Century Gothic", 21, FontStyle.Bold), overlayBrush, new PointF(x + 5, y - 40)); canvas.DrawRectangle(pen, x, y, width, height); canvas.Flush(); } } } } sw.Stop(); var oldImage = this.pictureBox1.Image; this.pictureBox1.Image = image; oldImage?.Dispose(); } } // Start recording webcam private void startButton_Click(object sender, EventArgs e) { if (_capture != null) { if (!_captureInProgress) { _capture.Start(); } } } // Stop recording webcam private void stopButton_Click(object sender, EventArgs e) { if (_capture != null) { if (!_captureInProgress) { _capture.Pause(); } } } // Connect to arduino private void openButton_Click(object sender, EventArgs e) { if (!isConnected) { connectToArduino(); } else { disconnectFromArduino(); } } } } 73 [5] Chương trình Arduino #include #define sensor #define INT1 12 #define INT2 13 #define INT3 11 #define INT4 10 #define LED1 #define LED2 #define LED3 #define LED4 volatile int temp; volatile int flag =0; volatile int count =0; int sothutu =0; void setup() { pinMode(sensor,INPUT_PULLUP); pinMode(INT1, OUTPUT); pinMode(INT2, OUTPUT); pinMode(INT3, OUTPUT); pinMode(INT4, OUTPUT); pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); pinMode(LED4, OUTPUT); digitalWrite(INT1,HIGH); digitalWrite(INT2,HIGH); digitalWrite(INT3,HIGH); digitalWrite(INT4,HIGH); digitalWrite(LED1,HIGH); digitalWrite(LED2,HIGH); 74 digitalWrite(LED3,HIGH); digitalWrite(LED4,HIGH); Serial.begin(9600); cli(); // tắt ngắt toàn cục /* Reset Timer/Counter1 */ TCCR1A = 0; TCCR1B = 0; TIMSK1 = 0; /* Setup Timer/Counter1 */ TCCR1B |= (1