4.2.1. Nguồn điện
Với các thành phần linh kiện đã chọn, nhóm sử dụng 3 mức điện áp đảm bảo cho hệ thống hoạt động bình thường, bao gồm:
• Nguồn động cơ băng tải có sử dụng module L298: 24V
• Nguồn hỗ trợ Arduino nuôi cảm biến, động cơ servo: 5V
• Nguồn Adapter cho camera Kinect: 12V
(*Chú ý: Nguồn cấp tiêu chuẩn cho L298 là 12V, khi muốn sử dụng động cơ với mức điện áp 24V cần ngắt kết nối nguồn 24V với IC hạ áp trong module L298 (tháo Jump) tránh hỏng linh kiện.)
4.2.2. Cảm biến và động cơ tay gạt
Hệ thống có 4 cảm biến tiệm cận và 3 động cơ servo nên chân GND và VCC sẽ được nối chung sử dụng nguồn ngoài 5V và chân GND cần được nối chung với Arduino. Các dây tín hiệu còn lại được nối tới arduino như mô hình thiết kế chương 3.
Hình 4.8. Cảm biến và động cơ tay gạt
Do thời gian thực hiện giới hạn, nên nhóm chưa có phần thiết kế và thi công bo mạch mà chỉ chỉ sử dụng dây cắm trực tiếp trên các module.
4.2.3. Hiển thị và điều khiển
Màn hình LCD hiển thị số lượng phôi đã được phân loại: tròn cao, vuông cao, tam giác cao, thấp. Nút bấm Start dùng để ngắt động cơ băng tải
73
Bảng 4.1. Đấu nối nút bấm
Nút bấm Cách đấu nối Chức năng
START 1 chân nút bấm nối đến 1 trong 2 cực của động cơ, chân còn lại nối đến cổng OUT2 của module L298
Bật động cơ băng tải, khởi động hệ thống. STOP 1 chân nối đến GND, chân còn lại nối đến
chân 8 trên Arduino
Dừng hệ thống khi đã chạy hết chu trình.
RESET 1 chân nối đến GND, chân còn lại nối đến chân 12 trên Arduino
Đặt lại các giá trị về giá trị ban đầu.
Hình 4.9. Mặt trên hộp điện
4.3. Xây dựng chương trình, kết nối hệ thống
Chương trình phân loại phôi đươc viết trên phần mềm Pycharm sử dụng ngôn ngữ Python trên phiên bản 3.7. Chương trình điều khiển được viết trên phần mềm Arduino IDE sử dụng ngôn ngữ C.
74
Hình 4.10. Hệ thống sau khi đã hoàn thiện
• Cài đặt Pycharm và Arduino IDE:
Hình 4.11. Cài đặt Pycharm và Arduino IDE
Dữ liệu từ camera Kinect được khai thác và sử dụng bằng máy tính cá nhân thông qua phần mềm Pycharm các dữ liệu được xử lý và được gửi vào Arduino thông qua giao tiếp Serial.
Cài đặt các thư viện sử dụng trên Pycharm bao gồm:
• SerialDevice: Truyền thông tin giữa thiết bị xử lý dữ liệu và thiết ngoại vi.
• Opencv-python: xử lý dữ liệu hình ảnh, thị giác máy tính.
• Openni: Thao tác với dữ liệu trên Kinect.
• Numpy: một thư viện toán học cho phép làm việc hiệu quả với ma trận và mảng với tốc độ xử lý nhanh hơn “Core Python” đơn thuần.
75
• Cvzone: Giao tiếp, truyền nhận dữ liệu với Arduino thông qua Serial Port.
Hình 4.12. Kết nối hệ thống thực hiện phân loại
Cùng kết nối camera và Arduino tới máy tính, trong Pycharm thiết lập truyền thống nối tiếp với Arduino:
Hình 4.13. Thiết lập truyền thống nối tiếp với Arduino
Hộp thoại Run thông báo Arduino Uno đã được kết nối thông qua cổng COM3
• Lập trình:
o Arduino:
Thư viện cvzone cũng được cài đặt trên Arduino, dữ liệu từ máy tính truyền qua Arduino thông qua Serial Port được lưu trong bộ nhớ đệm. Sử dụng hàm
76
Serial.parseInt() để lấy từng kí tự số nguyên trong bộ đệm sử dụng cho thao tác điều khiển phân loại.
▪ Serial.available() > 0: đã có dữ liệu trong bộ đệm
▪ Serial.parseInt(): lấy kí tự nguyên đầu tiên trong bộ đệm
Lần lượt các tín hiệu được lấy từ bộ đệm nếu đúng điều kiện các câu lệnh tiếp theo sẽ được thực hiện.
o Pycharm:
Các kí tự số nguyên tương ứng với loại phôi được gửi lần lượt qua Arduino. Khai báo Arduino:
Arduino = SerialObject('COM3', 9600, 1) ▪ Serial Port: COM3
▪ Tốc độ Baud: 9600
▪ Digit: 1 - số kí tự trên 1 giá trị được gửi đi (ví dụ: 5 – 1digit, 55 – 2digits) Gửi dữ liệu đã xử lý sang Arduino:
Arduino.sendData(wpTypeArr)
wpTypeArr: loại phôi đã được phân loại là các phần tử số nguyên 1, 2, 3, 4 tương
ứng với loại phôi.
• Hướng dẫn sử dụng phần cứng
Sau khi kết nối Arduino và camera với máy tính, tiến hành bật nguồn cho hệ thống, băng tải sẽ chạy sau khi nhấn nút Start, đặt phôi lên băng tải tiến hành phân loại. Trong qua trình phân loại nếu xảy ra lỗi (ví dụ như phân loại sai loại phôi) có
77
thể ấn nút Stop hệ thống sẽ dừng sau khi phân loại xong phôi đang chạy. Sau đó, ấn nút Reset để đặt lại các giá trị như ban đầu.
Camera Kinect cùng Arduino sẽ được kết nối trực tiếp tới máy tính, máy tính sẽ xử lý dữ liệu thu được từ Kinect sau đó tín hiệu 1, 2, 3, 4 sẽ được gửi sang Arduino thông qua giao tiếp Serial tương ứng 1 – Tròn cao, 2 – Vuông cao, 3 – Tam giác cao, 4 – Phôi lỗi.
Kết quả hiển thị đếm sản phẩm:
78
CHƯƠNG 5. KẾT LUẬN VÀ ĐỊNH HƯỚNG PHÁT TRIỂN 5.1. Kết quả
5.1.1. Tính chính xác a. Kết quả phân loại a. Kết quả phân loại
Kết quả phân loại sẽ hiển thị trên màn hình máy tính với các thông số bao gồm: khoảng cách từ cảm biến tới mặt băng tải (Distance), hình dạng của phôi (Shape), chiều cao phôi (Height), và trạng thái của phôi (NG hoặc OK). Với số phôi phân loại là 160 (40 phôi cho mỗi loại), nhóm thu được kết quả:
• Phôi tròn cao
Hình dưới đây mô tả quá trình phân loại phôi tam giác:
Hình 5.1. Kết quả phân loại phôi tròn cao
Hình 5.1a: Phôi được đặt vào băng tải chuẩn bị tới vị trí phân loại. Khoảng cách “Distance” được đo tại điểm trắng trên khung hình hiển thị là 65,9cm.
Hình 5.1b: Phôi được đưa tới vị trí nhận diện, chiều cao phôi được tính toán như công thức ở chương 3, hình dạng phôi được nhận diện đúng (tròn – Circle), chiều cao đạt (7,7cm). → trạng thái của phôi: OK.
79
Hình 5.1c: Băng tải đưa phôi tới vị trí cảm biến 1, cảm biến phát hiện phôi, tay gạt gạt phôi xuống máng phân loại.
Hình 5.1d: Biến đếm phôi tròn tăng lên 1 (TR:1). Kết quả sau khi phân loại 40 phôi tròn:
Hình 5.2. Kết quả sau khi phân loại 40 phôi tròn cao
Sau khi phân loại 40 phôi tròn số phôi được phân loại chính xác là 37 phôi hiển trị trên màn hình LCD, 3 phôi lỗi xảy ra trong trường hợp sau:
Lỗi phôi không được gạt dù cảm biến đã phát hiện
Hình 5.3. Lỗi không gạt phôi tròn
• Phôi tam giác cao
80
Hình 5.4. Kết quả phân loại phôi tam giác cao
Hình 5.4a: Phôi tam giác được đặt vào băng tải chuẩn bị tới vị trí phân loại. Khoảng cách “Distance” được đo tại điểm trắng trên khung hình hiển thị là 65,8cm.
Hình 5.4b: Phôi được đưa tới vị trí nhận diện, chiều cao phôi được tính toán như công thức ở chương 3, hình dạng phôi được nhận diện đúng (tam giác – Triangle), chiều cao đạt (7,8cm). → trạng thái của phôi: OK.
Hình 5.4c: Băng tải đưa phôi tới vị trí cảm biến 3, cảm biến phát hiện phôi, tay gạt gạt phôi xuống máng phân loại.
Hình 5.4d: Biến đếm phôi tròn tăng lên 1 (T.G:1). Kết quả sau khi phân loại 40 phôi tam giác cao:
81
Hình 5.5. Kết quả sau khi phân loại 40 phôi tam giác cao
Số lượng phôi được phân loại đúng hiển thị trên màn hình LCD là 34, 6 phôi lỗi xảy ra trong 2 trường hợp sau:
• Lỗi phân loại phôi tam giác thành phôi vuông xảy ra với số lượng là 4 trên 10 phôi đầu tiên.
Hình 5.6. Lỗi nhận diện sai loại phôi
Nguyên nhân: do hệ số tính xấp xỉ đa giác nhỏ (0,01), thay thế bằng 0,025 thì hệ thống đã nhận diện đúng.
• Lỗi phân loại phôi tam giác, phôi không được gạt khi có tín hiệu cảm biến, số lượng phôi không được phân loại: 2
82
Hình 5.7. Lỗi không gạt phôi tam giác
• Phôi vuông cao:
• Hình dưới đây mô tả quá trình phân loại phôi vuông cao:
83
Hình 5.8a: Phôi vuông được đặt vào băng tải chuẩn bị tới vị trí phân loại. Khoảng cách “Distance” được đo tại điểm trắng trên khung hình hiển thị là 66cm.
Hình 5.8b: Phôi được đưa tới vị trí nhận diện, chiều cao phôi được tính toán như công thức ở chương 3, hình dạng phôi được nhận diện đúng (vuông – Square), chiều cao đạt (7,7cm). → trạng thái của phôi: OK.
Hình 5.8c: Băng tải đưa phôi tới vị trí cảm biến 2, cảm biến phát hiện phôi, tay gạt gạt phôi xuống máng phân loại.
Hình 5.8d: Biến đếm phôi tròn tăng lên 1 (V:1). Kết quả sau khi phân loại 40 phôi vuông cao:
Hình 5.9. Kết quả sau khi phân loại 40 phôi vuông cao
Số lượng phôi được phân loại đúng là 36 phôi hiển thị trên màn hình LCD, 4 phôi lỗi xảy ra trong trường hợp sau:
• Hệ thống không phân loại phôi dù có tín hiệu cảm biến:
84
• Phôi không được phân loại dù phôi đã đi qua phạm vi nhận diện.
Hình 5.11. Lỗi không nhận diện được phôi
• Phôi thấp
Hình dưới đây mô tả quá trình phân loại phôi thấp – phôi lỗi:
85
Hình 5.12a: Phôi thấp được đặt vào băng tải chuẩn bị tới vị trí phân loại. Khoảng cách “Distance” được đo tại điểm trắng trên khung hình hiển thị là 65,8cm.
Hình 5.12b: Phôi được đưa tới vị trí nhận diện, chiều cao phôi được tính toán như công thức ở chương 3, hình dạng phôi được nhận diện đúng (tròn – Circle), chiều cao đạt (5cm). → trạng thái của phôi: NG.
Hình 5.12c: Băng tải đưa phôi tới khay phôi lỗi đặt ở cuối băng tải. Hình 5.12d: Biến đếm phôi tròn tăng lên 1 (X:1).
Kết quả sau khi phân loại 40 phôi thấp:
Hình 5.13. Kết quả sau khi phân loại 40 phôi thấp
Số lượng phôi được phân loại đúng là 39 phôi hiển thị trên LCD, 1 phôi lỗi do quá trình truyền nhận dữ liệu qua Serial.
b. Lỗi xảy ra phổ biến trong quá trình phân loại
Sau quá trình phân loại 160 phôi số lượng phôi được phân loại đúng đạt 146 phôi, hệ thống đạt độ chính xác 91,25%. Trong đó, có 14 phôi lỗi xảy ra đa phần nằm trong các trường hợp sau:
• Trường hợp 1: Hệ thống phân loại sai loại phôi
• Trường hợp 2: Hệ thống không phân loại phôi
Trường hợp phôi thấp không nhận diện được: phôi vẫn sẽ được phân loại do khay phôi lỗi đặt cuối băng tải nhưng phôi sẽ không được đếm.
86
• Trường hợp 3: Lỗi Arduino tự động reset và xử lý dữ liệu sai do Arduino chưa được cấp đủ nguồn, cần cấp thêm nguồn 5V vào chân Vin để nuôi LCD-i2c và module L298N. - Arduino tự động reset, lỗi phôi không được gạt dù cảm biến đã phát hiện
Nguyên nhân:
• Trong quá trình hoạt động, những phôi sau được đặt quá sớm khi phôi trước chưa được phân loại, hàm Serial.parseInt() chưa nhận tín hiệu phôi mới nên nếu phôi đi qua cảm biến tương ứng thì sẽ không được phân loại. - 1. Lỗi phôi không được gạt dù cảm biến đã phát hiện..
• Do hệ thống điều khiển: khả năng kết nối hạn chế do sử dụng dây cắm hoặc lỗi trong quá trình truyền nhận tín hiệu thông qua giao tiếp Serial dẫn đến tín hiệu không được gửi và nhận đúng cách. 1. Lỗi phôi không được gạt dù cảm biến đã phát hiện.
• Do quá trình phân loại: trong quá trình nhận diện và phân loại xảy ra sai xót bởi yếu tố môi trường như ánh sáng thay đổi và do bộ phận băng tải rung lắc khiến camera nhận diện sai loại phôi. – Lỗi không nhận diện được.
Các lỗi về tính chính xác trong quá trình phân loại một phần đã được cải thiện.
5.1.2. Năng suất phân loại
Do hệ thống không sử dụng bộ cấp phôi nên năng suất chỉ có độ chính xác tương đối, với từng loại phôi năng suất được xác định như sau:
• Phôi vuông cao: 7 phôi/phút
• Phôi tròn cao: 6 phôi/phút
• Phôi tam giác cao: 5 phôi/phút
• Phôi lỗi: 8 phôi/phút
5.2. Kết luận
Trải qua khoảng thời gian 9 tuần thực hiện đề tài, nhóm đã nghiên cứu và xây dừng thành công mô hình hệ thống phân loại sản phẩm theo hình dạng, chiều cao sử dụng camera Kinect. Tuy nhiên, trong quá trình thực hiện nhóm cũng gặp phải nhiều khó khăn, nhưng với sự giúp đỡ từ bạn bè, thầy cô, gia đình, đặc biệt là sự giúp đỡ và hỗ trợ tận tình từ giáo viên hướng dẫn TS. Bùi Thanh Lâm đã giúp đồ án hoàn thành kịp tiến độ.
87
Sau khi thực hiện đồ án, nhóm đã học hỏi và trau dồi được nhiều kiến thức xoay quanh công nghệ xử lý ảnh và ứng dụng nó trong hệ thống phân loại sản phẩm như:
• Cấu hình camera Kinect trên Windows.
• Sử dụng thư viện OpenCV và OpenNI dựa trên ngôn ngữ Python trong việc nhận diện hình dạng và chiều cao của vật thể.
• Sử dụng Kit Arduino, cảm biến hồng ngoại và cách điều khiển Servo.
• Truyền dữ liệu từ camera sang Arduino thông qua máy tính với giao tiếp Serial.
5.3. Các vấn đề tồn đọng
Mặc dù hệ thống đã hoàn thành nhưng vẫn còn một số hạn chế trong quá trình hoạt động:
• Phần cơ khí:
o Băng tải chưa thể thiết kế được bộ căng đai của băng tải do khung băng tải là khung nhôm định hình, khó thể gia công và điều chỉnh theo ý muốn.
o Camera không có nắp đậy để bảo vê, có thể gây nguy hiểm cho camera, và thiếu tính thẩm mĩ.
o Tính thẩm mĩ của mô hình chưa cao.
• Phần điện điều khiển
o Chưa thể tối ưu hệ thống về cả cơ khí và điều khiển để phân loại phôi một cách liên tục (phôi trước được phân loại phôi sau mới được cấp).
o Do điều kiện truyền dữ liệu sang Arduino nên khả năng nhận diện của camera bị hạn chế (giới hạn khung hình).
5.4. Định 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:
• Làm thành dây truyền sản xuất với cấu hình hệ thống mạnh hơn.
• Cải tiến băng tải, nâng cao tính thẩm mĩ của hệ thống.
• Tìm hiểu thuật toán phát hiện tất cả sản phẩm đưa vào khung hình.
• Cải tiến thêm chức năng phát hiện được các sản phẩm lỗi.
88
TÀI LIỆU THAM KHẢO
[1] "https://en.m.wikipedia.org/wiki/Kinect," [Online].
[2] "http://www.aurelien.plyer.fr/the-kinect/how-the-kinect-work/," [Online]. [3] Mikkel, ""Analysis of Kinect for Mobie Robots",Technical University of
Denmask," p. 11.
[4] J. Kjaer, "A qualitative analysis of two automated registration algorithms in a real world scenario using point clounds from the kinect," June 27,2011.
[5] N. Q. Hoan, Giáo trình xử lý ảnh, Hà Nội: Học viện Công nghệ Bưu chính Viễn thông, 2006.
[6] K. b. Suzuki Satoshi, ""Topological structural analysis of digitized binary images by border following"," vol. 30, no. 1, pp. 32-46, 1985.
[7] R. C. Gonzalez and R. E. Woods, ""Digital Image Processing"," Prentice Hall,
p. 672, 2001.
[8] R. J. Moreno, Understanding Microsoft Kinect for application in 3-D vision processes, Colombia: Fundacion Universidad Autonoma, 2014.
[9] K. Khoshelham, "accuracy analysis of kinect depth data," 2011.
[10] G.-C. L. Jisang Yoo, "Real-Time Virtual-View Image Synthesis Algorithm Using Kinect Camera," The Journal of Korean Institute of Communications and
Information Sciences, vol. 6, p. 1016, 2013.
[11] Trịnh Chất, Lê Văn Uyển, Tính toán, thiết kế hệ dẫn động cơ khí - tập 1. [12] Trịnh Chất, Lê Văn Uyển, Tính toán, thiết kế hệ dẫn động cơ khi - tập 2. [13] A. Rosebrock, "FInd distance from camera to object/marker using Python and
OpenCV," 2015.
[14] Shuaicheng Liu; Yinting Wang; Lu Yuan; Jiajun Bu; Ping Tan; Jian Sun, "Video stabilization with a depth camera," 2012.
89
[15] Sergey Matyunin; Dmitriy Vatolin; Yury Berdnikov; Maxim Smirnov, "Temporal filtering for depth maps generated by Kinect depth camera," 2011. [16] M. Corporation, "Kinect for Windows | Human Interface Guidelines v2.0,"
2014.
[17] Xhensila Poda, Olti Qirici, Shape detection and classification using OpenCV and Arduino Uno, 2018.
[18] X. H. L. Q.-d. Z. L.-p. Y. Z.-p. Li W-l, "Mathematical morphology operation to