SƠ LƯỢC VỀ CÁNH TAY ROBOT CÔNG NGHIỆP
Giới thiệu
Đề tài cánh tay robot phân loại sản phẩm là một trong những nghiên cứu phân nhánh nhỏ trong lĩnh vực chế tạo Robot công nghiệp Sau đây em xin giới thiệu sơ lược về lịch sử ra đời từ Robot công nghiệp: Thuật ngữ Robot xuất hiện lần đầu tiên vào năm 1922 trong tác phẩm “Rossum’s Universal Robot” của nhà văn Karel Capek Trong tác phẩm này nhân vật Rossum và con trai đã tạo ra một chiếc máy có hình thù giống con người để phục vụ cho con người.
Trong những năm 40 của thế kỷ XX, nhà văn viễn tưởng ở Nga là Issac Asimov đã mô tả robot là một chiếc máy tự động có hình dạng gần giống với con người được điều khiển bằng một hệ thần kinh “Positron” do chính con người lập trình nên. Asimov đặt tên cho ngành nghiên cứu về robot là robotics với 3 nguyên tắc cơ bản:
Robot không được xúc phạm con người và không gây tổn hại cho con người.
Hoạt động của robot phải tuân theo các quy tắc do con người đặt ra.Các quy tắc này không được vi phạm quy tắc thứ nhất.
Một robot cần phải bảo vệ sự sống của mình, nhưng không được vi phạm hai nguyên tắc trước.
Robot là một tác nhân cơ khí, nhân tạo, ảo và là một hệ thống cơ khí-điện tử Với những cử chỉ thao tác và chuyển động của mình, robot làm cho người ta có cảm giác rằng nó cũng sở hữu những giác quan giống như con người Từ "Robot" được hiểu với hai nghĩa: robot cơ khí và phần mềm tự hoạt động Về lĩnh vực nghiên cứu và chế tạo robot thì Mỹ và Nhật Bản là những nước đi đầu thế giới
Cánh tay robot được thiết kế, chế tạo có thể thực hiện bất kỳ công việc mà con người có thể làm như hàn, nắm, quay,… tùy thuộc vào từng ứng dụng cụ thể.Ví dụ,cánh tay robot trong dây chuyền sản xuất ô tô thực hiện nhiều công việc khác nhau như hàn thân vỏ,sơn và lắp ráp Trong một số trường hợp, cánh tay robot được thiết kế để tiến hành giải trừ vũ khí và loại bỏ bom, mìn để tránh thiệt hại về tính mạng con người.
Lợi ích của cánh tay robot trong phân loại sản phẩm
Ứng dụng cánh tay robot vào phân loại có rất nhiều lợi ích được mang lại được kể đến như:
Lợi ích mang lại lớn nhất đầu tiên của việc sử dụng cánh tay robot trong việc phân loại và sắp xếp sản phẩm là nó có thể xử lý phân loại hàng hóa, linh kiện ở tốc độ cao và độ chính xác gần như tuyệt đối
Việc lập trình cho cánh tay robot cũng khá dễ dàng trong nhiều ứng dụng đòi hỏi tính tối ưu và hoàn hảo trong lĩnh vực sản xuất Song song với đó việc áp dụng cánh tay robot công nghiệp có kích thước nhỏ, nhẹ sẽ hoạt động tốt trong nhiều không gian (kể cả không gian nhỏ hẹp)
Sử dụng cánh tay robot phân loại sản phẩm giúp tăng năng suất và giảm chi phí thuê nhân công, hiệu quả cao trong quá trình đóng gói hàng hóa, xây dựng nhà kho thông minh Tỉ lệ hoàn vốn đầu tư trong sản xuất sẽ rất nhanh.
Cánh tay robot phân loại sản phẩm sẽ dần thay thế con người làm các công việc nhàm chán, lặp đi lặp lại
Đảm bảo an toàn cho nhân viên: Sử dụng cánh tay robot phân loại sản phẩm, hàng hóa giảm thiểu nguy cơ tai nạn lao động và chấn thương cho nhân viên trong quá trình phân loại hàng hóa Nó cũng giúp giảm tải công việc cho nhân viên, giúp họ có thể tập trung vào các nhiệm vụ khác đòi hỏi sự sáng tạo hơn.
Bên cạnh những lợi ích kể trên thì cũng có những bất lợi khi ta sử dụng robot phân loại sản phẩm như:
Chi phí đầu tư ban đầu cao: Robot phân loại hàng hóa có chi phí đầu tư ban đầu rất cao, bao gồm cả chi phí mua robot, phần mềm và phí vận chuyển, lắp đặt, cài đặt, huấn luyện và kiểm tra
Khả năng linh hoạt và tương tác: Robot phân loại hàng hóa không thể linh hoạt như con người trong việc thích ứng với các thay đổi không đáng kể trong sản phẩm hoặc việc tương tác với con người
Chi phí bảo trì và sửa chữa: Robot phân loại hàng hóa cần được bảo trì, kiểm tra và sửa chữa thường xuyên để đảm bảo hoạt động hiệu quả và độ tin cậy, điều này có thể gây thêm chi phí cho doanh nghiệp Ở ứng dụng lần này với mục tiêu là tìm hiểu về cách thức xử lý ảnh để nhận dạng sản phẩm và sau đó dùng một cánh tay robot để gắp thả vật có tải trọng nhẹ nên chúng em dùng loại cánh tay robot lắp ráp với động cơ servo với những ưu điểm như:
Cánh tay robot nhỏ gọn dễ lắp đặt và giá thành rẻ nhưng hoàn toàn có thể giải quyết và xử lý phân loại hàng hóa, linh phụ kiện ở tốc độ cao và đồng bộ
Robot có size nhỏ, gọn nhẹ nên không chiếm nhiều không gian rất thích hợp để bố trí trên mô hình
Lập trình dễ dàng với các góc chính xác của servo được gắn với các khớp.
Mô hình cánh tay robot
2.3.1 Cánh tay robot công nghiệp
Hệ thống chuyển động của robot công nghiệp đảm bảo cho robot có thể thực hiện các thao tác trong vùng không gian làm việc bao gồm: chuyển động của thân, cánh tay, cổ tay và bàn tay, giúp robot chuyển động theo một quỹ đạo bất kì hoặc đã được lập trình sẵn Bộ phận cơ bản để hình thành một robot là: Cánh tay (gồm một số thanh nối cứng liên kết với nhau bởi các khớp mềm); thân (đế); cổ tay; bàn tay. (hình 2.1)
Khớp robot là các khâu liên kết giữa hai thanh nối có chức năng chuyển động để thực hiện các di chuyển của robot Khớp robot gồm có 2 loại là khớp tịnh tiến(T) và khớp quay(R)
Hình 2.1: Các bộ phận của cánh tay robot
Hình 2.2: Các loại khớp robot
Cổ tay robot có nhiệm vụ định hướng chính xác cho bàn tay robot (cơ cấu tác động cuối), cổ tay robot thường sẽ có 3 bậc tự do tương ứng với 3 chuyển động có cấu tạo điển hình như hình dưới Cổ tay xoay xung quanh trục thanh nối cuối cùng (Roll), cổ tay xoay quanh trục ngang tạo ra chuyển động lên xuống của bàn tay (Pitch) và khi quay quanh trục thẳng đứng sẽ tạo ra các chuyển động lắc phải, trái của bàn tay robot (Yaw).
2.3.4 Bàn tay robot (cơ cấu tác động cuối)
Bàn tay robot được gắn với cổ tay robot nhằm mục đích cho robot có thể thực hiện các ứng dụng khác nhau trong không gian làm việc Cơ cấu bàn tay có hai dạng khác nhau ứng với từng chức năng của robot trong các dây chuyền, hệ thống sản xuất tự động đó là:
Cơ cấu tay kẹp (kẹp, thả vật)
Cơ cấu dụng cụ: Mũi hàn, dụng cụ cắt, bình sơn, súng hàn điểm, hàn hồ quang…
Chỉ cần thay đổi cơ cấu bàn tay robot thì ta có thể ứng dụng cánh tay robot vào nhiều mục đích khác nhau, tăng sự linh hoạt để đáp ứng đa dạng từng công đoạn sản xuất hàng hóa.
2.3.5 Phân loại cánh tay robot
Robot Cartesian / Gantry Robot (tọa độ DECAC): Được sử dụng để chọn và đặt công việc, ứng dụng sealant, hoạt động lắp ráp, xử lý các máy công cụ và hàn hồ quang Đây được xem là một cánh tay robot có ba khớp lăng trụ và có trục khớp
Robot trụ: Được sử dụng cho các hoạt động lắp ráp, xử lý tại các máy công cụ, hàn điểm, và xử lý tại các máy đúc Đây là một cánh tay robot có các trục cấu thành một hệ trục tọa độ.
Robot hình cầu / Robot Polar: Được sử dụng để xử lý các máy công cụ, hàn điểm, máy đúc, máy hàn nhiệt, hàn hồ quang và hàn hồ quang Đây được xem là một cánh tay robot có các trục tạo thành một hệ tọa độ cực.
Hình 2.4: Robot tọa độ Decac
Hình 2.5: Robot tọa độ trụ
Hình 2.6: Robot tọa độ cầu
SCARA robot: Đối với loại cánh tay robot này được sử dụng để đặt công việc, ứng dụng sealant, hoạt động xử lý và lắp ráp các máy công cụ Robot này có hai khớp nối song song để cung cấp sự tuân thủ trong máy bay.
Robot khớp nối: Loại cánh tay robot này được dùng cho các hoạt động lắp ráp, diecasting, fettling máy móc, khí hàn, hàn hồ quang và phun sơn(dây chuyềnsản xuất ô tô) Đó là một robot có cánh tay với ít nhất ba khớp quay.
CƠ SỞ LÝ THUYẾT VỀ XỬ LÝ ẢNH
Tổng quan về xử lý ảnh
Công nghệ xử lý ảnh là một lĩnh vực nghiên cứu mang tính mới mẻ về khoa học và công nghệ Đây được xem là một ngành khoa học rất mới so với các ngành khoa học khác nhưng tốc độ phát triển của nó cực kì nhanh, các trung tâm nghiên cứu, phát triển về ứng dụng đang rất quan tâm
Xử lý ảnh là phương pháp xử lý các hình ảnh được thu nhận từ các thiết bị như: camera, webcam… được ứng dụng và phát triển trong rất nhiều lĩnh vực quan trọng như:
Lĩnh vực quân sự: xử lý và nhận dạng các ảnh quân sự.
Lĩnh vực giao tiếp của robot: nhận dạng ảnh, xử lý âm thanh, đồ họa.
Lĩnh vực an ninh, bảo mật: nhận diện khuôn mặt, vân tay…
Lĩnh vực giải trí: trò chơi điện tử.
Lĩnh vực y tế: y sinh, chụp X quang, MRI…
Các phương pháp xử lý nhận dạng hình ảnh bắt đầu từ các ứng dụng: nâng cao chất lượng hình ảnh và phân tích ảnh Ứng dụng được biết đến đầu tiên là nâng cao chất lượng hình ảnh của báo được truyền từ London đến New York ở những năm
1920 của thế kỷ XX Việc nâng cao chất lượng hình ảnh có liên quan đến sự phân bố mức độ sáng và độ phân giải của ảnh Điều này có thể được giải thích vì sau khi thế chiến thứ hai nổ ra thì máy tính phát triển khá nhanh và tạo điều kiện cho quá trình xử lý ảnh số được thuận lợi hơn Từ những năm 1964, chiếc máy tính đã có khả năng xử lý và nâng cao chất lượng hình ảnh từ mặt trăng và vệ tinh Ranger 7 của Mỹ như: làm nổi đường biên, lưu trữ ảnh Năm 1964 đến nay, các phương tiện xử lý, nâng cao chất lượng, nhận dạng hình ảnh phát triển không ngừng Các phương pháp trí tuệ nhân tạo như mạng nơ-ron nhân tạo, các thuật toán xử lý hiện đại và cải tiến giúp cho việc xử lý ảnh ngày càng được ứng dụng rộng rãi và thu được nhiều kết quả tốt hơn.
Tiếp theo, là các bước cần thiết trong quá trình xử lý ảnh Đầu tiên, ảnh từ thế giới bên ngoài được thu nhận qua các thiết bị thu (như Camera, máy chụp ảnh) Trước đây, ảnh được thu qua Camera là các ảnh tương tự (loại Camera ống kiểu CCIR).Gần đây với sự phát triển của công nghệ, ảnh màu hoặc đen trắng được lấy ra từCamera, sau đó nó được chuyển trực tiếp thành ảnh số tạo thuận lợi cho xử lý tiếp theo Dưới đây là mô tả các bước cơ bản trong xử lý ảnh:
Sơ đồ các bước cơ bản trong xử lý ảnh
Sơ đồ bao gồm các thành phần như sau:
3.1.1 Thu nhận ảnh (Image Acquisition) Ảnh được thu nhận qua camera màu hoặc trắng đen.Thông thường ảnh được nhận qua camera là ảnh tương tự (loại camera ống chuẩn CCIR với tần số 1/25, mỗi ảnh 25 dòng) hoặc có thể là loại camera đã được số hóa (như loại CCD – Change Coupled Device) là loại photodiot tạo ra cường độ sáng tại mỗi điểm ảnh.
Camera thường dùng là loại quét dòng, ảnh tạo ra có dạng hai chiều Chất lượng ảnh được thu nhận còn phụ thuộc vào thiết bị thu và yếu tố môi trường (ánh sáng, phong cảnh).
3.1.2 Tiền xử lý (Image processing)
Sau khi bộ phân thu nhận ảnh xong thì ảnh có thể sẽ bị nhiễu và độ tương phản ở mức thấp nên cần đưa vào bộ tiền xử lý để nâng cao chất lượng hình ảnh Bộ tiền xử lý có chức năng chính là lọc nhiễu, nâng cao độ tương phản để làm ảnh rõ hơn và sắc nét hơn.
Phân đoạn ảnh có nghĩa là tách một ảnh đầu vào thành các vùng thành phần để biểu diễn phân tích, nhận dạng ảnh Ví dụ: Trên phong bì thư để nhận dạng chữ (hoặc mã vạch) cho mục đích phân loại bưu phẩm, hàng hóa ta cần tách các câu chữ thành địa chỉ hoặc tên người nhận, gửi thành các từ, các chữ, các số (hoặc các vạch) riêng biệt để dễ nhận dạng Đây là phần phức tạp khó khăn nhất trong xử lý ảnh và cũng dễ gây lỗi, làm mất độ chính xác của ảnh Công đoạn này sẽ quyết định kết quả nhận dạng ảnh có chuẩn xác hay không.
3.1.4 Biểu diễn ảnh (Image Representation)
Sau khi phân đoạn chứa các điểm ảnh của vùng ảnh (ảnh đã phân đoạn) cộng với mã liên kết ở các vùng lân cận Việc biến đổi các số liệu này thành dạng thích hợp là cần thiết cho xử lý tiếp theo bằng máy tính Việc chọn các tính chất để thể hiện ảnh gọi là trích chọn đặc trưng( Feature Extration) gắn với việc tách các đặc tính của ảnh dưới dạng các thông tin hoặc làm tiền đề để phân biệt lớp đối tượng này với đối tượng khác trong phạm vi ảnh nhận được Ví dụ: trên phong bì thư để nhận dạng ký tự chúng ta miêu tả các đặc trưng của từng ký tự giúp phân biệt ký tự này với ký tự khác.
3.1.5 Nhận dạng và nội suy ảnh (Image Recognition and Interpretation)
Nhận dạng ảnh là tức là xác định ảnh Quá trình này thu được bằng cách so sánh với mẫu chuẩn đã được học (hoặc lưu) từ trước Nội suy là phán đoán theo ý nghĩa trên cơ sở nhận dạng Ví dụ: một loạt chữ số và nét gạch ngang trên phong bì thư có thể nội suy thành mã điện thoại…Theo lý thuyết về nhận dạng, các mô hình toán học về ảnh được phân theo hai loại nhận dạng ảnh cơ bản như:
Nhận dạng theo tham số
Nhận dạng theo cấu trúc
3.1.6 Cơ sơ tri thức (Knowledge Base)
Như đã trình bày ở trên, ảnh là một đối tượng khá phức tạp về đường nét, độ sáng tối, dung lượng điểm ảnh, môi trường để thu nhận ảnh rất đa dạng dễ bị nhiễu. Trong nhiều khâu xử lý và phân tích ảnh ngoài việc đơn giản hóa các phương pháp toán học đảm bảo tiện lợi cho xử lý, người ta còn tính toán đến quy trình tiếp nhận và xử lý ảnh theo cách của con người Trong các bước xử lý đó, nhiều khâu hiện nay đã được thực hiện theo các phương pháp trí tuệ con người Vì vậy, các cơ sở tri thức được phát huy.
Hình ảnh sau khi được số hóa sẽ lưu vào bộ nhớ hoặc truyền sang các khâu tiếp theo để phân tích Khi lưu hình ảnh trực tiếp từ các ảnh thô thì phải cần dung lượng bộ nhớ rất lớn và không có tính khoa học công nghệ.
Các đặc trưng của ảnh có thể được mô tả như:
Những Vấn Đề Trong Xử Lý Ảnh
3.2.1 Điểm ảnh (Picture Element) Điểm ảnh là đơn vị cơ bản nhất để tạo ra một bức ảnh kỹ thuật số Địa chỉ của điểm ảnh được xem như là một tọa độ (x,y) nào đó Một bức ảnh kỹ thuật số, có thể được tạo ra bằng cách chụp hoặc bằng một phương pháp đồ họa nào khác, được tạo nên từ hàng ngàn hoặc hàng triệu pixel riêng lẻ Những hình ảnh nào càng chứa nhiều pixel thì nó thể hiện càng chi tiết 1 megapixel thì tương đương với 1 triệu pixel.
3.2.2 Ảnh số Ảnh số là tập hợp hữu hạn các điểm ảnh với mức xám phù hợp dùng để mô tả ảnh gần với ảnh thật Độ phân giải của ảnh được xác định thông qua số điểm ảnh Độ phân giải càng cao thì càng thể hiện rõ đường nét các đặc điểm và sự chân thực của tấm ảnh đó Một hình ảnh là 1 tín hiệu hai chiều, nó được xác định bởi hàm toán học f(x,y), Trong đó: x: là tọa độ của ảnh theo chiều ngang y: là tọa độ của ảnh theo chiều dọc
Giá trị của f(x,y) là thông số quan trọng cung cấp chính xác các giá trị của điểm ảnh(pixel) tại bất kì vị trí nào thì tương ứng với vị trí đó của 1 hình ảnh.
Mức xám của điểm ảnh là cường độ sáng, gán bằng một giá trị tại điểm đó Những mức ảnh xám sẽ thường là: 16, 32, 64, 128, 256
Mức được sử dụng thông dụng nhất là 265, tức là dùng 1byte để biểu diễn mức xám Trong đó:
Ảnh nhị phân: Là ảnh có 2 mức trắng và đen, chỉ có 2 giá trị 0 và 1 và chỉ sử dụng 1 bit dữ liệu trên 1 điểm ảnh
Ảnh đen trắng: Là những hình ảnh có hai màu đen, trắng (không chứa màu khác) tương ứng với mức xám ở các điểm ảnh có thể sẽ khác nhau.
Ảnh màu: Là ma trận của các pixel mà tương ứng với mỗi pixel sẽ biểu diễn
1 điểm màu với 3 bộ số (r,g,b) hay nói cách khác những hình ảnh được kết hợp từ 3 màu cơ bản lại với nhau sẽ tạo ra một thế giới màu sinh động Hiện nay, có khoảng 16,7 triệu mức màu Người ta thường dùng 3byte để mô tả mức màu, tức là có khoảng 16,7 triệu mức màu.
3.2.4 Quan hệ giữa các điểm ảnh
Lân cận điểm ảnh: cũng tương tự như điểm ảnh được khái quát ở trên Có 2 loại lân cận điểm cơ bản đó là: lân cận 4 và lân cận 8
Lân cận 4 chéo Lân cận 8
Tọa độ lần lượt của 4 điểm ảnh lân cận 4 theo cột và hàng là (x+1, y), (x-1, y),
(x,y+1), (x,y-1) ký hiệu là tập N4(p) Tọa độ lần lượt của 4 điểm ảnh lân cận 4 theo đường chéo có là (x+1, y+1), (x+1, y+1), (x-1, y+1), (x-1, y-1) và được ký hiệu là tập ND(p) Tập 8 điểm ảnh lân cận 8 là hợp của 2 tập trên:
Lân cận 4 hàng cột Lân cận 4 chéo Lân cận 8
Liên kết ảnh: 2 điểm ảnh gần nhau được xem như là các mối liên kết của ảnh, có 3 loại liên kết như: liên kết 4, liên kết 8, liên kết m (liên kết hỗn hợp) Có thể đặt V chứa nhiều giá trị như V={tập con} trong ảnh đa mức xám Với p có tọa độ (x, y).
Liên kết 4: Tập V có giá trị thuộc hai điểm ảnh p và q được gọi là liên kết 4 của nhau nếu q N4(p).
Liên kết 8: Tập V có giá trị thuộc hai điểm ảnh p và q được gọi là liên kết 8 của nhau nếu q N8(p).
Hình 3.1: Lân cận 4 và lân cận 8
Liên kết m: Tập V có giá trị thuộc hai điểm ảnh p và q được gọi là liên kết m của nhau nếu 1 trong 2 điều kiện sau được thỏa mãn: q N4(p), q ND(p) và hai tập N4(p), N4(q) không chứa điểm ảnh nào có giá trị thuộc V.
Hình ảnh được thu nhận đa phần sẽ bị nhiễu nên điều cần làm đầu tiên là phải loại bỏ nhiễu Các phép toán tử trong không gian dùng kỹ thuật tăng cường ảnh được phân nhóm theo công dụng: làm trơn nhiễu, nổi biên Muốn làm trơn nhiễu hay tách nhiễu thông thường người ta sử dụng các bộ lọc tuyến tính (lọc thông thấp, trung bình) hoặc lọc phi tuyến (giả trung vị, trung vị, lọc đồng hình) Tính chất của nhiễu (thường tương ứng với tần số cao) và theo cơ sở lý thuyết lọc nhiễu tức là: bộ lọc cho tín hiệu có tần số nào đó thông qua, lọc thông thấp thường dùng để lọc nhiễu (theo quan điểm tần số không gian) hoặc có thể dùng tổ hợp tuyến tính để san bằng (lọc trung bình) Để làm nổi cạnh ( tần số cao), thông thường ta dùng các bộ lọc thông cao hay lọc Laplace Có 2 phương pháp lọc nhiễu như sau:
Lọc nhiễu tuyến tính: Khi chụp ảnh thì sẽ xuất hiện nhiều loại nhiễu ảnh hưởng đến quá trình xử lý ảnh cho nên ta cần lọc nhiễu Có 2 phương pháp lọc nhiễu tuyến tính cơ bản là:
Ví dụ lọc trung bình: mỗi điểm ảnh được thay thế bằng trung bình trọng số của các điểm lân cận.
Lọc nhiễu phi tuyến: bộ lọc phi tuyến cũng thường được sử dụng trong kỹ thuật tăng cường ảnh Một số phương pháp lọc cơ bản của lọc phi tuyến là:
Lọc ngoài Điểm ảnh đầu vào được thay thế bởi trung vị các điểm ảnh còn lọc giả trung vị sẽ dùng trung bình cộng của hai giá trị “trung vị” (trung bình cộng của max và min).Lọc trung vị nghĩa là giá trị các điểm ảnh trong cửa sổ phải xếp theo thứ tự tăng hoặc giảm dần so với giá trị trung vị
Lọc ngoài: Giả định ta quy định một ngưỡng nào đó cho các mức nhiễu (có thể dựa vào mức độ xám) So sánh giá trị độ xám của một điểm ảnh với trung bình số học 8 lân cận của nó, nếu có sai lệch lớn hơn ngưỡng, điểm ảnh này được coi như nhiễu
3.2.6 Phương pháp phát hiện biên
Một trong những vấn đền ta cần quan tâm trong xử lý ảnh đó chính là biên, giai đoạn phân đoạn ảnh chủ yếu dựa vào biên. Điểm biên: Điểm biên trong điểm ảnh là sự thay đổi nhanh hoặc đột ngột về mức xám (hoặc màu) Ví dụ điểm đen trong ảnh nhị phân được xem là điểm biên nếu ở lân cận nó có ít nhất một điểm trắng Đường biên (đường bao: boundary): là tập hợp các điểm biên liên tiếp tạo thành một đường biên. Đường biên trong xử lý ảnh có ý nghĩa thứ nhất là một loại đặc trưng cục bộ tiêu biểu trong phân tích, nhận dạng ảnh Thứ hai, người ta sử dụng biên làm phân cách các vùng xám (màu) cách biệt Người ta cũng có thể sử dụng các vùng ảnh để tìm đường phân cách theo hướng ngược lại.
Như vậy, phát hiện biên một cách lý tưởng là phát hiện được tất cả các đường biên trong các đối tượng
Sự biến thiên giữa các điểm ảnh thường nhỏ, trong khi biến thiên theo độ sáng của điểm biên là khá lớn khi đi qua biên.
Từ cơ sở đó, ta có 2 phương pháp phát hiện biên dưới đây:
Tách biên theo đạo hàm bậc một có 2 phương pháp: một là tạo gradient của hai hướng và trực giao trong ảnh, hai là dùng tập đạo hàm có hướng
Tách biên theo đạo hàm bậc hai được mô tả trên một số dạng vi phân bậc 2 để làm xuất hiện biên Có 2 phương pháp đạo hàm bậc hai là: phương pháp Laplace và phương pháp đạo hàm trực tiếp.
Phương pháp nhận dạng màu sắc
3.3.1 Giới thiệu về các không gian màu
Một bức ảnh chụp có thể được biểu diễn bằng các không gian màu khác nhau. Không gian màu ở đây được hiểu là một mô hình toán học dùng để mô tả các màu sắc trong không gian thực tế và được biểu diễn dưới dạng số học Thực tế sẽ có rất nhiều không gian màu khác nhau được sử dụng vào những mục đích khác nhau. Phần dưới đây chúng ta sẽ tiếp tục tìm hiểu về ba không gian màu cơ bản được và ứng dụng nhiều trong thực tế đó là 3 không gian màu RGB, HSV và CMYK.
Không gian màu phổ biến hiện nay được dùng trong đồ họa máy tính và nhiều thiết bị kĩ thuật số khác đó chính là RGB Ý tưởng chính của không gian màu
Hình 3.4: Phép co này là sự kết hợp của 3 màu sắc cơ bản : màu đỏ (R, Red), xanh lục (G, Green) và xanh lơ (B, Blue) để mô tả tất cả các màu sắc khác.
Khi một ảnh số được mã hóa bằng 24bit, điều đó có nghĩa là 8bit mã hóa cho kênh R, 8bit mã hóa cho kênh G, 8bit mã hóa cho kênh B và mỗi kênh màu này sẽ nhận giá trị từ 0-255.Mỗi giá trị khác nhau của từng kênh màu khi được kết hợp với nhau thì sẽ cho ra một màu sắc khác nhau, vì vậy ta sẽ có tổng cộng 255x255x255 = 1.66 triệu màu sắc.
Màu trắng là sự kết hợp của các kênh màu (R, G, B) với giá trị tương ứng
Màu đen là sự kết hợp của các kênh màu (R,G,B) với giá trị tương ứng là(0,
Màu vàng có giá trị (255, 255, 0)
Màu tím đậm có giá trị (64, 0, 128)
Vậy nên khi ta dùng 16bit để mã hóa cho một kênh màu bất kì (48bit cho toàn bộ 3 kênh màu) thì dãi màu sẽ trãi rộng lên đến 3*2^16 = cho ra con số rất lớn.
Không gian màu CMYK được sử dụng rất phổ biến trong ngành công nghiệp in ấn Tính chất cơ bản của hệ không gian màu này là dùng 4 màu sắc cơ bản để thực hiện cho việc pha trộn mực in Trên thực tế, người ta dùng 3 màu là Cyan: xanh lơ, Magenta: hồng xẫm và Yellow: vàng Khi lấy màu hồng xẫm pha với màu vàng sẽ ra màu đỏ, màu xẫm pha với xanh lơ sẽ cho xanh lam Sự kết hợp của 3 màu trên sẽ cho ra màu đen, tuy nhiên màu đen ở đây không phải là đen tuyệt đối và thường có độ tương phản lớn, nên trong ngành in, để hạn chế
Hình 3.5: Không gian màu RGB việc tốn mực khi in người ta cho thêm màu đen vào để in ra những chi tiết có màu đen thay vì phải kết hợp 3 màu sắc như trên Như vậy, ta có hệ màu CMYK chữ K ở đây là để kí hiệu màu đen (Black), nhưng tại sao chữ B đã được dùng để biểu diễn màu Blue mà tại sao người ta lấy chữ cái cuối K để biểu diễn màu đen?
Nguyên lý làm việc của không gian màu này như sau : Ta có một nền giấy trắng, khi mỗi màu này được in lên nền giấy thì nó sẽ loại bỏ dần đi thành phần cơ bản của màu trắng.C, M, Y là 3 màu khác nhau nên lúc in theo những tỉ lệ khác nhau sẽ loại bỏ đi thành phần đó cũng theo một cách khác và cuối cùng cho ta màu sắc cần in Vì vậy, khi cần in màu đen thay vì phải in cả 3 màu người ta dùng màu đen để in lên Điểm khác nhau giữa nguyên lý này so với nguyên lý làm việc của hệ RGB ở chỗ hệ RGB là sự kết hợp của các thành phần màu, còn hệ CMYK là sự loại bỏ lẫn nhau của các thành phần màu.
HSV và cũng gần tương tự như HSL là không gian màu được dùng nhiều trong việc chỉnh sửa ảnh, phân tích ảnh và một phần của lĩnh vực thị giác máy tính. Không gian màu này được xác định dựa vào 3 thông số sau để mô tả màu sắc: H Hue: màu sắc, S = Saturation: độ đậm đặc, bão hòa, V = value: giá trị cường độ sáng Thông thường không gian màu này sẽ được biểu diễn dưới dạng hình nón hoặc hình trụ.Từ đó ta có thể ứng dụng xử lý ảnh trong thực tế với thư viện OpenCV.
Hình 3.6: Không gian màu CMYK
3.3.2 Phương pháp nhận dạng màu sắc:
Khi ảnh chụp được thu thập từ Camera sẽ cho không gian màu của ảnh là RGB, nhưng không gian màu RGB không thích hợp cho việc nhận dạng màu sắc, để phân biệt được màu sắc người ta thường dùng không gian màu HSV Vì vậy ta cần chuyển đổi ảnh gốc (ảnh có không gian màu RGB) sang ảnh có không gian màu HSV.
Thư viện chuyên xử lý hình ảnh là OpenCV, vì vậy nó hổ trợ rất nhiều hệ màu như RGB, BRGA, YUV, HSV… và nó cũng có cung cấp cho chúng ta hàm cv2.cvtColor để thực hiển chuyển đổi giữa các hệ màu này Trong OpenCV, H(Hue) có giá trị trong khoảng (0 – 179) mang thông tin về màu sắc, S(Saturation) có giá trị (0 - 255) cho thông tin về độ thuần khiết của màu, V(Value) có giá trị (0 - 255) cho biết độ sáng ảnh Để chuyển đổi không gian màu từ RGB sang HSV: hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV);
Ví dụ: đối với màu đỏ thường thành phần H có giá trị trong khoảng (0 - 7) và (174
- 179), các thành phần S và V thường chọn trong lân cận 100 tùy theo điều kiện ánh sáng Tương tự ta sẽ xét cho các màu còn lại.
Khi đã chuyển đổi ảnh từ RGB sang ảnh HSV và có các giá trị HSV của các màu mong muốn, ta tiến hành so sánh để xác định được ảnh đang xét là ảnh màu gì.
Sơ đồ các bước thực hiện phân loại màu
Hình 3.7: Không gian màu HSV
Nhận dạng và phân loại
Chuyển đổi ảnh Xuất kết quả Thu nhận ảnh a Thu nhận ảnh
Thu nhận ảnh là quá trình mà ảnh có thể thu nhận qua camera hoặc có thể lấy từ bộ nhớ của hệ thống. b Tiền xử lý ảnh
Là quá trình chỉnh sửa chất lượng ảnh như việc lọc nhiễu hay tăng cường độ sáng, nhằm nâng cao chất lượng ảnh và chuyển sang ảnh xám để dễ dạng nhận dạng ảnh.
Chuyển đổi ảnh xám: Giả định, hình ảnh đã được lưu trữ dưới dạng RGB
(Red- Green-Blue) Điều này có nghĩa là sẽ có ba ma trận xám tương ứng cho màu Red, Green, Blue Từ đó ta tìm cách tổng hợp ba ma trận này về thành một ma trận duy nhất Sử dụng công thức sau đây để thực hiện việc tổng hợp các ma trận màu:
Trong đó: Y: ma trận xám cần tìm
R: ma trận xám đỏ của ảnh
G: ma trận xám lục của ảnh
B: ma trận xám lam của ảnh
Lọc trung bình: Giả sử có một ảnh đầu vào với I(x,y) là giá trị điểm ảnh tại một điểm (x,y) và một ngưỡng θ.
Bước 1: Tính tổng các thành phần trong ma trận lọc (Kernel).
Bước 2: Chia lấy trung bình của tổng các thành phần trong ma trận được tính ở trên với số lượng các phần tử của cửa sổ lọc ra một giá trị Itb(x, y).
Nếu I(x,y) - Itb(x,y) > θ thì I(x,y) = Itb(x,y) (1.9) Nếu I(x,y) - Itb(x,y) 25000 thì hiển thị tên màu tương ứng lên màn hình máy tính Đồng thời, nếu giá trị của data là 0 thì sẽ gửi tín hiệu điều khiển đến board Arduino thông qua cổng serial và hiển thị chuỗi “mau xanh” lên hình ảnh tại vị trí (100,100) với font chữ là cv2.FONT_HERSHEY_COMPLEX, kích thước chữ là 3 và màu chữ là (0,0,255).Sau đó,giá trị biến màu được đặt thành 1.
Hình 5.8: Câu lệnh if thứ 2 trong vòng lặp while true
Tương tự như trên ta sẽ có 3 câu lệnh if tương ứng cho các màu đỏ, tím, vàng.
Hình 5.9: Các câu lệnh if tương ứng với giá trị data=1,2,3Bước 8: Kết thúc quá trình phân loại màu
Hình 5.10: Hiển thị ảnh và kết quả phân loại và thoát vòng lặp
Giới thiệu chuẩn giao tiếp I2C
I2C viết tắt của từ Inter-Integrated Circuit là một chuẩn truyền thông do hãng điện tử Philips Semiconductor sáng lập cho phép giao tiếp một thiết bị chủ với nhiều thiết bị tớ với nhau như hình 5.1 dưới đây:
Hình 5.11: Các thiết bị giao tiếp theo chuẩn I2C
Chuẩn giao tiếp I2C sẽ có 2 chân tín hiệu tên là SDA (serial data) có chức năng truyền tải dữ liệu và tín hiệu SCL (serial clock) truyền tải xung clock để dịch chuyển dữ liệu.
Trong quá trình truyền dữ liệu I2C thì thiết bị nào cung cấp xung clock thì được gọi là chủ (master), thiết bị nhận xung clock được gọi là tớ (slave).
Thiết bị được gọi là chủ chỉ có 1, thiết bị tớ thì có nhiều, mỗi thiết bị tớ sẽ có
1 địa chỉ độc lập, chuẩn truyền ban đầu dùng địa chỉ 7 bit nên có thể 1 chủ giao tiếp với 128 thiết bị tớ Các thiết bị sau này vì đã tăng thêm số bit nên có thể giao tiếp nhiều hơn
Giao diện I2C có hỗ trợ tốc độ truyền chuẩn 100kHz hay tốc độ cao 400kHz. Ngoài ra nó còn hỗ trợ 7 hoặc 10 bit địa chỉ Được thiết kế nhằm đơn giản hóa quá trình trao đổi với 2 kênh DMA cho việc truyền và nhận dữ liệu. b Quy trình truyền dữ liệu chuẩn I2C
Quá trình thiết bị chủ ghi dữ liệu vào thiết bị tớ:
Bước 1: Thiết bị chủ tạo trạng thái START để bắt đầu quá trình truyền dữ liệu các thiết bị tớ sẽ ở trạng thái sẵn sàng nhận địa chỉ từ thiết bị chủ.
Bước 2: Thiết bị chủ gởi địa chỉ của thiết bị tớ cần giao tiếp – khi đó tất cả các thiết bị tớ đều nhận địa chỉ và so sánh với địa chỉ của mình, các thiết bị tớ sau khi phát hiện không phải địa chỉ của mình thì chờ cho đến khi nào nhận trạng thái START mới.Trong dữ liệu 8 bit thì có 7 bit địa chỉ và 1 bit điều khiển đọc/ghi (R/W): thì bit này bằng 0 để báo cho thiết bị tớ sẽ nhận byte tiếp theo.
Bước 3: Thiết bị chủ chờ nhận tín hiệu bắt tay từ thiết bị tớ Thiết bị tớ nào đúng địa chỉ thì phát 1 tín hiệu trả lời cho chủ biết.
Bước 4: Thiết bị chủ tiến hành gởi địa chỉ của ô nhớ bắt đầu cần ghi dữ liệu, bitR/W ở trạng thái ghi.
Bước 5: Thiết bị chủ chờ nhận tín hiệu trả lời từ thiết bị tớ.
Bước 6: Thiết bị chủ tiến hành gởi dữ liệu để ghi vào thiết bị tớ, mỗi lần ghi
1 byte, sau khi gởi xong thì tiến hành chờ nhận tín hiệu trả lời từ thiết bị tớ, quá trình thực hiện cho đến byte cuối cùng xong rồi thì thiết bị chủ chuyển sang trạng thái STOP để chấm dứt quá trình giao tiếp với thiết bị tớ.
Hình 5.12: Quá trình master (chủ) ghi dữ liệu vào slave(tớ)
Quá trình thiết bị chủ đọc dữ liệu vào thiết bị tớ:
Bước 1: Thiết bị chủ tạo trạng thái START để bắt đầu quá trình truyền dữ liệu các thiết bị tớ sẽ ở trạng thái sẵn sàng nhận địa chỉ từ thiết bị chủ.
Bước 2: Thiết bị chủ gởi địa chỉ của thiết bị tớ cần giao tiếp – khi đó tất cả các thiết bị tớ đều nhận địa chỉ và so sánh với địa chỉ mình, các thiết bị tớ sau khi phát hiện không phải địa chỉ của mình thì chờ cho đến khi nào nhận trạng thái START mới Trong dữ liệu 8 bit thì có 7 bit địa chỉ và 1 bit điều khiển đọc/ghi (R/W): thì bit này bằng 0 để báo cho thiết bị tớ sẽ nhận byte tiếp theo.
Bước 3: Thiết bị chủ chờ nhận tín hiệu bắt tay từ thiết bị tớ Thiết bị tớ nào đúng địa chỉ thì phát 1 tín hiệu trả lời cho chủ biết.
Bước 4: Thiết bị chủ tiến hành gởi địa chỉ của ô nhớ bắt đầu cần độc dữ liệu, bit R/W ở trạng thái đọc
Bước 5: Thiết bị chủ chờ nhận tín hiệu trả lời từ thiết bị tớ.
Bước 6: Thiết bị chủ chuyển sang trạng thái STOP, bắt đầu lại trạng thái START, tiến hành gởi dữ liệu của thiết bị và bit R/W bằng 1 để yêu cầu tớ gởi dữ liệu nội dung ô nhớ của địa chỉ đã nhận.
Bước 7: Thiết bị chủ sau khi nhận sẽ báo tín hiệu trả lời, quá trình này thực hiện cho đến khi hết dữ liệu mong muốn thì thiết bị chủ tạo tín hiệu STOP để chấm dứt.
Hình 5.13: Quá trình chủ đọc dữ liệu từ tớ c Ứng dụng
I2C thường được dùng trong các khối truyền thông nối tiếp của vi điều khiển như Arduino, ESP32, ESP8266
GIỚI THIỆU PHẦN MỀM ARDUINO IDE
Arduino IDE là phần mềm dùng để lập trình cho Arduino Môi trường lập trình đơn giản dễ sử dụng, ngôn ngữ lập trình Wiring dễ hiểu và dựa trên nền tảng C/C+ +
Arduino IDE có thể chạy trên 3 nền tảng phổ biến nhất hiện nay là Windows, MAC OS X và Linux Hai hàm để tạo ra một chương trình vòng thực thi có thể chạy được:
Setup(): hàm này chạy mỗi khi khởi động một chương trình, dùng để thiết lập các cài đặt
Loop(): hàm này được gọi lặp lại cho đến khi tắt nguồn board mạch
Vùng lệnh: bao gồm các nút lệnh menu (File, Edit, Sketch, Tools, Help) Phía dưới là các icon cho phép sử dụng nhanh các chức năng thường dùng của IDE được miêu tả như hình sau:
Hình 5.15: Chức năng các nút lệnh
Hình 5.17: Vùng thông báoHình 5.16: Vùng viết chương trình
Chọn cổng COM tương ứng để giao tiếp truyền dẫn giữa máy tính với Board
TÍNH TOÁN THIẾT KẾ PHẦN CỨNG
Tính chọn cấu trúc cánh tay robot
6.1.1 Phân tích và lựa chọn cấu trúc cánh ta
Qua tìm hiểu các loại cánh tay robot ở chương 2 thì nhóm quyết định thiết kế chế tạo cánh tay robot 4 bậc tự do tọa độ cầu RRRR Đây là loại robot rất phổ biến trong công nghiệp nhờ vào những ưu điểm: ít tốn không gian, dễ dàng bố trí trong không gian làm việc, độ khéo léo, linh hoạt cao, tầm hoạt động lớn, có thể nâng hạ tải trọng lớn Tuy nhiên nó có nhược điểm là độ cứng vững theo phương đứng thấp, độ chính xác giảm theo tầm hoạt động Cánh tay phải đạt được kích thước, độ dài hợp lý để có thể vươn dài, gắp vật phẩm trên băng tải và đưa chúng vào các ô tương ứng.
Hình 5.18: Cổng giao tiếp máy tính với Board
Kết cấu của Robot 4 bậc tự do như sau:
Khâu chuyển động để đưa tay gắp đến vị trí cần gắp vật
Tay gắp gắp vật đưa vật thể vào hộp
6.1.2 Tính toán động học robot a Động học thuận
Giả sử một robot có cấu hình đã biết: độ dài các thanh nối và góc quay của các
Giả sử một robot có cấu hình đã biết: độ dài các thanh nối và góc quay của các khớp hoặc độ dịch chuyển các khớp tịnh tiến Bài toán động học thuận là tính toán vị trí và hướng của cánh tay robot tương ứng với cấu hình robot xác định.
Xác định các hệ tọa độ:
Ta chọn hệ tọa độ O 0 như hình vẽ:
Hình 6.1: Cánh tay robot 4 bậc
Hình 6.2: Hệ tọa độ và các thông số robot Lập bảng thông số DH: a i αi d i θi
Bảng 1.5: Bảng thông số DH của cánh tay robot
A i = [ c s 0 0 θ i θi −s c θi s 0 θi αii c c αii αii − −c s c 0 θi θi αii c s αii αii a a i d i 1 c s i θi θi ]
Sử dụng phần mềm Matlab để tính toán và rút gọn:
Trong đó: p x =c 1 ¿) p y = s 1 ¿) p z =d 1 +d 4 s 23 + a 2 c 2 b Động học nghịch
⇒ θ 2 =arctan 2 (sin θ 2 , cosθ 2 ) hiết lập phương trình động học là bước rất quan trọng để có thể dựa vào đó phân
Thiết lập phương trình động học robot là bước rất quan trọng để có thể dựa vào đó phân tích hoạt động của robot và lập trình điều khiển robot.
Tính toán băng tải
Như đã giới thiệu ở mục 4.5 sau khi tính toán chi phí thì nhóm quyết định dùng loại băng tải PVC.
Giả định tốc độ băng tải V=0.08(m/ph)
Hệ số ma sát puly n=0.95[3]
Tính toán khối lượng băng tải:
Khối lượng 1 sản phẩm 22.6(g) đặt trên băng tải 4 sản phẩm 4*22.6 = 90.4(g) 0.0094(kg)
Khối lượng dây belt = 500(g) = 0.5(kg)
Tổng tải trọng băng tải W=0.5904(Kg)
-Công suất động cơ cần chọn:
Suy ra, động cơ được chọn phải thỏa mãn các thông số như sau:
N = 0.85 (vòng/ph) làm tròn 1 (vòng/ph) -Moment kéo động cơ lớn hơn moment đầu puly 0.0895(Kgf.m) (lực xoắn)
Kết luận: Với tất cả các yêu cầu và các lực tính toán trên nên nhóm đã quyết định chọn động cơ giảm tốc 12VDC làm động cơ dẫn động cho băng tải.[2]
Thông số kỹ thuật của động cơ:
- Điện áp định mức: DC 12V
- Dòng điện không tải: 60mA
- Tốc độ không tải: 1 vòng/phút
+ Chiều dài động cơ: 90mm + Đường kính động cơ: 37.2mm + Chiều dài trục ra: 18.2mm
Hình 6.3: Motor giảm tốc 12V-1RPM
Thiết kế hệ thống trên Creo Parametric
Giới thiệu phần mềm Creo Parametric: Creo là phần mềm CAD/CAM giúp ta giải quyết từ đầu đến cuối công việc thiết kế và chế tạo ra một sản phẩm công nghiệp hoặc tiêu dùng một cách chính xác và hiệu quả. Đầu tiên, Creo5.0 hỗ trợ cho người kỹ sư thiết kế ra mẫu của sản phẩm từ trong ý tưởng của anh ta Trong quá trình thiết kế, Creo 5.0 rất linh động cho phép sửa chữa những mẫu thiết kế dể dàng và nhanh chóng.
Tiếp theo, sau khi đã hoàn chỉnh mẫu thiết kế, mẫu sản phẩm có thể là chi tiết: nhựa, kim loại, thủy tinh hoặc chi tiết dạng tấm để gia công dập hay uốn Trong khâu này người kỹ sư sẽ hoàn thành xuất sắc nhiệm vụ thiết kế khuôn của một cách dể dàng đơn giản và có độ chính xác cao.
Cuối cùng, sau khi đã hoàn tất toàn bộ phận thiết kế cho một bộ khuôn để chế tạo ra sản phẩm, nó phải được đưa đi chế tạo Creo 5.0 lại giúp ta thực hiện việc gia công này bằng cách hỗ trợ người chế tạo, lập trình gia công tự động trên máy CNC.
Ngoài ra, Creo 5.0 còn hỗ trợ giúp người thiết kế lắp ráp các chi tiết với nhau qua đó thấy được sự khớp hay không khớp của các chi tiết trong cụm chi tiết của một sản phẩm hay một máy móc nào đó để có thể hiệu chỉnh kích thước của các chi tiết một cách chính xác và nhanh chóng.
Trong phần mềm Creo 5.0 có nhiều module khác nhau, sau đây là một số module dùng để thiết kế chi tiết, phân khuôn và lập trình gia công:
Hình 6.4: Các module trên phần mềm Creo
Sketcher: sketcher là module phát thảo nhiệm vụ chính là tạo ra các modul hình
2D và 3D để từ đó hình thành các mô hình Soid hoặc Surface Tuy nhiên do thừa kế các công cụ vẽ của CAD truyền thống, lại được bổ sung các công cụ tham số hóa, Sketcher trở thành công cụ vẽ mạnh và rất linh hoạt để tạo ra các bản vẽ kỹ thuật.
Part: thiết kế các mô hình khối dạng 3D dựa vào phương pháp đùn khối hoặc quét thành khối đặc (solid) hoặc thành mỏng (shell) hoặc mặc phẳng (surface).
Assembly : Lắp ráp các chi tiết để tạo ra một model hoàn chỉnh
Mannufacturing: thiết kế mô phỏng tách khuôn hoặc gia công.
Drawing :Tạo bản vẽ từ không gian ba chiều, lên kích thước, yêu cầu kỹ thuật
Dưới đây, là mô hình 3D tổng thể của hệ thống phân loại sản phẩm theo màu sắc với các khối như: cánh tay robot, cảm biến hồng ngoại, nguồn tổ ong, hộp đựng board mạch và các thanh nhôm định hình được thiết kế trên phần mềm Creo Parametric 9.0
Tiếp theo là mô hình 3D của cánh tay robot 4 bậc tự do:
Hình 6.5: Mô hình hệ thống cánh tay robot phân loại sản phẩm
Hình 6.8: Nguồn tổ ong 12VDC
Hình 6.9: Hộp đựng board mạch
Tiếp đến, ta sẽ thiết kế các ô chứa các sản phẩm đã được phân loại từ trên băng tải để cánh tay robot có thể gắp vật từ băng tải và thả vào các ô tương ứng.
Ngoài những hình 3D này thì còn rất nhiều các chi tiết nhỏ khác được thiết kế như: bu lông, đai ốc,nhôm định hình…
Thiết kế mạch điều khiển
6.4.1 Giới thiệu phần mềm Altium Designer[1]:
Ngày nay phần mềm thiết kế mạch nguyên lý, PCB trên Altium đang là một trong những phần mềm vẽ mạch điện tử mạnh và được ưa chuộng ở Việt Nam.Ngoài
Hình 6.12: Cảm biến hồng ngoại E18-D80K
Hình 6.13: Logo phần mềm việc hỗ trợ tốt cho hoạt động vẽ mạch, Altium còn hỗ trợ tốt trong việc quản lý mạch,trích xuất file thống kê linh kiện Altium Designer cung cấp một ứng dụng kết hợp tất cả công nghệ và chức năng cần thiết cho việc phát triển sản phẩm điện tử hoàn chỉnh, như thiết kế hệ thống ở mức bo mạch và FPGA, phát triển phần mềm nhúng cho FPGA và các bộ xử lý rời rạc, bố trí mạch in (PCB)… Altium Designer thống nhất toàn bộ các quá trình lại và cho phép bạn quản lý được mọi mặt quá trình phát triển hệ thống trong môi trường tích hợp duy nhất Khả năng đó kết hợp với khả năng quản lý dữ liệu thiết kế hiện đại cho phép người sử dụng Altium Designer tạo ra nhiều hơn những sản phẩm điện tử thông minh, với chi phí sản phẩm thấp hơn và thời gian phát triển ngắn hơn.
6.4.2 Môi trường thiết kế trong Altium:
Trong môi trường thiết kế được tích hợp rất đa dạng hỗ trợ cho việc thiết kế mạch điện thì Altium chia làm 4 môi trường vẽ và thiết kế độc lập nhau, giúp người dùng có thể thiết kế sơ đồ nguyên lý nhờ các thư viện linh kiện đa dạng :
- Schematic Editor: Môi trường vẽ và thiết kế mạch nguyên lý
- PCB Editor: Môi trường vẽ và thiết kế mạch in
- SCH Library Editor: Môi trường vẽ và thiết kế thư viện linh kiện nguyên lý
- PCB Library Editor: Môi trường vẽ thiết kế hình dạng và chân linh kiện
Hình 6.14: Môi trường vẽ và thiết kế mạch nguyên lý (Schematic Editor)
Hình 6.15: Môi trường vẽ và thiết kế mạch in (PCB Editor) Trong sơ đồ nguyên lý hệ thống gồm có các khối như sau:
Khối đầu vào cảm biến hồng ngoại NPN
Khối đầu vào nút nhấn và LCD
Khối điều khiển động cơ băng tải
Sau đây em sẽ tiến hành phân tích lần lượt chức năng của từng khối qua đó giúp bạn đọc có thể dễ hiểu nguyên lý hoạt động của sơ đồ mạch điện được thiết kế từ đó sẽ có cái nhìn tổng quan về cách thức mô hình hoạt động.
Hình 6.16: Sơ đồ mạch điện của hệ thống
Đầu tiên là khối nguồn: sử dụng module hạ áp LM2596, khi cấp nguồn 12VDC thì ta sẽ dùng module hạ áp nhằm mục đích hạ 12V thành nguồn 7V cấp cho Arduino và 5V cấp cho LCD, như hình 6.16
Khối vi điều khiển được sử dụng trong mô hình là board Arduino Uno
Hình 6.17: 2 module hạ áp LM2596
Hình 6.18: Khối vi điều khiển
Khối đầu vào nút nhấn Start, Stop được nối vào 2 chân INPUT(12,13) của Arduino.Khi chưa nhấn nút thì điện áp sẽ ở mức cao 3.3V,ngược lại khi nhấn nút thì sẽ đưa tín hiệu 0V từ nút nhấn về chân số 12,13 và LCD
Hình 6.19: Khối đầu vào của nút nhấn và LCD
Khối điều khiển động cơ băng tải để động cơ chạy bão hòa thì ta cấp thẳng vào động cơ nguồn 12V.Khi ta xuất tín hiệu điều khiển thì mức điện áp 0V từ chân GND thông qua chân SD của Mosfet IRF540 vào chân thứ 2 của động cơ DC, trong khi đó chân 1 của động cơ đã nối 12V thì động cơ sẽ quay(sử dụng IRF540 ở đầu ra của Arduino để điều khiển tải ở dòng ampe cao).
Hình 6.20: Khối điều khiển động cơ băng tải
Khối điều khiển động cơ Servo robot: dùng cách li quang 6N137 để cách li tín hiệu giữa 4 động cơ servo, cơ cấu chấp hành với Arduino vì khi các cơ cấu chấp hành, servo hoạt động dựa vào tín hiệu xung PWM sẽ làm nhiễu tín hiệu của Arduino.Khi ta dùng 6N137 thì Arduino sẽ điều khiển servo thông qua chân số 3 của 6N137.
Tín hiệu điện áp sau khi được cách li vẫn bị yếu nên ta sử dụng TIP41C(Transitor) để khuếch đại điện áp từ 3.3V lên 5V để điều khiển Servo.
Hình 6.21: 6N137 và TIP41C kết nối với Arduino điều khiển Servo
Khối cảm biến hồng ngoại NPN ở trạng thái bình thường sẽ có mức 5V, khi phát hiện có tác động sẽ xuất tín hiệu 0V.Ở đây ta nối thẳng chân cảm biến vào mức 5V khi cảm biến xuất mức tín hiệu 0V thì PC817 sẽ dẫn,ở trạng thái bình thường PC817 sẽ ở mức cao 3v3 ghim vào chân arduino khi PC817 bị kích hoạt sẽ đưa mức 0V vào chân số 2 thì arduino sẽ nhận biết có tín hiệu cảm biến.
Hình 6.22: Khối cảm biến hồng ngoại NPN
SƠ ĐỒ THUẬT TOÁN
Sơ đồ thuật toán chương trình chính
Giải thích sơ đồ thuật toán chương trình chính:
- Kiểm tra nút nhấn start được nhấn hay chưa: Nếu start chưa được nhấn thì quay về bắt đầu chờ tín hiệu từ nút nhấn.Ngược lại, nếu start được nhấn thì chương trình chạy như sau:
- Gán các tín hiệu đếm sản phẩm của từng màu sẽ xét và sản phẩm lỗi bằng giá trị ban đầu là 0 và sau đó động cơ băng tải hoạt động
- Webcam chụp ảnh gửi về python xử lý phân loại màu
- Khi cảm biến thứ nhất phát hiện có vật, thì gọi hàm xử lí ảnh từ python gửi dữ liệu về Arduino xử lý:
Nếu sản phẩm màu tím thì biến đếm màu tím tăng lên 1 đơn vị T=T+1,tương tự với màu xanh và màu vàng
Nếu sản phẩm không nằm trong dãy màu đang xét(xanh,tím,vàng) thì sẽ là sản phẩm bị loại và biến đếm loại tăng lên 1 đơn vị L=L+1 và đồng thời sẽ hiển thị lên LCD các giá trị biến đếm
- Ngược lại, nếu cảm biến thứ nhất không phát hiện sản phẩm thì tiếp tục chờ và lúc này băng tải tiếp tục chạy và các biến đếm không thay đổi
- Sản phẩm sẽ tiếp tục chạy trên băng tải cho đến khi gặp cảm biến thứ 2 được đặt đối diện cánh tay robot, khi đó nếu cảm biến thứ 2 không phát hiện có vật thì nó sẽ quay về chờ băng tải chạy , nếu cảm biến thứ 2 phát hiện có vật mà vật đúng với dãy màu đang xét thì sẽ gửi tín hiệu về Arduino kích dừng băng tải:
Nếu sản phẩm màu tím thì cánh tay robot sẽ tiến hành gắp sản phẩm thả vào ô tương ứng đã được quy định sẵn
Nếu sản phẩm màu xanh thì cánh tay robot sẽ tiến hành gắp sản phẩm thả vào ô tương ứng màu xanh đã được quy định sẵn
Nếu sản phẩm màu vàng thì cánh tay robot sẽ tiến hành gắp sản phẩm thả vào ô vàng tương ứng đã được quy định sẵn
Ngược lại, nếu sản phẩm bị lỗi màu(không nằm trong dãy màu đang xét) thì băng tải sẽ tiếp tục chạy đến cuối và sản phẩm sẽ tự động rơi vào ô sản phẩm bị loại và kết thúc quá trình phân loại vật thứ nhất Sau đó ta sẽ kiểm tra nút stop có được nhấn hay không, nếu không được nhấn thì băng tải tiếp tục chạy.Ngược lại, nếu stop được nhấn thì nó sẽ dừng chương trình.
Sơ đồ thuật toán xử lý ảnh
Giải thích sơ đồ thuật toán xử lí ảnh:
- Khai báo các thư viện cần sử dụng trong xử lí ảnh(OPENCV), thiết lập các lệnh cần thiết cho camera
- Camera sẽ tiến hành chụp ảnh và xử lý chuyển đổi ảnh màu chụp được từ RGB sang HSV, gán các giá trị min max HSV của 3 màu (quá trình xử lí được lập trình trên Pycharm)
- Tiến hành so sánh ảnh HSV vừa chuyển đổi với các giá trị HSV mặc định ở trên.
Nếu giá trị nằm trong khoảng Max_T và Min_T thì sẽ tiếp hành gửi dữ liệu màu tím sang kit Arduino Uno.
Nếu giá trị nằm trong khoảng Max_X và Min_X thì sẽ tiếp hành gửi dữ liệu màu xanh sang kit Arduino Uno.
Nếu giá trị nằm trong khoảng Max_V và Min_V thì sẽ tiếp hành gửi dữ liệu màu vàng sang kit Arduino Uno.
Nếu giá trị không nằm trong các khoảng Max và Min nào thì sẽ không gửi dữ liệu sang kit Arduino.
- Kết thúc quá trình, webcam tiếp tục chờ đến khi có ảnh đi qua.
KẾT QUẢ THỰC NGHIỆM, ĐÁNH GIÁ, HƯỚNG PHÁT TRIỂN.78
Kết quả
Trong quá trình thực hiện đề tài là khá tốt, thông qua quá trình làm đề tài nhóm đã tiếp thu được những kiến thức như sau:
Giao tiếp được giữa Arduino với Python thông qua giao thức Serial
Giao tiếp giữa Arduino với LCD, cảm biến hồng ngoại, Servo
Thiết kế, chế tạo thành công hệ thống phân loại sản phẩm bằng cánh tay robot ứng dụng xử lý ảnh
Tính toán và thiết kế phần cơ khí cho băng tải
Mô hình hoạt động khá ổn định tuy nhiên việc phân loại vẫn chưa thật sự chuẩn do ảnh hưởng bởi nhiều yếu tố Bộ xử lý trung tâm xử lý tín hiệu khá tốt Phân loại được các sản phẩm xanh, tím, vàng, nếu không thuộc một trong các màu sắc kể trên thì được xem là sản phẩm lỗi, cánh tay robot gắp, thả sản phẩm hoạt động ổn định Mô hình phần cứng hoạt động tốt, thiết bị nhỏ gọn, lắp đặt dễ dàng, có tính kinh tế, thuận tiện cho việc học tập và cũng có thể phát triển thành dây chuyền sản xuất.
Ngoài những kết quả đạt được thì hệ thống vẫn còn những hạn chế sau: Tốc độ xử lý của hệ thống còn chậm, webcam chụp ảnh chưa đáp ứng được ánh sáng tốt nhất,chỉ phân loại được sản phẩm theo màu sắc,.
Những hình ảnh về kết quả hoàn thiện mô hình:
Hình 8.1: Mô hình chụp từ trên xuống
Hình 8.2: Mô hình chụp từ bên phải Để có kết quả khách quan nhất nhóm sẽ tiến hành xử lý tương ứng với mỗi màu 2 sản phẩm liên tiếp Điều kiện sẽ chụp ảnh trên nền màu xanh lá(màu của băng tải)
Kết quả 2 lần chụp liên tiếp màu xanh:
Hình 8.3: Kết quả nhận dạng màu xanh lần 1
Kết quả 2 lần chụp liên tiếp màu vàng:
Hình 8.4: Kết quả nhận dạng màu xanh lần 2
Hình 8.5: Kết quả nhận dạng màu vàng lần 1
Hình 8.6: Kết quả nhận dạng màu vàng lần 2
Kết quả 2 lần chụp liên tiếp màu tím:
Hình 8.7: Kết quả nhận dạng màu tím lần 1
Hình 8.8: Kết quả nhận dạng màu tím lần 2
Đối với các sản phẩm có màu khác 3 màu: xanh,tím, vàng thì sẽ được nhóm cho thành những sản phẩm lỗi màu và bị loại.Ví dụ như hình 8.9, 8.10 dưới:
Hình 8.10: Kết quả nhận dạng màu xam lần 2Hình 8.9: Kết quả nhận dạng màu xám lần 1
Cánh tay robot sẽ gắp vật từ băng tải sau đó nâng lên xoay qua và hạ thả vật vào ô định sẵn tương ứng với màu đó,ví dụ như hình 8.11 và 8.12:
Hình 8.12: Cánh tay robot thả vật vào khay chứa sản phẩm
Hình 8.11: Cánh tay robot gắp vật từ băng tải
Kết quả sau khi phân loại sẽ được đếm bằng cảm biến hồng ngoại và hiển thị lên LCD, như hình dưới:
Sản phẩm Xanh dương Tím Vàng
Kết quả 2/2 2/2 2/2 Độ chính xác (%) 100 100 100
Bảng 1.6: Bảng đánh giá độ chính xác phân loại sản phẩm
Hình 8.9: Màn hình LCD hiển thị số sản phẩm được phân loại
Nhận xét, đánh giá
Sau 2 lần thực nghiệm trên mỗi sản phẩm, hệ thống phân loại sản phẩm cho thấy hoạt động tương đối ổn định với độ chính xác tuyệt đối, không bị nhầm lẫn trong việc phân loại giữa các màu với nhau và phân loại rõ ràng từng sản phẩm Tuy nhiên, ở đây chỉ thực hiện mỗi màu 2 sản phẩm liên tiếp, khi thực hiện liên tục nhiều sản phẩm hơn sẽ có xuất hiện những sai sót do ảnh hưởng của nhòe ảnh, nhiễu, cường độ sáng… gây nhận diện không chính xác được sản phẩm
Sau khi qua thời gian tìm hiểu phương pháp nhận dạng, phân loại sản phẩm, nhóm đã phân loại thành công được ba màu cơ bản ( xanh,tím,vàng), nếu không thuộc một trong ba màu kể trên thì sản phẩm đó được xem là sản phẩm loại, cùng với đó là đếm sản phẩm theo từng màu và được hiển thị trên giao diện lcd.
Hướng phát triển
Từ những mặt hạn chế của đề tài, để đề tài hoạt động tốt hơn và có thể áp dụng vào thực tế sau này nhóm đã đề ra những hướng phát triển như sau:
Cải thiện chất lượng camera (sử dụng camera xử lý ảnh công nghiệp).
Thiết kế khâu cấp phôi tự động cho hệ thống.
Kết nối hệ thống iot để dễ dàng quản lý từ xa.
Ứng dụng từ mô hình xây dựng thành dây chuyền sản xuất công nghiệp với cấu hình mạnh hơn
[1] https://mpe.epu.edu.vn/chi-tiet-tin/gioi-thieu-ve-phan-mem-altium-designer-7-
[2] https://www.dosangtao.vn/motor-giam-toc-5-24v-ma-555-2rpm-dien-ap-12v-1rpm#0
[3] Doxygen, “OpenCV – Python Tutorials”, https://docs.opencv.org/, 2018
[4] OpenCV xử lý màu chuyển hệ màu, https://viblo.asia/, 2019.
[5] https://advancecad.edu.vn/khai-niem-co-ban-ve-truyen-thong-uart-so-do-khoi-ung- dung/
[6] https://www.me-cad.com/2015/09/thiet-ke-nguoc-voi-proe-creo-full-tieng.html
[8] https://xaydungso.vn/bai-viet-khac/tim-hieu-ky-hieu-trong-ban-ve-ky-thuat-co-khi- don-gian-va-de-hieu-vi-cb.html
[9] https://dientuhay.vn/huong-dan-chi-tiet-cach-giao-tiep-python-voi-arduino/
PHỤ LỤC Code trên Arduino ide điều khiển cánh tay robot:
/////biến//// bool bien_start = false; bool status_CBPH_vat = false; bool status_CBPH_mau = false; bool status_loai = false; int kho[10] = {0}; int vi_tri_vat = 0; int vi_tri_mau = 0; int qua_trinh = 0; int vat_mau = 0; int tg_tao_tre = 0; int SL_tim = 0; int SL_xanh = 0; int SL_vang = 0; int SL_loai = 0; int goc_quay = 88; int goc_tien_lui = 120; int goc_nang_ha = 70; int goc_gap_nha = 78; int tg = 0; void setup() {
Serial.begin(9600); lcd.init(); lcd.clear(); lcd.backlight();
Se_quay.attach(quay_Pin);
Se_tien_lui.attach(tien_lui_Pin);
Se_nang_ha.attach(nang_ha_Pin);
Se_gap_nha.attach(gap_nha_Pin); pinMode(start_, INPUT_PULLUP); pinMode(stop_, INPUT_PULLUP); pinMode(CBPH_vat, INPUT_PULLUP); pinMode(CBPH_mau, INPUT_PULLUP); pinMode(bang_tai, OUTPUT); lcd.setCursor(0, 0); lcd.print(" HE THONG ROBOT "); lcd.setCursor(0, 1); lcd.print(" PHAN LOAI MAU "); digitalWrite(bang_tai, !LOW);
Se_quay.write(goc_quay);
Se_tien_lui.write(goc_tien_lui);
Se_nang_ha.write(goc_nang_ha);
Se_gap_nha.write(goc_gap_nha);
} void loop() { if (digitalRead(start_) == 0) { bien_start = true;
SL_tim = SL_xanh = SL_vang = SL_loai = 0; vi_tri_vat = vi_tri_mau = qua_trinh = vat_mau = 0; for (int x = 0; x < 10; x++) { kho[x] = 0;
} goc_quay = 88; goc_tien_lui = 120; goc_nang_ha = 70; goc_gap_nha = 78; lcd.setCursor(0, 0); lcd.print("T: 0 X: 0 "); lcd.setCursor(0, 1); lcd.print("V: 0 LOAI: 0 "); digitalWrite(bang_tai, !HIGH);
Serial.println((String)vi_tri_mau + " " + (String)kho[vi_tri_mau]
+ " " + (String)status_CBPH_mau + " " + (String)qua_trinh); /////////////cảm biến phát hiện vật////////// if (Serial.available()) { char data_ = Serial.read(); if (digitalRead(CBPH_vat) == 0 && status_CBPH_vat == false) { if (data_ == '1') {
SL_tim++; lcd.setCursor(3, 0); lcd.print(SL_tim); kho[vi_tri_vat] = data_ - 48; vi_tri_vat = (vi_tri_vat == 9) ? 0 : vi_tri_vat + 1; status_CBPH_vat = true;
SL_xanh++; lcd.setCursor(11, 0); lcd.print(SL_xanh); kho[vi_tri_vat] = data_ - 48; vi_tri_vat = (vi_tri_vat == 9) ? 0 : vi_tri_vat + 1; status_CBPH_vat = true;
SL_vang++; lcd.setCursor(3, 1); lcd.print(SL_vang); kho[vi_tri_vat] = data_ - 48; vi_tri_vat = (vi_tri_vat == 9) ? 0 : vi_tri_vat + 1; status_CBPH_vat = true;
} if (digitalRead(CBPH_vat) == 0 && status_loai == false) { status_loai = true;
} if (digitalRead(CBPH_vat) == 1) { if (status_CBPH_vat == true) { status_CBPH_vat = false; status_loai = false;
} else if (status_loai == true) { status_loai = false;
SL_loai++; kho[vi_tri_vat] = 4; vi_tri_vat = (vi_tri_vat == 9) ? 0 : vi_tri_vat + 1; lcd.setCursor(13, 1); lcd.print(SL_loai);
/////////////cảm biến phát hiện màu////////// if (digitalRead(CBPH_mau) == 0 && status_CBPH_mau == false && kho[vi_tri_mau] != 0) { status_CBPH_mau = true; if (kho[vi_tri_mau] != 4) { digitalWrite(bang_tai, !LOW);
} if (digitalRead(CBPH_mau) == 1 && status_CBPH_mau == true && kho[vi_tri_mau] == 4) { status_CBPH_mau = false; kho[vi_tri_mau] = 0; vi_tri_mau = (vi_tri_mau == 9) ? 0 : vi_tri_mau + 1;
} if (qua_trinh == 0 && status_CBPH_mau == true && kho[vi_tri_mau] != 4) { qua_trinh = 1; vat_mau = kho[vi_tri_mau]; kho[vi_tri_mau] = 0;
/////qua trinh/// if (tg == 3) { switch (qua_trinh) { case 1: if (goc_tien_lui > 40) goc_tien_lui -= 2; if (goc_nang_ha > 10) goc_nang_ha -= 2; if (goc_tien_lui = 120 && goc_nang_ha >= 70) { vi_tri_mau = (vi_tri_mau == 9) ? 0 : vi_tri_mau + 1; qua_trinh = 4; digitalWrite(bang_tai, !HIGH); status_CBPH_mau = false;
} break; case 4: if (vat_mau == 1) { if (goc_quay < 160) goc_quay += 2; if (goc_quay >= 160) qua_trinh = 5;
} else if (vat_mau == 2) { qua_trinh = 5;
} else { if (goc_quay > 16) goc_quay -= 2; if (goc_quay 110) goc_tien_lui -= 2; if (goc_nang_ha < 110) goc_nang_ha += 2; if (goc_tien_lui = 100) { tg_tao_tre = 0; qua_trinh = 6;
} else { if (goc_tien_lui > 60) goc_tien_lui -= 2; if (goc_nang_ha > 30) goc_nang_ha -= 2; if (goc_tien_lui 120) goc_tien_lui -= 2; if (goc_nang_ha > 70) goc_nang_ha -= 2; if (goc_tien_lui = 70) { qua_trinh = 8;
} break; case 8: if (vat_mau == 1) { if (goc_quay > 88) goc_quay -= 2; if (goc_quay = 88) { vat_mau = 0; qua_trinh = 0;
Se_quay.write(goc_quay);
Se_tien_lui.write(goc_tien_lui); Se_nang_ha.write(goc_nang_ha); Se_gap_nha.write(goc_gap_nha); }
///////////nút stop////////////// if (digitalRead(stop_) == 0) { bien_start = false; lcd.setCursor(0, 0); lcd.print(" HE THONG ROBOT "); lcd.setCursor(0, 1); lcd.print(" PHAN LOAI MAU "); digitalWrite(bang_tai, !LOW); } delayMicroseconds(500); tg++;
Code chương trình xử lý ảnh trên python: import cv2 import numpy as np cap = cv2.VideoCapture(1) def empty(a): pass def stackImages(scale, imgArray): rows = len(imgArray) cols = len(imgArray[0]) rowsAvailable = isinstance(imgArray[0], list) width = imgArray[0][0].shape[1] height = imgArray[0][0].shape[0] if rowsAvailable: for x in range(0, rows): for y in range(0, cols): if imgArray[x][y].shape[:2] == imgArray[0][0].shape[:2]: imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale) else: imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0]
None, scale, scale) if len(imgArray[x][y].shape) == 2: imgArray[x][y] cv2.cvtColor(imgArray[x][y], cv2.COLOR_GRAY2BGR) imageBlank = np.zeros((height, width, 3), np.uint8) hor = [imageBlank] * rows hor_con = [imageBlank] * rows for x in range(0, rows): hor[x] = np.hstack(imgArray[x]) ver = np.vstack(hor) else: for x in range(0, rows): if imgArray[x].shape[:2] == imgArray[0].shape[:2]: imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale) else: imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None, scale, scale) if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR) hor = np.hstack(imgArray) ver = hor return ver cv2.namedWindow("TrackBars") cv2.resizeWindow("TrackBars", 640, 240) cv2.createTrackbar("Hue Min", "TrackBars", 0, 179, empty) cv2.createTrackbar("Hue Max", "TrackBars", 179, 179, empty) cv2.createTrackbar("Sat Min", "TrackBars", 0, 255, empty) cv2.createTrackbar("Sat Max", "TrackBars", 255, 255, empty) cv2.createTrackbar("Val Min", "TrackBars", 0, 255, empty) cv2.createTrackbar("Val Max", "TrackBars", 255, 255, empty)
# [119,29,181,178,136,255]] #tím t=0 data = 0 mau = 0 while True: success, img = cap.read() imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) h_min = cv2.getTrackbarPos("Hue Min", "TrackBars") h_max = cv2.getTrackbarPos("Hue Max", "TrackBars") s_min = cv2.getTrackbarPos("Sat Min", "TrackBars") s_max = cv2.getTrackbarPos("Sat Max", "TrackBars") v_min = cv2.getTrackbarPos("Val Min", "TrackBars") v_max = cv2.getTrackbarPos("Val Max", "TrackBars") lower = np.array([h_min, s_min, v_min]) upper = np.array([h_max, s_max, v_max]) lower = np.array(color[data][0:3]) upper = np.array(color[data][3:6]) mask = cv2.inRange(imgHSV, lower, upper) imgResult = cv2.bitwise_and(img, img, mask=mask) contours,hierarchy cv2.findContours(mask,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE) for cnt in contours: cv2.drawContours(img,cnt,-1,(5,100,0),2) if cv2.countNonZero(mask)>25000: if data==0:
# Arduin.write('1'.encode()) cv2.putText(img,"Mau Xanh",
(100,100),cv2.FONT_HERSHEY_COMPLEX,3,(0,0,255),3) mau=1 print(0) if data==1:
# Arduin.write('2'.encode()) cv2.putText(img, "Mau Vang", (100, 100), cv2.FONT_HERSHEY_COMPLEX, 3, (0, 0, 255), 3) mau = 2 print(1) if data==2:
# Arduin.write('3'.encode()) cv2.putText(img, "Mau Do", (100, 100), cv2.FONT_HERSHEY_COMPLEX, 3, (0, 0, 255), 3) mau = 3 print(2) if data == 3:
# Arduin.write('3'.encode()) cv2.putText(img, "Mau Tim", (100, 100), cv2.FONT_HERSHEY_COMPLEX, 3, (0, 0, 255), 3) mau = 4 print(3)
# t=1 imgStack = stackImages(0.6, ([img, imgHSV], [mask, imgResult])) cv2.imshow("Stacked Images", imgStack) cv2.waitKey(1) data+=1