You are on page 1of 134

TRƯỜNG ĐẠI HỌC KỸ THUẬT – CÔNG NGHỆ CẦN THƠ

KHOA KỸ THUẬT CƠ KHÍ


----------  ----------

LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC

THIẾT KẾ VÀ CHẾ TẠO MÔ HÌNH ROBOT SCARA


PHÂN LOẠI SẢN PHẨM THEO MÀU SẮC VÀ HÌNH DẠNG

CÁN BỘ HƯỚNG DẪN: SINH VIÊN THỰC HIỆN:


Ths: ĐƯỜNG KHÁNH SƠN PHAN PHÚC HẬU
MSSV: 1600061
Ngành: Công nghệ kỹ thuật
Cơ điện tử - 2016

Cần Thơ - 2020


Nhận xét của giáo viên hướng dẫn
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
Cần Thơ, ngày … tháng … năm 2020
GVHD
Nhận xét của giáo viên phản biện
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
.......................................................................................................................................
Cần Thơ, ngày … tháng … năm 2020
GVPB
CÔNG TRÌNH ĐƯỢC HOÀN THÀNH TẠI
TRƯỜNG ĐẠI HỌC KỸ THUẬT – CÔNG NGHỆ CẦN THƠ

Cán bộ hướng dẫn: Ths. ĐƯỜNG KHÁNH SƠN

Luận văn đại học được bảo vệ tại Trường Đại học Kỹ thuật – Công nghệ Cần Thơ
ngày 22 tháng 07 năm 2020.

Thành phần Ban chấm đánh giá luận văn đại học gồm:
1. Trưởng ban: ..........................................................................................................
..................................................................................................................................
2. Uỷ viên phản biện: ...............................................................................................
..................................................................................................................................
3. Thư ký ban chấm: .................................................................................................
..................................................................................................................................
Xác nhận của Ban chấm đánh giá sau khi luận văn đã được sửa chữa (nếu có).

TRƯỞNG BAN UỶ VIÊN PHẢN BIỆN THƯ KÝ


TRƯỜNG ĐẠI HỌC CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
KỸ THUẬT - CÔNG NGHỆ CẦN THƠ Độc lập - Tự do - Hạnh phúc
KHOA KỸ THUẬT CƠ KHÍ

NHIỆM VỤ LUẬN VĂN ĐẠI HỌC

Họ và tên sinh viên: PHAN PHÚC HẬU MSSV: 1600061


Ngày, tháng, năm sinh: 30/07/1998 Nơi sinh: Cần Thơ
Ngành: Công nghệ kỹ thuật cơ điện tử Mã số: 7510203
TÊN ĐỀ TÀI:
THIẾT KẾ VÀ CHẾ TẠO MÔ HÌNH ROBOT SCARA PHÂN LOẠI SẢN
PHẨM THEO MÀU SẮC VÀ HÌNH DẠNG
NHIỆM VỤ VÀ NỘI DUNG
 Nhiệm vụ:
Ứng dụng công nghệ xử lý ảnh cho Robot SCARA để phân loại sản phẩm theo
màu sắc và hình dạng từ đó đưa ra quyết định cho cánh tay.
 Nội dung:
- Thiết kế, chế tạo mô hình Robot Scara hoàn chỉnh.
- Thiết kế mạch điều khiển cho Robot Scara.
- Xây dựng giao diện người dùng trên máy tính bằng phần mềm Matlab.
- Ứng dụng xử lý ảnh vào mô hình Robot để phân loại sản phẩm.

THỜI GIAN GIAO ĐỀ TÀI: 10/01/2020


THỜI GIAN HOÀN THÀNH: 07/07/2020

Cần Thơ, ngày … tháng … năm 2020


KHOA KỸ THUẬT CƠ KHÍ
LỜI CẢM ƠN

LỜI CẢM ƠN
Để hoàn thành đề tài luận văn và kết thúc khóa học, em xin bày tỏ lòng biết ơn
sâu sắc đến trường Đại học kỹ thuật – công nghệ Cần Thơ đã tạo điều kiện cho em
có môi trường học tập tốt trong suốt thời gian học tập và nghiên cứu tại trường. Đặc
biệt, em xin chân thành cảm ơn thầy Đường Khánh Sơn đã tận tình hướng dẫn và
giúp đỡ em trong quá trình hoàn thành luận văn. Đồng thời, em cũng gửi lời cảm ơn
chân thành đến các thầy cô trong khoa Kỹ thuật cơ khí, gia đình và bạn bè đã giúp đỡ
và tạo điều kiện tốt nhất cho em trong quá trình học tập cũng như trong quá trình hoàn
thành luận văn tốt nghiệp.
Em xin chân thành cảm ơn!

SVTH: Phan Phúc Hậu Trang I


LỜI CẢM ƠN

LỜI CAM ĐOAN


Em xin cam đoan đề tài: “Thiết kế và chế tạo mô hình Robot SCARA phân
loại sản phẩm theo màu sắc và hình dạng” là một công trình nghiên cứu được thực
hiện bởi cá nhân em dưới sự hướng dẫn của thầy Đường Khánh Sơn. Trong bài báo
cáo, tất cả các số liệu, hình ảnh và thông tin trong đề tài này đều được em thu thập
với một thái độ khách quan và trung thực. Ngoài ra, một số nguồn tài liệu tham khảo
đã được trích dẫn nguồn và chú thích rõ ràng, không sao chép bất cứ tài liệu nào mà
không có trích dẫn. Em xin hoàn toàn chịu trách nhiệm trước bộ môn, khoa và nhà
trường về sự cam đoan này.
Sinh viên thực hiện

SVTH: Phan Phúc Hậu Trang II


TÓM TẮT LUẬN VĂN

TÓM TẮT LUẬN VĂN


Đề tài luận văn “Thiết kế và chế tạo mô hình Robot Scara phân loại sản phẩm
theo màu sắc và hình dạng” bao gồm các nội dung cốt lõi như: tìm hiểu các khái
niệm và kiến thức cơ bản về Robot, thiết kế và chế tạo mô hình Robot Scara 3 bậc tự
do hoạt động linh hoạt và chính xác, thiết kế mạch điều khiển và giao diện điều khiển
cho Robot, xây dựng giải thuật PID điều khiển vị trí động cơ DC, ứng dụng xử lý ảnh
vào mô hình để phân loại sản phẩm.

SVTH: Phan Phúc Hậu Trang III


MỤC LỤC

MỤC LỤC
LỜI CẢM ƠN ............................................................................................................ I

LỜI CAM ĐOAN ..................................................................................................... II

TÓM TẮT LUẬN VĂN .......................................................................................... III

MỤC LỤC ................................................................................................................... i

DANH MỤC HÌNH ẢNH ........................................................................................ iv

DANH MỤC BẢNG ................................................................................................. iv

CHƯƠNG 1: TỔNG QUAN..................................................................................... 2

1.1 Tổng quan đề tài ........................................................................................2

1.1.1 Đặt vấn đề ...........................................................................................2

1.1.2 Mục tiêu đề tài ....................................................................................3

1.1.3 Giới hạn đề tài ....................................................................................3

1.2 Giới thiệu sơ lượt về Robot công nghiệp ..................................................4

1.2.1 Lịch sử hình thành và phát triển .........................................................4

1.2.2 Cấu trúc cơ bản của Robot công nghiệp .............................................5

1.2.3 Ứng dụng ..........................................................................................10

1.3 Giới thiệu sơ lượt về Robot Scara ...........................................................11

CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU ................... 14

2.1 Đối tượng nghiên cứu .............................................................................14

2.2 Phương pháp nghiêm cứu .......................................................................14

2.2.1 Phần mềmMatlab ..............................................................................14

2.2.2 Matlab GUI .......................................................................................17

2.2.3 Xử lý ảnh trên Matlab .......................................................................21

2.2.4 Phần mềm Invertor ...........................................................................27

SVTH: Phan Phúc Hậu Trang i


MỤC LỤC

2.2.5 Arduino .............................................................................................29

2.2.6 Phần mềm Arduino IDE ...................................................................32

2.2.7 PID ....................................................................................................34

2.2.8 Chuẩn giao tiếp I2C ..........................................................................37

CHƯƠNG 3: THIẾT KẾ VÀ CHẾ TẠO MÔ HÌNH .......................................... 41

3.1 Bài toán động học ...................................................................................41

3.1.1 Động học thuận .................................................................................41

3.1.2 Động học ngược ...............................................................................42

3.2 Thiết kế mô hình cơ khí cho Robot.........................................................43

3.2.1 Cơ sở thiết kế ....................................................................................43

3.2.2 Bản vẽ thiết kế Robot trên Inventor .................................................44

3.2.3 Chế tạo mô hình cơ khí .....................................................................50

3.2.4 Lắp ráp mô hình Robot Scara hoàn chỉnh ........................................55

3.3 Thiết kế mạch điều khiển ........................................................................57

3.3.1 Lưu đồ giải thuật điều khiển Robot ..................................................57

3.3.2 Sơ đồ mạch điều khiển Robot ...........................................................58

CHƯƠNG 4: XỬ LÝ ẢNH VÀ THIẾT KẾ GIAO DIỆN NGƯỜI DÙNG ....... 66

4.1 Xử lý ảnh .................................................................................................66

4.1.1 Giới thiệu về hệ thống xử lý ảnh ......................................................66

4.1.2 Sơ lượt về quá trình xử lý ảnh trong đề tài .......................................68

4.1.3 Thu nhận ảnh đầu vào .......................................................................69

4.1.4 Xác định vùng hoạt động của Robot ................................................70

4.1.5 Phân vùng ảnh và tách sản phẩm ......................................................72

4.1.6 Nhận dạng đối tượng ........................................................................74

SVTH: Phan Phúc Hậu Trang ii


MỤC LỤC

4.1.7 Kết quả của quá trình xử lý ảnh ........................................................77

4.2 Thiết kế giao diện người dùng ................................................................77

CHƯƠNG 5: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN ........................................ 79

5.1 Kết quả ....................................................................................................79

5.1.1 Kết quả mô phỏng trên Matlab Simulink .........................................79

5.1.2 Kết quả thực tế của mô hình Robot Scara ........................................80

5.1.3 Kết quả chạy thực tế của mô hình Robot Scara ................................83

5.2 Đánh giá ..................................................................................................90

5.3 Kết luận ...................................................................................................90

5.3.1 Kết quả đạt được ...............................................................................91

5.3.2 Những hạn chế của đề tài .................................................................91

5.4 Hướng phát triển .....................................................................................91

TÀI LIỆU THAM KHẢO ...................................................................................... 93

PHỤ LỤC ................................................................................................................. 94

SVTH: Phan Phúc Hậu Trang iii


DANH MỤC HÌNH ẢNH

DANH MỤC HÌNH ẢNH


Hình 1.1: Dây chuyền sản xuất ô tô tự động bằng Robot ...........................................2
Hình 1.2: Robot Scara phân loại sản phẩm .................................................................3
Hình 1.3: Cánh tay Robot 5 bậc tự do của hãng YASKAWA MOTOMAN ..............4
Hình 1.4: Sơ đồ khối của Robot công nghiệp .............................................................5
Hình 1.5: Các thành phần chính của hệ thống Robot..................................................6
Hình 1.6: Phân loại Robot theo hình dạng hình học của không gian hoạt động .........8
Hình 1.7: Sơ đồ điều khiển hở ....................................................................................9
Hình 1.8: Sơ đồ điều khiển kín ...................................................................................9
Hình 1.9: Robot xếp các hàng thùng hàng lên pallet ................................................10
Hình 1.10: Robot phun sơn tự động trong sản xuất ô tô ...........................................10
Hình 1.11: Robot hàn Panasonic ...............................................................................11
Hình 1.12: Ứng dụng của Robot trong một số lĩnh vực ............................................11
Hình 1.13: Robot Scara .............................................................................................12
Hình 1.14: Robot SCARA của hãng MITSUBISHI .................................................12
Hình 1.15: Robot SCARA trong dây chuyền sản xuất linh hoạt ..............................13
Hình 2.1: Phần mềm Matlab .....................................................................................15
Hình 2.2; Giao diện làm việc của Matlab .................................................................16
Hình 2.3: Cửa sổ GUIDE Quick Start .......................................................................18
Hình 2.4: Giao diện Blank GUI mặc định ................................................................18
Hình 2.5: Hộp thoại Inspector ...................................................................................20
Hình 2.6: Ảnh Index ..................................................................................................22
Hình 2.7: Ảnh xám ....................................................................................................23
Hình 2.8: Ảnh nhị phân .............................................................................................23
Hình 2.9: Ảnh RGB...................................................................................................24
Hình 2.10: Arduino Mega 2560 và Arduino Uno R3 ...............................................29
Hình 2.11: Phần cứng của Arduino Uno R3 .............................................................30
Hình 2.12: Ba loại Arduino phổ biến ........................................................................31
Hình 2.13: Một số loại Arduino nâng cao .................................................................31
Hình 2.14: Phần mềm Arduino IDE..........................................................................32

SVTH: Phan Phúc Hậu Trang iv


DANH MỤC HÌNH ẢNH

Hình 2.15: Một chương trình Arduino cơ bản ..........................................................33


Hình 2.16: Giao diện của phần mềm Arduino IDE...................................................33
Hình 2.17: Ba thành phần của bộ điều khiển PID ....................................................35
Hình 2.18: Mô hình hệ thống điều khiển với bộ PID................................................35
Hình 2.19: Sơ đồ truyền dữ liệu I2C .........................................................................38
Hình 2.20: Điều kiện START và STOP ....................................................................38
Hình 2.21: Điều kiện REPEATED START ..............................................................39
Hình 2.22: Giao thức truyền nhận dữ liệu I2C..........................................................39
Hình 3.1: Gắn hệ tọa độ cho Robot ...........................................................................41
Hình 3.2: Sắt tấm.......................................................................................................50
Hình 3.3: Sắt hộp.......................................................................................................50
Hình 3.4: Nhôm tấm ..................................................................................................50
Hình 3.5: Động cơ M555 ..........................................................................................51
Hình 3.6: Động cơ Planet ..........................................................................................52
Hình 3.7: Bộ truyền Pully và dây đai ........................................................................52
Hình 3.8: Bộ thanh trục vít-me đai ốc .......................................................................53
Hình 3.9: Bộ thanh trượt, ray trượt và gối đỡ ...........................................................54
Hình 3.10: Bạc đạn đỡ trục KFL08 ...........................................................................54
Hình 3.11: Vòng bi trục ............................................................................................54
Hình 3.12: Khớp nối mặt bích cố định ......................................................................54
Hình 3.13: Bulong đai ốc ..........................................................................................54
Hình 3.14: Phần đế thực tế của mô hình Robot Scara ..............................................55
Hình 3.15: Khâu tịnh tiến thực tế của mô hình Robot Scara ....................................55
Hình 3.16: Hai khâu quay thực tế của mô hình Robot Scara ....................................56
Hình 3.17: Mô hình cơ khí hoàn thiện của Robot Scara ...........................................56
Hình 3.18: Lưu đồ giải thuật điều khiển ...................................................................57
Hình 3.19: Mạch điều khiển Robot ...........................................................................58
Hình 3.20: Sơ đồ chân của Arduino Uno ..................................................................59
Hình 3.21: Sơ đồ chân của Arduino Nano ................................................................61
Hình 3.22: Sơ đồ chân của Module L298N ..............................................................63

SVTH: Phan Phúc Hậu Trang v


DANH MỤC HÌNH ẢNH

Hình 3.23: Nguồn tổ ong 12V-10A ..........................................................................64


Hình 3.24: Động cơ Servo MG995 ...........................................................................65
Hình 4.1: Quá trình xử lý ảnh ...................................................................................66
Hình 4.2: Các bước cơ bản trong xử lý ảnh ..............................................................67
Hình 4.3: Sơ đồ quá trình xử lý ảnh trong đề tài.......................................................69
Hình 4.4: Webcam logitech HD C270 ......................................................................69
Hình 4.5: Kích thước vùng hoạt động .......................................................................70
Hình 4.6: Ảnh quá trình xác định vùng hoạt động của Robot ..................................70
Hình 4.7: Sơ đồ quá trình tìm vùng hoạt động của Robot ........................................71
Hình 4.8: Vùng hoạt động của Robot .......................................................................71
Hình 4.9: Sơ đồ quá trình nhị phân ảnh ....................................................................72
Hình 4.10: Ảnh quá trình nhị phân ảnh .....................................................................72
Hình 4.11: Sơ đồ giải thuật phân vùng và tách đối tượng ........................................73
Hình 4.12: Ảnh kết quả của quá trình phân vùng .....................................................73
Hình 4.13: Giải thuật quá trình nhận dạng màu sắc ..................................................74
Hình 4.14: Ảnh nhị phân từng màu của vật ..............................................................75
Hình 4.15: Ảnh kết quả của quá trình nhận dạng màu sắc........................................75
Hình 4.16: Giải thuật quá trình nhận dạng hình dạng ...............................................76
Hình 4.17: Ảnh kết quả của quá trình nhận dạng hình dạng.....................................76
Hình 4.18: Ảnh kết quả của quá trình nhận dạng màu sắc và hình dạng ..................77
Hình 4.19: Giao diện người dùng điều khiển Robot Scara .......................................78
Hình 5.1: Mô hình hóa Robot Scara trên Matlab Simulink ......................................79
Hình 5.2: Mô hình 3D khi mô phỏng trên Matlab Simulink ....................................79
Hình 5.3: Kết quả chạy thực nghiệm PID trên khớp 1..............................................80
Hình 5.4: Kết quả chạy thực nghiệm PID trên khớp 2..............................................80
Hình 5.5: Kết quả chạy thực nghiệm PID trên khâu 3 ..............................................81
Hình 5.6: Tay gắp thực hiện gắp vật .........................................................................81
Hình 5.7: Tay gắp thực hiện thả vật ..........................................................................81
Hình 5.8: Kết quả chạy thực tế động học thuận của Robot Scara.............................82
Hình 5.9: Kết quả chạy thực tế động học ngược của Robot Scara ...........................82

SVTH: Phan Phúc Hậu Trang vi


DANH MỤC HÌNH ẢNH

Hình 5.10: Kết quả nhận dạng màu sắc các vật hình tròn .........................................83
Hình 5.11: Quá trình phân loại màu sắc các vật hình tròn của Robot Scara ............84
Hình 5.12: Kết quả nhận dạng màu sắc các vật hình vuông .....................................84
Hình 5.13: Quá trình phân loại màu sắc các vật hình vuông của Robot Scara .........85
Hình 5.14: Kết quả nhận dạng hình dạng các vật màu đỏ ........................................85
Hình 5.15: Quá trình phân loại hình dạng các vật màu đỏ của Robot Scara ............86
Hình 5.16: Kết quả nhận dạng hình dạng các vật màu xanh lá .................................86
Hình 5.17: Quá trình phân loại hình dạng các vật màu xanh lá của Robot Scara.....87
Hình 5.18: Kết quả nhận dạng hình dạng các vật màu xanh dương .........................87
Hình 5.19: Quá trình phân loại hình dạng các vật màu xanh dương của Robot .......88
Hình 5.20: Kết quả nhận dạng màu sắc và hình dạng của tất cả các vật ..................88
Hình 5.21: Quá trình phân loại màu sắc và hình dạng của Robot Scara...................90

SVTH: Phan Phúc Hậu Trang vii


DANH MỤC BẢNG

DANH MỤC BẢNG


Bảng 2.1: Bảng thông số PID theo phương pháp Ziegler-Nichols ...........................37
Bảng 3.1: Bảng thông số DH ....................................................................................41
Bảng 3.2: Bảng thông số động cơ .............................................................................52
Bảng 3.3: Bảng thông số bộ truyền ...........................................................................53

SVTH: Phan Phúc Hậu Trang iv


LỜI NÓI ĐẦU

LỜI NÓI ĐẦU


Cùng với sự phát triển của các cuộc cách mạng khoa học kỹ thuật trên thế giới
là những tiến bộ trong lĩnh vực điều khiển và tự động hoá sản xuất. Một trong những
thành tựu nổi bật của quá trình tự động hoá là những cánh tay máy Robot. Những
Robot từ đơn giản đến phức tạp, đã đóng góp rất nhiều trong việc thay thế con người
ở môi trường làm việc cường độ cao, độc hại và đòi hỏi chính xác cao.
Để có thể phát triển và ứng dụng Robot rộng rãi trong sản xuất, bên cạnh những
kiến thức về điện, điện tử…thì việc nghiên cứu tính toán động học và điều khiển
Robot cũng là một yếu tố rất quan trọng để tạo nên cơ sở và nền tảng cho việc chế
tạo Robot.
Với đề tài “Thiết kế và chế tạo mô hình Robot Scara phân loại sản phẩm theo
màu sắc và hình dạng” em tin rằng với những kết quả đạt được trong quá trình thực
hiện đề tài sẽ là một bước đệm quan trọng cho việc phát triển nhiều hơn nữa những ý
tưởng trong tương lai về tính toán và thiết kế các loại Robot công nghiệp.

SVTH: Phan Phúc Hậu Trang 1


CHƯƠNG 1: TỔNG QUAN

CHƯƠNG 1: TỔNG QUAN

1.1 Tổng quan đề tài

1.1.1 Đặt vấn đề


Ngày nay, cùng với sự phát triển nhanh chóng của khoa học kỹ thuật nhằm mục
đích giúp cho cuộc sống tốt hơn và việc giải phóng sức lao động của con người trong
các môi trường làm việc khó khăn là vấn đề cần thiết thì công nghệ Robot cũng ngày
càng được phát triển và sử dụng phổ biến trong sản xuất cũng như trong cuộc sống
của con người. Robot được ứng dụng rộng rãi trong nhiều lĩnh vực khác nhau, đặc
biệt là trong các ngành sản xuất có tính dây chuyền và công nghệ cao vì Robot có thể
vừa đảm bảo tính chính xác vừa đảm bảo tính liên tục của dây chuyền mà con người
và máy móc khó có thể đạt được. Đồng thời, Robot có thể thay thế con người làm
việc trong những môi trường nặng nhọc, độc hại, nhiệt độ cao, ...

Hình 1.1: Dây chuyền sản xuất ô tô tự động bằng Robot


Nhận thấy được tầm quan trọng của Robot đối với đời sống con người, các nước
phát triển luôn cạnh tranh với nhau về nghiên cứu và chế tạo nhiều thế hệ Robot tốt
nhất. Vì vậy nhiều công ty trên thế giới đã và đang sản xuất, phát triển, nghiên cứu
để đưa Robot lên một tầm cao có thể tư duy như con người. Do đó, lĩnh vực Robot
đang ngày càng chiếm được sự quan tâm của các nhà nghiên cứu và xã hội. Dự đoán
trong tương lai thì Robot sẽ là tâm điểm của một cuộc cách mạng lớn sau Internet.
Với xu hướng này thì thị trường Robot sẽ vô cùng to lớn.

SVTH: Phan Phúc Hậu Trang 2


CHƯƠNG 1: TỔNG QUAN

Từ những nhu cầu thực tế và niềm đam mê với Robot, cùng với sự góp ý và
hướng dẫn của thầy Đường Khánh Sơn. Em đã chọn đề tài “ROBOT SCARA ỨNG
DỤNG XỬ LÝ ẢNH PHÂN LOẠI SẢN PHẨM THEO MÀU SẮC VÀ HÌNH
DẠNG” cho luận văn tốt nghiệp của mình.

Hình 1.2: Robot Scara phân loại sản phẩm

1.1.2 Mục tiêu đề tài


