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

Thiết kế và chế tạo băng tải phân loại cà chua theo màu sắc và khối lượng

98 3 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ế Và Chế Tạo Băng Tải Phân Loại Cà Chua Theo Màu Sắc Và Khối Lượng
Tác giả Lê Công Chánh, Võ Duy Liêm, Nguyễn Phùng Trung Đức
Người hướng dẫn TS. Nguyễn Vũ Lân
Trường học Trường Đại Học Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh
Chuyên ngành Công Nghệ Kỹ Thuật Cơ Điện Tử
Thể loại Đồ Án Tốt Nghiệp
Năm xuất bản 2023
Thành phố Tp. Hồ Chí Minh
Định dạng
Số trang 98
Dung lượng 6,37 MB

Nội dung

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP NGÀNH CNKT CƠ ĐIỆN TỬ THIẾT KẾ VÀ CHẾ TẠO BĂNG TẢI PHÂN LOẠI CÀ CHUA THEO MÀU SẮC VÀ KHỐI LƯỢNG GVHD: TS NGUYỄN VŨ LÂN SVTH: LÊ CÔNG CHÁNH VÕ DUY LIÊM NGUYỄN PHÙNG TRUNG ĐỨC SKL011001 Tp Hồ Chí Minh, Tháng năm 2023 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ KHOA CƠ KHÍ CHẾ TẠO MÁY ĐỒ ÁN TỐT NGHIỆP Đề tài: “THIẾT KẾ VÀ CHẾ TẠO BĂNG TẢI PHÂN LOẠI CÀ CHUA THEO MÀU SẮC VÀ KHỐI LƯỢNG” Giảng viên hướng dẫn: TS NGUYỄN VŨ LÂN Sinh viên thực hiện: LÊ CÔNG CHÁNH 19146025 VÕ DUY LIÊM 19146019 NGUYỄN PHÙNG TRUNG ĐỨC 19146041 19146CL 2019 - 2023 Lớp: Khố: Tp Hồ Chí Minh, tháng 07/2023 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ BỘ MÔN CƠ ĐIỆN TỬ ĐỒ ÁN TỐT NGHIỆP Đề tài: “THIẾT KẾ VÀ CHẾ TẠO BĂNG TẢI PHÂN LOẠI CÀ CHUA THEO MÀU SẮC VÀ KHỐI LƯỢNG” Giảng viên hướng dẫn: Sinh viên thực hiện: Lớp: Khoá: TS NGUYỄN VŨ LÂN LÊ CÔNG CHÁNH 19146025 VÕ DUY LIÊM 19146019 NGUYỄN PHÙNG TRUNG ĐỨC 19146041 19146CL 2019 - 2023 Tp Hồ Chí Minh, tháng 07/2023 TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HCM KHOA CƠ KHÍ CHẾ TẠO MÁY CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự – Hạnh phúc Bộ môn Cơ đện tử NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Học kỳ II / năm học 2022-2023 Giảng viên hướng dẫn: TS NGUYỄN VŨ LÂN Sinh viên thực hiện: Lê Công Chánh Võ Duy Liêm Nguyễn Phùng Trung Đức MSSV: 19146025 MSSV: 19146019 MSSV: 19146041 Điện thoại: 0819383879 Điện thoại: 0868934063 Điện thoại: 0868693288 Mã số đề tài: 22223DT317 Tên đề tài: Thiết kế chế tạo băng tải phân loại cà chua theo màu sắc khối lượng Các số liệu, tài liệu ban đầu: …………….……… ……….………………………………………………………………… …………….……… ……….………………………………………………………………… …………….……… ……….………………………………………………………………… Nội dung đồ án: …………….……… ……….………………………………………………………………… …………….……… ……….………………………………………………………………… …………….……… ……….………………………………………………………………… Các sản phẩm dự kiến: …………….……… ……….………………………………………………………………… …………….……… ……….………………………………………………………………… Ngày giao đồ án: Ngày nộp đồ án: Ngôn ngữ trình bày: Bản báo cáo: Trình bày bảo vệ: i Tiếng Anh Tiếng Anh Tiếng Việt Tiếng Việt TRƯỞNG KHOA TRƯỞNG BỘ MÔN GIÃNG VIÊN HƯỚNG DẪN (Ký, ghi rõ họ tên) (Ký, ghi rõ họ tên) (Ký, ghi rõ họ tên)  Được phép bảo vệ (GVHD ký, ghi rõ họ tên) ii LỜI CAM KẾT - Tên đề tài: Thiết kế chế tạo băng tải phân loại cà chua theo màu sắc khối lượng - Giáo viên hướng dẫn: TS Nguyễn Vũ Lân - Sinh viên thực hiện: MSSV: 19146025 Điện thoại: 0819383879 Võ Duy Liêm MSSV: 19146019 Nguyễn Phùng Trung Đức MSSV: 19146041 - Email: 19146025@student.hcmute.edu.vn Điện thoại: 0868934063 Điện thoại: 0868693288 Lê Cơng Chánh - Ngày nộp khóa luận tốt nghiệp (ĐATN): - Lời cam kết: “Tơi xin cam đoan khóa luận tốt nghiệp (ĐATN) cơng trình nhóm tơi nghiên cứu thực Chúng tơi khơng chép từ viết cơng bố mà khơng trích dẫn nguồn gốc Nếu có vi phạm nào, chúng tơi xin chịu hồn tồn trách nhiệm” Tp Hồ Chí Minh, ngày … tháng … năm 2023 Ký tên iii LỜI CẢM ƠN Chúng em xin chân thành cảm ơn Khoa Cơ khí Chế tạo máy, trường Đại học Sư phạm Kỹ thuật thành phố Hồ Chí Minh tạo điều kiện cho chúng em học tập, tìm hiểu để thực tốt đề tài Chúng em xin cảm ơn thầy Nguyễn Vũ Lân hướng dẫn, truyền đạt kinh nghiệm để nhóm chúng em hồn thành đồ án cách tốt Chúng em xin cảm ơn thầy cô môn Cơ điện tử nói riêng thầy khoa Cơ khí Chế tạo máy nói chung giảng dạy chúng em tâm huyết, hỗ trợ chúng em nhiệt tình mặt Cuối cùng, dù cố gắng để hồn thiện thật tốt đồ án, với điều kiện thời gian kinh nghiệm cịn hạn chế, nhóm chúng em khơng thể tránh khỏi thiếu sót, chúng em mong nhận góp ý lời nhận xét quý báu từ thầy để nhóm hồn thiện nâng cao kiến thức iv TÓM TẮT ĐỒ ÁN Đề tài "Thiết kế chế tạo băng tải phân loại cà chua theo màu sắc khối lượng" nhằm đưa giải pháp hiệu tự động hóa q trình phân loại cà chua ngành nơng nghiệp Mục tiêu tăng suất chất lượng sản phẩm cà chua, đồng thời giảm thời gian công sức lao động nông dân Trong đề tài này, đề xuất xây dựng hệ thống băng tải thông minh, kết hợp với công nghệ phân loại màu sắc khối lượng, nhằm tự động phân loại cà chua theo tiêu chuẩn định sẵn Hệ thống thiết kế chế tạo cho linh hoạt, dễ dàng cài đặt điều chỉnh theo yêu cầu sản xuất Với ứng dụng công nghệ thông tin cảm biến phân loại, băng tải tự động nhận diện màu sắc khối lượng cà chua chúng di chuyển băng tải Sau đó, hệ thống phân loại chúng vào nhóm tương ứng, tạo dãy cà chua xếp theo màu sắc khối lượng Qua việc áp dụng công nghệ tự động hóa q trình phân loại cà chua, đề tài hướng đến nhiều lợi ích Đầu tiên, nông dân tiết kiệm thời gian công sức, không cần phải phân loại cà chua thủ công Thứ hai, sản phẩm cà chua phân loại xác theo tiêu chuẩn, đảm bảo chất lượng giá trị thương mại Cuối cùng, quy trình sản xuất tự động giúp tăng suất hiệu sản xuất, đồng thời góp phần vào phát triển bền vững ngành nơng nghiệp Tóm lại, đề tài "Thiết kế chế tạo băng tải phân loại cà chua theo màu sắc khối lượng" đặt mục tiêu tạo hệ thống tự động hóa ngành nông nghiệp, giúp nâng cao suất, chất lượng hiệu sản xuất trình phân loại cà chua v MỤC LỤC DANH MỤC BẢNG BIỂU DANH MỤC HÌNH ẢNH DANH MỤC TỪ VIẾT TẤT CHƯƠNG 1: GIỚI THIỆU 1.1 Tính cấp thiết đề tài 1.2 Ý nghỉa khoa học thực tiễn đề tài 1.3 Mục tiêu nghiên cứu đề tài 1.4 Đối tượng phạm vi nghiên cứu 1.5 Phương pháp nghiên cứu 1.6 Kết cấu Đồ án tốt nghiệp CHƯƠNG 2: TỔNG QUAN NGHIÊN CỨU ĐỀ TÀI 2.1 Tổng quan hệ thống phân loại cà chua 2.2 Nguyên tắc phân loại cà chua 2.2.1 Phân loại theo kích thước 2.2.2 Phân loại theo màu sắc 2.2.3 Phân loại theo khối lượng 2.3 Tổng quan phương pháp xử lý ảnh 10 2.3.1 Thu nhận ảnh (Image Acquisition) 11 2.3.2 Tiền xử lý ảnh (Image processing) 11 2.3.3 Phân đoạn ảnh (Segmentation) 11 2.3.4 Biểu diễn ảnh (Image Representation) 11 2.3.5 Nhận dạng ảnh nội suy ảnh (Image Recognition and Interpretation) 12 2.3.6 Cơ sở tri thức (Knowledge Base) 12 2.3.7 Mơ tả q trình 12 CHƯƠNG 3: CƠ SỞ LÝ THUYẾT 13 3.1 Lập trình Arduino 13 3.1.1 Tổng quan Arduino 13 3.1.2 Cấu tạo Arduino 13 3.1.3 Các loại Arduino phổ biến 14 3.1.4 Ứng dụng Arduino 19 vi 3.2 Lập trình nhúng Raspberry Pi 19 3.2.1 Khái niệm Raspberry Pi 19 3.2.2 Phần cứng 20 3.2.3 Hệ điều hành phần mềm 21 3.3 Cảm biến trọng lượng Loadcell 23 3.3.2 Phân loại Loadcell 23 3.4 Các phần mềm sử dụng 27 3.4.1 Phần mềm Protues 27 3.4.2 Thư viện QT 28 CHƯƠNG 4: PHƯƠNG HƯỚNG VÀ CÁC GIẢI PHÁP 30 4.1 Tổng quan mơ hình 30 4.1.1 Sở đồ tổng quát 30 4.1.2 Sơ đồ khối 31 4.2 Thiết kế phần cứng 31 4.2.1 Lựa chọn thiết bị linh kiện 31 4.2.2 Sơ đồ kết nối 41 4.2.3 Mạch in PCB 42 4.3 Thiết kế phần mềm 42 4.3.1 Bảng phân công tín hiệu 42 4.3.2 Nguyên lý hoạt động 43 4.3.3 Lưu đồ thuật toán 44 CHƯƠNG 5: ĐỀ XUẤT CƠNG NGHỆ TÍNH TỐN, THIẾT KẾ 46 5.1 Thiết kế khí 46 5.1.1 Tính tốn thiết kế băng tải 46 5.1.2 Tính tốn chọn động Servo 47 5.1.2 Bản vẽ hình chiếu mơ hình 48 5.1.3 Mơ hình hồn chỉnh 50 5.2 Thiết kế giao diện 51 5.3 Xác định màu sắc cà chua xử lý ảnh 61 CHƯƠNG 6: CHẾ TẠO THỬ NGHIỆM – ĐÁNH GIÁ 65 vii PHỤ LỤC I Code lập trình Arduino #include "LiquidCrystal_I2C.h" #include #include "HX711.h" Servo servo1; Servo servo2; #define CB1 13 #define CB2 12 #define CB3 11 #define CB4 10 #define L1 #define L2 #define thu 180 #define gat 130 HX711 scale(A1, A0); float hieuchinh = 1; float zero; float cannang; int m = 0, m_set = 0; String dataa = ""; char mang[30]; char *token1, *token2, *token3, *token4; int loai = 0, st = 0, i = 0; int cng = 0, cnh = 0, xanh = 0, runn = 0; //********************************************************************** *******************// 73 void setup() { Serial.begin(9600); // put your setup code here, to run once: pinMode(CB1, INPUT_PULLUP); pinMode(CB2, INPUT_PULLUP); pinMode(CB3, INPUT_PULLUP); pinMode(CB4, INPUT_PULLUP); pinMode(L1, OUTPUT); pinMode(L2, OUTPUT); digitalWrite(L1, LOW); digitalWrite(L2, LOW); scale.set_scale(1771.01f); scale.tare(); zero = scale.get_units(1) * hieuchinh; cannang = scale.get_units(1) * hieuchinh - zero; m = (int)cannang; servo1.attach(9); servo2.attach(8); servo1.write(thu); servo2.write(thu); gui_du_lieu(); } //********************************************************************** *******************// void loop() { Auto(); } 74 //********************************************************************** *******************// void serialEvent() { while (Serial.available()) { dataa = Serial.readStringUntil('\n'); dataa.toCharArray(mang, 20); token1 = strtok(mang, "|"); token2 = strtok(NULL, "|"); String st1(token1); String st2(token2); if (st1 == "a") st = st2.toInt(); else if (st1 == "b") m_set = st2.toInt(); else if (st1 == "c") loai = st2.toInt(); } } //********************************************************************** *******************// void Auto() { if (st == 1) { digitalWrite(L2, HIGH); if (digitalRead(CB1) == 0) { delay(400); digitalWrite(L2, LOW); delay(1000); runn = 1; gui_du_lieu(); doc(6); 75 delay(1000); runn = 0; gui_du_lieu(); while (digitalRead(CB1) == 0) { digitalWrite(L2, HIGH); delay(200); } delay(200); } if (loai == 0) { if (m < m_set) { if (digitalRead(CB2) == 0) { servo1.write(gat); delay(5000); servo1.write(thu); cnh++; delay(200); gui_du_lieu(); } } else { if (digitalRead(CB3) == 0) { servo2.write(gat); delay(5000); servo2.write(thu); cng++; delay(200); 76 gui_du_lieu(); } } } else { if (digitalRead(CB3) == 0) { while (digitalRead(CB3) == 0) { delay(500); } xanh++; gui_du_lieu(); } } } else { digitalWrite(L2, LOW); doc(1); gui_du_lieu(); delay(200); } } //********************************************************************** *******************// void gui_du_lieu() { 77 Serial.print(m); Serial.print("|"); Serial.print(cng); Serial.print("|"); Serial.print(cnh); Serial.print("|"); Serial.print(xanh); Serial.print("|"); Serial.println(runn); } //********************************************************************** *******************// void doc(int lan) { for (i = 0; i < lan; i++) { cannang = scale.get_units(1) - zero; } m = (int)cannang; if (m < 3) m = 0; } Code lập trình Raspberry from PyQt5 import QtWidgets,uic from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QVBoxLayout from PyQt5 import QtCore from PyQt5.QtGui import QIcon, QPixmap, QFont from PyQt5.QtCore import QTimer, QTime, Qt 78 from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtCore import * import time import cv2 from time import sleep import numpy as np import array as arr import math import sys import serial import os from imutils.video import VideoStream from imutils import face_utils from PIL import Image import imutils from datetime import datetime # - # ser = serial.Serial('/dev/ttyUSB0',9600) #ser = serial.Serial('COM1',baudrate = 9600, timeout = 1) print(ser.name) vs = VideoStream(src=0).start() cp = m_save = 0; m = 0; cng = 0; cnh = 0; xanh = 0; mang = []*10 79 loai = 0; runn = st = 0; loai = def Time(): global status_str global temp_str global temp global status global m_save, m_set, m, cng, cnh, xanh, loai, runn global st, loai m_set = call.Slider.value() call.lb_set.setText(str(m_set) + " Gam") call.lb_m.setText(str(m) + " Gam") call.lb_cng.setText(str(cng)) call.lb_cnh.setText(str(cnh)) call.lb_x.setText(str(xanh)) # Đọc ảnh từ camera frame = vs.read() frame = cv2.flip(frame,1) # chỉnh kích thước ảnh để tăng tốc độ xử lý frame = imutils.resize(frame, width=600) # Hiển thị ảnh lên label liên tiếp video img = QImage(frame, frame.shape[1], frame.shape[0], QImage.Format_RGB888).rgbSwapped() pix = QPixmap.fromImage(img) call.lb_im.setPixmap(pix) if st == 0: 80 call.STASTO.setStyleSheet("background-color: rgb(255, 0, 0)") elif st == 1: call.STASTO.setStyleSheet("background-color: rgb(85, 255, 0)") # Nhận liệu -if(ser.in_waiting > 0): s = ser.readline() #Doc vao data data = s.decode() # decode s data = data.rstrip() # cut "\r\n" at last of string print(data) #In man hinh mang = data.split("|") m = mang[0] cng = int(mang[1]) cnh = int(mang[2]) xanh = int(mang[3]) runn = int(mang[4]) if runn == 1: # #img1 = cv2.imread("1.jpg",1) img1 = frame img1 = img1[73:416,75:504] min_color = np.array([90, 60, 0]) max_color = np.array([180, 120, 65]) maskk = cv2.inRange(img1, min_color, max_color) im_bw = cv2.threshold(maskk, 100, 255, cv2.THRESH_BINARY_INV)[1] final = cv2.bitwise_and(img1, img1, mask = im_bw) img2 = QImage(final, final.shape[1],final.shape[0],final.strides[0], QImage.Format_RGB888).rgbSwapped() 81 pix2 = QPixmap.fromImage(img2) call.lb_im_2.setPixmap(pix2) dem = B=0 R=0 G=0 '''for y in range(0,343): for x in range(0,429): px = final[y][x] B = B + px[0] G = G + px[1] R = R + px[2] if px[0] != or px[1] != or px[2] != 0: dem = dem + 1''' #3print ("dem = ",dem) x=0 y=0 for i in range(0,5780): px = final[y][x] B = B + px[0] G = G + px[1] R = R + px[2] if px[0] != or px[1] != or px[2] != 0: dem = dem + if x < 425: x=x+5 else : 82 y=y+5 x=0 TB = R/dem if TB > 100: loai = else : loai = #print("tb = ", TB) #print("Loai = ",loai) # runn = ser.write(b'c') ser.write(b'|'); ser.write(str(loai).encode()) ser.write(b'\r\n') if loai == 0: call.lb_mau.setText("QUẢ CHÍN") else: call.lb_mau.setText("QUẢ XANH") # # def thoat(): call.close() exit(app.exec()) # # def dat(): ser.write(b'b') 83 ser.write(b'|') ser.write(str(m_set).encode()) ser.write(b'\r\n') ser.flush() # # def stasto(): global st st = st + if st >= 2: st = ser.write(b'a') ser.write(b'|') ser.write(str(st).encode()) ser.write(b'\r\n') ser.flush() # # # # def doc_mau(): global loai loai = # # app=QtWidgets.QApplication([]) call=uic.loadUi("AUTO.ui") call.THOAT.clicked.connect(thoat) call.DAT.clicked.connect(dat) call.STASTO.clicked.connect(stasto) 84 call.timer = QTimer() call.timer.timeout.connect(Time) call.timer.start(50) call.show() app.exec() 85 PHỤ LỤC II Bảng tra hệ số ma sát Thư viện dùng cho Động Servo MG996R #include Servo myservo; // create servo object to control a servo void setup() { myservo.attach(9,600,2300); // (pin, min, max) } void loop() { myservo.write(0); // tell servo to go to a particular angle delay(1000); myservo.write(90); delay(500); myservo.write(135); delay(500); myservo.write(180); delay(1500); } 86 S K L 0

Ngày đăng: 14/11/2023, 10:12

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

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w