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

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 (code+ bản vẽ)

84 26 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

Thông tin cơ bản

Tiêu đề 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
Tác giả Lê Quốc Đoàn
Người hướng dẫn TS. Nguyễn Thành Hùng
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Cơ Điện Tử
Thể loại Đồ Án Tốt Nghiệp
Năm xuất bản 2020
Thành phố Hà Nội
Định dạng
Số trang 84
Dung lượng 13,67 MB
File đính kèm Le Quoc Doan-20155263- DoAnTotNghiep.rar (15 MB)

Nội dung

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 mmin = 0,02kg mmax = 0,04kg - Khối lượng pin: , - 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 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, 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 q 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ự đoá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: Chương III: Hình 3.1: Cảm biến tiệm cận LJ12A3-8-Z/BX Hình 3.2: Sơ đồ nối dây cảm biến tiệm cận với Arduino UNO R3 Hình 3.3: Vị trí camera hệ thống thị giác máy Hình 3.4: Webcam Genius FaceCam 1000X Hình 3.5: ArduinoUNO R3 Hình 3.6: Giao tiếp Arduino với PC qua Serial communication Hình 3.7: Lưu đồ điều khiển hệ thống Hình 3.8: Thuật tốn điều khiển Arduino Chương IV: Chương V: Hình 5.1: Mơ hình thực tế Hình 5.2: Pin chụp ảnh nhận dạng Hình 5.3: Giao diện nhận dạng Hình 5.4: Bộ phận phân loại pin [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] 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 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 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 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 [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(); } 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") ) { count++; string filePathSave = ("E:\\DoAn2020\\Battery_Recycling\\BarterryRecycling_1\\BarterryRecycling_1\\Images\\Oi DoiOI_" + 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"); function 255, 102))) } resultType = "/n"; // Modify the image using g here // Create a brush with an alpha value and use the g.FillRectangle using (var overlayBrush = new SolidBrush(Color.FromArgb(150, 255, using (var pen = this.GetBrush(item.Confidence, image.Width-145)) { 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(); } } } } [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); 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

Ngày đăng: 24/12/2021, 22:13

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w