Thiết kế và chế tạo mô hình Robot SCARA hoàn chỉnh. Từ đó, thiết kế bộ điều
khiển và giao diện điều khiển cho Robot.
Vận dụng xử lý ảnh vào quá trình phân loại sản phẩm tự động nhằm cải thiện
năng suất và chất lượng cũng như giải phóng sức lao động cho con người trong quá
trình sản xuất.
Nhằm làm chủ kỹ thuật chế tạo Robot để có thể phục vụ mục đích học tập và
nghiên cứu trong phòng thí nghiệm của các trường cao đẳng, đại học cũng như ứng
dụng trong sản xuất công nghiệp.
Vận dụng và củng cố lại những kiến thức đã học được để tìm hiểu và xây dựng
mô hình cánh tay Robot có thể đạt được mục tiêu đặt ra. Bên cạnh đó nâng cao khả
năng sử dụng các phần mềm bổ trợ như Inventor, Matlab, Arduino IDE, ...

1.1.3 Giới hạn đề tài


Đề tài “Thiết kế và chế tạo mô hình Robot Scara phân loại sản phẩm theo
màu sắc và hình dạng” dùng một camera đặt cố định để thu nhận ảnh, ảnh thu được
sẽ được máy tính xử lý để xác định các thông số của đối tượng bao gồm: vị trí, màu

SVTH: Phan Phúc Hậu Trang 3


CHƯƠNG 1: TỔNG QUAN

sắc và hình dạng từ đó điều khiển cánh tay Robot Scara thực hiện chuyển động gắp
và phân loại sản phẩm ở bất kỳ vị trí nào trong phạm vi hoạt động của nó.

1.2 Giới thiệu sơ lượt về Robot công nghiệp


Robot là một loại máy có thể thực hiện công việc một cách tự động bằng sự điều
khiển của máy tính hoặc các vi mạch điện tử được lập trình. Robot công nghiệp được
lập trình sẵn theo một trình tự nhất định và sử dụng nhằm mục đích phục vụ công
việc lắp ráp, sản xuất hoặc chế biến sản phẩm. Robot hỗ trợ rất nhiều cho con người.
Đặc biệt là trong những môi trường khắc nghiệt, độc hại và nguy hiểm. Robot công
nghiệp có tính chính xác cao và hiệu quả vượt trội so với sản xuất thủ công.

Hình 1.3: Cánh tay Robot 5 bậc tự do của hãng YASKAWA MOTOMAN
1.2.1 Lịch sử hình thành và phát triển
Thuật ngữ Robot xuất hiện vào năm 1920 trong một tác phẩm văn học của nhà
văn tiệp khắc có tên là Karel Capek.
Thuật ngữ Inducstrial Robot (IR) xuất hiện đầu tiên ở Mỹ do công ty AMF
(Americal Machine and Foundry Company) quảng cáo mô phỏng một thiết bị mang
dáng dấp và có một số chức năng như tay người được điều khiển tự động thực hiện
một số thao tác để sản xuất thiết bị có tên gọi Versatran.
Quá trình phát triển của IR được tóm tắt như sau:
- Từ những năm 1950 ở Mỹ xuất hiện viện nghiên cứu đầu tiên.
- Vào đầu những năm 1960 xuất hiện sản phẩm đầu tiên có tên gọi là Versatran
của công ty AMF.

SVTH: Phan Phúc Hậu Trang 4


CHƯƠNG 1: TỔNG QUAN

- Ở Anh người ta bắt đầu nghiên cứu và chế tạo IR theo bản quyền của Mỹ từ
những năm 1967.
- Ở các nước Tây Âu khác như: Đức, Ý, Pháp, Thuỵ Điển thì bắt đầu chế tạo IR
từ những năm 1970.
- Châu á có Nhật Bản bắt đầu nghiên cứu ứng dụng IR từ năm 1968.
- Nhất là vào những năm 1990 số lượng Robot công nghiệp đã gia tăng với nhiều
tính năng vượt bậc.
Ngày nay, trên thế giới có khoảng 200 công ty sản xuất IR, trong đó ở Nhật có
80, ở các nước Tây Âu có 90, ở Mỹ có 30. Nhờ áp dụng rộng rãi các tiến bộ khoa học
kỹ thuật về vi xử lý, tin học cũng như vật liệu mới nên số lượng Robot công nghiệp
đã tăng lên nhanh chóng, giá thành giảm đi rõ rệt, tính năng có nhiều cải tiến. Robot
công nghiệp phát huy thế mạnh ở các lĩnh vực như hàn hồ quang, đúc, lắp ráp, sơn
phủ và trong các hệ thống điều khiển liên hợp.

1.2.2 Cấu trúc cơ bản của Robot công nghiệp

1.2.2.1 Các thành phần chính của Robot công nghiệp

Hình 1.4: Sơ đồ khối của Robot công nghiệp

SVTH: Phan Phúc Hậu Trang 5


CHƯƠNG 1: TỔNG QUAN

Một Robot công nghiệp thường bao gồm các thành phần chính như: cánh tay
Robot, nguồn động lực, dụng cụ gắn lên khâu chấp hành cuối, các cảm biến, bộ điều
khiển, thiết bị dạy học, máy tính,… các phần mềm lập trình cũng nên được coi là một
thành phần của hệ thống Robot.

Hình 1.5: Các thành phần chính của hệ thống Robot


Cánh tay Robot (tay máy): Là kết cấu cơ khí gồm các khâu liên kết với nhau
bằng các khớp động để có thể tạo nên những chuyển động cơ bản của Robot. Cổ tay
tạo nên sự khéo léo linh hoạt và bàn tay trực tiếp hình thành thao tác trên đối tượng.
Nguồn động lực: Là các động cơ điện (động cơ DC, động cơ servo hoặc động
cơ step), hệ thống xi-lanh khí nén, thuỷ lực để tạo động lực cho tay máy hoạt động.
Dụng cụ thao tác: Được gắn trên khâu cuối của Robot có thể có nhiều kiểu
khác nhau như: dạng bàn tay để nắm bắt đối tượng hoặc các công cụ làm việc như
mỏ hàn, đá mài, đầu phun sơn,…
Thiết bị dạy-học (Teach-Pendant): Dùng để dạy Robot các thao tác cần thiết
theo yêu cầu của quá trình làm việc, sau đó Robot sẽ tự lặp lại các động tác được dạy.
Hệ thống cảm biến: Gồm các sensor và các thiết bị chuyển đổi tín hiệu cần
thiết. Các cảm biến để nhận biết trạng thái của bản thân các cơ cấu của Robot và trạng
thái ngoài môi trường.
Hệ thống điều khiển: Máy tính hay vi xử lý để giảm sát và điều khiển hoạt
động của Robot.
Các phần mềm để lập trình và các chương trình điều khiển Robot: Được
cài đặt trên máy tính, dùng điều khiển Robot thông qua bộ điều khiển (controller).

SVTH: Phan Phúc Hậu Trang 6


CHƯƠNG 1: TỔNG QUAN

Một bộ điều khiển có thể có các cổng vào-ra (I/O port) để làm việc với nhiều thiết bị
khác nhau như: các cảm biến (giúp Robot nhận biết trạng thái của bản thân, xác định
vị trí của đối tượng làm việc,…), điều khiển các băng tải hoặc cơ cấu cấp phôi hoạt
động phối hợp với Robot,…

1.2.2.2 Kết cấu của tay máy


Tay máy là phần cơ sở quyết định khả năng làm việc của Robot. Đây là các thiết
bị cơ khí đảm bảo cho Robot khả năng di chuyển, chuyển động trong không gian và
khả năng thực hiện các thao tác làm việc. Các kết cấu của nhiều tay máy được phỏng
theo cấu tạo và chức năng của tay người. Tuy nhiên ngày nay, tay máy được thiết kế
rất đa dạng, nhiều cánh tay Robot có hình dáng rất khác xa cánh tay người. Trong
thiết kế và sử dụng tay máy thì chúng ta cần quan tâm đến các thông số liên quan đến
khả năng làm việc của Robot như: tầm với (hay vùng công tác), số bậc tự do (thể hiện
sự khéo léo linh hoạt của Robot), độ cứng vững, tải trọng vật nâng, lực kẹp,...
Các tay máy có đặc điểm chung về kết cấu là gồm có các khâu được nối với
nhau bằng các khớp để hình thành một chuỗi động học hở tính từ thân đến đầu công
tác. Các khớp được sử dụng phổ biến là khớp trượt và khớp quay. Tùy theo số lượng
và cách bố trí các khớp mà có thể tạo ra các tay máy có các kiểu tọa độ khác nhau.

1.2.2.3 Phân loại theo hình dạng hình học của không gian hoạt động
Robot được phân loại theo sự phối hợp giữa ba trục chuyển động cơ bản rồi sau
đó được bổ sung để mở rộng thêm bậc chuyển động nhằm tăng thêm độ linh hoạt.
Vùng giới hạn tầm hoạt động của Robot được gọi là không gian làm việc.
- Robot khớp bản lề (Articular Robot): Có ba bậc chuyển động cơ bản gồm ba
trục chuyển động quay.
- Robot toạ độ trụ (Cylindrical Robot): Có ba bậc chuyển động cơ bản gồm hai
trục chuyển động tịnh tiến và một chuyển động trục quay.
- Robot toạ độ cầu (Spherical Robot): Có ba bậc chuyển động cơ bản gồm một
trục chuyển động tịnh tiến và hai trục chuyển động quay.
- Robot Scara (Scara Robot): Có ba bậc chuyển động cơ bản gồm một trục
chuyển động tịnh tiến và hai trục chuyển động quay.

SVTH: Phan Phúc Hậu Trang 7


CHƯƠNG 1: TỔNG QUAN

- Robot toạ độ vuông góc (Cartesian Robot): Có ba bậc chuyển động cơ bản
gồm ba chuyển động tịnh tiến dọc theo ba trục vuông góc.

Hình 1.6: Phân loại Robot theo hình dạng hình học của không gian hoạt động

1.2.2.4 Phân loại theo thế hệ


Theo chủng loại, mức độ điều khiển, và khả năng nhận biết thông tin của Robot
đã được sản xuất trên thế giới có thể phân loại các IR thành các thế hệ sau:
- Thế hệ 1: Thế hệ có kiểu điều khiển theo chu kỳ dạng chương trình cứng
không có khả năng nhận biết thông tin.
- Thế hệ 2: Thế hệ có điều khiển theo chu kỳ dạng chương trình mềm
bước đầu đã có khả năng nhận biết thông tin.
- Thế hệ 3: Thế hệ có kiều điều khiển dạng tinh khôn, có khả năng nhận
biết thông tin và bước đầu đã có một số chức năng lý trí của con người.

1.2.2.5 Phân loại theo hệ thống truyền động


- Robot dùng nguồn cấp điện: Thường dùng các động cơ điện như: động cơ
bước, động cơ DC servo, động cơ AC servo,… Robot loại này có thiết kế gọn, chạy
êm, định vị rất chính xác. Các ứng dụng phổ biến là Robot sơn, hàn, …

SVTH: Phan Phúc Hậu Trang 8


CHƯƠNG 1: TỔNG QUAN

- Robot dùng nguồn khí nén: Hệ thống cán được trang bị máy nén, bình chứa
khí và động cơ kéo máy nén. Robot loại này thường được sử dụng trong các ứng dụng
có tải trọng nhỏ có tay máy là các xy-lanh khí nén thực hiện chuyển động thẳng và
chuyển động quay. Do khí nén là lưu chất nén được nén Robot loại này thường sử
dụng trong các thao tác gắp đặt không cần độ chính xác cao.
- Dùng nguồn thuỷ lực: Nguồn thuỷ lực sử dụng lưu chất không nén được là
dầu ép. Hệ thống cần trang bị bơm để tạo áp lực dầu. Tay máy là các xy-lanh thuỷ
lực chuyển động thẳng và quay động cơ dầu. Robot loại này được sử dụng trong các
ứng dụng có tải trọng lớn.

1.2.2.6 Phân loại theo phương pháp điều khiển


- Điều khiển hở: Trong hệ thống không có hồi tiếp các thông số làm việc của
Robot. Cơ cấu truyền động trong loại điều khiển này được truyền động theo bước.
Các động cơ DC thường, động cơ thủy lực, khí nén,… thường được dùng trong điều
khiển hở.

Hình 1.7: Sơ đồ điều khiển hở


- Điều khiển kín: Điều khiển kín hay còn gọi là điều khiển servo, kiểu điều khiển
này giống điều khiển hở nhưng có thêm phần hồi tiếp các thông số làm việc về bộ xử
lý trung tâm để điều khiển để tăng độ chính xác và mức độ linh hoạt khi điều khiển.
Thường dùng các loại động cơ servo (DC, AC, thủy lực, khí nén,…).

Hình 1.8: Sơ đồ điều khiển kín


Ngoài ra, cũng dựa theo cách phân loại này người ra phân thành: Robot điều
khiển tự động, Robot điều khiển bằng cách dạy học, Robot điều khiển bằng tay, Robot
điều khiển từ xa, Robot tự hành, ...

SVTH: Phan Phúc Hậu Trang 9


CHƯƠNG 1: TỔNG QUAN

1.2.3 Ứng dụng


Trong lĩnh vực cơ khí, Robot được ứng dụng khá phổ biến nhờ khả năng hoạt
động chính xác và tính linh hoạt cao. Ta có một số loại Robot như:
- Robot song song dùng trong phân loại và đóng gói sản phẩm: IRB 660 Flex
Palletizer, IRB 340 FlexPicker, IRB 260 FlexPicker. Các Robot này có thể gắp lần
lượt các hộp vắc-xin bại liệt từ băng tải và đặt nó vào thùng gồm 20 hộp một cách
chính xác.
- Robot gắp hàng, Robot bốc xếp hàng hóa hay Robot bốc dỡ hàng hóa: Đây là
thiết bị Robot đa dạng nhất với điều khiển tự động.

Hình 1.9: Robot xếp các hàng thùng hàng lên pallet
- Robot dùng trong công nghệ ép phun nhựa: IRB 6650 của hãng ABB có thể
thao tác nhanh, dễ dàng lấy sản phẩm ra khỏi khuôn ở vị trí tách khuôn, giám sát, làm
sạch, điều khiển chất lượng dựa trên camera.
- Robot sơn và phun sơn: Được ứng dụng khá nhiều trong sơn gỗ, sơn thép.

Hình 1.10: Robot phun sơn tự động trong sản xuất ô tô

SVTH: Phan Phúc Hậu Trang 10


CHƯƠNG 1: TỔNG QUAN

- Robot hàn công nghiệp hay Robot hàn tự động: phục vụ cho ngành sản xuất ô
tô xe máy, với tỷ lệ hơn 70% số Robot đang hoạt động, phải kể đến là Robot hàn tự
động Panasonic.

Hình 1.11: Robot hàn Panasonic


Ngoài các phân xưởng, nhà máy, kỹ thuật Robot cũng được sử dụng trong việc
khai thác thềm lục địa và đại dương, trong y học, sử dụng trong quốc phòng, trong
chinh phục vũ trụ, trong công nghiệp nguyên tử, trong các lĩnh vực xã hội, …

a) b) c)
Hình 1.12: Ứng dụng của Robot trong một số lĩnh vực
a) Robot khai thác quặng đất hiếm của Nhật Bản
b) Robot phẩu thuật nội soi ở bệnh viện Chợ Rẫy (Việt Nam)
c) Robot thám hiểm mặt trăng của Audi

1.3 Giới thiệu sơ lượt về Robot Scara


Robot Scara ra đời vào năm 1979 tại trường đại học Yasamaski (Nhật Bản) dùng
trong việc lắp ráp. Đây là tay máy Scara đặc biệt gồm hai khớp quay và một khớp

SVTH: Phan Phúc Hậu Trang 11


CHƯƠNG 1: TỔNG QUAN

trượt, nhưng cả ba khớp đều có trục song song với nhau. Kết cấu này làm cho tay
máy cứng cáp hơn theo phương thẳng đứng nhưng kém vững hơn theo phương ngang.
Loại này dùng trong việc lắp ráp với tải trọng nhỏ theo phương đứng.

Hình 1.13: Robot Scara


Từ Scara là chữ viết tắt của “Selective Compliance Articulated Robot Actuato”,
Robot Scara đã được nhiều hãng thiết kế chế tạo nhằm phục vụ nhìu mục đích khác
nhau như: hàn, lắp ráp. vận chuyển, khoan, doa, … Các hãng chuyên sản xuất về
Robot Scara như: Hitachi, Mitsubishi, IBM, MOTOMAN, EPSON, PANASONIC,
SONY,... Ngày nay, các hãng tiếp tục hoàn thiện bộ điều khiển và kết cấu cơ khí để
ngày càng được linh hoạt hơn.

Hình 1.14: Robot SCARA của hãng MITSUBISHI


Tay máy Scara có vùng không gian hoạt động có dạng hình trụ. Đây là loại cấu
hình dễ thực hiện nhất được ứng dụng cho Robot là dạng khớp nối bản lề và kế đó là
khớp trượt. Dạng này phổ biến nhất trong ứng dụng công nghiệp bởi vì chúng cho
phép các nhà sản xuất Robot sử dụng một cách trực tiếp và dễ dàng các cơ cấu chuyển

SVTH: Phan Phúc Hậu Trang 12


CHƯƠNG 1: TỔNG QUAN

động quay như các động cơ điện, động cơ dầu ép, khí nén. Robot Scara có hai khớp
xoay song song với nhau cho phép thao tác trên mặt phẳng, được sử dụng để gắp và
nhả vật, lắp ráp hay cầm nắm máy công cụ.

Hình 1.15: Robot SCARA trong dây chuyền sản xuất linh hoạt
 Ưu điểm:
- Mặc dù chiếm diện tích làm việc ít nhưng tầm vươn khá lớn, tỉ lệ kích thước/tầm
vươn được đánh giá cao .
- Về mặt hình học, cấu hình dạng khớp nối bản lề với ba trục quay bố trí theo
phương thẳng đứng là dạng đơn giản và có hiệu quả nhất trong trường hợp yêu cầu
gắp đặt và đặt chi tiết theo phương thẳng. Trong trường hợp này bài toán tọa độ hoặc
quỹ đạo chuyển động đối với Robot chỉ cần giải quyết ở hai phương x và y còn lại
bằng cách phối hợp ba chuyển động quay quanh ba trục song song với trục z.

SVTH: Phan Phúc Hậu Trang 13


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊN CỨU

2.1 Đối tượng nghiên cứu


Đề tài “Thiết kế và chế tạo Robot Scara phân loại sản phẩm theo màu sắc và
hình dạng” bao gồm các thành phần chính:
- Thiết kế mô hình cho Robot Scara bằng phần mềm Inventor 3D.
- Tìm hiểu cách liên kết Matlab với Inventor 3D.
- Xây dựng mô hình Matlab Simulink và tiến hành mô phỏng.
- Thiết kế mạch điện điều khiển cho Robot.
- Xây dựng chương trình điều khiển cánh tay Robot.
- Áp dụng giải thuật điều khiển PID cho động cơ DC.
- Tìm hiểu giao tiếp I2C giữa các board mạch Arduino.
- Thiết kế giao diện người dùng trên trên phần mềm Matlab.
- Tìm hiểu cách giao tiếp Matlab với Arduino thông qua cổng COM.
- Xây dựng phương trình động học thuận, động học ngược cho Robot.
- Ứng dụng công nghệ xử lý ảnh vào mô hình Robot Scara để phân loại sản phẩm.
- Chạy mô hình thực tế.
 Ý nghĩa thực tiễn
Đề tài luận văn hướng tới việc ứng dụng công nghệ xử lý ảnh cho Robot tạo tiền
đề cho việc xây dựng một cánh tay Robot công nghiệp hoàn chỉnh, có khả năng phục
vụ cho ngành công nghiệp sản xuất. Ngoài ra, đề tài còn có thể phục vụ mục đích học
tập và nghiên cứu trong phòng thí nghiệm của các trường cao đẳng, đại học. Trong
khuôn khổ luận văn, em sẽ tập trung xây dựng mô hình Robot Scara có khả năng ứng
dụng công nghệ xử lý ảnh vào để xác định màu sắc và hình dạng của đối tượng từ đó
đưa ra quyết định cho cánh tay.

2.2 Phương pháp nghiêm cứu

2.2.1 Phần mềmMatlab

2.2.1.1 Matlab là gì?


Matlab là một chương trình phần mềm lớn dành cho máy tính PC nhằm hỗ trợ
cho các tính toán khoa học kỹ thuật với các phần tử cơ bản là các ma trận. Thuật ngữ

SVTH: Phan Phúc Hậu Trang 14


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

Matlab là chữ viết tắt của hai từ Matrix và Laboratory thể hiện định hướng chính của
chương trình là các phép toán vector và ma trận. Phần cót lõi của chương trình bao
gồm các hàm toán học, các chức năng xuất nhập cũng như các khả năng điều khiển
chương trình.

Hình 2.1: Phần mềm Matlab

2.2.1.2 Hệ thống làm việc của Matlab


Hệ thống giao diện của Matlab được chia thành 5 phần:
- Môi trường phát triển: Đây là nơi đặt các thanh công cụ, các phương tiện giúp
chúng ta sử dụng các lệnh và các file, ta có thể liệt kê một số như sau: Desktop,
Command Window, Command History, Browsers for viewinghelp.
- Thư viện: Các hàm toán học bao gồm các cấu trúc như tính tổng, sin, cos, atan,
atan2..., các phép tính đơn giản đến các phép tính phức tạp như tính ma trận nghịch
đảo, trị riêng, chuyển đổi fourier, laplace, symbolic library.
- Ngôn ngữ Matlab: Đó là các ngôn ngữ cao về ma trận và mảng, với các dòng
lệnh, các hàm, cấu trúc dữ liệu vào, có thể lập trình hướng đối tượng.
- Đồ hoạ trong Matlab: Bao gồm các câu lệnh thể hiện đồ họa trong môi trường
2D và 3D, tạo các hình ảnh chuyển động, cung cấp các giao diện tương tác giữa người
sử dụng và máy tính.
- Giao tiếp với các ngôn ngữ khác: Matlab cho phép tương tác với các ngôn ngữ
khác như C, Fortran,…

SVTH: Phan Phúc Hậu Trang 15


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

2.2.1.3 Giao diện làm việc của Matlab

Hình 2.2; Giao diện làm việc của Matlab


- Cửa sổ Command Window: Là cửa sổ giao tiếp chính của Matlab bởi đây là
nơi nhập giá trị các biến, hiển thị giá trị, tính toán giá trị của biểu thức, thực thi các
hàm có sẵn trong thư viện (dạng lệnh), hoặc các hàm (dạng function) do người dùng
lập trình ra trong M-file. Các lệnh được nhập sau dấu nhắc “>>”, và nếu có sai sót
trong quá trình gõ (nhập) lệnh thì hãy nhấn phím Enter cho đến khi nhận được dấu
nhắc “>>”. Thực thi lệnh bằng nhấn phím Enter.
- Cửa sổ Command History: Các dòng mà bạn nhập vào trong cửa sổ Command
Window (các dòng này có thể là dòng nhập biến, hoặc có thể là dòng lệnh thực hiện
hàm nào đó) được giữ lại trong cửa sổ Command History, và cửa sổ này cho phép ta
sử dụng lại những lệnh đó bằng cách click chuột lên các lệnh đó hoặc các biến, nếu
như bạn muốn sử dụng lại biến đó.
- Cửa sổ Workspace: Là cửa sổ thể hiện tên các biến bạn sử dụng cùng với kích
thước vùng nhớ (số bytes), kiểu dữ liệu (lớp), các biến được giải phóng sau mỗi lần
tắt chương trình. Ngoài ra nó cho phép thay đổi giá trị, cũng như kích thước của biến
bằng cách click chuột lên các biến. Hoặc click vào nút bên trái ngay cạnh nút save.
Ví dụ khi chọn biến (giả sử là biến b) rồi click (hoặc click chuột vào nút cạnh nút
save) ta được cửa sổ sau gọi là Variable Editor. Tiêu đề là tên biến b, định dạng dữ
liệu ở ô có tên là: Numeric format, mặc định là dạng short, kích thước size là 1 by 3

