Ngày nay, việc dùng xử lý ảnh là rất phổ biến trong công nghiệp sản xuấtcũng như trong việc phân loại sản phẩm , nhận thấy tiềm năng ứng dụng của côngnghệ xử lý ảnh vào nông nghiệp nói chung và phân loại nông sản nói riêng nhómnghiên cứu và thực hiện đề tài “ Hệ thống phân loại cà chua dựa trên màu sắc vàkhối lượng”. Đề tài có khả năng phân nhận biết và phân loại cà chua đỏ loại 1 càchua đỏ loại 2, cà chua xanh cà chua vàng bằng cách sử dụng khác nhau cơ bản vềmàu sắc và khối lượng, một cách tự động, giải phóng sức lao động, năng xuất laođộng cao hơn. Kết quả thực hiện của đề tài đã nhận nhận biết và phân loại cà chuađỏ loại 1 cà chua đỏ loại 2, cà chua xanh cà chua vàng. Đầu tiên cà chua được đưavào máng chờ, xy lanh máng chờ đẩy cà chua vào ô chụp ảnh và cân khối lượng,máy tính xử lý được màu sắc xy lanh bàn cân đẩy cà chua vào băng chuyền, tùythuộc cà chua có phân loại gì mà tương ứng xylanh tại vị trí đó đẩy cà chua vàománg phân loại
BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH - ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ TÀI: HỆ THỐNG PHÂN LOẠI CÀ CHUA THEO MÀU SẮC VÀ KHỐI LƯỢNG GVHD: Th.S Nguyễn Thanh Nghĩa SVTH: Trần Hoàng Minh MSSV: 14141196 SVTH: Lê Duy Ân MSSV: 13141008 Tp Hồ Chí Minh – 8/2020 BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH - ĐỒ ÁN TỐT NGHIỆP NGÀNH KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ TÀI: HỆ THỐNG PHÂN LOẠI CÀ CHUA THEO MÀU SẮC VÀ KHỐI LƯỢNG GVHD: Th.S Nguyễn Thanh Nghĩa SVTH: Trần Hoàng Minh MSSV: 14141196 SVTH: Lê Duy Ân MSSV: 13141008 Tp Hồ Chí Minh - 8/20 TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÚC o0o Tp HCM, ngày 03 tháng 08 năm 2020 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Chun ngành: Hệ đào tạo: Khóa: Trần Hồng Minh Lê Duy Ân Kỹ thuật Điện - Điện tử Đại học quy 2014 MSSV: 14141196 MSSV: 13141008 Mã ngành: 01 Mã hệ: Lớp: 1414141 I TÊN ĐỀ TÀI: HỆ THỐNG PHÂN LOẠI CÀ CHUA THEO MÀU SẮC VÀ KHỐI LƯỢNG II NHIỆM VỤ Các số liệu ban đầu: − Kích thước băng tải : chiều dài 60cm, chiều rộng 10cm − Webcam Logitech C270p đóng vai trò thu nhận ảnh đầu vào − Board Arduino Nano điều khiển trung tâm mơ hình − Dùng xi lanh để đẩy sản phẩm − Động DC 24V điều khiển băng tải − Dùng cảm biến tiệm cận hồng ngoại xác định vị trí cà chua − Dùng LCD 16x2 hiển thị khối lượng cà chua − Dùng Loadcell module HX711 xác định khối lượng cà chua − Dùng van khí nén điều khiển xi lanh − Dùng module relay điều khiển van khí nén băng tải Nội dung thực hiện: − Tìm hiểu Arduino, Matlab, cảm biến, webcam − Kết nối Arduino với Matlab, webcam với Matlab, thiết bị ngoại vi với Arduino − Thiết kế khối nhận biết màu sắc, cân nặng − Thiết kế mơ hình tồn hệ thống − Xây dựng lưu đồ giải thuật viết chương trình điều khiển hệ thống − Thi cơng hồn chỉnh hệ thống điện, cho hệ thống chạy thử nghiệm hiệu chỉnh − Viết báo cáo thực − Báo cáo đề tài tốt nghiệp III NGÀY GIAO NHIỆM VỤ: 09/03/2020 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 03/08/2020 V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: ThS Nguyễn Thanh Nghĩa CÁN BỘ HƯỚNG DẪN SINH BM ĐIỆN TỬ CÔNG NGHIỆP – Y TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÚC o0o Tp HCM, ngày 15 tháng năm 2010 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên 1: Trần Hoàng Minh Lớp:14141DT1B MSSV:14141196 Họ tên sinh viên 2: Lê Duy Ân Lớp:13141DT1B MSSV:13141008 Tên đề tài: HỆ THỐNG PHÂN LOẠI CÀ CHUA THEO MÀU SẮC VÀ KHỐI LƯỢNG Tuần/ngày Tuần Từ 9/3/2020 đến 15/3/2020 Tuần Từ 16/3/2020 đến 22/3/2020 Tuần Từ 23/3/2020 đến 29/3/2020 Nội dung - Gặp GVHD nhận đề tài - Viết đề cương chi tiết - Tìm hiểu tham khảo đề tài nghiên cứu có liên quan đến điều khiển, giám sát xử lý hình ảnh dùng Arduino Matlab - Gặp báo cáo với GVHD hướng thực đề tài - Tìm hiểu cài đặt ngơn ngữ lập trình Matlab Tuần - Tìm hiểu vi điều khiển Arduino Nano Từ 30/3/2020 cài đặt phần mệm lập trình arduino đến 5/4/2020 - Tìm hiểu webcam phục vụ cho đề tài Tuần - Cài đặt driver cho webcam Từ 6/4/2020 - Tìm hiểu Loadcell, module HX711 đến 12/4/2020 - Tìm hiểu LCD 16x2, van khí nén xi lanh khí nén Tuần - Kết nối arduino webcam với Matlab Từ 13/4/2020 - Kết nối Loadcell module HX711 với đến 19/4/2020 arduino, tiến hành cân chỉnh loadcell - Kết nối arduino với LCD 16x2 thiết bị ngoại vi cịn lại Tuần - Thiết kế mơ hình hệ thống Từ 20/4/2020 - Xây dựng lưu đồ giải thuật đến 26/4/2020 Tuần - Báo cáo tiến độ cho GVHD Từ 27/4/2020 - Viết chương trình Matlab phân tích xử đến 3/5/2020 lý màu sắc - Chạy mơ kết máy tính Tuần - Báo cáo tiến độ cho GVHD Từ 4/5/2020 - Viết chương trình điều khiển cho phần nhập đến 10/5/2020 liệu, điều khiển van, xi lanh động Xác nhận GVHD - Chạy mô phỏng, kiểm tra hoạt động Tuần 10 - Báo cáo tiến độ với GVHD Từ 11/5/2020 - Viết chương trình thu nhận liệu đến 17/5/2020 loadcell - Viết chương trình điều khiển LCD - Chạy mô kiểm tra hoạt động Tuần 11 - Báo cáo tiến độ cho GVHD Từ 18/5/2020 - Thi cơng mơ hình hồn chỉnh đến 24/5/2020 - Viết chương trình hồn chỉnh cho tồn hệ thống Tuần 12 - Báo cáo tiến độ cho GVHD Từ 25/5/2020 - Thi cơng mơ hình hồn chỉnh đến 31/6/2020 - Viết chương trình hồn chỉnh cho tồn hệ thống Tuần 13 - Báo cáo tiến độ cho GVHD Từ 1/6/2020 - Thi cơng mơ hình hồn chỉnh đến 7/6/2020 - Viết chương trình hồn chỉnh cho tồn hệ thống Tuần 14 - Báo cáo tiến độ cho GVHD Từ 8/6/2020 - Hồn thành mơ hình đến 14/6/2020 - Viết báo cáo luận văn Tuần 15 - Báo cáo tiến độ cho GVHD Từ 15/6/2020 - Viết báo cáo luận văn đến 21/6/2020 Tuần 16 - Hoàn thiện báo cáo, chuận bị gặp GVPB Từ 22/6/2020 bảo vệ đến 28/6/2020 GV HƯỚNG DẪN (Ký ghi rõ họ tên) CAM ĐOAN Đề tài nhóm chúng em tự thực dựa vào số tài liệu cơng trình nghiên cứu, khơng chép từ tài liệu hay cơng trình có trước Nếu có chép nhóm đồ án hồn tồn chịu trách nhiệm Tp Hồ Chí Minh, ngày tháng năm 2020 Sinh viên thực đề tài 1: Trần Hoàng Minh Sinh viên thực đề tài 2: Lê Duy Ân LỜI CẢM ƠN Trên thực tế thành cơng mà khơng gắn liền với hỗ trợ, giúp đỡ dù hay nhiều, dù trực tiếp hay gián tiếp người khác Trong suốt thời gian từ bắt đầu học tập giảng đường đại học đến nay, em nhận nhiều quan tâm, giúp đỡ quý Thầy Cơ, gia đình bạn bè Với lịng biết ơn sâu sắc nhất, em xin gửi đến quý Thầy Cô Khoa Điện điện tử – Trường Đại Học Sư Phạm Kỹ Thuật TP.HCM với tri thức tâm huyết để truyền đạt vốn kiến thức quý báu cho chúng em suốt thời gian học tập trường Chúng em xin chân thành cảm ơn Ths Nguyễn Thanh Nghĩa tận tâm hướng dẫn chúng em qua buổi gặp mặt, làm việc Nếu lời hướng dẫn, dạy bảo Thầy em nghĩ đồ án tốt nghiệp chúng em khó hồn thiện Một lần nữa, em xin chân thành cảm ơn Thầy Mặc dù cố gắng nhiều, nhóm khó tránh khỏi lúc làm Thầy Cơ, bạn phiền lịng Kính mong quý Thầy Cô, bạn lượng thứ bỏ qua Với vốn kiến thức hạn hẹp kinh nghiệm sống ỏi chắn báo cáo có sai lầm vỉ sót Nhóm nghiên cứu làm thứ lỗi mong nhận dạy, đóng góp vơ q báu q Thầy bạn để nhóm hoàn thiện tốt đề tài Một lần nữa, xin chân thành cảm ơn! Sinh viên thực Trần Hoàng Minh Sinh viên thực Lê Duy Ân MỤC LỤC TRANG BÌA Error! Bookmark not defined NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP ii LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Error! Bookmark not defined LỜI CAM ĐOAN LỜI CẢM ƠN MỤC LỤC Error! Bookmark not defined LIỆT KÊ HÌNH VẼ .iError! Bookmark not defined LIỆT KÊ BẢNG VẼ Error! Bookmark not defined TÓM TẮT Error! Bookmark not defined Chương TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ 1.2 MỤC TIÊU 1.3 NỘI DUNG NGHIÊN CỨU 1.4 GIỚI HẠN CỦA ĐỀ TÀI 1.5 BỐ CỤC Chương 2: CỞ SỞ LÝ THUYẾT 2.1 GIỚI THIỆU VỀ XỬ LÝ ẢNH 2.2 KHÔNG GIAN MÀU CỦA ẢNH 2.2.1 Không gian màu RGB 2.2.2 Không gian màu HSV 2.3 NHỮNG VẤN ĐỀ TRONG XỬ LÝ ẢNH 10 2.3.1 Điểm ảnh 10 2.3.2 Ảnh số 10 2.3.3 Phân loại ảnh 11 2.3.4 Quan hệ điểm ảnh 11 2.3.5 Chuyển đổi ảnh màu sang ảnh xám 12 2.3.6 Nhị phân hóa ảnh 14 2.3.7 Lọc nhiễu 14 2.3.8 Phương pháp phát biên 14 2.3.9 Phân đoạn ảnh 15 Chương 3: TÍNH TOÁN THIẾT KẾ HỆ THỐNG .17 3.1 THIẾT KẾ PHẦN CỨNG 17 Bảng 3.1 Danh sách linh kiện 17 3.1.1 Khối thu nhận ảnh 18 3.1.2 Khối cảm biến 19 a Mô tả cảm biến tiệm cận hồng ngoại 19 b Mô tả Loadcell 1Kg module ADC HX711 20 3.1.2 Khối điều khiển 23 3.1.3 Khối chấp hành 25 a Mô tả động DC 25 b Mơ tả van khí nén 26 c Mơ tả xylanh khí nén .27 d Mô tả Module Relay kênh 29 e Mô tả LCD kèm module I2C 30 3.1.4 Khối nguồn 31 a Nguồn cấp cho động DC, đèn báo 24VDC: .31 b Nguồn cấp cho Arduino Uno Nano 31 c Nguồn cấp cho động Servo, Module Relay 5VDC 32 3.2 SƠ ĐỒ NGUYÊN LÝ 33 3.3 NGUYÊN LÝ HOẠT ĐỘNG 34 Chương THI CÔNG HỆ THỐNG .34 4.1 THI CÔNG HỆ THỐNG 34 4.2 LẬP TRÌNH HỆ THỐNG 41 4.2.1 Lưu đồ giải thuật hệ thống .41 4.2.2 Lưu đồ giải thuật xác định màu sắc 42 4.3 TÀI LIỆU HƯỚNG DẪN SỬ DỤNG VÀ THAO TÁC 43 Chương KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ 47 5.1 KẾT QUẢ TỔNG QUAN 47 5.2 KẾT QUẢ ĐẠT ĐƯỢC 47 5.2.1 Giao diện chương trình 47 5.2.2 Kết mơ hình hệ thống thực tế 48 5.2.3 Kết Quả Thực Nghiệm 52 5.3 NHẬN XÉT VÀ ĐÁNH GIÁ 53 Chương KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 54 6.1 KẾT LUẬN 54 6.2 HƯỚNG PHÁT TRIỂN 54 TÀI LIỆU THAM KHẢO 55 PHỤ LỤC 56 PHỤ LỤC if R ~= & R > G while cmd == % Gui tin hieu Mau_Do fprintf(s,'d');%send to arduino pause(1); break; end end if G > 5000 while cmd == %Gui tin hieu Mau_Xanh %dem_green = dem_green+1; fprintf(s,'x');% send to arduino pause(1); break; end end while cmd == %Gui tin hieu Mau_Vang %dem_yellow = dem_yellow+1; fprintf(s,'v'); pause(1); break; end while cmd == %Dem so luong Mau_Do nho dem_red_s = dem_red_s+1; fprintf(s,'4'); pause(1.5); break; end while cmd == %Dem so luong Mau_Do lon dem_red_l = dem_red_l+1; fprintf(s,'4'); pause(1.5); break; end while cmd == %Dem so luong Mau_Xanh BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 67 PHỤ LỤC dem_green = dem_green+1; fprintf(s,'4'); pause(1.2); break; end while cmd == %Dem so luong Mau_Vang dem_yellow = dem_yellow+1; fprintf(s,'4'); pause(1.2); break; end end %% Clearing Memory release(hVideoIn); % Release all memory and buffer used release(vidDevice); function instrcallback(hObject, eventdata, handles) global s; global cmd_value; global cmd; cmd = fread(s,[1])% recieve from arduino cmd_value = str2double(cmd); CODE ARDUINO #include #include #include #include LiquidCrystal_I2C lcd(0x27,16,2); unsigned long time1 = 0; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 68 PHỤ LỤC long t; int khoiluong_chuan = 2; float i; char incomingByte = 0; int k; int temp = -1; int s; int cb1_state = 1; int cb2_state = 1; int cb3_state = 1; int cb4_state = 1; int cb5_state = 1; int _d = 0; int d_state = 0; int dem2=0; int dem3=0; int dem4=0; int dem5=0; //pins: const int HX711_dout = 4; //mcu > HX711 dout pin const int HX711_sck = 5; //mcu > HX711 sck pin BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 69 PHỤ LỤC //HX711 constructor: HX711_ADC LoadCell(HX711_dout, HX711_sck); // input declare const int CB1 = 6; const int CB2 = 7; const int CB3 = 8; const int CB4 = 9; const int CB5 = 10; // output declare const int xilanh5 = A2; const int xilanh2 = A3; const int motor = 11; const int xilanh1 = 12; const int xilanh4 = 2; const int xilanh3 = 3; //const int sda = A4; //const int scl = A5; void setup() { //setup LCD 16x2 lcd.init(); lcd.backlight(); lcd.setCursor(2,0); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 70 PHỤ LỤC lcd.print("Welcome"); lcd.setCursor(0,1); lcd.print("loading "); //setup loadcell with HX711 LoadCell.begin(); float calibrationValue; // calibration value (see example file "Calibration.ino") calibrationValue = 696.0; // uncomment this if you want to set the calibration value in the sketch long stabilizingtime = 1000; // preciscion right after power-up can be improved by adding a few seconds of stabilizing time boolean _tare = true; //set this to false if you don't want tare to be performed in the next step LoadCell.start(stabilizingtime, _tare); if (LoadCell.getTareTimeoutFlag()) { //Serial.println("Timeout, check MCU>HX711 wiring and pin designations"); while (1); } else { LoadCell.setCalFactor(calibrationValue); // set calibration value (float) //Serial.println("Startup is complete"); } pinMode(CB1, INPUT); pinMode(CB2, INPUT); pinMode(CB3, INPUT); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 71 PHỤ LỤC pinMode(CB4, INPUT); pinMode(CB5, INPUT); pinMode(xilanh1, OUTPUT); pinMode(xilanh2, OUTPUT); pinMode(xilanh3, OUTPUT); pinMode(xilanh4, OUTPUT); pinMode(xilanh5, OUTPUT); pinMode(motor, OUTPUT); digitalWrite(xilanh1,HIGH); digitalWrite(xilanh2,HIGH); digitalWrite(xilanh3,HIGH); digitalWrite(xilanh4,HIGH); digitalWrite(xilanh5,HIGH); digitalWrite(motor,HIGH); // settup Serial Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: digitalWrite(motor, LOW); i = LoadCell.getData(); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 72 PHỤ LỤC load_cell(); cb_1(); cb_2(); cb_3(); cb_4(); cb_5(); } void xilanh_1() { delay(300); digitalWrite(xilanh1,LOW); delay(1000); digitalWrite(xilanh1,HIGH); delay(300); } void xilanh_2() { digitalWrite(xilanh2,LOW); delay(1000); digitalWrite(xilanh2,HIGH); k=2; } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 73 PHỤ LỤC void xilanh_3() { digitalWrite(xilanh3,LOW); delay(1000); digitalWrite(xilanh3,HIGH); k=3; } void xilanh_4() { digitalWrite(xilanh4,LOW); delay(1000); digitalWrite(xilanh4,HIGH); k=4; } void xilanh_5() { { digitalWrite(xilanh5,LOW); delay(1000); digitalWrite(xilanh5,HIGH); } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 74 PHỤ LỤC } void load_cell() { static boolean newDataReady = 0; // check for new data/start next conversion: if (LoadCell.update()) newDataReady = true; // get smoothed value from the dataset: if (newDataReady) { if (Serial.available() > 0) { incomingByte = Serial.read(); if (incomingByte == 'd') { Serial.write(2); delay(1000); lcd.clear(); lcd.setCursor(0,0); lcd.print("KL:"); lcd.setCursor(3,0); lcd.print(i); lcd.setCursor(8,0); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 75 PHỤ LỤC lcd.print("Gram"); xilanh_5(); if( i >= 35) { k=1; } else { k=3; } } if (incomingByte == 'v') { Serial.write(2); xilanh_5(); k=0; } if (incomingByte == 'x') { Serial.write(2); xilanh_5(); k=2; } if (incomingByte == '4') BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 76 PHỤ LỤC { Serial.write(2); } } } } void cb_1() { int cb1 = digitalRead(CB1); if (cb1 != cb1_state) { if(cb1 == 0) { s=0; xilanh_1(); start_(); Serial.write(1); } } cb1_state = cb1; } void cb_2() { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 77 PHỤ LỤC int cb2 = digitalRead(CB2); if (cb2 != cb2_state) { if(cb2 == 0) { if (k==3) { xilanh_2(); Serial.write(8); k=0; } } } cb2_state = cb2; } void cb_3() { int cb3 = digitalRead(CB3); if (cb3 != cb3_state) { if(cb3 == 0) { if (k==1) { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 78 PHỤ LỤC delay(200); Serial.write(9); xilanh_3(); k=0; } } } cb3_state = cb3; } void cb_4() { int cb4 = digitalRead(CB4); if (cb4 != cb4_state) { if(cb4 == 0) { if (k==2) { Serial.write(4); delay(200); xilanh_4(); k=0; } } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 79 PHỤ LỤC } cb4_state = cb4; } void cb_5() { int cb5 = digitalRead(CB5); if (cb5 != cb5_state) { if(cb5 == 0) { Serial.write(5); } } cb5_state = cb5; } void start_() { static boolean newDataReady = 0; while(s