Đề tài “Nghiên cứu, thiết kế và thi công hệ thống phân loại sản phẩm theo cân nặng, màu sắc; Quản lý và điều khiển bằng điện thoại” là mô hình phân loại sản phẩm, cụ thể ở đây là nông sản quả cà chua theo cân nặng và màu sắc đã được cài đặt sẵn. Hoạt động của mô hình dựa trên cơ chế điều khiển động cơ và xử lý tín hiệu tương tự (màu sắc, cân nặng) của kit Raspberry Pi 3 Model B, với ngôn ngữ lập trình Python và thư viện OpenCV, cùng khả năng quản lí và điều khiển qua điện thoại thông minh. Mời các bạn cùng tham khảo.
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: NGHIÊN CỨU, THIẾT KẾ VÀ THI CÔNG MƠ HÌNH ĐẾM VÀ PHÂN LOẠI SẢN PHẨM THEO CÂN NẶNG, MÀU SẮC GVHD: Th.S NGUYỄN ĐÌNH PHÚ SVTH: PHẠM THỊ THANH THẢO 15141284 PHAN TRẦN HOÀI VŨ 15141333 Tp Hồ Chí Minh – 06/2019 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: NGHIÊN CỨU, THIẾT KẾ VÀ THI CƠNG MƠ HÌNH ĐẾM VÀ PHÂN LOẠI SẢN PHẨM THEO CÂN NẶNG, MÀU SẮC GVHD: ThS NGUYỄN ĐÌNH PHÚ SVTH: PHẠM THỊ THANH THẢO 15141284 PHAN TRẦN HỒI VŨ 15141333 Tp Hồ Chí Minh – 07/2019 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 tháng năm 2019 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Phạm Thị Thanh Thảo MSSV: 15141284 Phan Trần Hoài Vũ MSSV: 15141333 Chuyên ngành: Điện tử công nghiệp Mã ngành: 41 Hệ đào tạo: Đại học quy Mã hệ: Khóa: 2015 Lớp: 15141DT2A I TÊN ĐỀ TÀI: NGHIÊN CỨU, THIẾT KẾ VÀ THI CƠNG MƠ HÌNH ĐẾM VÀ PHÂN LOẠI SẢN PHẨM THEO CÂN NẶNG, MÀU SẮC II NHIỆM VỤ Các số liệu ban đầu: (ghi thông số, tập tài liệu tín hiệu, hình ảnh, …) Nội dung thực hiện: (ghi nội dung cần thực phần tổng quan) i III NGÀY GIAO NHIỆM VỤ: 18/02/2019 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 10/06/2019 V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: ThS Nguyễn Đình Phú CÁN BỘ HƯỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ii TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT KHOA ĐIỆN-ĐIỆN TỬ NAM BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y ĐỘC LẬP - TỰ DO - HẠNH PHÚC SINH o0o Tp HCM, ngày tháng năm 2019 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên 1: Phạm Thị Thanh Thảo Lớp: 1514DT2A MSSV: 15141284 Họ tên sinh viên 2: Phan Trần Hoài Vũ Lớp: 1514DT2A MSSV: 15141333 Tên đề tài: NGHIÊN CỨU, THIẾT KẾ VÀ THI CƠNG MƠ HÌNH ĐẾM VÀ PHÂN LOẠI SẢN PHẨM THEO CÂN NẶNG, MÀU SẮC Tuần/ngày Tuần Nội dung Xác nhận GVHD Nhận đồ án, tìm hiểu đề tài (18-24/02/2019) Tuần Tìm hiểu hướng làm đề tài, chọn vi xử lý điều (25-03/03/2019) khiển, ngơn ngữ lập trình Tuần Tìm hiểu Raspberry Pi mode B ngơn ngữ lập (04-10/03/2019) trình Python Tuần Tiến hành lập trình nhận diện phân loại màu sắc (11-17/03/2019) Tuần Hồn chỉnh phân loại màu sắc, lập trình phân loại (18-24/03/2019) cân nặng Tuần 6, 7, Tiến hành thiết kế phần cứng cho toàn hệ (25-14/04/2019) thống iii Tuần 9, 10, 11, Chạy thử nghiệm hệ thống hiệu chỉnh cho 12 hệ thống hoạt động ổn định (15-12/05/2019) Tuần 13, 14, 15 Hoàn chỉnh báo cáo (13-02/06/2019) 03/06/2019 Hoàn thành nhiệm vụ đồ án GV HƯỚNG DẪN (Ký ghi rõ họ tên) iv LỜI CAM ĐOAN Đề tài “Nghiên cứu, thiết kế thi cơng mơ hình đếm phân loại sản phẩm theo cân nặng màu sắc” nhóm đề tài tự thực dựa vào tham khảo số tài liệu trước khơng chép từ tài liệu hay cơng trình khác Người thực đề tài Phạm Thị Thanh Thảo Phan Trần Hoài Vũ v LỜI CẢM ƠN Lời đầu tiên, nhóm đề tài xin gởi lời cảm ơn chân thành đến Thầy Nguyễn Đình Phú - giảng viên khoa Điện-Điện tử, Trường ĐH Sư phạm Kỹ thuật Tp HCM theo sát hỗ trợ hướng dẫn nhóm cách chi tiết q trình thực đề tài Thầy ln hỗ trợ hết mình, giải đáp thắc mắc, sai sót gợi ý phương án thực cho khả thi dễ tiếp cận Nhóm xin gửi lời cảm ơn đến quý thầy(cô) khoa Điện-Điện tử tận tình giải đáp thắc mắc, nguyện vọng trình thực đề tài nhóm Sự hỗ trợ q thầy(cơ) đóng góp phần khơng nhỏ vào thành cơng ngày hơm Nhóm đề tài xin cảm ơn bạn sinh viên khoa Điện-Điện tử nhiệt tình giúp đỡ, hỗ trợ nhóm, đặc biệt tập thể lớp 15141DT2A Những đóng góp bạn ln nhóm tiếp nhận đánh giá cao Cuối cùng, nhóm xin cảm ơn chân thành sâu sắc đến Cha, Mẹ - người bên cạnh hỗ trợ tài tinh thần suốt năm tháng qua Thành công đề tài ngày hơm phần đóng góp to lớn người Một lần nữa, nhóm xin gởi lời cảm ơn chân thành đến quý thầy cô, bạn bè quý phụ huynh hỗ trợ nhóm thực đề tài hồn chỉnh Xin chân thành cảm ơn! Người thực đề tài Phạm Thị Thanh Thảo Phan Trần Hoài Vũ vi MỤC LỤC LỜI CẢM ƠN vi MỤC LỤC vii LIỆT KÊ HÌNH VẼ x LIỆT KÊ BẢNG BIỂU xiii Chương 1: 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 1.5 BỐ CỤC Chương 2: CƠ SỞ LÝ THUYẾT 2.1 TỔNG QUAN VỀ XỬ LÝ ẢNH 2.1.1 Giới thiệu xử lý ảnh 2.1.2 Những vấn đề xử lý ảnh[2] .7 2.1.3 Ngôn ngữ Python thư viện OpenCV 11 2.2 PHƯƠNG PHÁP PHÂN LOẠI SẢN PHẨM THEO MÀU SẮC, CÂN NẶNG 12 2.2.1 Các màu sắc sản phẩm 13 2.2.2 Phương pháp phân loại theo màu sắc 18 2.2.3 Phương pháp phân loại theo cân nặng 18 2.3 GIỚI THIỆU PHẦN CỨNG 19 2.3.1 Raspberry Pi model B [5] 19 2.3.2 USB Camera 22 2.3.3 Cảm biến cân nặng 23 2.3.4 Xi-lanh khí nén (air cylinder)[7] 26 2.3.5 Van điện từ (solenoid) 28 Chương 3: TÍNH TỐN VÀ THIẾT KẾ 30 3.1 TỔ CHỨC CÁC KHỐI TRONG HỆ THỐNG 30 3.2 THIẾT KẾ CÁC KHỐI TRONG HỆ THỐNG 31 vii 3.2.1 Khối thu tín hiệu hình ảnh (camera) .31 3.2.2 Khối thu tín hiệu cân nặng (loadcell) khối ADC (module HX711).34 3.2.3 Khối xử lý trung tâm (Raspberry Pi 3) 36 3.1.1 Động DC; Xi-lanh Van điện từ 37 3.1.2 Khối hiển thị 45 3.1.3 Khối nguồn 45 3.1.4 Sơ nguyên lý toàn mạch 49 Chương 4: THI CÔNG HỆ THỐNG 50 4.1 GIỚI THIỆU 50 4.2 THI CÔNG HỆ THỐNG 50 4.2.1 Thi công board mạch 50 4.4.2 Lắp ráp kiểm tra .51 4.3 ĐÓNG GÓI VÀ THI CƠNG MƠ HÌNH 54 4.4 LẬP TRÌNH HỆ THỐNG 56 4.4.1 Lưu đồ giải thuật 56 4.4.2 Giao diện hệ thống 63 4.5 VIẾT TÀI LIỆU HƯỚNG DẪN SỬ DỤNG, THAO TÁC 64 Chương KẾT QUẢ - NHẬN XÉT - ĐÁNH GIÁ 76 5.1 KẾT QUẢ TỔNG QUAN 76 5.2 KẾT QUẢ ĐẠT ĐƯỢC 77 5.2.1 Giao diện hiển thị Tkinter 77 5.2.2 Giao diện Web Cơ sở lưu trữ liệu Realtime Database 78 5.2.3 Kết mơ hình thực tế 79 5.2.4 Kết thực nghiệm .83 5.3 NHẬN XÉT – ĐÁNH GIÁ 84 5.3.1 Nhận xét kết đạt 84 5.3.2 Đánh giá kết 86 Chương 6: KẾT LUẬN – HƯỚNG PHÁT TRIỂN 87 6.1 KẾT LUẬN 87 6.2 HƯỚNG PHÁT TRIỂN 88 viii CHƯƠNG KẾT QUẢ - NHẬN XÉT – ĐÁNH GIÁ 5.3.2 Đánh giá kết Sau thời gian tìm hiểu nghiên cứu đề tài, nhóm đưa đánh sau: - Đề tài sau hồn thành có tính ứng dụng cao vào thực tế, có điểm độ ổn định cao - Phạm vi sử dụng hộ gia đình thương lái nhỏ (thị trường tiêu thụ lớn) nên đề tài cải tiến, phát triển thêm nhiều tính để đưa vào thương mại hóa sản phẩm, tạo nguồn lợi kinh tế Qua số nhận xét đánh giá đề tài, nhóm nhận thấy đề tài nghiên cứu hay, hữu ích, có tính ứng dụng cao vào thực tế BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 86 CHƯƠNG KẾT QUẢ - NHẬN XÉT – ĐÁNH GIÁ Chương 6: KẾT LUẬN – HƯỚNG PHÁT TRIỂN 6.1 KẾT LUẬN Sau thời gian nghiên cứu, tìm hiểu với giúp đỡ thầy Nguyễn Đình Phú bạn bè, hệ thống mà nhóm hoàn thành đáp ứng tốt yêu cầu đề Các khối chức hoạt động đúng, đảm bảo cập nhật liệu xác, hệ thống chạy ổn định thời gian dài khơng phát sinh lỗi, có giao diện đẹp mắt đáp ứng tính thẩm mỹ, riêng vấn đề sử dụng dễ dàng, an tồn, thân thiện với hộ gia đình thương lái nhỏ Ưu điểm sản phẩm: - Xác suất cập nhật xác liệu thực 100% - Hoạt động ổn định thời gian dài - Kích thước nhỏ gọn, dễ lắp đặt; giao diện tùy chỉnh đơn giản, dễ sử dụng - Giao diện hiển thị đẹp, rõ ràng có tính thẩm mỹ cao, cập nhật số lượng cà chua sau phân loại xác 100% - Tính an tồn cao, thân thiện với người dùng - Kinh phí mức phù hợp thương mại hóa sản phẩm - Dễ dàng nghiên cứu mở rộng thêm Khuyết điểm sản phẩm: - Không có nguồn độc lập nên khơng thể hoạt động điện - Giao diện tùy chỉnh thông số loại sản phẩm giới hạn qua máy chủ cố định - Chỉ hoạt động có internet - Chưa có tính bảo mật cao - Tốc độ xử lý chậm, xử lý quả, tồn sai số BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 87 CHƯƠNG KẾT QUẢ - NHẬN XÉT – ĐÁNH GIÁ Sau hoàn thiện đề tài, sản phẩm đạt mục tiêu đặt đề trước So với hệ thống phân loại có sẵn thị trường, ví dụ Hệ thống máy phân loại cà chua đất canh tác(có diện tích lớn), Hệ thống máy phân loại cà chua cơng nghiệp(đắt tiền) Sản phẩm nhóm ưu việt chỗ: có độ xác, độ tin cậy cao, mơ hình phù hợp với phạm vi hộ gia đình, thương lái nhỏ, dễ dàng vận hành tùy chỉnh mà khơng cần phiền đến kỹ thuật viên Vì thế, nhóm đánh giá việc áp dụng sản phẩm để thương mại hóa điều hồn tồn khả thi 6.2 HƯỚNG PHÁT TRIỂN Từ mặt hạn chế đề tài, nhóm đưa số hướng phát triển để hệ thống hồn chỉnh hoạt động hiệu hơn: - Xử lý đa luồng, tức nhận biết phân loại lúc nhiều cà chua - Điều khiển toàn hệ thống thông qua webserver qua ứng dụng điện thoại thông minh - Mở rộng phạm vi đối tượng phân loại (có thể nhận biết cà chua bị sâu đục, thối, dập; mở rộng nông sản khác dưa chuột, hồng, chanh…) - Thay dùng loadcell sử dụng thuật tốn phân loại theo kích thước cà chua - Thiết kế phận khí trước đầu băng chuyền để thuận tiện việc di chuyển cà chua vào buồng chụp - Thay dùng xi-lanh khí nén thay xi-lanh điện để hệ thống gọn gàng BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 88 TÀI LIỆU THAM KHẢO Sách tham khảo: [1] Nguyễn Quang Hoan, “Xử lý ảnh”, Học Viện Bưu Chính Viên Thơng, 2006 [2] Nguyễn Thanh Hải, “Giáo Trình Xử lý ảnh”, Nhà xuất Đại Học Quốc Gia, Thành phố Hồ Chí Minh, 2014 [4] Theo SYGENTA, tài liệu “Kỹ thuật canh tác cà chua” [8] Alexander Mordvintsev & Abid K, tài liệu “OpenCV-Python Tutorials Documentation Release 1”, ngày tháng 11 năm 2017 [9] Hà Duy Khánh, Đồ án tốt nghiệp “Phân loại sản phẩm dùng kit Raspberry Pi”, TP HCM, tháng năm 2018 Trang web: [3] Nguyễn Nghĩa, “Tổng quan thư viện OpenCV, đăng ngày 10 tháng 11 năm 2016 https://www.tutorialspoint.com/python/ [5] Raspberry Pi Việt Nam, sản phẩm Raspberry Pi B Model https://raspberrypi.vn/shop/mach-raspberry-pi/raspberry-pi-4-model-b-2019 [7] Ngun Minh, viết “Xi-lanh khí nén gì? Cấu tạo xi-lanh khí nén”, đăng ngày 30 tháng năm 2018 tạihttps://medium.com/@minh.nhatnguyen0820/xilanh-kh%C3%AD-n%C3%A9n-l%C3%A0-g%C3%AC-c%E1%BA%A5ut%E1%BA%A1o-ch%E1%BB%A9c-n%C4%83ng-c%E1%BB%A7a-xi-lanh45e8518087a4 [10] Quynh Ty, viết “Cách tạo điều khiển tốc độ động PWM DC IC 555”, đăng 12 tháng 01 năm 2019 https://vietmachine.com.vn/cach-taobo-dieu-khien-toc-do-dong-co-pwm-dc-bang-ic555.html?fbclid=IwAR2EkFQPCI7b3sXWFqqzQnPKrKz_gwDuEV56twXaGeI3K79eFUp-GfLyVY BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 89 PHỤ LỤC Code chương trình điều khiển: from firebase import firebase import json import import import import import cv2 time numpy as np sys RPi.GPIO as GPIO import weight as wei import tkinter as tk GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) cap = cv2.VideoCapture(0) start_time = time.time() PIN_INPUT_SENSOR_1 = 26 PIN_INPUT_SENSOR_2 = 19 PIN_INPUT_SENSOR_3 = 13 PIN_INPUT_SENSOR_4 = 27 PIN_OUTPUT_XILANH_1 = 21 PIN_OUTPUT_XILANH_2 = 20 PIN_OUTPUT_XILANH_3 = 16 PIN_OUTPUT_XILANH_4 = 12 #xxxxxxxxxxxxxxxxxxxxx_out_put_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxx GPIO.setup(PIN_OUTPUT_XILANH_1, GPIO.OUT) GPIO.setup(PIN_OUTPUT_XILANH_2, GPIO.OUT) GPIO.setup(PIN_OUTPUT_XILANH_3, GPIO.OUT) GPIO.setup(PIN_OUTPUT_XILANH_4, GPIO.OUT) #xxxxxxxxxxxxxxxxxxxxx_in_put_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxx GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(PIN_INPUT_SENSOR_1, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(PIN_INPUT_SENSOR_2, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(PIN_INPUT_SENSOR_3, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(PIN_INPUT_SENSOR_4, GPIO.IN, pull_up_down=GPIO.PUD_UP) #xxxxxxxxxxxxxxxxxxxxx_nhan_du_lieu_tu_fire_basexxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxx firebase = firebase.FirebaseApplication('https://datnc53f0.firebaseio.com/') result1 = {} result1= firebase.get('/',None) struct_data_wed = [] #xxxxxxxxxxxxxxxxxxxxx_lưu nội dung fire base đọc zô file txt_xxxxxxxxxxxxxxxx with open('result_firebase.txt', 'w') as outfile: json.dump(result1, outfile) print("save result_firebase.txt ======================== > ok") #xxxxxxxxxxxxxxxxxxxxx_thiet lap gia tri gan cho giao dien_xxxxxxxxxxxxxxxxxxxxxx wei1_min_tk = int(result1['level_1']['min']) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 90 wei1_max_tk = int(result1['level_1']['max']) red1_tk = bool(result1['level_1']['RED']) ogrange1_tk = bool(result1['level_1']['ORANGE']) green1_tk = bool(result1['level_1']['GREEN']) wei2_min_tk = int(result1['level_2']['min']) wei2_max_tk = int(result1['level_2']['max']) red2_tk = bool(result1['level_2']['RED']) ogrange2_tk = bool(result1['level_2']['ORANGE']) green2_tk = bool(result1['level_2']['GREEN']) wei3_min_tk = int(result1['level_3']['min']) wei3_max_tk = int(result1['level_3']['max']) red3_tk = bool(result1['level_3']['RED']) ogrange3_tk = bool(result1['level_3']['ORANGE']) green3_tk = bool(result1['level_3']['GREEN']) wei4_min_tk = int(result1['level_4']['min']) wei4_max_tk = int(result1['level_4']['max']) red4_tk = bool(result1['level_4']['RED']) ogrange4_tk = bool(result1['level_4']['ORANGE']) green4_tk = bool(result1['level_4']['GREEN']) #xxxxxxxxxxxxxxxxxxxxx_thiet ke giao dien_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx root = tk.Tk() root.geometry("1000x600") root.resizable(0, 0) #Don't allow resizing in the x or y direction lblz1 = tk.Label(master = root, text = "Running ",fg = "Green",font = "Times 25") lblz1.place(x = 0, y = 500) def close_window(): root.destroy() button = tk.Button (master = root,fg = "red", font = "Times 20", text = "EXIT", command = close_window) button.place(x = 900, y = 500) Content = "Graduate Project Thanh Thao - Hoai Vu" lbl0 = tk.Label(master = root, text = Content,fg = "black",font = "Times 30") lbl0.place(x = 200, y = 0) Content_2 = "Product Classification: Weight, Color - Remote Control Via Web" lbl001 = tk.Label(master = root, text = Content_2,fg = "red",font = "Times 17") lbl001.place(x = 210, y = 50) lbl = tk.Label(master = root, fg = "black",font "Level_1:") lbl.place(x = 200, y = 100) lb2 = tk.Label(master = root,fg = "black", font "Level_2:") lb2.place(x = 400, y = 100) lb3 = tk.Label(master = root,fg = "black", font "Level_3:") lb3.place(x = 600, y = 100) lb4 = tk.Label(master = root,fg = "black", font "Level_4:") lb4.place(x = 800, y = 100) = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 91 lb0l = tk.Label(master = root, fg = "black",font "Green:") lb0l.place(x = 0, y = 150) lb02 = tk.Label(master = root,fg = "black", font "Orange:") lb02.place(x = 0, y = 200) lb03 = tk.Label(master = root,fg = "black", font "Red:") lb03.place(x = 0, y = 250) lb04 = tk.Label(master = root,fg = "black", font "Min:") lb04.place(x = 0, y = 300) lb05 = tk.Label(master = root,fg = "black", font "Max:") lb05.place(x = 0, y = 350) lb06 = tk.Label(master = root,fg = "black", font "Amount:") lb06.place(x = 0, y = 400) = "Times 20", text = lbxl = tk.Label(master = root, fg = "black",font green1_tk) lbxl.place(x = 230, y = 150) lbx2 = tk.Label(master = root,fg = "black", font ogrange1_tk) lbx2.place(x = 230, y = 200) lbx3 = tk.Label(master = root,fg = "black", font red1_tk) lbx3.place(x = 230, y = 250) lbx4 = tk.Label(master = root,fg = "black", font wei1_min_tk) lbx4.place(x = 230, y = 300) lbx5 = tk.Label(master = root,fg = "black", font wei1_max_tk) lbx5.place(x = 230, y = 350) = "Times 20", text = lbal = tk.Label(master = root, fg = "black",font green2_tk) lbal.place(x = 430, y = 150) lba2 = tk.Label(master = root,fg = "black", font ogrange2_tk) lba2.place(x = 430, y = 200) lba3 = tk.Label(master = root,fg = "black", font red2_tk) lba3.place(x = 430, y = 250) lba4 = tk.Label(master = root,fg = "black", font wei2_min_tk) lba4.place(x = 430, y = 300) lba5 = tk.Label(master = root,fg = "black", font wei2_max_tk) lba5.place(x = 430, y = 350) = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = lbbl = tk.Label(master = root, fg = "black",font = "Times 20", text = green3_tk) lbbl.place(x = 630, y = 150) lbb2 = tk.Label(master = root,fg = "black", font = "Times 20", text = ogrange3_tk) lbb2.place(x = 630, y = 200) lbb3 = tk.Label(master = root,fg = "black", font = "Times 20", text = red3_tk) lbb3.place(x = 630, y = 250) BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 92 lbb4 = tk.Label(master = root,fg = "black", font = "Times 20", text = wei3_min_tk) lbb4.place(x = 630, y = 300) lbb5 = tk.Label(master = root,fg = "black", font = "Times 20", text = wei3_max_tk) lbb5.place(x = 630, y = 350) lbcl = tk.Label(master = root, fg = "black",font green4_tk) lbcl.place(x = 830, y = 150) lbc2 = tk.Label(master = root,fg = "black", font ogrange4_tk) lbc2.place(x = 830, y = 200) lbc3 = tk.Label(master = root,fg = "black", font red4_tk) lbc3.place(x = 830, y = 250) lbc4 = tk.Label(master = root,fg = "black", font wei4_min_tk) lbc4.place(x = 830, y = 300) lbc5 = tk.Label(master = root,fg = "black", font wei4_max_tk) lbc5.place(x = 830, y = 350) = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = = "Times 20", text = flag=0 flag1=0 flag2=0 flag3=0 flag4=0 count_1 count_2 count_3 count_4 = = = = 0 #xxxxxxxxxxxxxxxxxxxxx_thiet_lap_gia_tri_ban_dau_xxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx level = '' find_result = False green_standard = False red_standard = False ogrange_standard = False GPIO.output(21, GPIO.output(20, GPIO.output(16, GPIO.output(12, False) False) False) False) red_color = False green_color = False ogrange_color = False flag_main = False def process_analyze_image(image, debug_mode): red_color = False green_color = False ogrange_color = False result = False flag_main = False try: BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 93 hsv = cv2.cvtColor(image , cv2.COLOR_BGR2HSV) red_lower = np.array([0, 150, 0], np.uint8) red_upper = np.array([7, 255, 255], np.uint8) green_lower = np.array([32, 76, 0], np.uint8) green_upper = np.array([48, 255, 255], np.uint8) ogrange_lower = np.array([9, 76, 0], np.uint8) ogrange_upper = np.array([31, 255, 255], np.uint8) # finding the range of red,blue and yellow color in the image red = cv2.inRange(hsv, red_lower, red_upper) green = cv2.inRange(hsv, green_lower, green_upper) ogrange = cv2.inRange(hsv, ogrange_lower, ogrange_upper) # Morphological transformation, Dilation kernal = np.ones((5, 5), "uint8") red = cv2.dilate(red, kernal) res = cv2.bitwise_and(image , image , mask=red) green = cv2.dilate(green, kernal) res1 = cv2.bitwise_and(image , image , mask=green) ogrange = cv2.dilate(ogrange, kernal) res2 = cv2.bitwise_and(image , image , mask=ogrange) #xxxxxxxxxxxxxxxxxxxxx_tim duong bao cua vat co mau tuong ung_tinh dien tich duong bao_set co tuowng ung_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx numPixel_red = cv2.countNonZero(red) numPixel_green = cv2.countNonZero(green) numPixel_ogrange = cv2.countNonZero(ogrange) ## ## ## numPixel_red = cv2.countNonZero(red) print("so pixel do",numPixel_red) numPixel_green = cv2.countNonZero(green) print("so pixel xanh",numPixel_green) numPixel_ogrange = cv2.countNonZero(ogrange) print("so pixel cam",numPixel_ogrange) R = (numPixel_red/(1+numPixel_red + numPixel_green + numPixel_ogrange))*100 G = (numPixel_green/(1+numPixel_red + numPixel_green + numPixel_ogrange))*100 O = (numPixel_ogrange/(1+numPixel_red + numPixel_green + numPixel_ogrange))*100 if (R>50): red_color =True if (G>50): green_color =True if (O>50): ogrange_color =True if (red_color == True) or (green_color == True )or (ogrange_color == True): BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 94 flag_main = True return image, red_color, green_color, ogrange_color, True, flag_main except cv2.error as e: print("error process analyzing image") return image, red_color, green_color, ogrange_color, result def setting_contrain(setting_data, wei, red, green, orange): find_result = False level = 'unknow' for key, value in result1.items(): if (key != 'Result'): wei_min_wed = int(result1[key]['min']) wei_max_wed = int(result1[key]['max']) red_wed = bool(result1[key]['RED']) ogrange_wed = bool(result1[key]['ORANGE']) green_wed = bool(result1[key]['GREEN']) if( wei_standard >= wei_min_wed and wei_standard 10): if state == True: if (state == True) and (lag == 0): res, img = cap.read() wei_standard = wei.weight() print(wei_standard) time.sleep(0.3) = "red", font = "Times = "red", font = "Times = "red", font = "Times = "red", font = "Times cv2.imwrite('/home/pi/Desktop/THAO/TEST/test_camera_cam/test_new.jpg',img ) time.sleep(0.3) result_analyzing_image = False #print('step result_analyzing_image') #xxxxxxxxxxxxxxxxxxxxx_end_snapshot_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxx image, red_standard, green_standard, ogrange_standard, result_analyzing_image,flag_main = process_analyze_image(img, False) if(result_analyzing_image == False): print("process error ===================== :(") continue #xxxxxxxxxxxxxxxxxxxxx_check loai cua ca chua_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 96 if (flag_main == True): cv2.imwrite('/home/pi/Desktop/THAO/TEST/test_camera_cam/test.jpg',img) level = setting_contrain(result1, wei_standard, red_standard, green_standard, ogrange_standard) # setting gate num gate_num = -1 if('unknow' in level): gate_num = count_char = else: count_char = len(level.split('_')) if(count_char == 2): if('unknow' in level): gate_num = else: gate_num = int(level.split('_')[1]) print('gate: {}'.format(gate_num)) # end setting gate num #control xilanh time_sleep = 0.5 if(gate_num == 1): flag1 = control_gate(1, flag1, time_sleep) count_1 = count_1 + lb8 = tk.Label(master = root, text = count_1,fg = "red", font = "Times 25") lb8.place(x = 230, y = 400) elif(gate_num == 2): flag2 = control_gate(2, flag2, time_sleep) count_2 = count_2 + lb5 = tk.Label(master = root, text = count_2,fg = "red", font = "Times 25") lb5.place(x = 430, y = 400) elif(gate_num == 3): flag3 = control_gate(3, flag3, time_sleep) count_3 = count_3 + lb6 = tk.Label(master = root, text = count_3,fg = "red", font = "Times 25") lb6.place(x = 630, y = 400) elif(gate_num == 4): flag4 = control_gate(4, flag4, time_sleep) count_4 = count_4 + lb7 = tk.Label(master = root, text = count_4,fg = "red", font = "Times 25") lb7.place(x = 830, y = 400) else: print('dont care') find_result = True lag=1 state= not GPIO.input(17) if state == False and (lag == 1): lag = else: BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 97 print('No tomato') ## start_time_wei = time.time() resultPut = firebase.put('/', 'Result',{'count_1':count_1,'count_2':count_2,'count_3':count_3,'count_4' :count_4}) Chương trình thư viện Weight #!/usr/bin/python2 import RPi.GPIO as gpio #import threading import time DAT = CLK=6 num=0 #def weight(DAT = 5, CLK =6, num = 0): def weight(): start_time = time.time() gpio.setup(CLK, gpio.OUT) i=0 num=0 gpio.setup(DAT, gpio.OUT) gpio.output(DAT,1) gpio.output(CLK,0) gpio.setup(DAT, gpio.IN) while gpio.input(DAT) == 1: i=0 for i in range(24): gpio.output(CLK,1) gpio.output(CLK,1) gpio.output(CLK,1) num=num footer{ background-color:#ccc; font-family: Arial; text-align:center; padding:12px; font-size:19px; }GRADUATION PROJECT_PHAM THI THANH THAO-15141284-PHAN TRAN HOAI VU-15141333
PRODUCT CLASSIFICATION: COLOR, WEIGHT; REMOTE CONTROL
// Initialize Firebase var config = { apiKey: "AIzaSyBBshWk7M2RkV-XAWr-vTATWcSewDVFbOk", authDomain: "datn-c53f0.firebaseapp.com", databaseURL: "https://datn-c53f0.firebaseio.com", projectId: "datn-c53f0", storageBucket: "datn-c53f0.appspot.com", messagingSenderId: "472165330944" }; firebase.initializeApp(config); function writeData(){ var x = document.getElementById("Category").value; firebase.database().ref(x).set({ min:document.getElementById("minField").value, max:document.getElementById("maxField").value, GREEN:document.getElementById("chkgreen").checked, BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 99 ORANGE:document.getElementById("chkorange").checked, RED:document.getElementById("chkred").checked, }); getData(); } function getData(){ firebase.database().ref('/').once('value', function(snapshot){ snapshot.forEach(function(childSnapshot) { var childKey = childSnapshot.key; var childData = childSnapshot.val(); document.getElementById("data").innerHTML = childData['min'] +", "+ childData['max'] ; }) }) } getData();COLOR
Red : Orange: Green:WEIGHT
TYPE
Category_1 Category_2 Category_3 Category_4 Submit BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP - Y SINH 100 ... tài Nghiên cứu, thi t kế thi công hệ thống phân loại sản phẩm theo cân nặng, màu sắc; Quản lý điều khiển điện thoại” mơ hình phân loại sản phẩm, cụ thể nông sản cà chua theo cân nặng màu sắc. .. 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: NGHIÊN CỨU, THI T KẾ VÀ THI CƠNG MƠ HÌNH ĐẾM VÀ PHÂN LOẠI SẢN PHẨM THEO CÂN NẶNG,... MSSV: 15141333 Tên đề tài: NGHIÊN CỨU, THI T KẾ VÀ THI CƠNG MƠ HÌNH ĐẾM VÀ PHÂN LOẠI SẢN PHẨM THEO CÂN NẶNG, MÀU SẮC Tuần/ngày Tuần Nội dung Xác nhận GVHD Nhận đồ án, tìm hiểu đề tài (18-24/02/2019)