SVTH: Phan Phúc Hậu Trang 16


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

(tức là một hàng và 3 cột) ta có thể thay đổi kích thước này bằng cách thay đổi giá trị
có trong ô kích thước size. Dùng cửa sổ này để lưu các biến ở dưới là dữ liệu của biến
b, ta có thể thay đổi chúng bằng cách thay đổi giá trị trong các ô đó. Tất cả các biến
đều được lưu trong Workspace trong đó thể hiện cả kích thước (size), số Bytes và
kiểu dữ liệu (class) (8 bytes cho mỗi phần tử dữ liệu kiểu double cụ thể là 24 bytes
dành cho b và 8 bytes dành cho a).
- Cửa sổ M-file: Là cửa sổ dùng để soạn thảo chương trình ứng dụng, để thực thi
chương trình viết trong M-file bằng cách gõ tên của file chứa chương trình đó trong
cửa sổ Commandwindow. Khi một chương trình viết trong M-file, thì tuỳ theo ứng
dụng cụ thể, tuỳ theo người lập trình mà chương trình có thể viết dưới dạng sau:
+ Dạng Script file: Tức là chương trình gồm tập hợp các câu lệnh viết dưới dạng
liệt kê, không có biến dữ liệu vào và biến lấy giá trị ra.
+ Dạng hàm function: Có biến dữ liệu vào và biến ra.

2.2.2 Matlab GUI

2.2.2.1 Matlab GUI là gì?


GUI (Graphical User Interface) là giao diện đồ họa có điều khiển bởi nhiều
thanh công cụ được người lập trình tạo sẵn, cho tương tác giữa người dùng là giao
diện chương trình, Mỗi chương trình được người lập trình tạo sẵn giao diện thực hiện
một vài chức năng được người lập tình tạo sẵn và giao tiếp với người sử dụng.
Ứng dụng của Matlab lập trình giao diện rất mạnh và dễ thực hiện, nó có thể tạo
ra giao diện người dùng tương tự VBB, C++…
GUI bao gồm đầy đủ các chương trình hỗ trợ như thực hiện phép toán LOGIC,
mô phỏng không gian 2D,3D, đọc hiển thị dữ liệu, liên kết đa phương tiện.Giao tiếp
với người dùng thông qua hình ảnh, các nút nhấn thực thi ...
Hầu hết GUI chỉ thực hiện (trả lời) lệnh người dùng thông qua các tác động của
người dùng lên giao diện, người sử dụng không cần biết cấu trúc chương trình vẫn có
thể thực hiện được. GUI được thực hiện thông qua các hàm CALLBACK. Khi người
dùng tác động lên giao diện bằng các cách khác nhau, hàm CALLBACK sẽ được gọi
để thực thi.

SVTH: Phan Phúc Hậu Trang 17


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

2.2.2.2 Khởi động GUI


Để khởi động GUI tại cửa sổ Command Window gõ lệnh “guide” và nhấn enter,
lập tức cửa sổ GUIDE Quick Start xuất hiện.

Hình 2.3: Cửa sổ GUIDE Quick Start


Tại tab Create New GUI ta chọn “Blank GUI (Default)” để tạo một GUI bắt
đầu với giao diện trống. Các dòng còn lại để khởi động GUI với một giao diện được
tạo sẵn.
Tại tab Open Existing GUI là nơi bạn có thể mở các GUI mà bạn đã làm và lưu
trước đó, file này có đuôi là .fig.
Nhấp chọn “OK” để tạo một GUI bắt đầu với giao diện trống. Ta được giao
diện Blank GUI mặc định như sau:

Hình 2.4: Giao diện Blank GUI mặc định

SVTH: Phan Phúc Hậu Trang 18


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

2.2.2.3 Chức năng của các công cụ trong GUI


 Chức năng các công cụ cơ bản
1. Nhấp chuột vào để thay đổi độ rộng của giao diện
2. Là nơi để cân chỉnh các nút, biểu tượng trên giao diện.
3. Là nơi để tạo giao diện con liên kết với giao diện chính.
4. Nút Play (Run) để thực thi chương trình.
 Chức năng nhóm các công cụ bên trái
- Push Button: Là nút nhấn, khi nhấn vào sẽ thực thi lệnh.
- Slider: Là thanh trượt cho phép người dùng di chuyển thanh trượt để thực thi
lệnh.
- Check box: Sử dụng để đánh dấu tích (thực thi) vào và có thể check nhiều ô để
thực thi.
- Radio Button: Nó giống như Check Box nhưng thường được sử dụng để tạo sự
lựa chọn duy nhất, tức là 1 lần chỉ được chọn 1 trong số các nhóm nhiều nút. Khi một
ô được chọn thì các ô còn lại trong nhóm bị bỏ chọn.
- Edit Text: Là nơi các kí tự được nhập vào từ người dùng, người dùng có thể
thay đổi nội dung được.
- Static Text: Là các kí tự được hiển thị thông qua các callback, hoặc thông
thường để viết nhãn cho các biểu tượng, người dùng không thể thay đổi nội dung.
- Pop-up Menu: Mở ra danh sách các lựa chọn khi người dùng nhấp chuột vào.
Chỉ chọn được 1 mục trong danh sách các mục.
- List Box: Hộp thoại danh sách các mục, cho phép người dùng chọn một hoặc
nhiều mục cùng một lúc.
- Toggle Button: Là nút nhấn có 2 điều khiển, khi nhấp chuột và nhả ra, nút nhấn
được giữ và lệnh thực thi, khi nhấp chuột vào lần thứ 2, nút nhấn nhả ra, hủy bỏ lệnh
vừa thực thi.
- Table: Tạo ra một bảng tương tự trong Excel.
- Axes: Đây là giao diện đồ họa hiển thị hình ảnh, nó có nhiều thuộc tính bao
gồm: không gian 2D (theo trục đứng và trục ngang), 3D (hiển thị không gian 3 chiều).

SVTH: Phan Phúc Hậu Trang 19


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

- Panel: Tạo ra một mảng nhóm các biểu tượng lại với nhau giúp ta dễ kiểm soát
và thao tác khi di chuyển.
- Button Group: Quản lí sự lựa chọn của nút Radio Button.
- Active Control: Quản lí một nhóm các bút hoặc các chương trình liên quan với
nhau trong Active.
2.2.2.3.1 Hộp thoại Inspector
Tất cả các hộp thoại bên trái vừa nêu trên để sử dụng, chúng ta nhấp chọn và
kéo thả vào vùng cần thiết kế, mỗi hộp thoại có các thông số chỉnh riêng, để chỉnh
các thông số liên quan đến hộp thoại nào ta nhấp đôi vào hộp thoại đó (hoặc click
chuột phải chọn Property Inspector) hộp thoại Inspector hiện ra, dùng thanh trượt kéo
xuống để xem hết chức năng:
- Phía bên trái của Menu Inspector là tên thuộc tính, có thể gọi thực thi các thuộc
tính này bằng các lệnh.
- Phía bên trái là giá trị của thuộc tính, giá trị này do người dùng đặt, có thể thay
đổi thông qua các lệnh gọi (callback), hoặc được thiết lập trước.

Hình 2.5: Hộp thoại Inspector

SVTH: Phan Phúc Hậu Trang 20


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

2.2.2.4 Một số hàm trong GUI


- Hàm callback được lập trình cho các button, checkbox, edit text,… nhưng
static text và axes thì không có hàm callback.
- Mỗi một callback được viết với cấu trúc như sau:
function Tag_Callback(hObject, eventdata, handles)
- Với Tag chính là giá trị của Tag mà ta đã đặt khi tạo giao diện. Các hàm chứa
bên trong callback bao gồm hObject, evendata,handles.
+ hObject là hàm truy cập nội bộ của mỗi function riêng lẽ.
+ Evendata là hàm xác định thuộc tính của function.
+ Handles là hàm truy cập liên kết giữa các function, nó bao gồm tất cả các cấu
trúc của người dùng, được sử dụng để truy xuất qua các điều khiển khác.
- Hàm Get cho phép ta gọi thuộc tính của đối tượng.
- Hàm Set cho phép ta đặt giá trị cho thuộc tính của đối tượng.

2.2.3 Xử lý ảnh trên Matlab

2.2.3.1 Những khái niệm cơ bản trong xử lý ảnh


 Điểm ảnh (Picture Element)
Gốc của ảnh (ảnh tự nhiên) là ảnh liên tục về không gian và độ sáng. Để xử lý
bằng máy tính (số), ảnh cần phải được số hóa. Số hóa ảnh là sự biến đổi gần đúng
một ảnh liên tục thành một tập điểm phù hợp với ảnh thật về vị trí (không gian) và độ
sáng (mức xám). Khoảng cách giữa các điểm ảnh đó được thiết lập sao cho mắt người
không phân biệt được ranh giới giữa chúng. Mỗi một điểm như vậy gọi là điểm ảnh
(PEL: Picture Element) hay gọi tắt là Pixel. Trong khuôn khổ ảnh hai chiều, mỗi pixel
ứng với một cặp tọa độ (x,y).
Định nghĩa: Điểm ảnh (Pixel) là một phần tử của ảnh số tại tọa độ (x,y) với độ
xám hoặc màu nhất định. Kích thước và khoản cách giữa các điểm ảnh đó được chọn
thích hợp sau cho mắt người cảm nhận sự liên tục về không gian và mức xám (hoặc
màu) của ảnh số gần như ảnh thật. Mỗi phần tử trong ma trận được gọi là một phần
tử ảnh.
 Độ phân giải của ảnh

SVTH: Phan Phúc Hậu Trang 21


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

Định nghĩa: Độ phân giải (Resolution) của ảnh là một mật độ điểm ảnh được
ấn định trên một ảnh số được hiển thị.
Theo định nghĩa thì khoảng cách giữa các điểm ảnh phải được chọn sau cho mắt
người vẫn thấy được sự liên tục của ảnh. Việc lựa chọn khoảng cách thích hợp tạo
nên một mật độ phân bố, đó chính là độ phân giải và được phân bố theo trục x và y
trong không gian hai chiều.
 Mức xám (Gray level)
Mức xám là kết quả sự mã hóa tương ứng một cường độ ánh sáng ở mỗi điểm
ảnh với một giá trị số - kết quả của quá trình lượng hóa. Cách mã hóa kinh điển
thường dùng là 16, 32, 64 mức. Phổ dụng nhất là mã hóa ở 256 mức, ở mức này mỗi
pixel sẽ được mã hóa bởi 8 bit.

2.2.3.2 Các kiểu ảnh trong Matlab


 Ảnh Index
Ảnh được biểu diễn bởi hai ma trận, một ma trận dữ liệu ảnh X và một ma trận
màu (còn gọi là bản đồ màu) map. Ma trận dữ liệu có thể thuộc kiểu uint8, uint16
hoặc double. Ma trận màu là một ma trận kích thước m x 3 gồm các thành phần thuộc
kiểu double có giá trị trong khoảng [0 1]. Mỗi hàng của ma trận xác định thành phần
red, green, blue của một màu trong tổng số m màu được sử dụng trong ảnh. Giá trị
của một phần tử trong ma trận dữ liệu ảnh cho biết màu của điểm ảnh đó nằm ở hàng
nào trong ma trận màu.

Hình 2.6: Ảnh Index

SVTH: Phan Phúc Hậu Trang 22


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

 Ảnh grayscale
Mỗi ảnh được biểu diễn bởi một ma trận hai chiều, trong đó giá trị của mỗi phần
tử cho biết độ sáng (hay mức xám) của điểm ảnh đó. Ma trận này có thể có một trong
các kiểu dữ liệu uint8, uint16 hoặc double. Ảnh biểu diễn theo kiểu này còn gọi là
ảnh “trắng đen”.

Hình 2.7: Ảnh xám


 Ảnh nhị phân:
Ảnh được biểu diễn bởi một ma trận hai chiều thuộc kiểu logical. Mỗi điểm ảnh
chỉ có thể nhận một trong hai giá trị là 0 (đen) hoặc 1 (trắng).

Hình 2.8: Ảnh nhị phân

SVTH: Phan Phúc Hậu Trang 23


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

 Ảnh RGB
Còn gọi là ảnh “truecolor” do tính trung thực của nó. Ảnh này được biểu diễn
bởi một ma trận ba chiều kích thước m x n x 3, với m x n là kích thước ảnh theo
pixels. Ma trận này định nghĩa các thành phần màu red, green, blue cho mỗi điểm
ảnh, các phần tử của nó có thể thuộc kiểu uint8, uint16 hoặc double.

Hình 2.9: Ảnh RGB


2.2.3.2.1 Các hàm xử lý cơ bản
- Hàm imread đọc các file ảnh với bất kỳ các định dạng ảnh đã biết hiện nay và
lưu lại dưới dạng một ma trận biểu diễn ảnh trong Matlab.
Cú pháp: A=imread(filename,fmt).
- Hàm imwrite cho phép lưu một ảnh biểu diễn bằng một ma trận trong Matlab
thành một file ảnh dưới một trong các định dạng đã biết.
Cú pháp: imwrite(A,filename,fmt).
- Hàm imfinfo dùng để xem các thông số của một file ảnh nào đó.
Cú pháp : imfinfo(filename,fmt).
Các thông tin được cung cấp bởi hàm imfinfo là : filename, filemoddate,
filesize, format, formatversion, width, height, bitdepth, colortype.
2.2.3.2.2 Chuyển đổi giữa các kiểu dữ liệu, kiểu ảnh
 Chuyển đổi giữa các kiểu dữ liệu ảnh

SVTH: Phan Phúc Hậu Trang 24


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

Matlab cung cấp sẵn các hàm thực hiện chuyển kiểu cho các ma trận biểu diễn
ảnh, bao gồm : im2double, im2uint8 và im2uint16. Tuy nhiên, khi thực hiện chuyển
kiểu giữa các dữ liệu ảnh cần lưu ý một số điều sau:
- Khi chuyển từ một kiểu dữ liệu dùng nhiều bit sang một kiểu dữ liệu dùng ít bit
hơn thì một số thông tin chi tiết về bức ảnh ban đầu sẽ bị mất.
- Không phải lúc nào cũng có thể chuyển đổi kiểu dữ liệu đối với kiểu ảnh
indexed, vì các giá trị của ma trận ảnh xác định một địa chỉ trong bản đồ màu chứ
không phải là giá trị màu, do đó không thể lượng tử hóa được.
 Chuyển đổi giữa các kiểu ảnh
- Dither: Tạo một ảnh nhị phân từ một ảnh cường độ đen trắng bằng cách trộn,
tạo một ảnh chỉ số từ một ảnh RGB bằng cách trộng (dither).
Cú pháp: dither(RGB,map); dither(I)
- Gray2id: Tạo một ảnh chỉ số từ một ảnh cường độ đen trắng.
Cú pháp: [X,Map] = gray2ind(I,N); [X,Map] = gray2ind(BW,N)
- Grayslice: Tạo một ảnh chỉ số từ một ảnh cường độ đen trắng bằng cách đặt
ngưỡng.
Cú pháp: x=grayslice(I,N); x=grayslice(I,V)
- Im2bw: Tạo một ảnh nhị phân từ một ảnh cường độ , ảnh chỉ số hay ảnh.
Cú pháp: bw=im2bw(I,level); bw=im2bw(x,map,level); bw=im2bw(rgb,level)
- Ind2gray: Tạo một ảnh cường độ đen trắng từ một ảnh chỉ số.
Cú pháp: i=ind2gray(x,map)
- Ind2rgb: Tạo một ảnh RGB từ một ảnh chỉ số.
Cú pháp: rgb=ind2rgb(x,map)
- Mat2gray: Tạo một ảnh cường độ đen trắng từ dữ liệu trong một ma trận bằng
cách lấy tỉ lệ giữ liệu.
Cú pháp: i=mat2gray(a,[amin amax])
- Rgb2gray: Tạo một ảnh cường độ đen trắng từ một ảnh RGB.
Cú pháp: i=rgb2gray(rgb)
- Rgb2ind: Tạo một ảnh chỉ số từ một ảnh RGB.
Cú pháp: i=rgb2gray(rgb); x=rgb2ind(rgb,map); [x,map]=rgb2ind(rgb,tol)

SVTH: Phan Phúc Hậu Trang 25


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

Ta cũng có thể thực hiện các phép chuyển đổi kiểu chỉ sử dụng cú pháp của
Matlab. Chẳng hạn, ta có thể convert một ảnh cường độ sang ảnh RGB bằng cách
ghép nối 3 phần copy của ma trận ảnh gốc giữa 3 chiều: RGB= cat (3,I,I,I). Ảnh
RGB thu được có các ma trận đồng nhất cho các mặt phẳng R,G,B vì vậy ảnh hiển
thị giống như bóng xám.

2.2.3.3 Các hàm hiển thị trong Matlab


Matlab cung cấp hai hàm hiển thị cơ bản là image và imagesc. Ngoài ra trong
IPT cũng có hai hàm hiển thị ảnh khác, đó là imview và imshow.
- Hàm image(X,Y,C) hiển thị hình ảnh biểu diễn bởi ma trận C kích thước m x n
lên trục tọa độ hiện hành. X, Y là các vector xác định vị trí các pixel C(1,1) và C(m,n)
trong hệ trục hiện hành.
- Hàm imagesc có chức năng tương tự như hàm image, ngoại trừ việc dữ liệu ảnh
sẽ được co giãn để sử dụng toàn bộ bản đồ màu hiện hành.
- Hàm imview cho phép hiển thị hình ảnh trên một cửa sổ riêng, nền Java, gọi là
image Viewer. Image Viewer cung cấp các công cụ dò tìm và xác định các giá trị
pixel một cách linh hoạt.
- Hàm imshow cũng tạo một đối tượng đồ họa thuộc loại image và hiển thị ảnh
trên một figure. Hàm imshow sẽ tự động thiết lập các giá trị của các đối tượng image,
axes và figure để thể hiện hình ảnh.
2.2.3.3.1 Các phép biến đổi hình học
 Thay đổi kích thước ảnh
Hàm imresize cho phép người sử dụng thay đổi kích thước ảnh. Ngoài kích
thước ảnh mới, người sử dụng còn có thể xác định phương pháp nội suy sẽ dùng và
loại bộ lọc dùng để chống aliasing.
Cú pháp: b=imresize(a,m, method): tạo ảnh gấp m lần ảnh a.
b=imresize(a,[mrows mcols],method)
b=imresize(a,[mrows mcols],method,N)
b=imresize(a,[mrows mcols],method,h)
 Phép quay ảnh

SVTH: Phan Phúc Hậu Trang 26


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

Để thực hiện phép quay ảnh, ta có thể sử dụng hàm imrotate. Ngoài hai thông
số cơ bản là ảnh gốc và góc quay, người sử dụng cũng có thể xác định phương pháp
nội suy sẽ dùng và kích thước của ảnh mới.
Cú pháp: b=imrotate(a,angle,method,Bbox)
 Trích xuất ảnh
Khi cần trích xuất một phần ảnh gốc, ta dùng hàm imcrop.
- Xác định cụ thể vị trí của phần ảnh cần trích xuất (dưới dạng hình chữ nhật).
Cú pháp: x2=imcrop(x,map, [Xmin Ymin width height])
x2=imcrop(a, [Xmin Ymin width height])
- Sử dụng mouse để chọn phần ảnh cần trích xuất. Ta không cần cung cấp thông
số rect, khi thực hiện hàm này, con trỏ sẽ chuyển sang dạng chữ thập, người dùng sẽ
kéo chuột để chọn phần ảnh cần trích xuất sau đó thả chuột.

2.2.4 Phần mềm Invertor

2.2.4.1 Giới thiệu phần mềm Inventor


Autodesk Inventor được phát triển bởi công ty phần mềm Autodesk_USA, là
phần mềm thiết kế mô hình 3D phổ biến hiện nay. Đây là phần mềm được phát triển
chuyên cho thiết kế các sản phẩm cơ khí, có giao diện trực quan, giúp người dùng
thuận tiện khi sử dụng với những tính năng nổi trội như sau:
- Xây dựng dễ dàng mô hình 3D của chi tiết (Part).
- Thiết lập các bản 2D từ mô hình 3D nhanh chóng và chuẩn xác (Drawing).
- Tạo bản vẽ lắp từ các chi tiết đã thiết kế một cách tối ưu (Assembly).
- Mô phỏng quá trình tháo lắp các chi tiết từ bản vẽ lắp hoàn chỉnh một cách trực
quan và sinh động (Presentation).
- Thiết kế nhanh các chi tiết kim loại dạng tấm (Sheet metal).
- Thiết kế các chi tiết máy như: Trục, bộ truyền bánh răng, bộ truyền đai, bộ truyền
xích, mối ghép bulông-đai ốc, cam, chốt, then, ổ bi, lò xo,… một cách nhanh chóng
trong môi trường Assembly.
- Thiết kế nhanh và chính xác các loại khuôn mẫu (Mold Design).
- Thiết kế nhanh các đường ống phức tạp (Pipe&Tupe).

SVTH: Phan Phúc Hậu Trang 27


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

- Cho phép sử dụng thư viện các loại dây điện và cáp điện để chạy dây với bán
kính uốn phù hợp trong thiết kế điện (Cable &Wiring):.
- Mô phỏng động và động lực học của cơ cấu máy (Dynamic simulation).
- Phân tích ứng suất, tối ưu hóa thiết kế sản phẩm (Analysis Stress and Optimize).
- Thiết kế nhanh các sản phẩm nhựa (Inventor plastic & tooling).
- Có thư viện chi tiết đa dạng và chuẩn hóa (Content center).
- Liên kết được với nhiều phần mềm CAD khác.

2.2.4.2 Liên kết Inventor với công cụ simscape multibody của Matlab
 Bước 1: Nhận tập tin cài đặt
- Vào trang tải xuống Simscape Multibody Link.
- Làm theo hướng dẫn trên trang tải xuống.
- Lưu tệp .zip và tệp Matlab trong thư mục thuận tiện.
Lưu ý: Chọn phiên bản khớp với số phát hành Matlab và kiến trúc hệ thống của
bạn. Không giải nén tệp lưu trữ zip.
 Bước 2: Chạy chức năng cài đặt
- Chạy Matlab với quyền administrator.
- Thêm các tệp đã cài đặt vào đường dẫn Matlab.
- Tại dấu nhắc lệnh Matlab ta nhập “install_addon(‘zipname’)”.
Trong đó: “zipname” là tên của tệp lưu trữ zip.
 Bước 3: Đăng ký Matlab làm máy chủ tự động
Mỗi khi ta xuất mô hình lắp ráp CAD thì Simscape Multibody Link sẽ cố gắng
kết nối với Matlab. Để kết nối được xảy ra thì bạn phải đăng ký Matlab làm máy chủ
tự động. Bạn có thể làm điều này theo hai cách sau:
- Trong cửa sổ Matlab đang chạy với quyền administrator thì tại dấu nhắc lệnh ta
nhập “regMatlabserver”.
- Trong cửa sổ MS-DOS đang chạy với quyền administrator thì tại dấu nhắc lệnh
ta nhập “Matlab-regserver”.
 Bước 4: Kích hoạt Simscape Multibody Link
Trước khi ta có thể xuất một cụm thì ta cần phải kích hoạt Simscape Multibody
Link trên ứng dụng Invertor. Để làm điều này thì tại dấu nhắc lệnh ta nhập

SVTH: Phan Phúc Hậu Trang 28


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

“smlink_linkinv”. Khi đó trong lần đầu tiên ta mở Invertor thì menu Simscape
Multibody Link sẽ xuất hiện.
 Bước 5: Xuất file Inventor sang Matlab
- Trong cửa sổ Inventor ta chọn Add-Ins sau đó chọn vào Export Simscape
Multibody First Generation(1G) để xuất ra file *.xml
- Trong cửa sổ Matlab đang chạy với quyền administrator
- Thêm file *.xml đã xuất vào đường dẫn của Matlab.
- Tại dấu nhắc lệnh ta nhập “smimport(‘xmlname’)”.
Trong đó: “xmlname” là tên của file *.xml

2.2.5 Arduino

2.2.5.1 Arduino là gì ?
Arduino là một bo mạch vi điều khiển do một nhóm giáo sư và sinh viên Ý thiết
kế và đưa ra đầu tiên vào năm 2005. Mạch Arduino được sử dụng để cảm nhận và
điều khiển nhiều đối tượng khác nhau. Nó có thể thực hiện nhiều nhiệm vụ từ lấy tín
hiệu từ cảm biến đến điều khiển đèn, động cơ, và nhiều đối tượng khác. Ngoài ra
mạch còn có khả năng liên kết với nhiều module khác nhau như module đọc thẻ từ,
ethernet shield, sim900A, ….để tăng khả ứng dụng của mạch.
Phần cứng bao gồm một board mạch nguồn mở được thiết kế trên nền tảng vi
xử lý AVR Atmel 8bit, hoặc ARM, Atmel 32-bit,… Hiện phần cứng của Arduino có
tất cả 6 phiên bản, tuy nhiên phiên bản thường được sử dụng nhiều nhất là Arduino
Uno và Arduino Mega. Arduino là vi điều khiển được sử dụng rộng rãi trên thế giới
với những ưu điểm như rẻ, tương thích được với nhiều hệ điều hành, chương trình
lập trình đơn giản, rõ ràng, dễ sử dụng, sử dụng mã nguồn mở và có thể kết hợp với
nhiều module khác nhau.

Hình 2.10: Arduino Mega 2560 và Arduino Uno R3

SVTH: Phan Phúc Hậu Trang 29


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

2.2.5.2 Phần cứng của Arduino

Hình 2.11: Phần cứng của Arduino Uno R3


Mỗi loại Arduino sẽ có cấu hình phần cứng khác nhau, tuy nhiên nó vẫn có đầy
đủ các phần cơ bản như trên Arduino UNO R3, gồm có 6 phần cơ bản:
1. Cổng USB (loại B): Đây là cổng giao tiếp để ta upload code từ máy tính lên vi
điều khiển. Đồng thời nó cũng là giao tiếp serial để truyền dữ liệu giữa vi điểu khiển
với máy tính.
2. Jack nguồn: Để chạy Arduino thì có thể lấy nguồn từ cổng USB ở trên, nhưng
không phải lúc nào cũng có thể cắm với máy tính được. Lúc đó, ta cần một nguồn từ
9V đến 12V.
3. Hàng header thứ nhất: Đánh số từ 0 đến 12 là hàng digital pin, nhận vào hoặc
xuất ra các tín hiệu số. Ngoài ra có một pin mass (GND) và pin điện áp tham chiếu
(AREF).
4. Hàng header thứ hai: Chủ yếu liên quan đến điện áp mass (GND), nguồn.
5. Hàng header thứ ba: Các chân để nhận vào hoặc xuất ra các tín hiệu analog.
Ví dụ như đọc thông tin của các thiết bị cảm biến.
6. Vi điều khiển AVR: Đây là bộ xử lý trung tâm của toàn bo mạch. Với mỗi mẫu
Arduino khác nhau thì con chip này khác nhau. Ở con Arduino Uno này thì sử dụng
ATMega328.
Đối với các Arduino khác tùy vào kích thước và phần cứng sẽ có cách sắp xếp
linh kiện khác nhau, tuy nhiên vẫn giữ cấu hình cơ bản như Arduino UNO R3, một
số Arduino có kích thước nhỏ sẽ không có jack cấp nguồn DC.

SVTH: Phan Phúc Hậu Trang 30


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

2.2.5.3 Một số loại Arduino điển hình


Arduino gồm rất nhiều phiên bản với các cấu hình khác nhau nhưng hầu như
vẫn đảm nhận được các chức năng cơ bản tương đương nhau.
Ba loại Arduino phổ biến nhất là Arduino UNO R3, Nano, Mega 2560:

Hình 2.12: Ba loại Arduino phổ biến


Bên cạnh đó còn nhiều loại Arduino được nâng cao hơn nhắm đáp ứng nhu
cầu sử dụng cao hơn trong công nghiệp như: Arduino Yun, Arduino Ethernet,
Arduino Tre, Arduino Robot, …

Hình 2.13: Một số loại Arduino nâng cao


2.2.5.4 Ứng dụng của Arduino
Arduino có nhiều ứng dụng trong đời sống, trong việc chế tạo các thiết bị điện
tử chất lượng cao. Một số ứng dụng có thể kể đến như:

SVTH: Phan Phúc Hậu Trang 31


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

- Lập trình Robot: Arduino chính là một phần quan trọng trong trung tâm xử lý
giúp điều khiển được hoạt động của Robot.
- Lập trình máy bay không người lái. Có thể nói đây là ứng dụng có nhiều kì vọng
trong tương lai.
- Game tương tác: Chúng ta có thể dùng Arduino để tương tác với Joystick, màn
hình,... để chơi các trò như Tetrix, phá gạch, Mario,... và nhiều game rất sáng tạo nữa.
- Arduino cũng được ứng dụng trong máy in 3D và nhiều ứng dụng khác tùy
thuộc vào khả năng sáng tạo của người sử dụng.
Trong đề tài, sử dụng 1 board Arduino UNO R3 (Master) làm trung tâm truyền
tính hiệu điều khiển và 3 board Arduino Nano (Slave) làm nhiệm vụ điều khiển trực
tiếp 3 động cơ của tay máy. Có thể nói rằng Arduino đảm nhiệm vai trò là bộ xử lí
trung tâm cho toàn bộ Robot, vừa đảm nhiệm vai trò nhận tín hiệu điều khiển từ máy
tính vừa xử lí và xuất tín hiệu để động cơ hoạt động.

2.2.6 Phần mềm Arduino IDE

2.2.6.1 Phần mềm Arduino IDE là gì?


Arduino IDE được viết tắt (Arduino Integrated Development Environment) là
một trình soạn thảo văn bản, giúp bạn viết code để nạp vào bo mạch Arduino.

Hình 2.14: Phần mềm Arduino IDE


Arduino IDE được tạo ra bởi ngôn ngữ lập trình Java chính là ứng dụng đa
nền tảng (cross-platform). Ngôn ngữ code sử dụng cho các chương trình trong
Arduino là C hoặc C++. Bản thân Arduino ide đã được trang bị một thư viện phần
mềm thường gọi là “wiring”, từ các chương trình “wiring” gốc đó sẽ giúp các bạn
thực hiện thao tác code dễ dàng và nhanh hơn. Một chương trình chạy trong Arduino
được gọi là một sketch, chương trình được định dạng dưới dạng .ino .

SVTH: Phan Phúc Hậu Trang 32


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

2.2.6.2 Cấu trúc chương cơ bản trong Arduino IDE


Những lệnh trong setup() sẽ được chạy khi chương trình của bạn khởi động.
Bạn có thể sử dụng nó để khai báo giá trị của biến, khai báo thư viện, thiết lập các
thông số,… Sau khi setup() chạy xong, những lệnh trong loop() được chạy. Chúng sẽ
lặp đi lặp lại liên tục cho tới khi nào bạn ngắt nguồn của board Arduino mới thôi. Bất
cứ khi nào bạn nhất nút Reset, chương trình của bạn sẽ trở về lại trạng thái như khi
Arduino mới được cấp nguồn. Quá trình này có thể được miêu tả như sơ đồ dưới đây:

Hình 2.15: Một chương trình Arduino cơ bản

2.2.6.3 Giao diện Arduino IDE

Hình 2.16: Giao diện của phần mềm Arduino IDE

SVTH: Phan Phúc Hậu Trang 33


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

Giao diện của phần mềm Arduino IDE có nhiều phần, tuy nhiên chúng ta chú
ý đến những phần quan trọng như:

1. Nút kiểm tra chương trình


Dùng để kiểm tra xem chương trình được viết có lỗi không. Nếu chương trình bị
lỗi thì phần mềm Arduino IDE sẽ hiển thị thông tin lỗi ở vùng thông báo thông tin.

2. Nút nạp chương trình xuống bo Arduino


Dùng để nạp chương trình được viết xuống mạch Arduino. Trong quá trình nạp,
chương trình sẽ được kiểm tra lỗi trước sau đó mới thực hiện nạp xuống mạch
Arduino.

3. Hiển thị màn hình giao tiếp với máy tính


Khi nhấp vào biểu tượng cái kính lúp thì phần giao tiếp với máy tính sẽ được mở
ra. Phần này sẽ hiển thị các thông số mà người dùng muốn đưa lên màn hình. Muốn
đưa lên màn hình phải có lệnh Serial.print() mới có thể đưa thông số cần hiển thị lên
màn hình
4. Vùng lập trình
Vùng này để người lập trình thực hiện việc lập trình cho chương trình của mình.
5. Vùng thông báo thông tin:
Có chức năng thông báo các thông tin lỗi của chương trình hoặc các vấn đề liên
quan đến chương trình được lập.

2.2.7 PID

2.2.7.1 Lý thuyết về bộ điều khiển PID


Tên gọi PID là chữ viết tắt của ba thành phần cơ bản trong bộ điều khiển: khuếch
đại tỷ lệ (P), tích phân (I), vi phân (D). Bộ điều khiển PID được ví như một tập thể
hoàn hảo gồm ba cá nhân với ba tính cách khác nhau:
- Phục tùng và thực hiện chính xác nhiệm vụ được giao (tỷ lệ).
- Làm việc và có tích lũy kinh nghiệm để thực hiện tốt nhiệm vụ được giao (tích
phân).
- Luôn có sáng kiến và phản ứng nhanh nhạy với sự thay đổi trong quá trình làm
nhiệm vụ (vi phân).

SVTH: Phan Phúc Hậu Trang 34


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

Hình 2.17: Ba thành phần của bộ điều khiển PID


Bộ điều khiển PID được sử dụng khá rộng rãi để điều khiển đối tượng SISO
(một vào, một ra) theo nguyên lý hồi tiếp. Lý do mà bộ điều khiển PID được sử dụng
rộng rãi là vì tính đơn giản của nó cả về cấu trúc lẫn nguyên lý làm việc. Bộ điều
khiển PID có nhiệm vụ đưa sai lệch e(t) của hệ thống về 0 sao cho quá trình quá độ
thỏa mãn các yêu cầu cơ bản về chất lượng. Nguyên lý làm việc của bộ điều khiển
PID được mô tả một cách định tính như sau:
- Nếu sai lêch e(t) càng lớn thì thông qua thành phần uP(t) tín hiệu điều chỉnh u(t)
càng lớn (vai trò của khâu khuếch đại tỷ lệ KP).
- Nếu sai lệch e(t) chưa bằng 0 thì thông qua thành phần uI(t) bộ điều khiển PID
vẫn còn tạo tín hiệu điều chỉnh u(t) (vai trò của khâu tích phân TI)
- Nếu sự thay đổi của sai lệch e(t) càng lớn thì thông qua thành phần uD(t) bộ điều
khiển PID sẽ phản ứng càng nhanh (vai trò của khâu vi phân TD)

Hình 2.18: Mô hình hệ thống điều khiển với bộ PID


Biểu thức toán học của bộ điều khiển PID có dạng:
1 𝑡 𝑑𝑒(𝑡)
𝑢(𝑡 ) = 𝐾𝑃 [𝑒 (𝑡 ) + ∫0 𝑒(𝑡 )𝑑𝑡 + 𝑇𝐷 ] (2.1)
𝑇𝐼 𝑑𝑡

Trong đó: e(t) là tín hiệu đầu vào; u(t) là tín hiệu đầu ra
KP là hệ số khuếch đại; TI là hằng số tích phân; TD là hằng số vi phân

SVTH: Phan Phúc Hậu Trang 35


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

Từ biểu thức toán học trên ta suy ra được hàm truyền đạt của bộ điều khiển PID:
1
𝑅(𝑠) = 𝐾𝑃 (1 + + 𝑇𝐷 𝑠) (2.2)
𝑇𝐼 𝑠

Chất lượng của hệ thống phụ thuộc vào các tham số KP, TI, TD. Muốn hệ thống
có được chất lượng như mong muốn thì phải phân tích đối tượng rồi trên cơ sở đó
chọn các tham số KP, TI, TD phù hợp. Hiện có khá nhiều phương pháp xác định tham
số KP, TI, TD cho bộ điều khiển PID. Sau đây là một số phương pháp thường được sử
dụng: Phương pháp tối ưu Môđun (phương pháp tối ưu đối xứng), Phương pháp của
Ziegler-Nichols, Phương pháp thực nghiệm, Phương pháp Reinisch.
Một điểm cần chú ý là trong nhiều trường hợp không cần xác định cả ba tham
số KP, TI, TD cho bộ điều khiển PID. Chẳng hạn như bản thân đối tượng đã có thành
phần tích phân thì trong bộ điều khiển ta không cần phải có thêm khâu tích phân mới
triệt tiêu được sai lệch tĩnh, tức là ta chỉ cần sử dụng bộ điều khiển PD là đủ. Nếu tín
hiệu trong hệ thống thay đổi tương đối chậm và bản thân bộ điều khiển không cần
phải có phản ứng thật nhanh với sự thay đổi của sai lệch e(t) thì ta chỉ cần sử dụng bộ
điều khiển PI.

2.2.7.2 Các phương pháp tìm thông số bộ điều khiển PID:


Do từng thành phần của bộ điều khiển PID có những ưu nhược điểm khác nhau,
và không thể đồng thời đạt được tất cả các chỉ tiêu chất lượng một cách tối ưu, nên
cần lựa chọn, thỏa hiệp giữa các yêu cầu chất lượng và mục đích điều khiển. Việc lựa
chọn tham số cho bộ điều khiển PID cũng phụ thuộc vào đối tượng điều khiển và các
phương pháp xác định thông số.
 Phương pháp chỉnh định bằng tay
- Đặt KI = KD = 0. Tăng KP đến khi hệ thống dao động tuần hoàn.
- Đặt thời gian tích phân bằng chu kỳ dao động.
- Điều chỉnh lại giá trị KP cho phù hợp.
- Nếu có dao động thì điều chỉnh giá trị KD.
 Phương pháp Ziegler-Nichols
- Đặt KI = KD = 0. Tăng KP đến khi hệ thống dao động tuần hoàn.
- Đặt giá trị KP này = KC

SVTH: Phan Phúc Hậu Trang 36


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

- Đo chu kì dao động PC.


Bảng 2.1: Bảng thông số PID theo phương pháp Ziegler-Nichols
Thông số
KP KI KD
Bộ ĐK
P 0.5KC - -

PI 0.45KC 1.2KP/PC -

PID 0.6KC 2KP/PC KPPC/8

 Phương pháp chỉnh định bằng phần mềm


- Dùng phần mềm để tự động chỉnh định thông số PID (thực hiện trên mô hình
toán, kiểm nghiệm trên mô hình thực).
- Ví dụ dùng giải thuật di truyền (GA) để tìm thông số sao cho sai số đo được nhỏ
hơn giá trị yêu cầu.

2.2.8 Chuẩn giao tiếp I2C

2.2.8.1 Sơ lượt về I2C


I2C là giao thức truyền tin nối tiếp đồng bộ sử dụng 2 dây: SDA và SCL trong
đó SDA (serial data) là đường truyền nhận dữ liệu và SCL(serial clock) là đường
truyền xung nhịp. Các đường SDA và SCL trên các thiết bị có cấu hình cực máng hở
(open-drain) hoặc collector hở (open-collector) vì thế chúng cần điện trở kéo lên
(pull-up resistor) khoảng từ 1 đến 10(kΩ). Ở trạng thái nghỉ thì 2 chân này ở mức
cao. Lý do sử dụng một hệ thống cực máng hở (open drain) là để không xảy ra hiện
tượng ngắn mạch, điều này có thể xảy ra khi một thiết bị cố gắng kéo đường dây lên
cao và một số thiết bị khác cố gắng kéo đường dây xuống thấp.
Tốc độ truyền: 100Kbits/s ở chế độ chuẩn (Standard mode), có thể lên tới
400Kbits/s ở chế độ nhanh(Fast mode) và cao nhất là 3,4Mbits/s ở chế độ cao tốc
(High-speed mode).
Trên đường truyền giao tiếp I2C: Có thể là một chủ-một tớ (One Master One
Slave), một chủ- nhiều tớ (One Master-Multi Slave) hoặc nhiều chủ-nhiều tớ (Multi
Master –Multi Slave). Một thiết bị tớ Slave cũng có thể trở thành chip chủ nếu nó có
khả năng.

SVTH: Phan Phúc Hậu Trang 37


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

Hình 2.19: Sơ đồ truyền dữ liệu I2C

2.2.8.2 Một số khái niệm quan trọng


Master: Giữ vai trò điều khiển bus I2C, tạo xung clock(SCL) trong suốt quá
trình giao tiếp, khởi động quá trình truyền nhận, phát đi địa chỉ của thiết bị cần giao
tiếp, gửi tín hiệu R/W tới Slave, truyền/nhận dữ liệu tới Slave, tạo tín hiệu NOT ACK
khi kết thúc nhận từ Slave, tạo tín hiệu kết thúc quá trình truy xuất.
Slave: Nhận địa chỉ và bit R/W từ Master (Chỉ “Response” khi đúng địa chỉ).
Nhận dữ liệu từ Master gửi bit ACK sau mỗi 8 Clock. Truyền dữ liệu tới Master, chờ
ACK từ Master để tiếp tục gửi.
Start condition (điều kiện bắt đầu): Đang ở trạng thái nghỉ (SDA=SCL=1),
Master muốn thực hiện một cuộc gọi thì nó sẽ kéo chân SDA xuống thấp trong khi
SCL vẫn ở mức cao. Khi điều kiện bắt đầu được gửi bởi thiết bị Master, tất cả các
thiết bị Slave đều hoạt động ngay cả khi chúng ở chế độ ngủ (sleep mode) và đợi bit
địa chỉ.
Stop condition (điều kiện kết thúc): Sau khi thực hiện truyền nhận dữ liệu nếu
Master muốn kết thúc thì nó sẽ kéo chân SDA lên cao trong khi SCL vẫn ở mức cao.
Điều kiện kết thúc chỉ được tạo ra sau khi địa chỉ hoặc dữ liệu đã được truyền nhận.

Hình 2.20: Điều kiện START và STOP

SVTH: Phan Phúc Hậu Trang 38


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

Khoảng giữa Start condition và Stop condition là khoảng bận của đường truyền.
Các Master khác không thể tác động vào đường truyền trong khoảng thời gian này.
Sau khi kết thúc truyền nhận mà Master không gửi Stop condition mà lại gửi thêm
Start condition gọi là Repeat Start: xảy ra khi Master muốn lấy liên tiếp dữ liệu từ
Slave. Sau khi thiết bị truyền gửi byte dữ liệu thì sẽ có tín hiệu đáp trả (Response)
của thiết bị nhận. Tín hiệu đáp trả đã nhận được gọi là ACK (thiết bị nhận kéo SDA
xuống 0) và ngược lại là NACK(SDA vẫn ở mức cao).

Hình 2.21: Điều kiện REPEATED START


Mỗi thiết bị tham gia vào bus I2C đều có địa chỉ cố định có độ dài 7 bit như vậy
trên một bus I2C có thể phân biệt tối đa 128 thiết bị.

2.2.8.3 Thực hiện giao tiếp truyền nhận dữ liệu


Khi một Master muốn giao tiếp với 1 Slave nào đó trước hết nó tạo ra Start
Condition, tiếp theo là gửi địa chỉ của Slave cần giao tiếp (7 bit) + 1bit
READ/WRITE( mất 8 clock). Tại thời điểm clock thứ 9 (tức là xung trên SCL) nó sẽ
đọc xung gọi là ACK (tất nhiên là trên SDA) từ Slave. Xung ACK=0 khi Slave có
địa chỉ tương ứng đã response. Nếu xung ACK=1(NOT ACK) lúc này Master có
những xử lý phù hợp ví dụ có thể gửi Stop condition sau đó phát lại địa chỉ Slave
khác. Khi Slave có địa chỉ tương ứng đã respone tiếp đến Master sẽ truyền hoặc nhận
dữ liệu tùy thuộc vào bit READ/WRITE mà Master vừa gửi.

Hình 2.22: Giao thức truyền nhận dữ liệu I2C

SVTH: Phan Phúc Hậu Trang 39


CHƯƠNG 2: ĐỐI TƯỢNG VÀ PHƯƠNG PHÁP NGHIÊM CỨU

Nếu bit READ/WRITE=0 tức là Master muốn ghi dữ liệu vào Slave. Master bắt
đầu gửi dữ liệu đến Slave từng byte một (mất 8 clock/byte), clock thứ 9 Slave nhận
sẽ phát lại ACK(kéo SDA=0).
Nếu Slave phát tín hiệu NOT ACK (không tác động SDA ở xung thử 9)
(ACK=1) sau khi nhận dữ liệu thì Master sẽ kết thúc quá trình gửi bằng cách phát đi
Stop condition. Để kết thúc quá trình truyền khi mà Master truyền byte cuối nó cũng
sẽ tạo ra Stop condition.
Nếu bit READ/WRITE=1 tức là Master muốn đọc dữ liệu từ Slave thì Slave sẽ
gửi từng byte ra SDA. Master sẽ nhận từng byte dữ liệu và cũng trả về bit ACK =0
(kéo SDA xuống thấp ở clock 9) sau mỗi byte nhận. Nếu Master không muốn nhận
dữ liệu nữa nó sẽ gửi xung NOT‐ACK và tạo tín hiệu STOP.
Nếu Master gửi địa chỉ của Slave là 0 và bít READ/WRITE=0 thì tức là nó
muốn thực hiện một cuộc gọi chung tới tất cả các Slave. Slave đồng ý sẽ phát tín hiệu
ACK, không đồng ý sẽ phát tín hiệu NACK. Cuộc gọi chung thường xảy ra khi Master
muốn gửi dữ liệu chung đến các Slave. Cuộc gọi chung không có nghĩa khi phát địa
chỉ là 0 và đi sau là bit READ/WRITE=1 vì Master không thể nhận dữ liệu đồng thời
từ các Slave.

2.2.8.4 Đặc điểm truyền nhận


Dữ liệu được truyền trên bus I2C theo từng bit tại mỗi cạnh lên của xung (Clock
SCL) , sự thay đổi bit dữ liệu trên SDA xảy ra khi SCL đang ở mức thấp. Số lượng
byte có thể truyền trong một lần tùy ý tối đa là 128byte. Trái với UART, trong giao
thức I2C: bit MSB sẽ được truyền trước. Sau 8 xung clock 8 bit dữ liệu đã được truyền
đi, thiết bị nhận sẽ kéo SDA xuống mức thấp tương ứng một bit ACK tại xung clock
thứ 9 báo hiệu đã nhận đủ 8 bit. Thiết bị truyền khi nhận được bit ACK sẽ tiếp tục
thực hiện quá trình truyền hoặc kết thúc.

SVTH: Phan Phúc Hậu Trang 40


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

CHƯƠNG 3: THIẾT KẾ VÀ CHẾ TẠO MÔ HÌNH

3.1 Bài toán động học

3.1.1 Động học thuận


Bài toán động học thuận yêu cầu xác định vị trí và hướng của khâu tác động
cuối (end-effeector) khi biết trước các giá trị của biến liên kết.
Trong chuyển đổi Denavit-Hartenberg, ta đặt gốc tọa độ trùng với đế của Robot
thì ta có được bảng thông số DH như sau:

Bảng 3.1: Bảng thông số DH


Khâu ai 𝜶i di 𝜽i
1 a0 0 d1* 0
2 a1 0 0 𝜃 2*
3 a2 0 0 𝜃 3*

Hình 3.1: Gắn hệ tọa độ cho Robot

 Xác định các ma trận A:


- Ma trận An có dạng:
𝑐𝑜𝑠𝜃𝑖 −𝑠𝑖𝑛𝜃𝑖 𝑐𝑜𝑠𝛼𝑖 𝑠𝑖𝑛𝜃𝑖 𝑠𝑖𝑛𝛼𝑖 𝑎𝑖 𝑐𝑜𝑠𝜃𝑖
𝑠𝑖𝑛𝜃𝑖 𝑐𝑜𝑠𝜃𝑖 𝑐𝑜𝑠𝛼𝑖 −𝑐𝑜𝑠𝜃𝑖 𝑠𝑖𝑛𝛼𝑖 𝑎𝑖 𝑠𝑖𝑛𝜃𝑖
An = [ ] (3.1)
0 𝑠𝑖𝑛𝛼𝑖 𝑐𝑜𝑠𝛼𝑖 𝑑𝑖
0 0 0 1
- Ma trận A1 mô tả quan hệ giữa khung tọa độ 1 với khung tọa độ gốc:
1 0 0 𝑎0
A1 = [0 1 0 0]
0 0 1 𝑑1
0 0 0 1
- Ma trận A2 mô tả quan hệ giữa khung tọa độ 2 với khung tọa độ 1:
𝑐𝑜𝑠𝜃2 −𝑠𝑖𝑛𝜃2 0 𝑎1 𝑐𝑜𝑠𝜃2
𝑠𝑖𝑛𝜃2 𝑐𝑜𝑠𝜃2 0 𝑎1 𝑠𝑖𝑛𝜃2
A2 = [ ]
0 0 1 0
0 0 0 1

SVTH: Phan Phúc Hậu Trang 41


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

- Ma trận A3 mô tả quan hệ giữa khung tọa độ 3 với khung tọa độ 2:


𝑐𝑜𝑠𝜃3 −𝑠𝑖𝑛𝜃3 0 𝑎2 𝑐𝑜𝑠𝜃3
𝑠𝑖𝑛𝜃3 𝑐𝑜𝑠𝜃3 0 𝑎2 𝑠𝑖𝑛𝜃3
A3 = [ ]
0 0 1 0
0 0 0 1
- Ma trận A mô tả phương trình động học của Robot: (A = A1.A2.A3)
cos(𝜃2 + 𝜃3 ) −sin(𝜃2 + 𝜃3 ) 0 𝑎1 𝑐𝑜𝑠𝜃2 + 𝑎2 cos(𝜃2 + 𝜃3 ) + 𝑎0
sin(𝜃2 + 𝜃3 ) cos(𝜃2 + 𝜃3 ) 0 𝑎1 𝑠𝑖𝑛𝜃2 + 𝑎2 sin(𝜃2 + 𝜃3 )
A=[ ] (3.2)
0 0 1 𝑑1
0 0 0 1

3.1.2 Động học ngược


Bài toán động học ngược dùng để xác định giá trị các biến liên kết khi vị trí và
hướng của khâu tác động cuối được xác định trước. Để thuận tiện cho việc tính toán,
em lựa chọn phương pháp đại số để giải bài toán được trình bày cụ thể như sau:
- Theo như bài toán động học thuận thì ta có được vị trí của khâu tác động cuối
như sau:
xc = 𝑎1 𝑐𝑜𝑠𝜃2 + 𝑎2 cos(𝜃2 + 𝜃3 )
yc = 𝑎1 𝑠𝑖𝑛𝜃2 + 𝑎2 sin(𝜃2 + 𝜃3 ) (3.3)
zc = d1
- Ta có d1 = zc việc còn lại là tìm 𝜃2 và 𝜃3 . Với 𝑥𝑐 , 𝑦𝑐 , 𝑎1 , 𝑎2 đã biết thì bình
phương từng vế hai phương trình ta được:
𝑥𝑐2 = 𝑎12 cos2 (𝜃2 ) + 2𝑎1 𝑎2 cos(𝜃2 )cos(𝜃2 + 𝜃3 ) + 𝑎22 cos2 (𝜃2 + 𝜃3 )
{ (3.4)
𝑦𝑐2 = 𝑎12 sin2 (𝜃2 ) + 2𝑎1 𝑎2 sin(𝜃2 ) sin(𝜃2 + 𝜃3 ) + 𝑎22 sin2 (𝜃2 + 𝜃3 )
- Cộng hai phương trình (3.4) với nhau và sau đó rút gọn ta được:
𝑥𝑐2 + 𝑦𝑐2 − 𝑎12 − 𝑎22 = 2𝑎1 𝑎2 [cos(𝜃2 )cos(𝜃2 + 𝜃3 ) + sin(𝜃2 ) sin(𝜃2 + 𝜃3 )] (3.5)
Tương đương: 𝑥𝑐2 + 𝑦𝑐2 − 𝑎12 − 𝑎22 = 2𝑎1 𝑎2 cos(𝜃3 ) (3.6)
𝑥𝑐2 +𝑦𝑐2 −𝑎12 −𝑎22
Suy ra: cos(𝜃3 ) = ; sin(𝜃3 ) = ±√1 − cos2 (𝜃3 )
2𝑎1 𝑎2

⇒ 𝜃3 = 𝑎𝑡𝑎𝑛2(cos(𝜃3 ), sin(𝜃3 )) (3.7)


- Thay lại 𝜃3 vào phương trình (3.3) ta có:
𝑥𝑐 = [𝑎1 + 𝑎2 𝑐𝑜𝑠(𝜃3 )]𝑐𝑜𝑠(𝜃2 ) − 𝑎2 𝑠𝑖𝑛(𝜃3 ) 𝑠𝑖𝑛( 𝜃2 )
{ (3.8)
𝑦𝑐 = 𝑎2 𝑠𝑖𝑛(𝜃3 )𝑐𝑜𝑠(𝜃2 ) + [𝑎1 + 𝑎2 𝑐𝑜𝑠(𝜃3 )] 𝑠𝑖𝑛( 𝜃2 )
- Giải hệ phương trình (3.8) ta được:

SVTH: Phan Phúc Hậu Trang 42


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

𝑎1 + 𝑎2 𝑐𝑜𝑠(𝜃3 ) −𝑎2 𝑠𝑖𝑛(𝜃3 )


∆= | | = 𝑎12 + 𝑎22 + 2𝑎1 𝑎2 𝑐𝑜𝑠(𝜃3 ) = 𝑥𝑐2 + 𝑦𝑐2
𝑎2 𝑠𝑖𝑛(𝜃3 ) 𝑎1 + 𝑎2 𝑐𝑜𝑠(𝜃3 )
𝑥𝑐 −𝑎2 𝑠𝑖𝑛(𝜃3 )
∆1 = | | = 𝑎1 𝑥𝑐 + 𝑎2 [𝑥𝑐 𝑐𝑜𝑠(𝜃3 ) + 𝑦𝑐 𝑠𝑖𝑛(𝜃3 )]
𝑦𝑐 𝑎1 + 𝑎2 𝑐𝑜𝑠(𝜃3 )
𝑎1 + 𝑎2 𝑐𝑜𝑠(𝜃3 ) 𝑥𝑐
∆2 = | | = 𝑎1 𝑦𝑐 + 𝑎2 [𝑦𝑐 𝑐𝑜𝑠(𝜃3 ) − 𝑥𝑐 𝑠𝑖𝑛(𝜃3 )]
𝑎2 𝑠𝑖𝑛(𝜃3 ) 𝑦𝑐
∆1 𝑎1 𝑥𝑐 + 𝑎2 [𝑥𝑐 𝑐𝑜𝑠(𝜃3 ) − 𝑦𝑐 𝑠𝑖𝑛(𝜃3 )]
𝑐𝑜𝑠( 𝜃2 ) = =
∆ 𝑥𝑐2 + 𝑦𝑐2
∆2 𝑎1 𝑦𝑐 + 𝑎2 [𝑦𝑐 𝑐𝑜𝑠(𝜃3 ) − 𝑥𝑐 𝑠𝑖𝑛(𝜃3 )]
𝑠𝑖𝑛( 𝜃2 ) = =
∆ 𝑥𝑐2 + 𝑦𝑐2
⇒ 𝜃2 = 𝑎𝑡𝑎𝑛2(cos(𝜃2 ), sin(𝜃2 ) (3.9)

3.2 Thiết kế mô hình cơ khí cho Robot

3.2.1 Cơ sở thiết kế
Robot Scara được cấu tạo gồm một khớp tịnh tiến và hai khớp xoay. Theo đề
tài yêu cầu là Robot gắp vật và phân loại sản phẩm thì theo dự tính ban đầu thì kích
thước của từng khâu sẽ là: khâu xoay thứ nhất 200x60(mm), khâu xoay thứ hai
120x50(mm) chưa tính chiều dài tay gắp, khâu tịnh tiến sẽ có hành trình khoảng từ
200 đến 300mm.
Trong đề tài “Thiết kế và chế tạo mô hình Robot Scara phân loại sản phẩm
theo màu sắc và hình dạng” em lựa chọn cơ cấu truyền động pully và dây đai cho
cả ba khớp của Robot với mục đích là thay đổi tốc độ đầu ra của hộp số động cơ từ
đó thay đổi được tốc độ đáp ứng của từng khớp như mong muốn. Riêng khâu tịnh
tiến ngoài bộ truyền pully và dây đai thì ta còn kết hợp bộ truyền vít-me đai ốc với
mục đích là tạo chuyển động tịnh tiến cho Robot.
Mô hình Robot Scara sắp chế tạo cần đạt được các tiêu chí như sau:
- Đáp ứng được yêu cầu thiết kế (Robot gồm một khớp trượt và hai khớp quay).
- Thiết kế đơn giản.
- Trường hoạt động lớn.
- Cơ khí chắc chắc.
- Hoạt động linh hoạt và chính xác.
- Chi phí chế tạo thấp.

SVTH: Phan Phúc Hậu Trang 43


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

3.2.2 Bản vẽ thiết kế Robot trên Inventor


 Bản vẽ thiết kế tổng thể mô hình Robot Scara

SVTH: Phan Phúc Hậu Trang 44


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

 Bản thiết kế chi tiết khâu đế của Robot Scara

SVTH: Phan Phúc Hậu Trang 45


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

 Bản thiết kế chi tiết khâu tịnh tiến của Robot Scara

SVTH: Phan Phúc Hậu Trang 46


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

 Bản thiết kế chi tiết khâu quay thứ nhất của Robot Scara

SVTH: Phan Phúc Hậu Trang 47


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

 Bản thiết kế chi tiết khâu quay thứ hai của Robot Scara

SVTH: Phan Phúc Hậu Trang 48


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

 Bản thiết kế chi tiết khâu tay gắp của Robot Scara

SVTH: Phan Phúc Hậu Trang 49


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

3.2.3 Chế tạo mô hình cơ khí

3.2.3.1 Chọn vật liệu sử dụng cho từng khâu


Trong đề tài “Thiết kế và chế tạo mô hình Robot SCARA phân loại sản phẩm
theo màu sắc và hình dạng” thì nhiệm vụ chính của Robot là di chuyển từ một vị trí
này sang một vị trí khác để thực hiện một nhiệm vụ được giao cụ thể là gắp sản phẩm
hoặc là thả sản phẩm vào đúng vị trí đã quy định trước. Từ nhiệm vụ trên của Robot
ta thấy Robot cần phải có độ cứng vững để có thể hoạt động một cách chính xác kèm
với đó là độ linh hoạt của cánh tay để có thể nâng cao nâng suất gắp-thả vật.
Đầu tiên để cải thiện độ cứng vững thì phần quan trọng nhất là phần đế. Robot
có hoạt động tốt hay không phụ thuộc rất nhiều vào phần đế của Robot bởi vì đây là
bộ phận chịu tất cả tải trọng của Robot và dùng để lắp các cơ cấu khác của Robot.
Chính vì vậy em xin lựa chọn vật liệu được sử dụng làm đế là sắt tấm và sắt ống hình
chữ nhật. Khi sử dụng hai loại sắt trên để chế tạo Robot thì em nhận thấy độ cứng
vững của Robot rất cao khi chịu tải trọng từ trên xuống.

Hình 3.2:Sắt tấm Hình 3.3: Sắt hộp


Tiếp theo là về độ linh hoạt của cánh tay thì em xin chọn vật liệu để chế tạo hai
khâu quay là nhôm. Lý do là nhôm có khối lượng nhẹ nên cải thiện được độ linh hoạt
cho cánh tay từ đó nâng cao tốc độ của Robot và nhôm cũng dễ dàng gia công.

Hình 3.4: Nhôm tấm

SVTH: Phan Phúc Hậu Trang 50


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

3.2.3.2 Chọn động cơ


Với những nhiệm vụ và yêu cầu của đề tài cùng với những đặc điểm về cơ khí
đã nói trên em xin đưa ra những yêu cầu về kỹ thuật đối với động cơ như sau: động
cơ sử dụng trong mô hình là loại động cơ có tốc độ khoảng 6000(vòng/phút) và có
công suất lớn nhằm mục đích điều khiển chính xác vị trí mong muốn và đáp ứng được
nhu cầu gắp vật có khối lượng lớn. Ưu điểm của loại động cơ này là tốc độ nhanh và
có thể chịu lực khỏe. Bánh chủ động của bộ truyền được bố trí phía sau để tạo thêm
sự vững chắc cho bánh bị động. Dùng đai để tăng tốc hoặc giảm tốc cho động cơ
chính của từng khâu để đạt được vận tốc đầu ra mong muốn đối với khớp quay là từ
50 đến 60 (vòng/phút), còn khớp tịnh tiến là từ 300 đến 400 (mm/phút).
Từ những yêu cầu kỹ thuật trên cùng với những yếu tố khác như: kích thước,
khối lượng, giá thành,... em đã lựa chọn động cơ M555 cho đề tài của mình.

Thông số kĩ thuật của động cơ M555:


- Điện áp vận hành: 12 VDC
- Công suất: 17W
- Khối lượng: 350 gam
- Tốc độ động cơ: 6000 (vòng/phút)
- Tốc độ qua hộp số: 33 (vòng/phút)
- Bộ giảm tốc hệ số: 180:1

Hình 3.5: Động cơ M555 - Encoded: Hall sensor 12 xung

Trong quá trình thực hiện đề tài do động cơ M555 dùng để khiển khâu quay thứ
nhất có dấu hiệu bị rơ trục động cơ nên cần được thay thế. Nhận thấy động cơ thay
thế cần phải có momen lớn để có thể xoay được cả khối lượng nặng đồng thời phải
hạn chế được độ rơ của trục động cơ, từ đó em lựa chọn động cơ Planet. Ưu điểm của
động cơ Planet là công suất lớn, sử dụng bánh răng hành tinh nên giảm tiếng ồn cho
hộp số.

SVTH: Phan Phúc Hậu Trang 51


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

Thông số kĩ thuật của động cơ Planet:


- Điện áp vận hành: 12 VDC
- Công suất: 30W
- Khối lượng: 450gam
- Tốc độ động cơ: 5000 (vòng/phút)
- Tốc độ qua hộp số: 250 (vòng/phút)
- Bộ giảm tốc hệ số 19.2:1
- Encoder: Hall sensor 12xung
Hình 3.6: Động cơ Planet
Bảng 3.2: Bảng thông số động cơ
Khớp Động cơ Tốc độ động Hệ số Tốc độ ra Công Điện áp
cơ (vòng/phút) giảm tốc (vòng/phút) suất (V)
1 M555 6000 60:1 100 17W 12
2 Planet 5000 19.2:1 250 30W 12
3 M55 6000 180:1 33 17W 12

3.2.3.3 Thiết kế bộ truyền động


Trong đề tài “Thiết kế và chế tạo mô hình Robot SCARA phân loại sản phẩm
theo màu sắc và hình dạng” em lựa chọn bộ truyền pully và dây đai cho tất cả các
khớp của của Robot.
Bộ truyền đai hoạt động theo nguyên lý ma sát: công suất từ bánh chủ động
truyền cho bánh bị động nhờ vào ma sát sinh ra giữa dây đai và bánh đai.

Hình 3.7: Bộ truyền Pully và dây đai

SVTH: Phan Phúc Hậu Trang 52


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

Bảng 3.3:Bảng thông số bộ truyền


Tốc độ vào Số răng Pully Số răng Pully Hệ số Tốc độ ra
Khớp
(vòng/phút) chủ động (răng) bị động (răng) truyền đai (vòng/phút)
1 100 80 20 1:4 400
2 250 20 80 4:1 60
3 33 60 40 1:1.5 50

 Ưu điểm
- Có khả năng truyền được động năng và cơ năng giữa các trục ở khá xa.
- Làm việc êm không gây tiếng ồn.
- Đai nhựa có khả năng giữ được an toàn cho các chi tiết máy khác khi quá tải.
- Hiệu suất truyền khá cao, cao hơn truyền đai bình thường.
- Không đòi hỏi bôi trơn.
- Tỷ số truyền ổn định.
 Nhược điểm:
- Kích thước bộ truyền đai lớn so với một số bộ truyền khác.
- Tải trọng tác dụng lên trục và ổ lớn (thường gấp 2-3 lần so với bộ truyền bánh
răng) do phải có lực căng đai ban đầu (tạo áp lực pháp tuyến lên đai tạo lực ma sát).
- Tuổi thọ của bộ truyền thấp khi làm việc ở tốc động cao và tải trọng thay đổi.
- Dễ bị trượt đai, dãn dây đai khi làm việc dưới tải trọng lớn. Cần tiến hành căng
đai khi bộ truyền hoạt động lâu dài.

3.2.3.4 Một số linh kiện cơ khí dùng để chế tạo Robot


- Bộ thanh trục vít-me đai ốc có công dụng chuyển từ chuyển động quay sang
chuyển động tịnh tiến. Thanh trục vít-me có chiều dài là 500mm và bước ren là 8mm.

Hình 3.8: Bộ thanh trục vít-me đai ốc

SVTH: Phan Phúc Hậu Trang 53


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

- Bộ thanh trượt, ray trượt và gối đỡ có công dụng là cố định cơ cấu trượt giúp
cho khâu tịnh tiến hoạt động dễ dàng hơn.

Hình 3.9: Bộ thanh trượt, ray trượt và gối đỡ


- Hai bạc đạn đỡ trục 8mm dùng để cố định thanh trục vít-me và giảm ma sát giữa
trục và bề mặt đỡ Robot.
- Hai bạc đạn đỡ trục 10mm dùng để cố định trục của pully và tạo chuyển động
quay cho khâu quay thứ nhất.
- Một vòng bi trục 10x26x8 (mm) dùng để cố định trục của pully và tạo chuyển
động quay cho khâu quay thứ hai.

Hình 3.10: Bạc đạn đỡ trục KFL08 Hình 3.11: Vòng bi trục
- Khớp nối mặt bích cố định cùng để cố định trục quay với khâu quay.
- Các loại ốc vít được sử dụng trong mô hình chủ yếu là các loại bu lông đai ốc,
lục giác 4mm,5mm và 6mm.

Hình 3.12: Khớp nối mặt bích cố định Hình 3.13: Bulong đai ốc

SVTH: Phan Phúc Hậu Trang 54


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

3.2.4 Lắp ráp mô hình Robot Scara hoàn chỉnh


- Bước 1: Lắp bộ thanh trượt, ray trượt và gối đỡ vào phần đế của Robot.

Hình 3.14: Phần đế thực tế của mô hình Robot Scara


- Bước 2: Lắp bộ thanh trục vit-me đai ốc vào khâu tịnh tiến của Robot.

Hình 3.15: Khâu tịnh tiến thực tế của mô hình Robot Scara

SVTH: Phan Phúc Hậu Trang 55


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

- Bước 3: Lắp động cơ và tay gắp vào hai khâu quay của Robot.

Hình 3.16: Hai khâu quay thực tế của mô hình Robot Scara
- Bước 4: Lắp ráp và hoàn thiện mô hình cơ khí cho Robot.

Hình 3.17: Mô hình cơ khí hoàn thiện của Robot Scara

SVTH: Phan Phúc Hậu Trang 56


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

3.3 Thiết kế mạch điều khiển


Trong Robot thì mạch điện có thể ví như mạch máu trong cơ thể con người, nó
có tác dụng liên kết tất cả các phần của Robot lại với nhau thành một thể thống nhất.
Mạch điện sử dụng cho Robot phải đảm bảo được các yêu cầu sau:
- Đảm bảo cung cấp đủ công suất cho Robot hoạt động.
- Hoạt động chính xác và ổn định.
- Có tính linh hoạt cao trong việc thay thế và sử dụng.
Căn cứ vào những đặc điểm và yêu cầu kỹ thuật của đề tài thì em lựa chọn
phương pháp điều khiển như sau: sử dụng 1 board Arduino UNO R3 (Master) làm
trung tâm truyền tính hiệu điều khiển và 3 board Arduino Nano (Slave) làm nhiệm
vụ điều khiển trực tiếp 3 động cơ của Robot. Có thể nói rằng Arduino đảm nhiệm vai
trò là bộ xử lí trung tâm cho toàn bộ Robot, vừa đảm nhiệm vai trò nhận tín hiệu điều
khiển từ máy tính vừa xử lí và xuất tín hiệu để động cơ hoạt động.

3.3.1 Lưu đồ giải thuật điều khiển Robot

Hình 3.18: Lưu đồ giải thuật điều khiển


Nguyên lí hoạt động của lưu đồ: Camera sẽ thu nhận ảnh từ môi trường sau đó
truyền tín hiệu thu được về cho máy tính. Thông qua giao diện người dùng được thiết

SVTH: Phan Phúc Hậu Trang 57


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

kế trên Matlab thì máy tính sẽ tiến hành xử lý ảnh đầu vào và đưa ra những kết luận
về thông số của sản phẩm bao gồm: vị trí, màu sắc và hình dạng. Cũng thông qua
giao diện người dùng thì máy tính sẽ gửi tín hiệu điều khiển xuống mạch điều khiển.
Một Arduino UNO R3 ( Master) sẽ nhận tín hiệu điều khiển thông qua giao tiếp cổng
COM và gửi xuống cho các Arduino Nano (Slave) thông qua chuẩn giao tiếp I2C.
Sau khi nhận tín hiệu điều khiển từ Master thì các Slave sẽ biên dịch chương trình và
điều khiển động cơ thông qua module điều khiển trung gian L298N, sau khi động cơ
quay thì bộ encoder sẽ bắt đầu đếm xung và trả về số xung đếm được cho các Slave,
lúc này các Slave sẽ so sánh số xung trả về với số xung đã đặt ban đầu nếu có sai lệch
thì bộ điều khiển PID sẽ tiến hành hiệu chỉnh sai lệch liên tục cho đến khi sai lệch
nhỏ nhất sẽ dừng lại.

3.3.2 Sơ đồ mạch điều khiển Robot

Hình 3.19: Mạch điều khiển Robot

SVTH: Phan Phúc Hậu Trang 58


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

3.3.2.1 Arduino UNO R3 (Master)


Trong đề tài, Arduino Uno được dùng làm trung tâm quản lí điều khiển (Master)
nhận tín hiệu điều khiển từ Matlab thông qua giao tiếp cổng COM và gửi dữ liệu
xuống cho các Slave điều khiển động cơ.
 Thông số kỹ thuật:
- Chip: ATmega328P.
- Nguồn cấp: từ 7 đến 12 VDC.
- Dòng max chân 5V: 500 mA.
- Dòng max chân 3.3V: 50 mA.
- Dòng max chân I/O: 30 mA.
- Số chân Digital: 14 chân (Bao 6 chân PWM).
- Số chân Analog: 6 chân.
- Flash Memory: 32 kb.
- SRAM: 2 kb.
- EEPROM: 1 kb.
- Clock Speed: 16 Mhz.
- Kích thước: 68.6 x 53.4mm.
- Khối lượng: 25 gam.
 Chức năng của các chân Arduino Uno

Hình 3.20: Sơ đồ chân của Arduino Uno

SVTH: Phan Phúc Hậu Trang 59


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

- Chân Vin: Đây là điện áp đầu vào được cung cấp cho board mạch Arduino
Uno. Khác với chân 5V được cung cấp qua cổng USB. Chân này được sử dụng để
cung cấp điện áp toàn mạch thông qua jack nguồn, thông thường khoảng từ 7 đến
12VDC.
- Chân 5V: Chân này được sử dụng để cung cấp điện áp đầu ra. Arduino Uno
được cấp nguồn bằng ba cách đó là USB, chân Vin của board mạch hoặc jack nguồn.
- USB: Dùng để giao tiếp với máy tính thông qua cáp USB chúng ta có thể nạp
chương trình cho Arduino hoạt động. Ngoài ra, USB còn là nguồn cho Arduino nó
hỗ trợ điện áp khoảng 5 VDC trong khi Vin và jack nguồn hỗ trợ điện áp trong khoảng
từ 7V đến 20VDC.
- Chân GND: Chân mass chung cho toàn mạch Arduino.
- Chân Reset: Để thiết lập lại toàn bộ và đưa chương trình đang chạy trở về ban
đầu. Chân này rất hữu ích khi Arduino bị treo khi đang chạy chương trình.
- Các chân Digital: Có 14 chân Digital trên board mạch Arduino Uno được ký
hiệu từ 0 đến 13 với chức năng input và output sử dụng các hàm pinMode(),
digitalWrite(), digitalRead() để điều khiển các chân này.
- Chân PWM: Được cung cấp bởi các chân 3,5,6,9,10,11. Các chân này được
cấu hình để cung cấp PWM đầu ra 8 bit.
- Các chân Analog: Có 6 chân Analog trên board mạch Arduino Uno được ký
hiệu từ A0 đến A5. Được sử dụng để đo điện áp tương tự trong khoảng từ 0 đến 5V.
- Chân Rx, Tx: Dùng để thực hiện giao tiếp nối tiếp thông qua hai chân 0 (Rx)
và chân 1 (Tx).
- Chân LED: Arduino Uno tích hợp đèn LED kết nối với chân 13. Cung cấp
mức logic HIGH tương ứng ON và LOW tương ứng OFF.
- Chân AREF: Chân này được gọi là tham chiếu tương tự, được sử dụng để cung
cấp điện áp tham chiếu cho các đầu vào tương tự.
- Chân SPI: Được dùng để giao tiếp ngoại vi nối tiếp. Các chân 10 (SS), 11
(MOSI), 12 (MISO), 13 (SCK) cung cấp liên lạc SPI với sự trợ giúp của thư viện SPI.
- Chân ngắt ngoài: Chân 2 và 3 được sử dụng để cung cấp các ngắt ngoài.

SVTH: Phan Phúc Hậu Trang 60


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

- Chân I2C: Dùng để giao tiếp I2C với các thiết bị. Chân A4 (SDA)và A5 (SCL)
được sử dụng cho mục đích này.

3.3.2.2 Arduino Nano (Slave)


Trong đề tài, Arduino Nano được dùng làm các Slave để nhận tín hiệu điều
khiển từ Master thông qua chuẩn giao tiếp I2C và điều khiển động cơ.
 Thông số kỹ thuật của Arduini Nano:
- Chip: ATmega328P.
- Điện áp logic: 5 VDC.
- Điện áp hoạt động: từ 7 đến 12 VDC.
- Số chân Digital: 14 chân (Bao gồm 6 chân PWM).
- Số chân Analog: 8 chân.
- Dòng điện I/O: 40 mA.
- Flash Memory: 32 kb (2KB Bootloader).
- SRAM: 2kb.
- EEPROM: 1kb.
- Clock Speed: 16 Mhz.
- Kích thước: 18.542 x 43.18mm.
- Khối lượng: 7 gam.
 Chức năng các chân của Arduino Nano:

Hình 3.21: Sơ đồ chân của Arduino Nano

SVTH: Phan Phúc Hậu Trang 61


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

Mỗi chân trên mạch Arduino Nano có chức năng cụ thể trên các chân đó. Chẳng
hạn như các chân Analog có thể sử dụng như một bộ chuyển đổi Analog sang Digital
trong đó các chân A4 và A5 cũng có thể được sử dụng cho vấn đề giao tiếp I2C.
Tương tự, có 14 chân Digital, trong đó có 6 chân được sử dụng để tạo ra xung PWM.
- Chân Vin: Đây là chân cung cấp điện áp đầu vào cho mạch Arduino Nano khi
sử dụng nguồn ngoài từ 7 đến 12 VDC.
- Chân 5V: Là mức điện áp cung cấp quy định của Arduino được sử dụng để cấp
nguồn nuôi cho vi điều khiển và các bộ phận linh kiện khác trên board Arduino.
- Chân 3,3V: Đây là một mức điện áp tối thiểu được tạo ra bởi bộ điều chỉnh
điện áp trên board (sử dụng Lm1117 - 3.3V).
- Chân GND: Chân mass cho Arduino, có nhiều chân GND trên board Arduino
cho mục đích dễ dàng kết nối với thiết bị ngoại vi sử dụng dây testboard.
- Chân Reset: Khi tác động nút nhấn reset, Arduino được trả về lại chương trình
ban đầu. Rất hữu ích khi chạy chương trình phức tạp và bị treo vi điều khiển
ATmega. Mức tích cực LOW được thiết lập sẽ reset lại Arduino Nano.
- Các chân PWM: Bao gồm 6 chân là chân 3,5,6,9,10,11 được sử dụng để cung
cấp đầu ra 8-bit xung PWM.
- Các chân Analog: Có 8 chân Analog trên board mạch Arduino Nano được ký
hiệu từ A0 đến A7. Được sử dụng để đo điện áp tương tự trong khoảng từ 0 đến 5V.
- Chân Rx, Tx: Được sử dụng cho giao tiếp nối tiếp trong đó chân 1 (Tx) là chân
truyền dữ liệu và chân 0 (Rx) là chân nhận dữ liệu.
- Chân LED: Chân 13 để thực hiện bật tắt LED trên board Arduino Nano, sử
dụng để quan sát, kiểm tra chương trình cần thiết.
- Chân AREF: Chân này được dùng lấy điện áp tham chiếu cho điện áp đầu vào.
- Chân SPI: Chân 10(SS), chân 11(MOSI), chân 12(MISO), chân 13(SCK) được
sử dụng cho SPI giao tiếp ngoại vi nối tiếp. SPI được sử dụng chủ yếu để truyền dữ
liệu giữa các bộ vi điều khiển và các thiết bị ngoại vi khác như cảm biến, thanh ghi
và thẻ nhớ SD.
- Chân ngắt ngoài: Chân 2 và 3 sử dụng làm ngắt ngoài được thiết lập trong
trường hợp khẩn cấp khi chúng ta cần dừng chương trình chính và tác động các cảnh

SVTH: Phan Phúc Hậu Trang 62


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

báo hướng dẫn tại thời điểm đó. Chương trình chính sẽ tiếp tục lại sau khi lệnh ngắt
được loại bỏ.
- Chân I2C: Giao tiếp I2C sử dụng các chân A4 (SDA) và chân A5 (SCL).

3.3.2.3 Module L298N


Trong đề tài, Module L298N được dùng để làm module điều khiển trung gian
giữa Slave và động cơ DC vì Module L298N được tích hợp mạch cầu H bên trong
nên có thể điều khiển tốc độ và chiều quay của động cơ DC một cách dễ dàng. Mỗi
module có khả năng điều khiển được hai động cơ DC với dòng tối đa cho mỗi động
cơ là 2A. Ngoài ra, Module L298N còn tích hợp IC nguồn 78M05 để tạo ra nguồn 5
VDC để cấp cho các module khác.
 Thông số kỹ thuật của Module L298N:
- Điện áp điều khiển: từ 5 đến 12 Volt.
- Dòng tối đa cho mỗi cầu H là: 2A.
- Điện áp của tín hiệu điều khiển: từ 5 đến 7 Volt.
- Dòng của tín hiệu điều khiển: 0 ~ 36mA.
- Công suất hao phí: 20W (khi nhiệt độ T = 75 0C).
- Nhiệt độ bảo quản: từ -25 đến 130 0C.
- Kích thước: 43x43x27mm.
 Sơ đồ chân của Module L298N:

Hình 3.22: Sơ đồ chân của Module L298N


- Chân 12V và chân 5V: Đây là hai chân cấp nguồn trực tiếp cho động cơ.

SVTH: Phan Phúc Hậu Trang 63


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

- Chân GND: Là chân GND của nguồn cấp cho động cơ.
- Chân ENA và chân ENB: Dùng để điều khiển mạch cầu H trong L298.
- Các chân Input: Gồm chân IN1, IN2, IN3,IN4.
- Các chân Output: Output A nối với động cơ A, output B nối với động cơ B.

3.3.2.4 Nguồn tổ ong 12V-10A


Bộ nguồn tổ ong 12V-10A được cấu tạo để chuyển đổi điện áp từ nguồn xoay
chiều 110/220 VAC thành nguồn một chiều 12 VDC để cấp điện cho các thiết bị điện
hoạt động. Đây là bộ nguồn được sử dụng rộng rãi trong các thiết bị công nghiệp cũng
như dân dụng có thể kể đến một số thiết bị như: động cơ DC, camera giám sát, máy
tính, loa đài và các thiết bị sử dụng nguồn một chiều có thông số tương ứng.
Trong đề tài, nguồn tổ ong 12V-10A được dùng để chuyển đổi điện áp từ 220
VAC sang 12 VDC để cấp nguồn cho Module L298N hoạt động.
 Thông số kỹ thuật của nguồn tổ ong 12V-10A:
- Điện áp ngõ vào: 110/220 VAC.
- Điện áp ngõ ra: 12 VDC.
- Dòng điện ngõ ra: 10A.
- Sai số điện áp đầu ra: 1-3 %.
- Công suất thực tế: 88 %.
- Nhiệt độ làm việc: 0-70 0C.
- Kích thước: 159x98x42 mm.
- Khối lượng: 480 gam.
 Cách sử dụng nguồn tổ ong:

Hình 3.23: Nguồn tổ ong 12V-10A

SVTH: Phan Phúc Hậu Trang 64


CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ MÔ HÌNH

- Cổng L và N (AC): Đầu vào điện AC.


- Cổng COM: Đầu ra điện DC âm.
- Cổng V+: Đầu ra điện DC dương.
- Cổng V/ADJ: Điều chỉnh điện áp đầu ra.

3.3.2.5 Động cơ Servo GM990


Động cơ Servo MG995 có mô men xoắn lớn, chạy mượt mà phù hợp cho những
mô hình điều khiển có tải trọng lớn như cánh tay Robot, Robot nhện, Robot tự hành,
... Động cơ sử dụng chất liệu có độ bền cao, có bánh răng bằng đồng giúp cho động
cơ đạt độ bền cao.
Trong đề tài, động cơ Servo MG995 được dùng để điều khiển cơ cấu tay gắp
Robot.

Hình 3.24:Động cơ Servo MG995


Thông số kỹ thuật của động cơ Servo MG995:
- Kích thước: 40 x 19 x 43 mm.
- Khối lượng: 48 gam.
- Điện áp làm việc: từ 3.5 đến 8.5 Volt.
- Dòng điện cung cấp: Dưới 1000 mA.
- Xung yêu cầu: xung vuông điện áp đỉnh từ 3 đến 5 Volt.
- Nhiệt độ hoạt động: từ 0 đến 60 0C.
- Góc quay: 1800.
- Sức kéo: 13kg/cm tại 4.8V và 15kg/cm tại 6V.
- Tốc độ quay: 0.17 sec/600 tại 4.8V và tại 6V 0.13 sec/600 (Chế độ không tải).

SVTH: Phan Phúc Hậu Trang 65


CHƯƠNG 4: XỬ LÝ ẢNH VÀ THIẾT KẾ GIAO DIỆN NGƯỜI DÙNG

CHƯƠNG 4: XỬ LÝ ẢNH VÀ THIẾT KẾ GIAO DIỆN NGƯỜI DÙNG

4.1 Xử lý ảnh

4.1.1 Giới thiệu về hệ thống xử lý ảnh


Xử lý ảnh là một lĩnh vực mang tính khoa học và công nghệ. Nó là một ngành
khoa học còn khá mới so với nhiều ngành khoa học khác nhưng tốc độ phát triển của
nó rất nhanh, kích thích các trung tâm nghiên cứu, ứng dụng, đặc biệt là máy tính
riêng chuyên dụng cho nó ngày càng đa dạng và mở rộng.
Con người thu nhận thông tin qua các giác quan, trong đó thị giác đóng vai trò
quan trọng nhất. Những năm trở lại đây nhờ sự phát triển của phần cứng máy tính
làm cho xử lý ảnh phát triển một cách mạnh mẽ và có nhiều ứng dụng trong cuộc
sống. Dự đoán trong tương lai xử lý ảnh sẽ đóng vai trò quan trọng trong ngành sản
xuất chế tạo Robot công nghiệp.
Quá trình xử lý ảnh nhằm tăng cường chất lượng ảnh hoặc trích xuất một số
thông tin hữu ích ảnh đầu vào. Quá trình xử lý ảnh là quá trình thao tác trên ảnh đầu
vào nhằm cho ra kết quả mong muốn, kết quả có thể là hình ảnh hoặc đặc điểm, tính
năng liên kết với hình ảnh đó.

Hình 4.1:Quá trình xử lý ảnh


Để dễ tưởng tượng, xét các bước cần thiết trong xử lý ảnh. Đầu tiên, ảnh tự
nhiên ở thế giới ngoài được thu thập 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, dướ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 ảnh số tiếp
theo (máy ảnh số hiện nay là một ví dụ gần gũi). Mặc khác, ảnh cũ có thể được tiếp
nhận từ vệ tinh, có thể quét từ ảnh chụp của máy quét ảnh.

SVTH: Phan Phúc Hậu Trang 66


CHƯƠNG 4: XỬ LÝ ẢNH VÀ THIẾT KẾ GIAO DIỆN NGƯỜI DÙNG

Hình 4.2: Các bước cơ bản trong xử lý ảnh


Sơ đồ này bao gồm các thành phần sau:
- Phần thu nhận ảnh (Image Acquisition): Ảnh có thể nhận qua camera màu
hoặc đen trắng. Thường ảnh 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), cũng có loại camera đã số hoá (như loại
CCD – Change Coupled Device) là loại photodiot tạo 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
một ảnh thu nhận được phụ thuộc vào thiết bị thu, và vào môi trường ánh sáng.
- Tiền xử lý (Image Processing): Sau bộ thu nhận, ảnh có thể nhiễu độ tương
phản thấp nên cần đưa vào bộ tiền xử lý để nâng cao chất lượng. Chức năng chính
của bộ tiền xử lý là lọc nhiễu, nâng độ tương phản để làm ảnh rõ hơn, nét hơn.
- Phân đoạn ảnh (Image Segmentation): Phân vùng ảnh 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ụ: để nhận
dạng chữ (hoặc mã vạch) trên phong bì thư cho mục đích phân loại bưu phẩm, cần
chia các câu, chữ về địa chỉ hoặc tên người thành các từ, các chữ, các số (hoặc các
vạch) riêng biệt để 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. Kết quả nhận dạng ảnh phụ thuộc
rất nhiều vào công đoạn này.
- Biểu diễn ảnh (Image Representation): Đầu ra ảnh sau 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 với 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 Selection) 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
định lượng hoặc làm cơ sở để phân biệt lớp đối tượng này với đối tượng khác trong

SVTH: Phan Phúc Hậu Trang 67


CHƯƠNG 4: XỬ LÝ ẢNH VÀ THIẾT KẾ GIAO DIỆN NGƯỜI DÙNG

phạm vi ảnh nhận được. Ví dụ: trong nhận dạng ký tự trên phong bì thư, 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.
- Nhận dạng và nội suy ảnh (Image Recognition and Interpretation): Nhận
dạng ảnh là quá trình xác định ảnh. Quá trình này thường 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. Có nhiều cách phân loại ảnh khác nhau về ảnh nhưng 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 là nhận dạng theo tham số hoặc nhận dạng theo cấu trúc.
- Cơ sở tri thức (Knowledge Base): Ả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 cũng khá phong phú
kéo theo xuất hiện nhiễu. Trong nhiều khâu xử lý và phân tích ảnh thì ngoài việc làm
đơ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
mong muốn bắt chước 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 đã xử lý theo các phương pháp trí tuệ
con người. Vì vậy, ở đây các cơ sở tri thức được phát huy.

4.1.2 Sơ lượt về quá trình xử lý ảnh trong đề tài


Xử lý ảnh là phần quan trọng nhất trong đề tài, vì nó liên quan đến hầu hết các
quá trình của Robot từ xác định vùng làm việc của Robot cho đến xác định vị trí, màu
sắc và hình dạng cho từng sản phẩm. Xử lý ảnh cũng được xem như là thị giác của
Robot vì nhờ có xử lý ảnh mà Robot có thể dễ dàng thực hiện phân loại sản phẩm.
Trong đề tài “Thiết kế và chế tạo mô hình Robot Scara phân loại sản phẩm
theo màu sắc và hình dạng” thì xử lý ảnh được chia thành các quá trình như sau:
- Thu nhận ảnh đầu vào: Ảnh đầu vào được thu nhận bằng camera.
- Tìm vùng hoạt động: Quá trình này sẽ tiến hành nhận dạng vùng hoạt động của
Robot và sau đó trích xuất ảnh của vùng đã nhận dạng được dựa trên ảnh đầu vào.
- Xác định sản phẩm cần phân loại: Quá trình này sẽ tiến hành phân đoạn và trích
xuất ảnh của từng sản phẩm dựa trên ảnh của vùng hoạt động
- Xử lý màu sắc và hình dạng: Quá trình này sẽ nhận dạng màu sắc và hình dạng
cho từng sản phẩm dựa trên ảnh của sản phẩm đó.

SVTH: Phan Phúc Hậu Trang 68


CHƯƠNG 4: XỬ LÝ ẢNH VÀ THIẾT KẾ GIAO DIỆN NGƯỜI DÙNG

- Kết quả: Cuối cùng sau khi nhận diện sẽ đưa ra những thông số cần thiết về sản
phẩm như: vị trí, màu sắc và hình dạng.

Hình 4.3: Sơ đồ quá trình xử lý ảnh trong đề tài

4.1.3 Thu nhận ảnh đầu vào


Để cung cấp dữ liệu ảnh đầu vào cho các ứng dụng xử lý ảnh thì chúng ta cần
phải camera, để lựa chọn camera thì ta phải xét đến các thông số như: độ phân giải,
số điểm ảnh, điều kiện hoạt động của thiết bị,… tùy theo môi trường thực tế và yêu
cầu của hệ thống có thể lựa chọn các loại camera khác nhau.
Đối với đề tài của em để cho hệ thống có thể nhận dạng chính xác màu sắc và
hình dạng của sản phẩm thì em đã chọn Webcam HD C270 Logitech với độ phân giải
tối đa là 720p/30fps đáp ứng được những yêu cầu đặt ra của đề tài.

Hình 4.4: Webcam logitech HD C270

SVTH: Phan Phúc Hậu Trang 69


CHƯƠNG 4: XỬ LÝ ẢNH VÀ THIẾT KẾ GIAO DIỆN NGƯỜI DÙNG

4.1.4 Xác định vùng hoạt động của Robot


Để có thể xác định được vùng hoạt động của Robot thì ta cần tìm những thông
số liên quan đến vùng hoạt động như: tọa độ (x1,y1), chiều cao (H) và độ rộng (W).
Qua hình(4.5) ta thấy rằng: H = x3 - x1 và W = y3 - y1 cho nên để xác định được
vùng hoạt động của Robot ta chỉ cần xác định được tọa độ (x1,y1) và (x3,y3).

Hình 4.5: Kích thước vùng hoạt động


Do nhận thấy vùng hoạt động của Robot và camera đều được đặt cố định cho
nên để xác định được tọa độ (x1,y1) và tọa độ (x3,y3) của vùng hoạt động thì phương
pháp được em lựa chọn là dùng giấy dán màu đỏ để đánh dấu hai điểm vừa nói trên,
sau đó ứng dụng xử lý ảnh màu sắc để tìm ra vị trí của chúng. Đây là phương pháp
đơn giản nhưng lại có được độ chính xác rất cao. Để hiểu rõ hơn thì dưới đây là quá
trình xác định vùng hoạt động của Robot:

Hình 4.6:Ảnh quá trình xác định vùng hoạt động của Robot

SVTH: Phan Phúc Hậu Trang 70


CHƯƠNG 4: XỬ LÝ ẢNH VÀ THIẾT KẾ GIAO DIỆN NGƯỜI DÙNG

Hình 4.7: Sơ đồ quá trình tìm vùng hoạt động của Robot
Kết quả:

Hình 4.8: Vùng hoạt động của Robot

SVTH: Phan Phúc Hậu Trang 71


CHƯƠNG 4: XỬ LÝ ẢNH VÀ THIẾT KẾ GIAO DIỆN NGƯỜI DÙNG

4.1.5 Phân vùng ảnh và tách sản phẩm

4.1.5.1 Nhị phân ảnh


Đầu tiên ta phải chuẩn hóa kích thước vùng hoạt động vừa tìm được thành một
kích thước chuẩn (500x600). Sau đó, để có thể phân vùng cho ảnh thì ta cần phải thực
hiện nhị phân ảnh. Quá trình nhị phân ảnh được thực hiện như sau:

Hình 4.9: Sơ đồ quá trình nhị phân ảnh

Hình 4.10: Ảnh quá trình nhị phân ảnh

4.1.5.2 Phân vùng ảnh


Sau khi đã nhị phân ảnh thì ta tiến hành phân vùng, đây là một bước quan trọng
trong xử lý ảnh. Quá trình này nhằm tách đối tượng phẩm ra khỏi vùng, đối tượng
được tách ra trong quá trình phân vùng có thể được xử lý trong các hệ thống đếm số
lượng, nhận dạng màu, nhận dạng hình dạng,...

SVTH: Phan Phúc Hậu Trang 72


CHƯƠNG 4: XỬ LÝ ẢNH VÀ THIẾT KẾ GIAO DIỆN NGƯỜI DÙNG

Hình 4.11: Sơ đồ giải thuật phân vùng và tách đối tượng


Kết quả:

Hình 4.12: Ảnh kết quả của quá trình phân vùng

SVTH: Phan Phúc Hậu Trang 73


CHƯƠNG 4: XỬ LÝ ẢNH VÀ THIẾT KẾ GIAO DIỆN NGƯỜI DÙNG

4.1.6 Nhận dạng đối tượng


Sau khi tách đối tượng ra khỏi vùng hoạt động thì ta bắt đầu nhận dạng màu sắc
và hình dạng của từng đối tượng.

4.1.6.1 Nhận dạng màu sắc


Để nhận dạng màu sắc cho đối tượng thì đầu tiên ta cần nhị phân ảnh của đối
tượng đó theo từng màu. Sau đó, ta sẽ so sánh tổng số pixel trắng và tổng số pixel
đen trong ảnh nhị phân, nếu tổng số pixel trắng nhiều hơn thì ta xác định được màu
của đối tượng.

Hình 4.13: Giải thuật quá trình nhận dạng màu sắc

SVTH: Phan Phúc Hậu Trang 74


CHƯƠNG 4: XỬ LÝ ẢNH VÀ THIẾT KẾ GIAO DIỆN NGƯỜI DÙNG

Hình 4.14:Ảnh nhị phân từng màu của vật


Kết quả:

Hình 4.15: Ảnh kết quả của quá trình nhận dạng màu sắc

4.1.6.2 Nhận dạng hình dạng


Để nhận dạng hình dạng cho đối tượng thì đầu tiên ta cần tính độ tròn của đối
tượng đó, sau đó so sánh độ tròn vừa tính được với độ tròn lý tưởng của hình cần
nhận dạng. Để tính được độ tròn thì ta sử dụng công thức: 𝑇 = 4𝜋𝑆/𝑃2 , với điều
kiện lý tưởng thì hình tròn luôn có T = 1, còn hình vuông luôn có T = 0,785.
Ngoài ra, Matlab còn hỗ trợ hàm imfindcircles để giúp chúng ta có thể xác
định được hình tròn có bán kính nhất định.

SVTH: Phan Phúc Hậu Trang 75


CHƯƠNG 4: XỬ LÝ ẢNH VÀ THIẾT KẾ GIAO DIỆN NGƯỜI DÙNG

Hình 4.16: Giải thuật quá trình nhận dạng hình dạng
Kết quả:

Hình 4.17: Ảnh kết quả của quá trình nhận dạng hình dạng

SVTH: Phan Phúc Hậu Trang 76


CHƯƠNG 4: XỬ LÝ ẢNH VÀ THIẾT KẾ GIAO DIỆN NGƯỜI DÙNG

4.1.7 Kết quả của quá trình xử lý ảnh


Kết quả của quá trình xử lý ảnh là đưa ra những thông số cần thiết về đối tượng
như: vị trí, màu sắc, hình dạng. Từ những thông số này thông qua giao diện người
dùng thì máy tính sẽ tính toán và truyền tín hiệu điều khiển xuống cho mạch điều
khiển.

Hình 4.18: Ảnh kết quả của quá trình nhận dạng màu sắc và hình dạng

4.2 Thiết kế giao diện người dùng


Để có thể thực hiện xử lý, tính toán các tín hiệu truyền về từ camera và truyền
tín hiệu điều khiển từ máy tính sang cho mạch điều khiển thì ta cần phải thiết lập giao
diện người dùng để có thể thực hiện những việc đó. Trong đề tài, giao diện người
dùng được em thiết kế như sau:
- Một Axes: Dùng hiển thị ảnh từ camera và hình ảnh đã xử lý xong.
- Nút CONNECT: Dùng để giao tiếp cổng COM.
- Bảng động học Robot (Robot Kinematics):
+ Các edit text d1, theta2, theta3: Dùng để nhập và hiển thị thông số khớp.
+ Các edit text PX, PY, PZ: Dùng để nhập và hiển thị tọa độ điểm cuối.
+ Nút Forward: Tính động học thuận (nhận số liệu từ d1, theta2, theta3 tính toán
ra tọa độ điểm cuối PX, PY, PZ).
+ Nút Reverse: Tính động học ngược (nhận số liệu từ PX, PY, PZ tính toán ra tọa
các thông số khớp d1, theta2, theta3).

SVTH: Phan Phúc Hậu Trang 77


CHƯƠNG 4: XỬ LÝ ẢNH VÀ THIẾT KẾ GIAO DIỆN NGƯỜI DÙNG

+ Nút RESET: Cho Robot trở về vị trí ban đầu (d1 = 0; theta2 = 0; theta3 = 0).
- Nhóm các nút thiết lập:
+ Nút ON CAM: Dùng để bật camera.
+ Nút OFF CAM: Dùng để tắt camera
+ Nút SET CAM: Dùng để tìm và thiết lập vùng hoạt động của Robot.
+ Nút RED: Bật và tắt phân loại màu đỏ.
+ Nút GREEN: Bật và tắt phân loại màu xanh lá.
+ Nút BLUE: Bật và tắt phân loại màu xanh dương.
+ Nút CIRCLE: Bật và tắt phân loại hình tròn.
+ Nút SQUARE: Bật và tắt phân loại hình vuông.
+ Nút OK: Xác nhận thiết lập thuộc tính.

Hình 4.19: Giao diện người dùng điều khiển Robot Scara
- Nút RGB1, RGB2, RGB3: Là 3 chế độ hoạt động của Robot.
+ RGB1: Gắp và phân loại tất cả các sản phẩm trong vùng hoạt động.
+ RGB2: Gắp và phân loại các sản phẩm trong vùng hoạt động theo một thuộc
tính hoặc là màu sắc hoặc là hình dạng được chọn.
+ RGB3: Gắp và phân loại các sản phẩm trong vùng hoạt động theo hai thuộc tính
màu sắc và hình dạng được chọn

SVTH: Phan Phúc Hậu Trang 78


CHƯƠNG 5: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN

CHƯƠNG 5: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN

5.1 Kết quả

5.1.1 Kết quả mô phỏng trên Matlab Simulink


Mô hình hóa Robot Scara trên Matlab Simulink từ mô hình thiết kế 3D:

Hình 5.1: Mô hình hóa Robot Scara trên Matlab Simulink


Mô hình 3D mô phỏng trên Matlab Simulink

Hình 5.2: Mô hình 3D khi mô phỏng trên Matlab Simulink

SVTH: Phan Phúc Hậu Trang 79


CHƯƠNG 5: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN

5.1.2 Kết quả thực tế của mô hình Robot Scara

5.1.2.1 Kết quả thực nghiệm PID từng khớp


Sau khi áp dụng các phương pháp xác định thông số của bộ điều khiển PID được
nêu ở chương 2 và tiến hành thử thực nghiệm trên động cơ DC thì em đã xác định
được thông số PID cho từng khớp như sau:
 Khớp 1: Thông số PID được hiệu chỉnh qua thực nghiệm như sau:
KP =7.5; KI=0.17; KD = 0.045

Hình 5.3: Kết quả chạy thực nghiệm PID trên khớp 1
Nhận xét: Kết quả đạt được không sai lệch quá nhiều so với giá trị đặt, số
mm thu được sau khi hoàn tất quá trình là 64,04 mm so với giá trị đặt ban đầu là
64mm , tốc độ đáp ứng của động cơ tương đối nhanh và ổn định.
 Khớp 2: Thông số PID được hiệu chỉnh qua thực nghiệm như sau:
KP =7.5; KI=0.17; KD = 0.04

Hình 5.4: Kết quả chạy thực nghiệm PID trên khớp 2

SVTH: Phan Phúc Hậu Trang 80


CHƯƠNG 5: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN

Nhận xét: Kết quả đạt được không sai lệch quá nhiều so với giá trị đặt, số
độ thu được sau khi hoàn tất quá trình là 45,36 độ so với giá trị đặt ban đầu là
45 độ, tốc độ đáp ứng của động cơ tương đối nhanh và ổn định.
 Khớp 3: Thông số PID được hiệu chỉnh qua thực nghiệm như sau:
KP =7.5; KI=0.18; KD = 0.045

Hình 5.5: Kết quả chạy thực nghiệm PID trên khâu 3
Nhận xét: Kết quả đạt được không sai lệch quá nhiều so với giá trị đặt, số
độ thu được sau khi hoàn tất quá trình là 45,29 độ so với giá trị đặt ban đầu là
45 độ, tốc độ đáp ứng của động cơ tương đối nhanh và ổn định.

5.1.2.2 Kết quả thực tế của tay gắp


Để có thể gắp và thả vật thì ta không ta bỏ qua hoạt động của tay gắp. Dưới đây
là những hình ảnh về hoạt động của tay gắp trong thực tế.

Hình 5.6: Tay gắp thực hiện gắp vật Hình 5.7: Tay gắp thực hiện thả vật

SVTH: Phan Phúc Hậu Trang 81


CHƯƠNG 5: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN

5.1.2.3 Kết quả thực tế động học của Robot Scara


Để đánh giá được tính ổn định và độ chính xác của Robot thì ta tiến hành chạy
thực tế động học thuận và động học ngược của Robot.
 Động học thuận
Nhập các thông số ban đầu như sau: d1 = 64; theta2 = 45; theta3 = 45.

Hình 5.8: Kết quả chạy thực tế động học thuận của Robot Scara
 Động học ngược
Nhập các thông số ban đầu như sau: PX = 300; PY = 100; PZ = 50.

Hình 5.9: Kết quả chạy thực tế động học ngược của Robot Scara
Nhận xét: Thông qua việc chạy thực tế động học thuận và động học ngược
nhiều lần trên mô hình thì em nhận thấy rằng: mô hình hoạt động tương đối ổn định,
tốc độ đáp ứng của động cơ nhanh, các giá trị thông số khớp và vị trí của tay gắp đạt
đúng giá trị đã đặt ban đầu.

SVTH: Phan Phúc Hậu Trang 82


CHƯƠNG 5: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN

5.1.3 Kết quả chạy thực tế của mô hình Robot Scara phân loại sản phẩm

5.1.3.1 Phân loại sản phẩm theo màu sắc


 Trường hợp các vật đều là hình tròn

Hình 5.10: Kết quả nhận dạng màu sắc các vật hình tròn

SVTH: Phan Phúc Hậu Trang 83


CHƯƠNG 5: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN

Hình 5.11: Quá trình phân loại màu sắc các vật hình tròn của Robot Scara
 Trường hợp các vật đều là hình vuông

Hình 5.12: Kết quả nhận dạng màu sắc các vật hình vuông

SVTH: Phan Phúc Hậu Trang 84


CHƯƠNG 5: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN

Hình 5.13: Quá trình phân loại màu sắc các vật hình vuông của Robot Scara

5.1.3.2 Phân loại sản phẩm theo hình dạng


 Trường hợp các vật đều là màu đỏ

Hình 5.14: Kết quả nhận dạng hình dạng các vật màu đỏ

SVTH: Phan Phúc Hậu Trang 85


CHƯƠNG 5: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN

Hình 5.15: Quá trình phân loại hình dạng các vật màu đỏ của Robot Scara
 Trường hợp các vật đều là màu xanh lá

Hình 5.16: Kết quả nhận dạng hình dạng các vật màu xanh lá

SVTH: Phan Phúc Hậu Trang 86


CHƯƠNG 5: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN

Hình 5.17: Quá trình phân loại hình dạng các vật màu xanh lá của Robot Scara

 Trường hợp các vật đều là màu xanh dương

Hình 5.18: Kết quả nhận dạng hình dạng các vật màu xanh dương

SVTH: Phan Phúc Hậu Trang 87


CHƯƠNG 5: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN

Hình 5.19: Quá trình phân loại hình dạng các vật màu xanh dương của Robot Scara

5.1.3.3 Phân loại sản phẩm theo màu sắc và hình dạng

Hình 5.20: Kết quả nhận dạng màu sắc và hình dạng của tất cả các vật

SVTH: Phan Phúc Hậu Trang 88


CHƯƠNG 5: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN

SVTH: Phan Phúc Hậu Trang 89


CHƯƠNG 5: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN

Hình 5.21: Quá trình phân loại màu sắc và hình dạng của Robot Scara

5.2 Đánh giá


- Khả năng nhận dạng màu sắc từ quá trình xử lý ảnh là hoàn toàn ổn định và
chính xác cho cả ba màu đỏ, xanh lá và xanh dương.
- Khả năng nhận dạng hình dạng từ quá trình xử lý ảnh là tương đối chính xác,
do vẫn còn xuất hiện những trường hợp không nhận dạng được hình dạng của sản
phẩm chủ yếu là hình vuông. Nhưng tỷ lệ xảy ra trường hợp này thấp nên có thể tạm
chấp nhận được.
- Giải thuật điều khiển PID tốt, đáp ứng nhanh và sai số thấp dưới 1 %.
- Mô hình thiết kế cơ khí Robot hoạt động tương đối ổn định.
- Robot vận hành tốt gắp và thả vật chính xác đúng vị trí đã đặt ban đầu.

5.3 Kết luận


Đề tài cơ bản đã hoàn thành được các nhiệm vụ được giao ban đầu, xây dựng
được chương trình điều khiển hoàn chỉnh cho một mô hình Robot phân loại sản phẩm
theo màu sắc và hình dạng thông qua giao diện người dùng. Tuy nhiên, vẫn không

SVTH: Phan Phúc Hậu Trang 90


CHƯƠNG 5: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN

khỏi nhiều thiếu sót, xảy ra các vấn đề chưa giải quyết như: quá trình xử lý ảnh còn
phụ thuộc vào độ sáng môi trường, nhiễu sáng, dẫn đến kết quả phân tích còn sai sót.

5.3.1 Kết quả đạt được


- Xây dựng thành công phương trình động học thuận và động học ngược cho
Robot.
- Thiết kế hoàn chỉnh mô hình 3D trên phần mềm Autodesk Inventor.
- Mô phỏng thành công mô hình Robot Scara trên Matlab Simulink.
- Chế tạo thành công mô hình Robot Scara thực tế.
- Xây dựng được sơ đồ mạch điều khiển cho Robot.
- Áp dụng giải thuật PID điều khiển vị trí cho động cơ DC.
- Giao tiếp cổng COM thành công cho máy tính với Arduino.
- Giao tiếp I2C giữa các board Arduino với nhau.
- Thiết kế được giao diện người dùng trên phần mềm Matlab.
- Xác định được vị trí, màu sắc, hình dạng của sản phẩm thông qua camera.
- Hoàn thành phân loại sản phẩm theo màu sắc: màu đỏ, xanh lá và xanh dương.
- Hoàn thành phân loại sản phẩm theo theo hình dạng: hình tròn và hình vuông.
- Robot Scara vận hành tốt, gắp và thả vật chính xác đúng vị trí đã đặt ban đầu.

5.3.2 Những hạn chế của đề tài


- Do sai sót trong quá trình thiết kế và chế tạo nên khâu tịnh tiến của Robot khi
hoạt động sinh ra tiếng ồn.
- Khi điều khiển với tốc độ nhanh sẽ xảy ra hiện tượng giật lắc.
- Đề tài chỉ dừng lại ở việc phân loại được các màu sắc và hình dạng cơ bản.

5.4 Hướng phát triển


- Cải tiến mô hình cơ khí cứng vững hơn và chọn động cơ có công suất cao hơn
để giúp cho Robot vận hành tốt hơn, ít sai số và gắp được các vật nặng.
- Cải tiến khả năng nhận dạng sản phẩm, để có thể nhận dạng được nhiều màu
sắc và hình dạng hơn.
- Thiết kế bộ điều khiển cánh tay đi theo một quỹ đạo mong muốn trong không
gian làm việc.

SVTH: Phan Phúc Hậu Trang 91


CHƯƠNG 5: KẾT QUẢ VÀ HƯỚNG PHÁT TRIỂN

- Sử dụng các bộ điều khiển thông minh như: điều khiển trượt, điều khiển luật
mờ, điều khiển động lực học ngược, trí thông minh nhân tạo,… để tạo ra cánh tay di
chuyển có độ chính xác cao, tối ưu hóa năng lượng, tuyến tính hóa tính phi tuyến của
cánh tay.
- Ứng dụng xử lý ảnh, nhận dạng xác định tọa độ đối tượng từ đó ra lệnh điều
khiển cánh tay bám theo đối tượng.
- Nghiên cứu các giải thuật về xử lý ảnh sâu hơn, để lọc và khử các nhiễu nâng
cao độ chính xác trong xử lý ảnh với camera chất lượng thấp, thuận tiện cho việc
nghiên cứu.
- Kết hợp thêm Robot di chuyển đa hướng dưới đế Robot nhằm nâng cao khả
năng cơ động, ứng dụng hơn nữa trong nhiều lĩnh vực khác nhau.

SVTH: Phan Phúc Hậu Trang 92


TÀI LIỆU THAM KHẢO

TÀI LIỆU THAM KHẢO


[1]. Ts.Ngô Quang Hiếu, PGS Ts. Nguyễn Chí Ngôn (2016), Giáo trình kỹ thuật
Robot, Nhà xuất bản đại học Cần Thơ, Cần Thơ.
[2]. Nguyễn Thị Phương Hà (2005), Lí thuyết điều khiển tự động, Nhà xuất bản đại
học quốc gia TP.Hồ Chí Minh, TP.Hồ Chí Minh.
[3]. Ts.Nguyễn Ngọc Phương (2004), Hướng dẫn thiết kế và lắp ráp Robot, Nhà
xuất
bản Đà Nẵng, TP Hồ Chí Minh.
[4]. Hồ Văn Sung, Xử lý ảnh số - Lý thuyết và thực hành với Matlab (2009),
Nhà xuất bản Khoa học và Kỹ thuật.
[5]. Nguyễn Quang Hoan, Giáo trình Xử lý ảnh (Năm 2006), Học viện công
nghệ bưu chính viễn thông.
[6]. Trương Tấn Thành, Trần Chí Nguyện, Thiết kế và chế tạo mô hình Robot Scara
phân loại sản phẩm (2019), Đại học Kỹ thuật – Công nghệ Cần Thơ.
[7]. “ Điều khiển cánh tay Robot phân loại vật theo màu sắc”. Một số đề tài luận
văn tốt nghiệp Đại học Bách khoa thành phố Hồ Chí Minh.

Các website tham khảo:


[8]. https://ch.mathworks.com/Matlabcentral/answers/325725-sending-values-fromMatlab-
to-Arduino-using-serial-communication
[9]. https://circuitdigest.com/microcontroller-projects/serial-communicationbetween-
Matlab-and-Arduino
[10]. https://www.quora.com/How-can-I-send-MATLAB-data-strings-to-Arduino
[11]. http://Arduino.vn/bai-viet/1053-giao-tiep-i2c-voi-nhieu-module
[12]. https://project.makerbox.vn/2018/05/02/chia-se-cach-dieu-khien-pid-thuat-toan-pid/
[13]. https://vutienblog.com/lap-trinh-Matlab-gui-lam-quen-giao-dien-gui-trong-Matlab/
[14]. https://www.mathworks.com/Matlabcentral/fileexchange/37611-color-detection

SVTH: Phan Phúc Hậu Trang 93


PHỤ LỤC

PHỤ LỤC
 Code Master
#include <Servo.h>
#include <Wire.h>
#define SERVO_PIN 9
Servo gServo;
int servoAVal servoBVal servoCVal;
void setup() {
gServo.attach(SERVO_PIN);
Wire.begin();
Serial.begin(9600); //initialize serial comunication
}
void loop() {
while (Serial.available () > 2) { //Check if the serial data is available.
delay(20);
char serialRead = Serial.read ();
if (serialRead == 'a') {
servoAVal = Serial.parseInt ();
Serial.print(servoAVal);
int16_t bigNum = servoAVal;
byte myArray[2];
myArray[0] = (bigNum >> 8) &0xFF;
myArray[1] = bigNum &0xFF;
Wire.beginTransmission(2); // Transmit to device #8
Wire.write(myArray, 2);
Wire.endTransmission(); // Stop transmitting
}
if (serialRead == 'b') {
servoBVal = Serial.parseInt ();
Serial.print(servoBVal);

SVTH: Phan Phúc Hậu Trang 94


PHỤ LỤC

int16_t bigNum = servoBVal;


byte myArray[2];
myArray[0] = (bigNum >> 8) &0xFF;
myArray[1] = bigNum &0xFF;
Wire.beginTransmission(3); // Transmit to device #8
Wire.write(myArray, 2);
Wire.endTransmission(); // Stop transmitting
}
if (serialRead == 'c') {
servoCVal = Serial.parseInt ();
Serial.print(servoCVal);
int16_t bigNum = servoCVal;
byte myArray[2];
myArray[0] = (bigNum >> 8) &0xFF;
myArray[1] = bigNum &0xFF;
Wire.beginTransmission(4); // Transmit to device #8
Wire.write(myArray, 2);
Wire.endTransmission(); // Stop transmitting
}
if (serialRead == 'o') {
gServo.write(170);
}
if (serialRead == 'f') {
gServo.write(80);
}
}
}
 Code Slave
#include <Wire.h>
#include <PID_v1.h>

SVTH: Phan Phúc Hậu Trang 95


PHỤ LỤC

#define MotEnable 6 //Motor Enamble pin Runs on PWM signal


#define MotFwd 4 // Motor Forward pin
#define MotRev 7 // Motor Reverse pin
int16_t bigNum;
int encoderPin1 = 2; //Encoder Output 'A' must connected with intreput pin of
Arduino.
int encoderPin2 = 3; //Encoder Otput 'B' must connected with intreput pin of
Arduino.
volatile int lastEncoded = 0; // Here updated value of encoder store.
volatile long encoderValue = 0; // Raw encoder value
int REV = 0; // Set point REQUIRED ENCODER VALUE
int lastMSB = 0; int lastLSB = 0;
double kp = 7.5 , ki = 0.18 , kd = 0.045 ; // Modify for optimal performance
double input = 0, output = 0, setpoint = 0;
PID myPID(&input, &output, &setpoint, kp, ki, kd, DIRECT);
void setup() {
Wire.begin(3);
Wire.onReceive(receiveEvent);
pinMode(MotEnable, OUTPUT);
pinMode(MotFwd, OUTPUT);
pinMode(MotRev, OUTPUT);
Serial.begin(9600); //Initialize serial comunication
pinMode(encoderPin1, INPUT_PULLUP);
pinMode(encoderPin2, INPUT_PULLUP);
digitalWrite(encoderPin1, HIGH); //Turn pullup resistor on
digitalWrite(encoderPin2, HIGH); //Turn pullup resistor on
//Call updateEncoder() when any high/low changed seen
//on interrupt 0 (pin 2), or interrupt 1 (pin 3)
attachInterrupt(0, updateEncoder, CHANGE);
attachInterrupt(1, updateEncoder, CHANGE);

SVTH: Phan Phúc Hậu Trang 96


PHỤ LỤC

TCCR1B = TCCR1B &0b11111000 | 1;


myPID.SetMode(AUTOMATIC); //Set PID in Auto mode
myPID.SetSampleTime(1); // Refresh rate of PID controller
myPID.SetOutputLimits(-175, 175); // This is the MAX PWM value to move
motor, here change in value reflect change in speed of motor.
}
void loop(){
while (Wire.available()) {
byte a,b;
a = Wire.read();
b = Wire.read();
bigNum = a;
bigNum = bigNum << 8 | b;
}
REV = map (bigNum, 0, 360, 0, 9360); // Mapping degree into pulse
Serial.print("This is REV - ");
Serial.println(REV); // printing REV value
setpoint = REV; //PID while work to achive this value consider as SET
value
input = encoderValue ; // Data from encoder consider as a Process value
Serial.println("encoderValue- ");
Serial.println(encoderValue);
myPID.Compute(); // Calculate new output
pwmOut(output);
}
// Drive motor CW
void receiveEvent(int howMany) {}
void pwmOut(int out) {
if (out > 0) { // if REV > encoderValue motor move in forward direction.
analogWrite(MotEnable, out);

SVTH: Phan Phúc Hậu Trang 97


PHỤ LỤC

digitalWrite(MotFwd, HIGH);
digitalWrite(MotRev, LOW);
}
else { // if REV < encoderValue motor move in reverse direction.
analogWrite(MotEnable, abs(out));
digitalWrite(MotFwd, LOW);
digitalWrite(MotRev, HIGH);
}
}
void updateEncoder(){
int MSB = digitalRead(encoderPin1); //MSB = most significant bit
int LSB = digitalRead(encoderPin2); //LSB = least significant bit
int encoded = (MSB << 1) |LSB; //converting the 2 pin value to single number
int sum = (lastEncoded << 2) | encoded; //adding it to the previous encoded value
if(sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011)
encoderValue ++;
if(sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000)
encoderValue --;
lastEncoded = encoded; //store this value for next time
}
 Code Matlab GUIDE
function varargout = GUIDE_LV(varargin)
%GUIDE_LV MATLAB code file for GUIDE_LV.fig
% GUIDE_LV, by itself, creates a new GUIDE_LV or raises the existing
% singleton*.
% H = GUIDE_LV returns the handle to a new GUIDE_LV or the handle to
% the existing singleton*.
% GUIDE_LV('Property','Value',...) creates a new GUIDE_LV using the
% given property value pairs. Unrecognized properties are passed via
% varargin to GUIDE_LV_OpeningFcn. This calling syntax produces a

SVTH: Phan Phúc Hậu Trang 98


PHỤ LỤC

% warning when there is an existing singleton*.


% GUIDE_LV('CALLBACK') and GUIDE_LV('CALLBACK',hObject,...) call
the
% local function named CALLBACK in GUIDE_LV.M with the given input
% arguments.
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help GUIDE_LV
% Last Modified by GUIDE v2.5 25-Jun-2020 07:21:30
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @GUIDE_LV_OpeningFcn, ...
'gui_OutputFcn', @GUIDE_LV_OutputFcn, ...
'gui_LayoutFcn', [], ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% --- Executes just before GUIDE_LV is made visible.


function GUIDE_LV_OpeningFcn(hObject, eventdata, handles, varargin)

SVTH: Phan Phúc Hậu Trang 99


PHỤ LỤC

% This function has no output args, see OutputFcn.


% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin unrecognized PropertyName/PropertyValue pairs from the
% command line (see VARARGIN)
% Choose default command line output for GUIDE_LV
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes GUIDE_LV wait for user response (see UIRESUME)
% uiwait(handles.figure1);
global s;
global connect;
global l1 l2 l3;
l1 = 200; l2 = 185; l3 = 180;
connect = 0;
if (strcmp(get(s,'Status'),'open'))
fclose(s);
end
set(handles.pumPorts,'Enable','on');
delete(s);
s = serial('COM1');
set(handles.pumPorts,'String',getAvailableComPort);

% --- Outputs from this function are returned to the command line.
function varargout = GUIDE_LV_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB

SVTH: Phan Phúc Hậu Trang 100


PHỤ LỤC

% handles structure with handles and user data (see GUIDATA)


% Get default command line output from handles structure
varargout{1} = handles.output;

% --- Executes during object deletion, before destroying properties.


function figure1_DeleteFcn(hObject, eventdata, handles)
% hObject handle to figure1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global s;
global myCam;
if (strcmp(get(s,'Status'),'open'))
fclose(s);
end
delete(s);
clear all;

% --- Executes on selection change in pumPorts.


function pumPorts_Callback(hObject, eventdata, handles)
% hObject handle to pumPorts (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns pumPorts contents as cell


array
% contents{get(hObject,'Value')} returns selected item from pumPorts

% --- Executes during object creation, after setting all properties.


function pumPorts_CreateFcn(hObject, eventdata, handles)
% hObject handle to pumPorts (see GCBO)

SVTH: Phan Phúc Hậu Trang 101


PHỤ LỤC

% eventdata reserved - to be defined in a future version of MATLAB


% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% --- Executes during object creation, after setting all properties.


function figure1_CreateFcn(hObject, eventdata, handles)
% hObject handle to figure1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% --- Executes during object creation, after setting all properties.

% --- Executes on button press in Connect.


function Connect_Callback(hObject, eventdata, handles)
% hObject handle to Connect (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global s;
global connect;
if connect == 0
connect = 1;
set(handles.Connect,'String','DISCONNECT');
set(handles.Connect,'BackgroundColor','[0 0 1]');
set(handles.pumPorts,'Enable','off');
portList = get(handles.pumPorts,'String');
portIndex = get(handles.pumPorts,'Value');

SVTH: Phan Phúc Hậu Trang 102


PHỤ LỤC

port = portList(portIndex,:);
set (s,'Port',char(port));
fopen (s);
else if connect == 1
connect = 0;
set(handles.Connect,'String','CONNECT');
set(handles.Connect,'BackgroundColor','[1 0 0]');
set(handles.pumPorts,'Enable','on');
try
fclose(s);
catch
portList = get(handles.pumPorts,'String');
portIndex = get(handles.pumPorts,'Value');
port = portList(portIndex,:);
fclose (s);
end end end

function d1_Callback(hObject, eventdata, handles)


% hObject handle to d1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of d1 as text
% str2double(get(hObject,'String')) returns contents of d1 as a double

% --- Executes during object creation, after setting all properties.


function d1_CreateFcn(hObject, eventdata, handles)
% hObject handle to d1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.

SVTH: Phan Phúc Hậu Trang 103


PHỤ LỤC

% See ISPC and COMPUTER.


if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function theta2_Callback(hObject, eventdata, handles)


% hObject handle to theta2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of theta2 as text
% str2double(get(hObject,'String')) returns contents of theta2 as a double

% --- Executes during object creation, after setting all properties.


function theta2_CreateFcn(hObject, eventdata, handles)
% hObject handle to theta2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function theta3_Callback(hObject, eventdata, handles)


% hObject handle to theta3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of theta3 as text

SVTH: Phan Phúc Hậu Trang 104


PHỤ LỤC

% str2double(get(hObject,'String')) returns contents of theta3 as a double

% --- Executes during object creation, after setting all properties.


function theta3_CreateFcn(hObject, eventdata, handles)
% hObject handle to theta3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function px_Callback(hObject, eventdata, handles)


% hObject handle to px (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of px as text
% str2double(get(hObject,'String')) returns contents of px as a double

% --- Executes during object creation, after setting all properties.


function px_CreateFcn(hObject, eventdata, handles)
% hObject handle to px (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))

SVTH: Phan Phúc Hậu Trang 105


PHỤ LỤC

set(hObject,'BackgroundColor','white');
end

function py_Callback(hObject, eventdata, handles)


% hObject handle to py (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of py as text
% str2double(get(hObject,'String')) returns contents of py as a double

% --- Executes during object creation, after setting all properties.


function py_CreateFcn(hObject, eventdata, handles)
% hObject handle to py (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function pz_Callback(hObject, eventdata, handles)


% hObject handle to pz (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of pz as text
% str2double(get(hObject,'String')) returns contents of pz as a double

% --- Executes during object creation, after setting all properties.

SVTH: Phan Phúc Hậu Trang 106


PHỤ LỤC

function pz_CreateFcn(hObject, eventdata, handles)


% hObject handle to pz (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% --- Executes on button press in dht.


function dht_Callback(hObject, eventdata, handles)
% hObject handle to dht (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global s;
global l1 l2 l3;
d1 = get(handles.d1,'String');
theta2 = get(handles.theta2,'String');
theta3 = get(handles.theta3,'String');
fprintf(s , 'ff');
fprintf(s , 'a'); fprintf(s , d1); pause(2)
fprintf(s , 'b'); fprintf(s , theta2);
fprintf(s , 'c'); fprintf(s , theta3);
d1 = str2num(d1);
theta2 = str2num(theta2);
theta3 = str2num(theta3);
T1 = [1 0 0 l3 ; 0 1 0 0 ; 0 0 1 d1 ; 0 0 0 1];

SVTH: Phan Phúc Hậu Trang 107


PHỤ LỤC

T2 = [cosd(theta2) -sind(theta2) 0 l1*cosd(theta2) ; sind(theta2) cosd(theta2) 0


l1*sind(theta2) ; 0 0 1 0 ; 0 0 0 1];
T3 = [cosd(theta3) -sind(theta3) 0 l2*cosd(theta3) ; sind(theta3) cosd(theta3) 0
l2*sind(theta3) ; 0 0 1 0 ; 0 0 0 1];
T = T1*T2*T3;
px = T(1,4); py = T(2,4); pz = T(3,4);
set(handles.px,'String',num2str(round(px,2)));
set(handles.py,'String',num2str(round(py,2)));
set(handles.pz,'String',num2str(round(pz,2)));

% --- Executes on button press in dhn.


function dhn_Callback(hObject, eventdata, handles)
% hObject handle to dhn (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global s;
global l1 l2 l3;
px = get(handles.px,'String');
py = get(handles.py,'String');
pz = get(handles.pz,'String');
px = str2num(px)-l3;
py = str2num(py);
d1 = str2num(pz);
c3 = (px^2+py^2-l1^2-l2^2)/(2*l1*l2); s3 = sqrt(1-(c3)^2);
theta3 = atan2d(s3,c3);
denta = px^2+py^2;
denta1 = l1*px+l2*(px*c3+py*s3);
denta2 = l1*py+l2*(py*c3-px*s3);
c2 = denta1/denta; s2 = denta2/denta;
theta2 = atan2d(s2,c2);

SVTH: Phan Phúc Hậu Trang 108


PHỤ LỤC

fprintf(s , 'ff');
fprintf(s , 'a'); fprintf(s , num2str(d1)); pause(2)
fprintf(s , 'b'); fprintf(s , num2str(theta2));
fprintf(s , 'c'); fprintf(s , num2str(theta3));
set(handles.d1,'String',num2str(round(d1,2)));
set(handles.theta2,'String',num2str(round(theta2,2)));
set(handles.theta3,'String',num2str(round(theta3,2)));

% --- Executes on button press in reset.


function reset_Callback(hObject, eventdata, handles)
% hObject handle to reset (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global s;
global l1 l2 l3;
fprintf(s , 'b'); fprintf(s , '0'); fprintf(s , 'c'); fprintf(s , '0'); pause(1)
fprintf(s , 'a'); fprintf(s , '0');
fprintf(s , 'oo');
set(handles.d1,'String',0);
set(handles.theta2,'String',0);
set(handles.theta3,'String',0);
set(handles.px,'String',l1+l2+l3);
set(handles.py,'String',0);
set(handles.pz,'String',0);

function axes1_CreateFcn(hObject, eventdata, handles)


% hObject handle to axes1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: place code in OpeningFcn to populate axes1

SVTH: Phan Phúc Hậu Trang 109


PHỤ LỤC

% --- Executes on button press in oncam.


function oncam_Callback(hObject, eventdata, handles)
% hObject handle to oncam (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global myCam;
axes(handles.axes1);
myCam = videoinput('winvideo',1);
set(myCam,'ReturnedColorSpace','rgb');
triggerconfig(myCam,'manual');
set(myCam,'FramesPerTrigger',1 );
set(myCam,'TriggerRepeat', Inf);
myCam.FrameGrabInterval = 3;
hImage = image(zeros(576, 1024,3),'parent',handles.axes1);
preview(myCam,hImage);

% --- Executes on button press in offcam.


function offcam_Callback(hObject, eventdata, handles)
% hObject handle to offcam(see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global myCam;
if (strcmp(get(myCam,'Running'),'on'))
flushdata(myCam);
stop(myCam);
else
imaqreset;
end
cla(handles.axes1,'reset');

SVTH: Phan Phúc Hậu Trang 110


PHỤ LỤC

% --- Executes on button press in setcam.


function setcam_Callback(hObject, eventdata, handles)
% hObject handle to setcam (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global myCam;
global X Y;
axes(handles.axes1);
X = []; Y = []; i = 0;
rgb = getsnapshot(myCam);
im = imsubtract(rgb(:,:,1), rgb2gray(rgb));
im = medfilt2(im, [3 3]);
im = im2bw(im,0.15);
% Remove all those pixels less than 250px
im = bwareaopen(im,250);
% Label all the connected components in the image.
bw = bwlabel(im, 8);
% Here we do the image blob analysis.
% We get a set of properties for each labeled region.
L = regionprops(bw, 'all');
for n = 1:length(L)
W = L(n).BoundingBox(3);
H = L(n).BoundingBox(4);
S = L(n).Area;
if H/W > 0.5 && H/W < 2
if S >500 && S< 650
if S/(W*H)>0.5 && S/(W*H)<=1
i = i+1;
X(i) = L(n).Centroid(1);

SVTH: Phan Phúc Hậu Trang 111


PHỤ LỤC

Y(i) = L(n).Centroid(2);
end end end end
imshow(rgb);
hold on
delete(findall(gcf,'Type', 'Rectangle'));
rectangle('Position',[X(1) Y(1) X(length(X))-X(1) Y(length(Y))-
Y(1)],'EdgeColor','w','LineWidth',2);
rectangle('Position',[X(1)+(X(length(X))-X(1))/2-20 Y(1) 40 Y(length(Y))-
Y(1)],'EdgeColor','w','LineWidth',2);
hold off

--- Executes on button press in rgb.


function rgb_Callback(hObject, eventdata, handles)
% hObject handle to rgb (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global myCam;
global s;
global l1 l2 l3;
global X Y ;
axes(handles.axes1);
cX = []; cY = []; Color = []; Shape = []; i = 0;
rgb = getsnapshot(myCam);
img = imcrop(rgb,[X(1) Y(1) X(length(X))-X(1) Y(length(Y))-Y(1)]);
img = imresize(img,[500 600]);
gray = rgb2gray(img);
gray = imadjust(gray);
bw = im2bw(gray,0.25);
% Remove all those pixels less than 250px
bw = bwareaopen(bw,250);

SVTH: Phan Phúc Hậu Trang 112


PHỤ LỤC

% Label all the connected components in the image.


label = bwlabel(bw, 8);
% Here we do the image blob analysis.
% We get a set of properties for each labeled region.
vat = regionprops(label, 'all');
imshow(img);
hold on;
for n = 1:length(vat)
W = vat(n).BoundingBox(3);
H = vat(n).BoundingBox(4);
S = vat(n).Area;
P = vat(n).Perimeter;
if H/W > 0.5 && H/W < 2
if S > 500 && S < 1500
if S/(W*H) > 0.5 && S/(W*H) <= 1
i = i+1;
S = vat(n).Area
cX(i) = vat(n).Centroid(1);
cY(i) = vat(n).Centroid(2);
imvat = imcrop(img,vat(n).BoundingBox);
T = (4*pi*S)/(P*P);
[c,r] = imfindcircles
(imvat,[9 21],'ObjectPolarity','bright','Sensitivity',0.9);
%RED
imRed = imsubtract(imvat(:,:,1), rgb2gray(imvat));
imRed = medfilt2(imRed, [3 3]);
imRed = im2bw(imRed,0.13);
WRed = sum (imRed (:));
BRed = sum (~ imRed (:));
%GREEN

SVTH: Phan Phúc Hậu Trang 113


PHỤ LỤC

imGreen = imsubtract(imvat(:,:,2), rgb2gray(imvat));


imGreen = medfilt2(imGreen, [3 3]);
imGreen = im2bw(imGreen,0.03);
WGreen = sum (imGreen (:));
BGreen = sum (~ imGreen (:));
%BLUE
imBlue = imsubtract(imvat(:,:,3), rgb2gray(imvat));
imBlue = medfilt2(imBlue, [3 3]);
imBlue = im2bw(imBlue,0.08);
WBlue = sum (imBlue (:));
BBlue = sum (~ imBlue (:));
if WRed > BRed
plot(cX(i),cY(i),'r+');
text(cX(i)+25, cY(i)-12, strcat('X: ', num2str(round(cY(i)))),'Color','r');
text(cX(i)+25, cY(i)+12, strcat('Y: ',
num2str(round(cX(i)-290))),'Color','r');
if (length(c) > 0) || (T > 0.9 && T < 1.1)
Color(i) = 'R';
Shape(i) = 'O';
viscircles([cX(i) cY(i)],r,'EdgeColor','r');
end
if ((T > 0.65 && T < 0.85) || (vat(n).Extent > 0.7)) && (length(c) == 0)
Color(i) = 'R';
Shape(i) = 'X';
rectangle('Position',vat(n).BoundingBox,'EdgeColor','r','LineWidth',2);
end
end
if WGreen > BGreen
plot(cX(i),cY(i),'g+');
text(cX(i)+25, cY(i)-12, strcat('X: ',

SVTH: Phan Phúc Hậu Trang 114


PHỤ LỤC

num2str(round(cY(i)))),'Color','g');
text(cX(i)+25, cY(i)+12, strcat('Y: ',
num2str(round(cX(i)-290))),'Color','g');
if (length(c) > 0) || (T > 0.9 && T < 1.1)
Color(i) = 'G';
Shape(i) = 'O';
viscircles([cX(i) cY(i)],r,'EdgeColor','g');
end
if ((T > 0.65 && T < 0.85) || (vat(n).Extent > 0.7)) && (length(c) == 0)
Color(i) = 'G';
Shape(i) = 'X';
rectangle('Position',vat(n).BoundingBox,'EdgeColor','g','LineWidth',2);
end
end
if WBlue > BBlue
plot(cX(i),cY(i),'b+');
text(cX(i)+25, cY(i)-12, strcat('X: ', num2str(round(cY(i)))),'Color','b');
text(cX(i)+25, cY(i)+12, strcat('Y: ',
num2str(round(cX(i)-290))),'Color','b');
if (length(c) > 0) || (T > 0.9 && T < 1.1)
Color(i) = 'B';
Shape(i) = 'O';
viscircles([cX(i) cY(i)],r,'EdgeColor','b');
end
if ((T > 0.65 && T < 0.85) || (vat(n).Extent > 0.7)) && (length(c) == 0)
Color(i) = 'B';
Shape(i) = 'X';
rectangle('Position',vat(n).BoundingBox,'EdgeColor','b','LineWidth',2);
end end end end end end
hold off

SVTH: Phan Phúc Hậu Trang 115


PHỤ LỤC

fprintf(s , 'ff');
fprintf(s , 'a'); fprintf(s , '70'); pause(2)
for j = 1:i
px = cY(j)-l3; py = cX(j)-290; pz = 0; d1 = pz;
c3 = (px^2+py^2-l1^2-l2^2)/(2*l1*l2); s3 = sqrt(1-(c3)^2);
theta3 = atan2d(s3,c3);
denta = px^2+py^2;
denta1 = l1*px+l2*(px*c3+py*s3);
denta2 = l1*py+l2*(py*c3-px*s3);
c2 = denta1/denta; s2 = denta2/denta;
theta2 = atan2d(s2,c2);
set(handles.d1,'String',num2str(round(d1,2)));
set(handles.theta2,'String',num2str(round(theta2,2)));
set(handles.theta3,'String',num2str(round(theta3,2)));
set(handles.px,'String',num2str(round(cY(j),2)));
set(handles.py,'String',num2str(round(py,2)));
set(handles.pz,'String',num2str(round(pz,2)));
if Color(j) == 'R' && Shape(j) == 'O'
fprintf(s , 'b'); fprintf(s , num2str(theta2));
fprintf(s , 'c'); fprintf(s , num2str(theta3)); pause(3)
fprintf(s , 'a'); fprintf(s , '0'); pause(2)
fprintf(s , 'oo'); pause(1)
fprintf(s , 'a'); fprintf(s , '70'); pause(2)
fprintf(s , 'b'); fprintf(s , '40');
fprintf(s , 'c'); fprintf(s , '30'); pause(3)
fprintf(s , 'ff'); pause(1)
end
if Color(j) == 'G' && Shape(j) == 'O'
fprintf(s , 'b'); fprintf(s , num2str(theta2));
fprintf(s , 'c'); fprintf(s , num2str(theta3)); pause(3)

SVTH: Phan Phúc Hậu Trang 116


PHỤ LỤC

fprintf(s , 'a'); fprintf(s , '0'); pause(2)


fprintf(s , 'oo'); pause(1)
fprintf(s , 'a'); fprintf(s , '70'); pause(2)
fprintf(s , 'b'); fprintf(s , '37');
fprintf(s , 'c'); fprintf(s , '66'); pause(3)
fprintf(s , 'ff'); pause(1)
end
if Color(j) == 'B' && Shape(j) == 'O'
fprintf(s , 'b'); fprintf(s , num2str(theta2));
fprintf(s , 'c'); fprintf(s , num2str(theta3)); pause(3)
fprintf(s , 'a'); fprintf(s , '0'); pause(2)
fprintf(s , 'oo'); pause(1)
fprintf(s , 'a'); fprintf(s , '70'); pause(2)
fprintf(s , 'b'); fprintf(s , '49');
fprintf(s , 'c'); fprintf(s , '77'); pause(3)
fprintf(s , 'ff'); pause(1)
end
if Color(j) == 'R' && Shape(j) == 'X'
fprintf(s , 'b'); fprintf(s , num2str(theta2));
fprintf(s , 'c'); fprintf(s , num2str(theta3)); pause(3)
fprintf(s , 'a'); fprintf(s , '0'); pause(2)
fprintf(s , 'oo'); pause(1)
fprintf(s , 'a'); fprintf(s , '70'); pause(2)
fprintf(s , 'b'); fprintf(s , '-40');
fprintf(s , 'c'); fprintf(s , '-30'); pause(3)
fprintf(s , 'ff'); pause(1)
end
if Color(j) == 'G' && Shape(j) == 'X'
fprintf(s , 'b'); fprintf(s , num2str(theta2));
fprintf(s , 'c'); fprintf(s , num2str(theta3)); pause(3)

SVTH: Phan Phúc Hậu Trang 117


PHỤ LỤC

fprintf(s , 'a'); fprintf(s , '0'); pause(2)


fprintf(s , 'oo'); pause(1)
fprintf(s , 'a'); fprintf(s , '70'); pause(2)
fprintf(s , 'b'); fprintf(s , '-37');
fprintf(s , 'c'); fprintf(s , '-66'); pause(3)
fprintf(s , 'ff'); pause(1)
end
if Color(j) == 'B' && Shape(j) == 'X'
fprintf(s , 'b'); fprintf(s , num2str(theta2));
fprintf(s , 'c'); fprintf(s , num2str(theta3)); pause(3)
fprintf(s , 'a'); fprintf(s , '0'); pause(2)
fprintf(s , 'oo'); pause(1)
fprintf(s , 'a'); fprintf(s , '70'); pause(2)
fprintf(s , 'b'); fprintf(s , '-49');
fprintf(s , 'c'); fprintf(s , '-77'); pause(3)
fprintf(s , 'ff'); pause(1)
end
end
fprintf(s , 'b'); fprintf(s , '0');
fprintf(s , 'c'); fprintf(s , '0'); pause(3)
fprintf(s , 'a'); fprintf(s , '0');
fprintf(s , 'oo');
set(handles.d1,'String',0);
set(handles.theta2,'String',0);
set(handles.theta3,'String',0);
set(handles.px,'String',l1+l2+l3);
set(handles.py,'String',0);
set(handles.pz,'String',0);

SVTH: Phan Phúc Hậu Trang 118

You might also like