0% found this document useful (0 votes)
1K views108 pages

robot 3 bậc DR3

đồ án môn học

Uploaded by

Minh Hoàng
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
1K views108 pages

robot 3 bậc DR3

đồ án môn học

Uploaded by

Minh Hoàng
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 108

BỘ GIÁO DỤC & ĐÀO TẠO

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HỒ CHÍ


MINH
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN TỰ ĐỘNG ĐIỀU KHIỂN
----------------------------------

ĐỒ ÁN MÔN HỌC

ĐỀ TÀI: THIẾT KẾ MÔ HÌNH CÁNH TAY


ROBOT BA BẬC TỰ DO

GVHD: TS. Nguyễn Văn Thái MSSV:


SVTH: Nguyễn Đức Anh Quân 20151408
Nguyễn Viết Nhật Long 20151060

Tp. Hồ Chí Minh tháng 10 năm 2023


GVHD : Nguyễn Văn Thái

Mụ c lụ c
Lời cảm ơn.............................................................................................................................1
Chương 1. TỔNG QUAN ĐỀ TÀI....................................................................................2
1.1 Định hướng cho đề tài:............................................................................................2
1.2 Mục tiêu đề tài :.......................................................................................................2
1.3 Đối tượng và phạm vi nghiên cứu :.........................................................................3
Chương 2. Tổng quan về phần mềm và cơ sở lý thuyết....................................................4
2.1 Ngôn ngữ C# trong lập trình giao diện điều khiển :................................................4
2.2 Phần mềm lập trình ARDUINO IDE......................................................................4
2.2.1 Arduino IDE.....................................................................................................4
2.2.2 Arduino IDE hoạt động như thế nào?..............................................................4
2.2.3 Lý do nên sử dụng Arduino IDE......................................................................5
2.2.4 Thư viện hỗ trợ phong phú...............................................................................5
2.3 Tổng quan về phần mềm Matlab.............................................................................5
2.3.1 Giới thiệu phần mềm Matlab...........................................................................5
2.3.2 Hệ thống Matlab...............................................................................................6
2.3.3 Tính năng của Matlab......................................................................................7
2.3.4 Ứng dụng của Matlab.......................................................................................7
2.4 Tạo giao diện điều khiển trên matlab bằng tool Design app...................................8
2.5 Tổng quan về phần mềm SolidWork.......................................................................9
2.5.1 Phần mềm SOLIDWORKS.............................................................................9
2.5.2 Lịch sử hình thành và phát triển của phần mềm SOLIDWORKS.................10
2.5.3 Chức năng phần mềm SOLIDWORKS.........................................................10
2.5.4 Tính năng của SOLIDWORKS......................................................................11
2.5.5 Ưu điểm của phần mềm SOLIDWORKS :....................................................13
2.6 Phần mềm thiết kế 2D bằng AutoCad :.................................................................14
2.6.1 Phần mềm AutoCAD là gì?...........................................................................14
2.6.2 Nguồn gốc của phần mềm AutoCAD :..........................................................15
2.6.3 Ứng dụng phần mềm AutoCAD vào đời sống :.............................................15
2.7 Đặt trục cho robot 3 bậc tự do...............................................................................17
2.8 Tính toán động học thuận :.....................................................................................18
2.8.1 Động học thuận :............................................................................................18
2.8.2 Tính toán động học thuận :............................................................................18
2.9 Tính toán động học nghịch :..................................................................................19

2.9.1 Tính toán góc :...........................................................................................19


GVHD : Nguyễn Văn Thái

2.9.2 Tính toán :..................................................................................................20

2.9.3 Tính toán :..................................................................................................22


2.10 Không gian làm việc :........................................................................................22
2.10.1 Xác định không gian làm việc của robot........................................................22
2.11 Quy hoạch quỹ đạo :..........................................................................................23
2.11.1 Lý thuyết về quy hoạch quỹ đạo :..................................................................23
2.11.2 Vận tốc hình thang:........................................................................................25
2.11.3 Đa thức (Polynomial).....................................................................................25
2.11.4 Quy hoạch quỹ đạo robot 3 bậc dùng đa thức bậc 3......................................26
2.11.5 Quy hoạch quỹ đạo theo đường thẳng...........................................................27
2.11.6 Quy hoạch quỹ đạo theo hình tam giác..........................................................28
Chương 3. Thi công và kiểm chứng mô phỏng................................................................30
3.1 Thiết bị lựa chọn :..................................................................................................30
3.1.1 Động cơ bước Nema 17 Planetary Gear Step Motor 57/11...........................30
3.1.2 Động cơ bước Nema 17.................................................................................31
3.1.3 Pulley GT2.....................................................................................................32
3.1.4 Pulley GT2 60 răng trục 8mm........................................................................34
3.1.5 Vòng đai GT2.................................................................................................35
3.1.6 Vòng bi KFL08..............................................................................................35
3.1.7 Bạc đạn...........................................................................................................36
3.1.8 Mặt bích:........................................................................................................37
3.1.9 Công tắc hành trình 5E4 10T125 loại có bánh xe..........................................39
3.1.10 Trụ đồng Hex-M3 cái cái 15mm....................................................................40
3.1.11 Trụ nhựa Hex-M3 cái cái 40mm....................................................................41
3.1.12 Ống ruột gà:...................................................................................................41
3.1.13 Arduino Uno..................................................................................................41
3.1.14 Arduino Shield CNC V3................................................................................42
3.1.15 Mạch điều khiển động cơ bước A4988..........................................................43
3.1.16 Hộp dây điện:................................................................................................44
3.1.17 Ốc vít:.............................................................................................................45
3.1.18 Dây điện:........................................................................................................46
3.1.19 Máng dây điện................................................................................................46
3.2 Mô phỏng với robot thực từ SolidWork :..............................................................47
3.2.1 Chuyển robot từ SolidWork sang Matlab thông qua Simscape Multibody
Link : 47
3.3 Xây dựng giao diện điều khiển bằng matlab và mô phỏng...................................49
3.4 Xây dựng giao diện điều khiển trên mô hình thực với Window Forms App:.......60
GVHD : Nguyễn Văn Thái

Chương 4. Thiết kế thi công và kết quả thực nghiệm......................................................75


4.1 Thiết kế cơ khí :.....................................................................................................75
4.2 Thi công cánh tay robot :.......................................................................................80
4.3 Thiết kế mạch điện cho cánh tay robot :................................................................82
4.4 Thực nghiệm kiểm chứng robot :..........................................................................83
4.4.1 Kiểm chứng động học thuận :........................................................................83
4.4.2 Kiểm chứng động học nghịch cho robot :......................................................87
Chương 5. Kết luận và hướng phát triển..........................................................................93
5.1 Kết quả đạt được :.................................................................................................93
5.2 Hạn chế của đề tài :...............................................................................................93
5.3 Hướng phát triển :..................................................................................................93
PHỤ LỤC CÁC CHƯƠNG TRÌNH MATLAB VÀ ARDUINO........................................94
Chương trình tính toán động học thuận bằng matlab:......................................................94
Chương trình tính toán động học nghịch bằng matlab:....................................................94
Chương trình Code cho arduino :.....................................................................................95
GVHD : Nguyễn Văn Thái

Mục lục hình ảnh


Hình 2-1 Phần mềm Matlab 5
Hình 2-2 Giao diện phần mềm Matlab 6
Hình 2-3 Công cụ matlab 7
Hình 2-4 Giao diện Design App 8
Hình 2-5 Sản phẩm thiết kế của SOLIDWORKS 8
Hình 2-6 Mô phỏng trong SOLIDWORKS 10
Hình 2-7 Khả năng thiết kế mô hình 3D hoàn hảo của SolidWork 11
Hình 2-8 Giao diện của SOLIDWORKS 12
Hình 2-9 Phần mềm AutoCAD 13
Hình 2-10 Trong gần 40 năm phát triển, AutoCAD sở hữu 31 phiên bản đã được cho ra
mắt từ lần phát hành đầu tiên vào năm 1982. 14
Hình 2-11 AutoCAD được sử dụng chủ yếu trong lĩnh vực xây dựng. 15
Hình 2-12 AutoCAD được sử dụng hiệu quả trong lĩnh vực Kỹ thuật Cơ khí 15
Hình 2-13 Đặt trục cho robot ba bậc tự do 16
Hình 2-14 Không gian làm việc của robot 22
Hình 2-15 Quy hoạch chuyển động (Motion planning) 23
Hình 2-16 Quy hoạch quỹ đạo cho robot 23
Hình 2-17 Vận tốc hình thang 24
Hình 2-18 Quy hoạch đa thức 25
Hình 2-19 Lưu đồ giải thuật từ điểm đến điểm 27
Hình 2-20 Sơ đồ giải thuật quy hoạch quỹ đạo tam giác 28
Hình 3-1 Động cơ bước Nema 17 Planetary Gear 30
Hình 3-2 Động cơ bước Nema 17 31
Hình 3-3 Pulley GT2 16 răng trục 5mm 31
Hình 3-4 Pulley GT2 20 răng trục 8mm 32
Hình 3-5 Pulley GT2 60 răng trục 8mm 33
Hình 3-6 Vòng đai GT2 dài 400mm 34
Hình 3-7 Vòng bi KFL08 35
Hình 3-8 Bạc đạn 36
Hình 3-9 Mặt bích 37
Hình 3-10 Ròng rọc GT2 trục 5mm 38
Hình 3-11 Limit switch 38
Hình 3-12 Trụ đồng Hex-M3 15mm 39
Hình 3-13 Trụ nhựa Hex-M3 40mm 40
Hình 3-14 Ống soắn ruột gà 40
GVHD : Nguyễn Văn Thái

Hình 3-15 Arduino Uno 41


Hình 3-16 Arduino Shield CNC V3 42
Hình 3-17 Mạch điều khiển A4988 43
Hình 3-18 Hộp nhựa 44
Hình 3-19 Ốc, tán lục giác các loại 44
Hình 3-20 Dây điện các loại 45
Hình 3-21 Máng nhựa đi dây điện 46
Hình 3-22 Chuyển robot từ SolidWork sang Matlab thông qua Simscape Multibody Link :
46
Hình 3-23 Đóng gói robot lại thành một khối SubSystem 47
Hình 3-24 mô phỏng để xem kết quả mà robot bằng cơ khí 47
Hình 3-25 Góc khớp thứ 2 là góc 90 độ để kiểm chứng 48
Hình 3-26 Robot cơ khí quay góc khớp thứ 2 là góc 90 độ 48
Hình 3-27 Giao diện điều khiển mô phỏng trên Design App - Matlab 49
Hình 3-28 Chọn vào image trên toolbox 50
Hình 3-29 Chạy chương trình điều khiển 50
Hình 3-30 Chèn chữ vào trong label 51
Hình 3-31 Chọn vào Menu Bar trên toolbox 52
Hình 3-32 Giao diện chính điều khiển 52
Hình 3-33 Thoát chương trình 53
Hình 3-34 Chuyển trang chương trình 54
Hình 3-35 Giao diện điều khiển chính 54
Hình 3-36 Khởi động chương trình mô phỏng 55
Hình 3-37 Mô phỏng động học thuận trường hợp 1 55
Hình 3-38 Mô phỏng động học thuận trường hợp 2 56
Hình 3-39 Mô phỏng động học thuận trường hợp 3 56
Hình 3-40 Mô phỏng động học nghịch trường hợp 1 57
Hình 3-41 Mô phỏng động học nghịch trường hợp 1 57
Hình 3-42 Mô phỏng động học nghịch trường hợp 1 58
Hình 3-43 Quy hoạch quỹ đạo cho robot 58
Hình 3-44 biểu đồ đường màu xanh thể hiện đường thẳng mà quỹ đạo robot đi qua 59
Hình 3-45 Trạng thái cuối của robot 59
Hình 3-46 Window Forms App 60
Hình 3-47 Giao diện đăng nhập thiếu tài khoản và mật khẩu 61
Hình 3-48 Giao diện khi nhập sai tài khoản hoặc mật khẩu 61
Hình 3-49 Chọn PictireBox trên thanh toolbox 62
Hình 3-50 Thay đổi thuộc tính của PictureBox 62
GVHD : Nguyễn Văn Thái

Hình 3-51 Xuất ảnh lên PictureBox 63


Hình 3-52 Giao diện điều khiển chính 63
Hình 3-53 Cổng kết nối SerialPort 64
Hình 3-54 Chọn ComboBox trên thanh Toolbox 64
Hình 3-55 Chọn GroupBox trên thanh toolbox 65
Hình 3-56 Chọn TrackBar trên thanh toolbox 65
Hình 3-57 Thay đổi thuộc tính thanh TrackBar 66
Hình 3-58 Phải cài đặt thuộc tính “Mouse Move” thanh trackbar 66
Hình 3-59 Khi cổng Serial chưa được kết nối 70
Hình 4-1 Bản vẽ SolidWork phần đế 74
Hình 4-2 Bản vẽ AutoCad phần đế 75
Hình 4-3 Bản vẽ SolidWork phần link 1 76
Hình 4-4 Bản vẽ AutoCad phần link 1 76
Hình 4-5 Bản vẽ SolidWork phần link 2 77
Hình 4-6 Bản vẽ AutoCad phần link 2 78
Hình 4-7 Bản vẽ SolidWork phần link 3 78
Hình 4-8 Bản vẽ AutoCad phần link 3 79
Hình 4-9 Robot hoàn thiện trên SolidWork 79
Hình 4-10 Cánh tay robot khi nhìn từ phải 80
Hình 4-11 Cánh tay robot khi nhìn từ trên xuống 80
Hình 4-12 Cánh tay robot khi nhìn từ trong ra 81
Hình 4-13 Cánh tay robot khi nhìn từ trước vào 81
Hình 4-14 Bản vẽ mạch điện sử dụng cho robot 82
Hình 4-15 Set Home khi điều khiển robot 83
Hình 4-16 Vị trí robot khi sethome 83
Hình 4-17 Trường hợp 1 động học thuận robot 84
Hình 4-18 Vị trí robot ở trường hợp 1 84
Hình 4-19 Trường hợp 2 động học thuận robot 85
Hình 4-20 Vị trí robot ở trường hợp 2 85
Hình 4-21 Trường hợp 3 động học thuận robot 86
Hình 4-22 Vị trí robot ở trường hợp 3 86
Hình 4-23 Trường hợp 1 và bộ nghiệm 1 động học nghịch robot 87
Hình 4-24 Trường hợp 2 và bộ nghiệm 2 động học nghịch robot 87
Hình 4-25 Vị trí robot ở trường hợp 1 88
Hình 4-26 Trường hợp 2 và bộ nghiệm 1 động học nghịch robot 88
Hình 4-27 Trường hợp 2 và bộ nghiệm 2 động học nghịch robot 89
GVHD : Nguyễn Văn Thái

Hình 4-28 Vị trí robot ở trường hợp 2 89


Hình 4-29 Vị trí robot ở trường hợp 2 90
Hình 4-30 Trường hợp 3 và bộ nghiệm 1 động học nghịch robot 90
Hình 4-31 Trường hợp 3 và bộ nghiệm 2 động học nghịch robot 91
Hình 4-32 Vị trí robot ở trường hợp 3 91
GVHD : Nguyễn Văn Thái

Mục lục bảng


Bảng 2-1 Bảng thông số mô hình 16
Bảng 2-2 Bảng DH cho robot 17
Bảng 2-3 Giới hạn hoạt động của robot 22
Bảng 2-4 Ưu nhược điểm của các không gian sử dụng quy hoạch 23
Bảng 3-1 Bảng các thiết bị được sử dụng trong mô hình 29
Bảng 3-2 Thông số động cơ bước Nema 17 Planetary Gear Step Motor 57/11 29
Bảng 3-3 Thông số động cơ bước Nema 17 30
Bảng 3-4 Thông số kĩ thuật vòng bi KFL08 34
Bảng 3-5 Thông số kĩ thuật bạc đạn 35
Bảng 3-6 Thông số kĩ thuật mặt bích 36
Bảng 3-7 Thông số kĩ thuật ròng rọc 37
Bảng 3-8 Thông số kĩ thuật công tắc hành trình 5E4 10T125 loại có bánh xe 38
Bảng 3-9 Thông số kĩ thuật Arduino Uno R3 41
Bảng 3-10 Thông số kĩ thuật Arduino Shield CNC V3 42
Bảng 3-11 Thông số kĩ thuật mạch điều khiển động cơ bước A4988 42
Bảng 3-12 Thông số kĩ thuật hộp dây điện: 43
Bảng 4-1 Các vị trí kiểm nghiệm động học nghịch 91

− Lời cảm ơn

Kính gửi thầy Nguyễn Văn Thái


Em xin bày tỏ lòng biết ơn sâu sắc đối với môn học Kỹ thuật Robot. Em viết để bày
tỏ lòng cảm kích với những kiến thức, kỹ năng và trải nghiệm quý giá mà em đã thu được
trong suốt thời gian học môn này.
Sự tận tụy, chuyên môn và đam mê của thầy trong việc giảng dạy đã có một tác
động lớn đến sự hiểu biết và đánh giá của em về robot. Cách thầy trình bày các khái niệm
và lý thuyết phức tạp một cách rõ ràng và hấp dẫn thực sự đã giúp em nắm vững những
nguyên tắc cơ bản về hệ thống robot và ứng dụng của chúng.
Hơn nữa, các buổi thực hành thực tế và dự án đã cho phép em áp dụng kiến thức lý
thuyết vào ngữ cảnh thực tế. Cơ hội làm việc với các robot thực tế và tham gia vào các bài
tập giải quyết vấn đề đã rất quý giá trong việc nâng cao kỹ năng kỹ thuật của em và thấu
hiểu sâu hơn về chủ đề này.
Em cũng muốn ghi nhận môi trường học tập hỗ trợ mà thầy đã tạo ra trong lớp học.
Sự sẵn lòng trả lời câu hỏi, hướng dẫn và khuyến khích thảo luận đã góp phần lớn vào trải
nghiệm học tập tổng thể của em. Em cảm thấy thoải mái và được động viên để khám phá ý
tưởng mới và thách thức bản thân, nhờ sự hướng dẫn và khuyến khích của thầy.
GVHD : Nguyễn Văn Thái

Những kiến thức và kỹ năng em đã thu được trong môn học này chắc chắn sẽ có lợi
cho em trong các hoạt động học tập và nghề nghiệp tương lai. Em rất háo hức để áp dụng
những hiểu biết và kỹ thuật này trong lĩnh vực robot và đóng góp tích cực vào ngành đang
phát triển nhanh chóng này.
Một lần nữa, em xin bày tỏ lòng biết ơn chân thành với sự tận tụy, chuyên môn và
cống hiến của thầy trong việc giảng dạy môn học Kỹ thuật Robot. Em xin cảm ơn vì đã
truyền cảm hứng và hướng dẫn em trong hành trình học tập và khám phá này.
Trân trọng,
Nhóm Quân và Long
GVHD : Nguyễn Văn Thái

Chương 1. TỔNG QUAN ĐỀ TÀI

1.1 Định hướng cho đề tài:

Tình hình robot trên thế giới đang phát triển mạnh mẽ và đa dạng. Dưới đây là một
số xu hướng và tình hình chung về robot trên thế giới:
Robot công nghiệp: Robot công nghiệp tiếp tục được áp dụng rộng rãi trong các
ngành công nghiệp, bao gồm sản xuất ô tô, điện tử, y tế, dệt may và nhiều ngành công
nghiệp khác. Robot công nghiệp giúp tăng năng suất, cải thiện chất lượng và an toàn lao
động.
Robot dịch vụ: Robot dịch vụ đã có sự phát triển đáng kể trong các lĩnh vực như
khách sạn, nhà hàng, bệnh viện, giao thông và ngành du lịch. Các robot này có thể thực
hiện các nhiệm vụ như đón tiếp khách, phục vụ thức ăn, hướng dẫn du khách, chăm sóc
bệnh nhân và hỗ trợ trong các hoạt động dịch vụ khác.
Robot giáo dục: Robot đang được sử dụng trong giáo dục để hỗ trợ quá trình học tập.
Chúng có thể hướng dẫn, tương tác và cung cấp phương pháp học tương tác cho học sinh ở
mọi độ tuổi. Robot giáo dục có thể giúp nâng cao hiệu suất học tập và tạo ra môi trường
học tập thú vị.
Robot nông nghiệp: Sự phát triển của robot trong nông nghiệp giúp tự động hóa quy
trình canh tác, gieo hạt, thu hoạch và chăm sóc cây trồng. Robot nông nghiệp có thể giúp
nâng cao hiệu suất, sử dụng tài nguyên hiệu quả hơn và giảm sự phụ thuộc vào lao động.
Robot hội nhập xã hội: Robot hội nhập xã hội là robot được thiết kế để tương tác và
làm việc cùng con người trong các môi trường xã hội. Chúng có khả năng giao tiếp, nhận
diện khuôn mặt, di chuyển và thực hiện các tác vụ hỗ trợ.
Robot tự hành và trí tuệ nhân tạo (AI): Robot tự hành và trí tuệ nhân tạo đang phát
triển nhanh chóng. Các công nghệ như xe tự lái, robot dịch vụ tự động và hệ thống trí tuệ
nhân tạo ngày càng tiến bộ, mở ra những khả năng mới cho robot.
Tình hình robot trên thế giới đang tiếp tục phát triển và có vai trò quan trọng trong
nhiều ngành công nghiệp và lĩnh vực. Robot đang trở thành một phần không thể thiếu
trong cuộc sống hàng ngày và dự kiến sẽ tiếp tục phát triển và mở rộng ứng dụng trong
tương lai.
1.2 Mục tiêu đề tài :

− Biết cách thiết kế hệ thống trên phần mềm SolidWork.

− Vẽ được các bộ phận 2D trên phần mềm AutoCad.

− Tính toán được các phương trình động học của robot.

− Lựa chọn được các thiết bị phù hợp cho mô hình.

− Lập trình giao diện điều khiển bằng ngôn ngữ Csharp.net.

− Lập trình cho vi điều khiển arduino uno R3.


GVHD : Nguyễn Văn Thái

1.3 Đối tượng và phạm vi nghiên cứu :

− Tìm hiểu về cách gửi nhận dữ liệu từ c# và arduino thông qua truyền thông nối tiếp
UART.
− Thực hiện lắp ráp mô hình bằng vật liệu mica.

− Thiết lập chương trình điều khiển động cơ bước và ngoại vi thông qua arduino.
Điều khiển robot để kiểm chứng tính toán động học thuận và ngược.
GVHD : Nguyễn Văn Thái

Chương 2. Tổng quan về phần mềm và cơ sở lý

thuyết

2.1 Ngôn ngữ C# trong lập trình giao diện điều khiển :

C# hay còn được gọi với một cái tên khác là C Sharp, phát triển bởi tập đoàn
Microsoft và ra mắt vào năm 2000.
Có thể nói, C# là ngôn ngữ lập trình khá đơn giản, nằm trong nhóm những ngôn ngữ
hiện đại và có tính chất hướng đối tượng.
Nó kế thừa những ưu điểm nổi bật của hai ngôn ngữ lập trình mạnh nhất hiện nay,
C++ và Java. Bên cạnh đó, C# cũng được giới chuyên gia nhận định có sự cân bằng giữa
C++, Visual Basic, Java và cả Delphi.
Đối với những ứng dụng tạo ra từ .NET framework, mã nguồn chương trình sẽ biên
dịch sang Microsoft Intermediate Language (ngôn ngữ trung gian MSIL). Sau đó, nó cần
thông qua Common Language Runtime (CLR) để chương trình có thể chạy được trên hệ
điều hành.
Nhờ có sự hỗ trợ của .NET framework mà công việc tạo ra chương trình cho
Windows Form, WPF hay phát triển game, cũng như các ứng dụng web và mobile đã trở
nên dễ dàng, nhanh chóng hơn rất nhiều.
Windowns Forms là thuật ngữ mô tả một ứng dụng được viết dùng .NET
FrameWorrk và có giao diện người dùng Windows Forms (màn hình windows).
Mỗi màn hình windows cung cấp một giao diện giúp người dùng giao tiếp với ứng
dụng. Giao diện này được gọi là giao diện đồ họa (GUI) của ứng dụng.
Là các ứng dụng windows chạy trên máy tính - mã lệnh thực thi ngay trên máy
tính: Microsoft Word, Excel, Access, Calculator, Yahoo, Mail,... là các ứng dụng Windows
Forms.
2.2 Phần mềm lập trình ARDUINO IDE

2.2.1 Arduino IDE

Arduino IDE là một phần mềm với một mã nguồn mở, được sử dụng chủ yếu để viết
và biên dịch mã vào module Arduino. Nó bao gồm phần cứng và phần mềm. Phần cứng
chứa đến 300,000 board mạch được thiết kế sẵn với các cảm biến, linh kiện. Phần mềm
giúp bạn có thể sử dụng các cảm biến, linh kiện ấy của Arduino một cách linh hoạt phù
hợp với mục đích sử dụng.
Đây là một phần mềm Arduino chính thống, giúp cho việc biên dịch mã trở nên dễ
dàng, ngay cả một người bình thường không có kiến thức kỹ thuật cũng có thể làm được.
2.2.2 Arduino IDE hoạt động như thế nào?

Khi người dùng viết mã và biên dịch, IDE sẽ tạo file Hex cho mã. File Hex là các
file thập phân Hexa được Arduino hiểu và gửi đến bo mạch bằng cáp USB. Mỗi bo
GVHD : Nguyễn Văn Thái

Arduino đều được tích hợp một bộ vi điều khiển, bộ vi điều khiển sẽ nhận file Hex và chạy
theo mã được viết.
2.2.3 Lý do nên sử dụng Arduino IDE

Phần mềm lập trình mã nguồn mở miễn phí IDE trong Arduino IDE là phần có nghĩa
là mã nguồn mở. Nghĩa là phần mềm này miễn phí cả về phần tải về lẫn phần bản quyền.
Người dùng có quyền sửa đổi, cải tiến, phát triển, nâng cấp theo một số nguyên tắc chung
được nhà phát hành cho phép mà không cần xin phép ai, điều mà họ không được phép làm
đối với các phần mềm nguồn đóng.
Tuy là phần mềm mã nguồn mở nhưng khả năng bảo mật thông tin của Arduino IDE
là vô cùng tuyệt vời, khi phát hiện lỗi nhà phát hành sẽ vá nó và cập nhật rất nhanh khiến
thông tin của người dùng không bị mất hoặc rò rỉ ra bên ngoài.
Sử dụng ngôn ngữ lập trình C/C++ thân thiện với các lập trình viên Arduino IDE sử
dụng ngôn ngữ lập trình C/C++ rất phổ biến trong giới lập trình. Bất kỳ đoạn code nào của
C/C++ thì Arduino IDE đều có thể nhận dạng, giúp các lập trình viên thuận tiện trong việc
thiết kế chương trình lập cho các bo mạch Arduino.
Arduino có một module quản lý bo mạch, nơi người dùng có thể chọn bo mạch mà
họ muốn làm việc cùng và có thể thay đổi bo mạch thông qua Menu. Quá trình sửa đổi lựa
chọn cũng liên tục tự động cập nhật để các dữ liệu có sẵn trong bo mạch và dữ liệu sửa đổi
đồng nhất với nhau. Bên cạnh đó, Arduino IDE cũng giúp bạn tìm ra lỗi từ code mà bạn
viết, qua đó giúp bạn sửa lỗi kịp thời tránh tình trạng bo mạch Arduino làm việc với code
lỗi quá lâu dẫn đến hư hỏng hoặc tốc độ xử lý bị giảm sút.
2.2.4 Thư viện hỗ trợ phong phú

Arduino IDE tích hợp với hơn 700 thư viện, được viết và chia sẻ bởi nhà phát hành
Arduino Software và thành viên trong cộng đồng Arduino. Mọi người có thể tận dụng
chúng cho dự án của riêng mình mà không cần phải bỏ ra bất kỳ chi phí nào.
Giao diện đơn giản, dễ sử dụng Arduino IDE có một giao diện đơn giản, dễ sử dụng
giúp người dùng thuận tiện hơn trong thao tác. Dưới đây là một số tính năng chúng ta
thường sử dụng:
Nút kiểm tra chương trình (Verify): giúp dò lỗi phần code định truyền xuống bo
mạch Arduino.
Nút tải đoạn code vào bo mạch Arduino (Upload): giúp nhập đoạn code vào bo mạch
Arduino.
Vùng lập trình: người dùng sẽ viết chương trình tại khu vực này.
Thanh Menu: gồm những thẻ chức năng nằm trên cùng như File, Edit, Sketch, Tools,
Help.
2.3 Tổng quan về phần mềm Matlab

2.3.1 Giới thiệu phần mềm Matlab.

Matlab viết tắt của Matrix Laboratory, là một môi trường phần mềm trong
toán học tính toán. Phần mềm được phát triển vào cuối những năm 70 bởi Cleve
Moler (Stanford) với mục đích giúp sinh viên thực hiện các tính toán số mà không
cần phải học một ngôn ngữ lập trình bậc thấp.
GVHD : Nguyễn Văn Thái

Matlab được thiết kế bởi công ty MathWorks là một ngôn ngữ lập trình bậc
cao chuyên sử dụng cho các tính toán kỹ thuật, đặc biệt là các bài toán có dạng ma
trận hoặc vector. Phần mềm tích hợp các tính toán, đồ họa và lập trình trong một
môi trường thân thiện, cho phép thể hiện các bài toán và nghiệm dưới dạng các ký
hiệu toán học quen thuộc.

Hình 2-1 Phần mềm Matlab

Matlab là một hệ tương tác, có các thành phần dữ liệu cơ bản là một mảng mà
không cần khai báo trước số chiều. Phần mềm đã trải qua nhiều năm phát triển với
sự đóng góp của nhiều chuyên gia. Trong trường đại học, nó là một công cụ chuẩn
cho các khoa học về toán, kỹ thuật và khoa học từ mở đầu đến nâng cao. Trong
công nghiệp, matlab là một công cụ hữu ích cho việc nghiên cứu, phát triển và phân
tích các sản phẩm chất lượng cao.
2.3.2 Hệ thống Matlab

Ngôn ngữ matlab: là một ngôn ngữ lập trình bậc cao (scritp) với các lệnh
điều khiển, chức năng, cấu trúc dữ liệu, đầu vào/đầu ra và khả năng lập trình.
Môi trường làm việc Matlab: giúp sử dụng các hàm và tệp trong Matlab bao
gồm các công cụ quản lý biến và xuất nhập dữ liệu trong môi trường làm
việc. Ngoài ra, nó cũng có các công cụ để phát triển, quản lý, gỡ lỗi và lập hồ sơ các
tệp m và các ứng dụng matlab.
Xử lý đồ họa: một công cụ giúp bạn xem dữ liệu của mình ở định dạng biểu đồ.
Ngoài ra, có thể xây dựng giao diện đồ họa.
Thư viện hàm tính toán: nó là một tập hợp các thuật toán tính toán từ các hàm cơ
bản như tổng, sin, cos và tính toán số học phức tạp đến các hàm phức tạp như ma
trận nghịch đảo, giá trị duy nhất, vectơ cụ thể của ma trận, hàm bessel và các phép
biến đổi fourier nhanh.
GVHD : Nguyễn Văn Thái

Matlab API: là một thư viện cho phép bạn viết phần mềm c và fortran và tương
tác với matlab bao gồm các công cụ để gọi các quy trình lặp matlab (liên kết
động). Sử dụng matlab như một công cụ máy tính để đọc và ghi m tệp.

Hình 2-2 Giao diện phần mềm Matlab

2.3.3 Tính năng của Matlab

Matlab là một ngôn ngữ lập trình cao cấp để tính toán số và phát triển ứng dụng.
Cung cấp một môi trường tương tác để điều tra, thiết kế và giải quyết các vấn
đề.
Nó cung cấp một thư viện lớn các hàm toán học để giải các hàm số tuyến tính,
thống kê, phân tích Fourier; lọc, tối ưu hóa, tích phân và phương trình vi phân bình
thường.
Matlab cung cấp các biểu đồ tích hợp để trực quan hóa dữ liệu và các công cụ để
tạo biểu đồ tùy chỉnh.
Cung cấp các công cụ phát triển để tăng khả năng bảo trì chất lượng mã và tối đa
hóa hiệu suất.
Cung cấp các công cụ để xây dựng ứng dụng bằng giao diện đồ họa tùy chỉnh.
Các chức năng để tích hợp các thuật toán dựa trên Matlab với các ứng dụng bên
ngoài và các ngôn ngữ khác như c, java, net và microsoft excel.
2.3.4 Ứng dụng của Matlab

Tính ứng dụng của matlab khá rộng rãi, được sử dụng như công cụ tính toán trong
lĩnh vực khoa học và kỹ thuật: công nghệ, toán học, hóa học, vật lý…
Matlab được sử dụng hầu hết trong các việc như:
- Xử lý tín hiệu và truyền thông.
- Xử lý chất lượng hình ảnh, video.
GVHD : Nguyễn Văn Thái

- Ứng dụng tính toán tài chính, sinh học.


- Ứng dụng trong kiểm tra, tính toán và đo lường.
- Hệ thống điều khiển.
2.4 Tạo giao diện điều khiển trên matlab bằng tool Design app

App Designer là một công cụ phát triển ứng dụng đồ họa trong MATLAB, cho phép bạn
tạo giao diện người dùng (GUI) tương tác cho các ứng dụng MATLAB của mình một cách
dễ dàng. Với App Designer, bạn có thể tạo ra các ứng dụng GUI phong phú và linh hoạt
mà không cần viết mã phức tạp.

Hình 2-3 Công cụ matlab

Dưới đây là một số đặc điểm và tính năng chính của App Designer:

− Môi trường kéo và thả: App Designer cung cấp một môi trường làm việc trực quan
và dễ sử dụng, cho phép bạn kéo và thả các thành phần như nút, hộp văn bản, biểu
đồ và hình ảnh vào giao diện người dùng của ứng dụng của bạn. Bằng cách sử dụng
các công cụ nhanh chóng và dễ dùng này, bạn có thể xây dựng giao diện người
dùng theo ý muốn của mình.
− Editor mã: App Designer kết hợp một trình soạn thảo mã tích hợp, cho phép bạn
tùy chỉnh hành vi và xử lý sự kiện của các thành phần trong ứng dụng. Bạn có thể
viết mã MATLAB để xử lý sự kiện như nhấn nút, thay đổi giá trị trong hộp văn
bản, hoặc tương tác với dữ liệu.
− Giao diện dễ thao tác: Với App Designer, bạn có thể tạo ra giao diện người dùng
tương tác với các thành phần như nút bấm, ô đầu vào và biểu đồ. Bạn có thể thay
đổi thuộc tính của các thành phần này, ví dụ như màu sắc, kích thước và vị trí, để
tạo ra giao diện phù hợp với nhu cầu của ứng dụng.
− Tương tác dữ liệu: App Designer cho phép bạn tương tác với dữ liệu và thực hiện
tính toán trong ứng dụng của mình. Bạn có thể sử dụng các biểu đồ, bảng và biểu
thức toán học để hiển thị và xử lý dữ liệu theo cách bạn mong muốn.
− Tích hợp dễ dàng: App Designer tích hợp một cách mượt mà với các công cụ và
tính năng khác trong MATLAB. Bạn có thể sử dụng các hàm và công cụ MATLAB
mạnh mẽ để thực hiện tính toán và phân tích dữ liệu trong ứng dụng của mình.
− App Designer là một công cụ mạnh mẽ để tạo ra các ứng dụng GUI tương tác trong
MATLAB một cách nhanh chóng và dễ dàng. Với khả năng kéo và thả và tích hợp
các công cụ MATLAB, bạn có thể tạo ra các ứng dụng GUI phong phú và tùy
chỉnh theo ý muốn của mình để phục vụ các nhu cầu phân tích dữ liệu và tính toán
của bạn.
GVHD : Nguyễn Văn Thái

Hình 2-4 Giao diện Design App

2.5 Tổng quan về phần mềm SolidWork

2.5.1 Phần mềm SOLIDWORKS

SOLIDWORKS là một phần mềm thiết kế 3D chạy trên hệ điều hành Windows thuộc
hãng Dassault Systèmes của Pháp. Được biết đến với tính dễ sử dụng và trực quan nhưng
SOLIDWORKS là một phần mềm thiết kế 3D mạnh mẽ và cung cấp cho người dùng
những tính năng tuyệt vời nhất để thiết kế các chi tiết của khối 3D, lắp ráp các chi tiết để
tạo thành bộ phận của máy móc sản xuất.

Hình 2-5 Sản phẩm thiết kế của SOLIDWORKS

Hiện nay, SOLIDWORKS là một trong những phần mềm CAD phổ biến nhất.
Trong thực tế, SOLIDWORKS đang được sử dụng bởi hơn 2 triệu kỹ sư và hơn 200.000
doanh nghiệp và tập đoàn trên toàn thế giới. Với nhiều tính năng nổi trội, SOLIDWORKS
không chỉ được sử dụng trong lĩnh vực cơ khí mà nó còn được mở rộng ra nhiều ngành
nghề và lĩnh vực khác như: Điện, xây dựng, khoa học ứng dụng,..
GVHD : Nguyễn Văn Thái

Trải qua thời gian dài phát triển với nhiều phiên bản ra đời, SOLIDWORKS đã có
nhiều bước tiến vượt trội về tính năng, hiệu suất để đáp ứng các nhu cầu thiết kế 3D
chuyên nghiệp cho các ngành kỹ thuật, công nghiệp.
2.5.2 Lịch sử hình thành và phát triển của phần mềm SOLIDWORKS

SOLIDWORKS được phát triển bởi Jon Hirschtick, tốt nghiệp đại học MIT. Vào
tháng 12/1993, tổng công ty SOLIDWORKS được thành lập. Hirschtick tuyển dụng một
đội ngũ kỹ sư với để xây dựng phần mềm CAD 3D mà dễ sử dụng, giá cả phải chăng, và
chạy trên Windows. Và sau đó được Dassault Systèmes mua vào năm 1997 với giá $
310.000.000.
SOLIDWORKS phát hành sản phẩm đầu tiên SOLIDWORKS 95 vào tháng 11
năm 1995. Từ đó đến nay, trải qua 26 phiên bản, DS SOLIDWORKS Corp đã bán được
hơn 1,5 triệu giấy phép của SOLIDWORKS trên toàn thế giới và CEO điều hành hiện tại
là Bertrand Sicot. SOLIDWORKS được du nhập vào nước ta với phiên bản 2003, chuyên
thiết kế mô hình 3D dựa trên cách tiếp cận thành phần - tham số để tạo mô hình và lắp ráp.
Vào năm 2021, SOLIDWORKS 3D đã trở thành một giải pháp nền tảng trong lĩnh vực
thiết kế với trên 500 giải pháp đối tác, hỗ trợ cho hàng loạt các ngành công nghiệp, thiết kế
và chế tạo cho hơn 80 quốc gia trên thế giới.
2.5.3 Chức năng phần mềm SOLIDWORKS

Chức năng CAD :


CAD (Computer - Aided Design) là chức năng thiết kế được tích hợp trong
SOLIDWORKS giúp người dùng dễ dàng làm quen phần mềm và thiết kế một cách nhanh
chóng nhờ giao diện trực quan và sự bố trí các thanh công cụ một cách hợp lý.
Chức năng CAE :
CAE (Computer - Aided Engineering) có nhiệm vụ mô phỏng hoạt động để cải
thiện thiết kế sản phẩm hoặc hỗ trợ trong việc giải quyết các vấn đề kỹ thuật. CAE bao
gồm các chức năng mô phỏng, xác nhận, tối ưu hóa sản phẩm, quy trình và công cụ sản
xuất. Nhờ tích hợp bộ phần mềm phân tích Cosmos chạy trong môi trường của
SOLIDWORKS mà người dùng có thể phân tích một số phần phức tạp như:

− Phân tích tĩnh học.

− Phân tích động học.

− Phân tích dao động.

− Phân tích nhiệt học.

− Phân tích sự va chạm của các chi tiết.

− Phân tích thuỷ khí động học

− Phân tích động lực học

− Phân tích quá trình rót kim loại lỏng vào khuôn
GVHD : Nguyễn Văn Thái

Hình 2-6 Mô phỏng trong SOLIDWORKS

Chức năng CAM :


CAM (Computer - Aided Manufacturing) hay còn gọi là chức năng
SOLIDWORKS CAM là một trong những CNC hỗ trợ trong lĩnh vực gia công phay, cho
phép tích hợp các quy trình thiết kế và sản xuất theo một hệ thống để đánh giá thiết kế,
giúp các chương trình gia công được tạo lập dễ dàng, tiết kiệm chi phí và thời gian.
2.5.4 Tính năng của SOLIDWORKS

Khả năng thiết kế mô hình 3D hoàn hảo :


Đây là một trong những tính năng nổi bật của phần mềm SOLIDWORKS.
SOLIDWORKS vượt trội hơn hẳn bởi tính trực quan, phương pháp xây dựng mô hình 3D
nhanh chóng. Khả năng sử dụng dữ liệu bản vẽ, phác thảo 2D chuyển đổi thành mô hình
hình học 3D. Bên cạnh đó, SOLIDWORKS có khả năng dựng mô hình 3D từ ảnh chụp,
điều này hỗ trợ rất lớn cho việc sáng tạo và phát triển sản phẩm.
Tính năng lắp ráp các chi tiết :
Hầu hết các phần mềm CAD/CAM nào cũng có tính năng này. Sau khi thiết kế, các
chi tiết 3D sẽ có thể được lắp ráp để thành một bộ phận máy hoặc một khối hoàn
chỉnh. Tính năng này có thể giúp bạn dễ dàng chỉnh sửa, tự do sáng tạo và phát
triển những sản phẩm mới.
GVHD : Nguyễn Văn Thái

Hình 2-7 Khả năng thiết kế mô hình 3D hoàn hảo của SolidWork

Xuất bản vẽ trên phần mềm SOLIDWORKS :


SOLIDWORKS cho phép dễ dàng tạo các hình chiếu vuông góc các chi tiết hoặc
các bản lắp với tỉ lệ và vị trí do người sử dụng quy định mà không ảnh hưởng đến kích
thước. Việc xuất bản vẽ chính xác sẽ phục vụ cho quá trình sản xuất một cách dễ dàng và
nhanh chóng.
Tính năng gia công trên SOLIDWORKS :
Để sử dụng chức năng này cần phải dùng một modul nữa của SOLIDWORKS là
SOLIDCAM. Trước đây, SOLIDCAM là module được tách ra để bán riêng như sau này nó
được tích hợp và chạy ngay trên giao diện của SOLIDWORKS. SOLIDCAM cũng là
module thân thiện và dễ dàng sử dụng.
Phân tích động lực học trên SOLIDWORKS :
Để kiểm tra và cải thiện chất lượng bản thiết kế, SOLIDWORKS Simulation cung
cấp các công cụ mô phỏng hỗ trợ. Các sản phẩm được kiểm tra về độ bền, về hệ số an toàn
và được phân tích động học đầy đủ, được mô phỏng tính toán như thật để hạn chế phế
phẩm trong quá trình sản xuất.
Tầm quan trọng của SOLIDWORKS
Với các chức năng và tính năng vô cùng hữu ích thì phần mềm SOLIDWORKS vô
cùng quan trọng trong việc hỗ trợ các kỹ sư thiết kế bản vẽ:
Sản phẩm phức hợp thiết kế & phát triển: Một lý do rất quan trọng khiến
SOLIDWORKS phổ biến đó là nó cho phép thiết kế và phát triển các cụm phức tạp nhất,
dễ dàng tạo hệ thống với hàng nghìn thành phần.
Tiết kiệm thời gian phát triển: Trung bình, SOLIDWORKS có thể tiết kiệm đến
30% thời gian so với các hệ thống khác. Điều này là nhờ vào quy trình làm việc được sắp
xếp hợp lý và khả năng tương tác hiệu quả cao.
Xác thực thiết kế tích hợp và tự động. Người dùng có thể giám sát bản thiết kế,
xem nó có đáp ứng yêu cầu tuân thủ và đạt được mục tiêu mà không bị sai lệch trong quá
trình thiết kế không.
Tiết kiệm thời gian chu kỳ giao hàng: Thời gian làm việc trong các dự án và thời
gian chu kỳ giao hàng có thể giảm lên đến 35%.
GVHD : Nguyễn Văn Thái

Visual Analytics: Đây là nền tảng hỗ trợ phân tích và báo cáo trực qua cho phép
người dùng nhận được thông tin quan trọng và hình dung kết quả trong thiết kế 3D, đẩy
nhanh quá trình thiết kế.
2.5.5 Ưu điểm của phần mềm SOLIDWORKS :

Giao diện trực quan :


SOLIDWORKS là phần mềm thiết kế có giao diện trực quan, hỗ trợ người thiết kế
làm quen từ các thao tác đầu tiên. Các menu được đơn giản hóa, có các nút mẹ ở trên và
các nút con bên dưới (kkông có menu thả xuống). Giao diện có thể được tùy chỉnh hóa tùy
theo nhu cầu của người dùng.

Hình 2-8 Giao diện của SOLIDWORKS

Dễ sử dụng và thiết kế :
SOLIDWORKS cung cấp một cửa sổ nhập kích thước khi đang vẽ đường hoặc
hình dạng trước khi hoàn thành. Trong một cú nhấp chuột, bạn có thể có một dòng có độ
dài như ý muốn. Chỉ trong hai lần nhấp chuột nữa, đường của bạn có thể được đặt so với
tính năng hiện có ở góc chính xác mà bạn yêu cầu.
Dễ lập mô hình hình học :
Để tạo một bộ phận, bản phác thảo cần được chuyển thành dạng 3D. Điều này
thường xảy ra bằng cách dùng bản phác thảo, nhưng quá trình này cũng có thể sử dụng
nhiều chức năng hơn.
Dễ kết xuất :
Với gói kết xuất đi kèm, việc xuất hình ảnh là một quá trình trực tiếp và đơn
giản. Đối với gói SOLIDWORKS Premium cho phép hiển thị tức thì trong khi thiết
kế. Điều này có thể giúp khách hàng hình dung một cách trực quan hơn. Bên cạnh đó, các
kỹ sư cũng hiểu rõ hơn về độ trong suốt hoặc phản chiếu khi thiết kế một sản phẩm.
Xử lý nhanh :
Điều này còn tùy thuộc vào cấu hình máy tính cá nhân nhưng nếu như so sánh với
một số đối thủ khác thì SOLIDWORKS hoạt động nhanh và mượt mà hơn. Đặc biệt, đối
GVHD : Nguyễn Văn Thái

với các phiên bản SOLIDWORKS sau này, máy vẫn vận hành trơn tru đối với các bản vẽ
có nhiều chi tiết phức tạp.
2.6 Phần mềm thiết kế 2D bằng AutoCad :

2.6.1 Phần mềm AutoCAD là gì?

AutoCAD (viết tắt của Automatic Computer Aided Design) là một ứng dụng phần
mềm được phát triển bởi Autodesk cho phép thiết kế và soạn thảo với sự hỗ trợ máy tính
(CAD). Phần mềm này được sử dụng để tạo bản vẽ 2D và 3D, cho phép người dùng khái
niệm hoá các ý tưởng, tạo ra các thiết kế và bản vẽ theo mức độ chính xác kỹ thuật cần
thiết. Thậm chí, AutoCAD có thể thực hiện tính toán và mô phỏng thiết kế nhanh chóng
trên một loạt các ngành công nghiệp.

Hình 2-9 Phần mềm AutoCAD

AutoCAD là một sản phẩm chủ lực của Autodesk, đi đầu trong ngành công nghiệp
CAD. Phiên bản AutoCAD đầu tiên đã được trình diễn tại Comdex năm 1982, và được
phát hành vào tháng 12 cùng năm. Bản phát hành đã chứng tỏ sự rung chuyển mạnh mẽ
đối với ngành công nghiệp CAD. AutoCAD cũng là một trong những gói CAD đầu tiên
chạy trên PC và có sẵn cho khách hàng trên toàn thế giới.
2.6.2 Nguồn gốc của phần mềm AutoCAD :

Một trong những thông tin không thể bỏ qua về AutoCAD chính là nguồn gốc ra
đời của phần mềm này. AutoCAD là sản phẩm của Autodesk được thành lập vào năm 1982
GVHD : Nguyễn Văn Thái

bởi John Walker cùng 15 người đồng sáng lập khác. Họ xác định AutoCAD sẽ là sản phẩm
chủ lực, đồng thời, cho ra mắt AutoCAD tại triển lãm thương mại COMDEX ở Las Vegas
với tư cách là chương trình CAD đầu tiên trên thế giới chạy trên PC.

Hình 2-10 Trong gần 40 năm phát triển, AutoCAD sở hữu 31 phiên bản đã được cho ra mắt từ lần phát hành
đầu tiên vào năm 1982.

Chỉ sau 4 năm được giới thiệu, tháng 3 năm 1986, AutoCAD trở thành ứng dụng
thiết kế được sử dụng rộng rãi nhất trên toàn thế giới, và vẫn giữ vững này cho đến tận
hôm nay.
Trong gần 40 năm phát triển, AutoCAD sở hữu 31 phiên bản đã được cho ra mắt từ
lần phát hành đầu tiên vào năm 1982. Đơn vị sở hữu Autodesk cũng đã bổ sung thêm các
tính năng và chương trình mới để thu hút các ngành nghề khác.
Cụ thể, phần mềm hỗ trợ APIs để tùy chỉnh và tự động hóa, cho phép tạo ra các sản
phẩm chuyên ngành như AutoCAD Architecture, AutoCAD Electrical, AutoCAD Civil
3D,…. Trong năm năm qua, Autodesk cũng đã tạo ra các ứng dụng di động và ứng dụng
đám mây, bao gồm AutoCAD 360 , Fusion 360 và A360 Viewer. Các chương trình này
kết hợp các công cụ thiết kế và tài liệu cùng với khả năng chia sẻ và cộng tác qua Internet.
2.6.3 Ứng dụng phần mềm AutoCAD vào đời sống :

Ban đầu, phần mềm AutoCAD được tạo ra cho các kỹ sư cơ khí, nhưng nhanh
chóng được mở rộng khả năng ứng dụng để phục vụ một số lĩnh vực khác. Trên thực tế, sự
thành công của phần mềm AutoCAD phần lớn dựa vào sự ủng hộ và chấp nhận của các
chuyên gia thiết kế, bao gồm: kiến trúc sư, quản lý dự án, hoạ sĩ hoạt hình hay kỹ sư.
Sau đây là 2 lĩnh vực mà phần mềm AutoCAD được sử dụng nhiều nhất. :
Kiến trúc & xây dựng :
GVHD : Nguyễn Văn Thái

Hình 2-11 AutoCAD được sử dụng chủ yếu trong lĩnh vực xây dựng.

AutoCAD được sử dụng chủ yếu trong lĩnh vực xây dựng. Autodesk Building
Design Suite, hiện là Autodesk AEC Collection cung cấp một gói các phần mềm thiết kế
xây dựng 3D kết hợp Công cụ mô hình thông tin xây dựng (BIM) và các công cụ CAD để
giúp các kỹ sư xây dựng thiết kế, trực quan hóa, mô phỏng và xây dựng hiệu quả hơn.
Việc sử dụng BIM cũng cho phép các đơn vị, đội nhóm phân tích thiết kế để cải thiện khả
năng chính xác của quyết định; giám sát phân tích năng lượng công trình thân thiện với
môi trường hơn cũng như tiết kiệm vật liệu xây dựng.
Kỹ thuật cơ khí:

Hình 2-12 AutoCAD được sử dụng hiệu quả trong lĩnh vực Kỹ thuật Cơ khí

AutoCAD giúp thực thi hiệu quả, giảm thiểu lỗi tối đa các bản vẽ của thành phần
kỹ thuật, thiết kế cơ sở hạ tầng và phân tích các hệ thống HVAC đóng vai trò chính trong
hầu hết các lĩnh vực kỹ thuật, các ngành kỹ thuật, cơ khí, hệ thống và kỹ thuật điện.
AutoCAD cũng là một trong những phần mềm thiết kế cung cấp cho các chuyên gia ngành
kỹ thuật cơ khí các công cụ soạn thảo độc đáo có thể được sử dụng để đưa các ý tưởng kỹ
thuật của họ vào thực tế với độ chính xác mà họ yêu cầu.
GVHD : Nguyễn Văn Thái

Từ đó, AutoCAD trở thành phần mềm để thiết kế các thành phần cơ khí, phân tích
các hệ thống điện và đường ống và giải quyết các vấn đề thiết kế có thể phát sinh.
Trên đây là những thông tin về phần mềm AutoCAD được Xây dựng Hoà Bình tổng hợp
lại nhằm giúp các bạn độc giả có những thông tin chính xác nhất về phần mềm thiết kế
này.
2.7 Đặt trục cho robot 3 bậc tự do

Hình 2-13 Đặt trục cho robot ba bậc tự do

Bảng thông số cho mô hình :


Bảng 2-1 Bảng thông số mô hình

Thông số Ý nghĩa
L1 = 105 mm Chiều dài của khâu 1
L2 = 162 mm Chiều dài của khâu 2
L3 = 130 mm Chiều dài của khâu 3
D1 = 52mm Khoảng cách giữa trục {1} và trục {2}
Quy tắc đặt hệ trục tọa độ trong robot :
1. Hệ trục thứ {i} sẽ gắn với khâu thứ {i}.
2. Trục là trục của khớp thứ i.
3. Trục là đường vuông góc chung và cắt cả và .
4. Trục được suy ra từ quy tắc bàn tay phải.
5. Hệ trục {0} sẽ là hệ trục 1 khi biến khớp 1 có giá trị bằng 0.
6. Hệ trục N được chọn tùy ý sao cho càng nhiều thông số khâu và khớp bằng 0 càng
tốt.
Bảng DH rút ra được như sau :
Bảng DH :
Bảng 2-2 Bảng DH cho robot

i
1 0 0 0
2 90 0
GVHD : Nguyễn Văn Thái

3 0 0

Tọa độ điểm đầu cuối so với hệ trục 3 :

: Góc giữa và quanh trục

: Khoảng cách giữa và quanh trục


di : Khoảng cách giữa Xi-1 và Xi quanh trục Zi

: Gốc giữa Xi-1 và Xi quanh trục Zi


2.8 Tính toán động học thuận :

2.8.1 Động học thuận :

Động học thuận (Forward Kinematics) là một khái niệm trong robot học và động
học. Nó liên quan đến việc xác định vị trí và định hướng của bộ phận cuối cùng của robot
(có thể là bàn tay, công cụ hoặc đầu robot) dựa trên các thông số của các khớp hoặc liên
kết trong robot.
Trong một hệ thống robot, động học thuận mô tả quá trình tính toán đường đi từ
các khớp đến đầu ra hoặc công cụ của robot. Nó bao gồm việc xác định hệ tọa độ và các
tham số hình học của các khớp và liên kết trong robot.
Để thực hiện động học thuận, thông thường sử dụng các phương pháp hình học và
ma trận biến đổi để tính toán các vị trí và định hướng của các khớp và liên kết. Các thông
số của các khớp, chẳng hạn như góc quay, độ dài và bán kính, đóng vai trò quan trọng
trong quá trình tính toán này.
Kết quả của động học thuận là một ma trận biến đổi (thường được gọi là ma trận
đồng nhất) mô tả vị trí và định hướng của bộ phận cuối cùng của robot trong không gian
toạ độ toàn cục hoặc không gian công việc của robot.
Động học thuận là một khái niệm quan trọng trong robot học, đặc biệt trong việc
điều khiển robot và lập trình robot để thực hiện các tác vụ cụ thể. Nó cho phép xác định vị
trí và định hướng của bộ phận cuối cùng của robot dựa trên các thông số của các khớp
hoặc liên kết, từ đó giúp định rõ quỹ đạo và vận động của robot.
2.8.2 Tính toán động học thuận :

Ở bài toán này, nhóm sinh viên sẽ đặt trục và tính toán động học thuận cho robot theo
phương pháp được đề ra ở cuốn sách “Introduction to ROBOTICS Mechanical and Control
” của tác giả John Craig, phương trình tổng quát được đề ra như sau :

Ma trận chuyển đội hệ trục 0 và 1 :


GVHD : Nguyễn Văn Thái

Ma trận chuyển đổi hệ trục 0 và 2 :

Ma trận chuyển đổi hệ trục 0 và 3 :

Vị trí điểm cuối của robot :

Ta đặt :

2.9 Tính toán động học nghịch :

Mục đích của bài toán động học nghịch là tìm các biến khớp của tay máy khi biết vị trí
khâu tác động cuối của tay máy.
Có 2 phương pháp để giải bài toán động học nghịch là phương pháp hình học và phương
pháp đại số.
Ở bài toán này nhóm sử dụng phương pháp đại số để tính toán ra các góc khớp khi đã biết
vị trí điểm đầu cuối của robot:
Ở phương trình (1.7) sau khi giải bài toán động học thuận ta tìm được điểm đầu cuối của
robot 3 bậc tự do so với điểm tọa độ thứ {0}:

2.9.1 Tính toán góc :

Ta nhân lần lượt cho phương trình x và y ta thu được kết quả :

Ở đây ta đặt và , x = 1,2,3 tương ứng với các góc .

Lấy ta được :
GVHD : Nguyễn Văn Thái

Ta nhân 2 vế phương trình cho ta được :

Tiếp theo ta đặt :

Ta suy ra được :

Nên :

Thay (1.13) và (1.14) vào (1.11) ta được :

Rút gọn phương trình (1.17) ta thu được

Từ (1.18) ta suy ra :

Lúc này :

Ta thu được góc :

2.9.2 Tính toán :

Ta nhân lần lượt cho phương trình y và x ta thu được kết quả :

Ở đây ta đặt và , x = 1,2,3 tương ứng với các góc .


GVHD : Nguyễn Văn Thái

Lấy ta được :

Ta còn có :

Ta đặt :

Ta suy ra :

Bình phương và cộng 2 vế lại :

Khai triển (1.30) :

Nhân 2 vế phương trình cho ta được :

Đặt :

Suy ra :

Thay (1.33) và (1.34) vào (1.32) ta được :

Suy ra :

Ta kết luận được :


GVHD : Nguyễn Văn Thái

2.9.3 Tính toán :

Từ (1.28) và (1.29) ta suy ra được :

Chia (1.41) cho (1.40) thu được :

Vậy ta kết luận được góc :

2.10 Không gian làm việc :

2.10.1 Xác định không gian làm việc của robot

Không gian làm việc của robot là vùng chứa các điểm, vị trí mà cơ cấu cuối của robot có
thể đạt tới. Việc xác định được không gian làm việc của robot, ta có thể đáp ứng được các
yêu cầu, nhiệm vụ làm việc trong thực tế của robot, cũng như nâng cấp và cải tiến robot
sau này.
Để xác định không gian làm việc của robot, nhóm đã sử dụng kết quả động học thuận và
dựa vào các bộ nghiệm của động học nghịch để xây dựng chương trình vẽ không gian làm
việc trên phần mềm Matlab. Hình dưới thể hiện kết quả không gian làm việc sau khi chạy
chương trình.
GVHD : Nguyễn Văn Thái

Hình 2-14 Không gian làm việc của robot

Giới hạn các góc quay :


Bảng 2-3 Giới hạn hoạt động của robot

Kí hiệu Khoảng hoạt động

2.11 Quy hoạch quỹ đạo :

2.11.1 Lý thuyết về quy hoạch quỹ đạo :

Quy hoạch quỹ đạo là một phần nhỏ của một vấn đề tổng thể như là dẫn đường
(navigation) hay quy hoạch chuyển động (Motion planning). Hệ thống cấp bậc điển hình
cho quy hoạch chuyển động như sau [2]:
Task planning – Thiết kế một vài mục tiêu. (Ví dụ như nhặt đồ vật trước mặt bạn
lên, gắp vật, thả vật, hàn, …)
Path planning – Đưa ra đường dẫn khả thi từ điểm đầu đến điểm cuối. Một đường
dẫn luôn bao gồm tập hợp của các điểm tham chiếu.
Trajectory planning – Đưa ra lịch trình theo thời gian làm sao để di chuyển theo
đường dẫn mà có tính ràng buộc ví dụ như vị trí, vận tốc, gia tốc
Trajectory following – Khi kế hoạch đã được lên thì cần một hệ thống đều khiển
để cho kế hoạch có thể di chuyển đấy đủ và chính xác nhất.
GVHD : Nguyễn Văn Thái

Hình 2-15 Quy hoạch chuyển động (Motion planning)

Ở đây ta chỉ đi sâu vào phân tích về Quy hoạch quỹ đạo (Trajectory Planning).
Quy hoạch quỹ đạo ở không gian làm việc là các điểm tham chiếu và nội suy nằm
trên trục tọa độ Descartes (vị trí và hướng) của một vị trí cụ thể trên cánh tay robot (thường
là khâu cuối – end effector)
Quy hoạch quỹ đạo ở không gian khớp là các điểm tham chiếu và nội suy trực tiếp
trên các vị trí khớp. Cả 2 quỹ đạo ở các không gian khác nhau được mô tả tại Hình 2-16

Hình 2-16 Quy hoạch quỹ đạo cho robot

Đối với mỗi không gian khác nhau sẽ có những ưu nhược điểm riêng, ưu nhược
điểm của mỗi không gian sẽ được mô tả trong Bảng 3
Bảng 2-4 Ưu nhược điểm của các không gian sử dụng quy hoạch

Không gian làm Không gian khớp


việc
Ưu điểm Tốc độ thực hiện
Chuyển động có thể nhanh hơn
dự đoán
Chuyển động của cơ
Có khả năng tránh cấu truyền động
chướng ngại vật và trơn tru và dễ xác
va chạm tốt hơn định hơn
Nhược điểm Thực hiện chậm Các điểm trung gian
hơn. không được đảm
Chuyện động của cơ bảo tuân theo các
cấu truyền động giới hạn chung hoặc
không trơn tru và va chạm.
khó xác định hơn.

Các kiểu quy hoạch quỹ đạo :


GVHD : Nguyễn Văn Thái

2.11.2 Vận tốc hình thang:

Quỹ đạo vận tốc hình thang là quỹ đạo có gia tốc là hằng số, vận tốc có hình thang.
Điều này dẫn đến cấu hình vị trí đường cong s.

Hình 2-17 Vận tốc hình thang

2.11.3 Đa thức (Polynomial)

Ta có thể nội suy giữa 2 điểm dùng đa thức có các bậc khác nhau nhưng ta thường
sử dùng 2 loại sau:

− Cubic (đa thức bậc 3): Yêu cầu 4 điều kiện biên: vị trí và vận tốc

− Quintic (đa thức bậc 5): Yêu cầu 6 điều kiện biên: Vị trí, vận tốc và gia tốc

Tương tự như vậy thì quỹ đạo có các bậc cao hơn có thể sử dụng để nối các vi phân bậc
cao hơn của vị trí tại điểm waypoint.
GVHD : Nguyễn Văn Thái

Hình 2-18 Quy hoạch đa thức

Ở bài báo cáo này chúng em sử dụng quy hoạch quỹ đạo sử dụng đa thức bậc 3.
2.11.4 Quy hoạch quỹ đạo robot 3 bậc dùng đa thức bậc 3

Ta có các điều kiện ràng buộc :


Tại điểm bắt đầu :

Tại điểm đích :

Đa thức bậc ba :

Từ các điều kiện ràng buộc ta có :


GVHD : Nguyễn Văn Thái

Các phương trình ràng buộc được trình bày ở dạng ma trận :

Đặt

Do đó các tham số của đa thức bậc bac có thể được tính bằng công thức sau:

Các nghiệm có thể tính được theo các công thức sau :

2.11.5 Quy hoạch quỹ đạo theo đường thẳng

Ta cần quy hoạch quỹ đạo di chuyển từ điểm A đến điểm B theo đa thức bậc 3 với
thời gian là tf, sau đó sẽ di chuyển từ điểm B về điểm A theo đa thức bậc 3 với thời gian.
GVHD : Nguyễn Văn Thái

Ta sẽ thực hiện đi thực hiện lại 5 lần và dừng tại vị trí điểm A khi đã quy hoạch
xong. Để thực hiện quy hoạch quỹ đạo từ điểm đến điểm ta sẽ thực hiện theo lưu đồ giải
thuật như sau:

Hình 2-19 Lưu đồ giải thuật từ điểm đến điểm

Từ sơ đồ giải thuật Hình 4-5 và cơ sở lý thuyết đa thức bậc ba, ta thực hiện mô
phỏng và thực thi mô hình quỹ đạo theo đường thẳng.
2.11.6 Quy hoạch quỹ đạo theo hình tam giác

Ta cần quy hoạch quỹ đạo di chuyển từ điểm A đến điểm B, điểm B đến C, điểm C
về A theo đa thức bậc 3 với thời gian là t f. Ta sẽ thực hiện đi thực hiện lại 5 lần và dừng tại
vị trí điểm A khi đã quy hoạch xong.
Để thực hiện quy hoạch quỹ đạo từ điểm đến điểm ta sẽ thực hiện theo lưu đồ giải
thuật như sau :
GVHD : Nguyễn Văn Thái

Hình 2-20 Sơ đồ giải thuật quy hoạch quỹ đạo tam giác

Từ sơ đồ giải thuật Hình 4-6 và cơ sở lý thuyết đa thức bậc ba, ta thực hiện mô
phỏng và thực thi mô hình quỹ đạo theo hình tam giác.
GVHD : Nguyễn Văn Thái

Chương 3. Thi công và kiểm chứng mô phỏng

3.1 Thiết bị lựa chọn :

Bảng 3-1 Bảng các thiết bị được sử dụng trong mô hình

STT Tên linh kiện Thông số Số


lượng
1 Động cơ bước Nema 17 Planetary Gear Step 42 x 42 x 97 mm 1
Motor 57/11
2 Động cơ bước Nema 17 42 x 40 mm 2
3 Pulley GT2 16 răng Bước răng 2mm, trục 5mm 2
4 Pulley GT2 20 răng Bước răng 2mm, trục 8mm 1
5 Pulley GT2 60 răng Bước răng 2mm, trục 8mm 3
6 Vòng đai GT2 400mm 3
7 Vòng bi KFL08 27 x 48 x8 mm 3
8 Bạc đạn Trục 22mm 3
9 Mặt bích Trục 8mm 3
10 Ròng rọc
11 Limit switch 5E4 10T125 loại có bánh xe 16 x 28 x 10mm 3
12 Trụ đồng Hex-M3 Cái cái 15mm 12
13 Trụ nhựa Hex-M3 Cái cái 40mm
14 Ống ruột gà 10mm 1m
15 Nguồn tổ ong 24VDC, 5A 1
16 Adruino Uno
17 Ốc vít M3, M4, M5 SLL
18 Dây điện SLL
19 Máng đi dây diện 25 x 25 mm
20 Hộp nhựa 115 x 90 x 55 mm 1
21 Adruino Shield CNC V3 1
22 Mạch Điều Khiển Động Cơ Bước A4988 3
23 Mica Theo bản vẽ SLL

3.1.1 Động cơ bước Nema 17 Planetary Gear Step Motor 57/11

Động cơ bước giảm tốc Size 42mm Nema 17 Planetary Gear Step Motor 57/11 là
động cơ bước được tích hợp hộp số giảm tốc tỉ số 57/11 giúp tăng lực kéo và độ chính xác
của động cơ, thích hợp cho các ứng dụng Robot cần chịu tải lớn và có độ chính xác cao
như cánh tay Robot, robot Scara,...., động cơ có chất lượng tốt, hộp số hoàn toàn bằng kim
loại cho độ bền và độ ổn định cao.
Thông số:
Bảng 3-2 Thông số động cơ bước Nema 17 Planetary Gear Step Motor 57/11

Model: 42mm (Nema 17) Planetary Gear Step Motor 57/11


Động cơ bước giảm tốc Nema 17 tỉ số 57/11
Tỉ số giảm tốc qua hộp số: 57/11 (trước hộp số quay 57 vòng khi đó sau hộp số trục
quay 11 vòng).
Điện áp cấp tối đa: 24VDC
GVHD : Nguyễn Văn Thái

Hộp số: Kim loại


Độ dài hộp số: 28.5mm
Kích thước: 42 x 42 x 97 mm
Momen xoắn: 30kgf.cm

Hình 3-1 Động cơ bước Nema 17 Planetary Gear

3.1.2 Động cơ bước Nema 17

Thông số:
Bảng 3-3 Thông số động cơ bước Nema 17

Kích thước: 42x42x40 mm 42x42x40 mm


Dòng chịu tải: 1.6A 1.6A
Moment xoắn: 0.45Nm 0.45Nm
Góc bước: 1.8°/step 1.8°/step
Đường kính trục 5mm
Dây nối dài 1m, đầu dây chuẩn XH2.54. Tương thích với đầu ra động cơ bước trên mạch
RAMPS 1.5 hoặc CNC shield V3
Ít tỏa nhiệt, chuyển động êm
Công suất phù hợp cho máy in 3D và laser nhỏ- Dây nối dài 1m, đầu dây chuẩn XH2.54.
Tương thích với đầu ra động cơ bước trên mạch RAMPS 1.5 hoặc CNC shield V3
Trục ra động cơ được vát phẳng giúp siết puli không bị trượt
GVHD : Nguyễn Văn Thái

Hình 3-2 Động cơ bước Nema 17

3.1.3 Pulley GT2

Pulley GT2 16 răng trục 5mm

Hình 3-3 Pulley GT2 16 răng trục 5mm

⬥Pulley GT2 20 răng trục 8mm


GVHD : Nguyễn Văn Thái

Hình 3-4 Pulley GT2 20 răng trục 8mm


GVHD : Nguyễn Văn Thái

3.1.4 Pulley GT2 60 răng trục 8mm

Hình 3-5 Pulley GT2 60 răng trục 8mm


GVHD : Nguyễn Văn Thái

3.1.5 Vòng đai GT2

Hình 3-6 Vòng đai GT2 dài 400mm

3.1.6 Vòng bi KFL08

Thông số kỹ thuật:

Bảng 3-4 Thông số kĩ thuật vòng bi KFL08

Đường kính trục lỗ 8mm


Chiều dài tổng 48mm
Chiều rộng 28mm
GVHD : Nguyễn Văn Thái

Hình 3-7 Vòng bi KFL08

3.1.7 Bạc đạn

Vòng Bi Trục 8mm 8x22x7mm là vòng bi (bạc đạn) trục 8mm. Sử dụng chung với
thanh trục hoặc motor trục 8mm.

Thông số kỹ thuật:

Bảng 3-5 Thông số kĩ thuật bạc đạn

Vật liệu Hợp kim


Đường kính ngoài 22mm
Đường kính lỗ 8mm
Chiều dày 7mm
Cân nặng 12g
GVHD : Nguyễn Văn Thái

Hình 3-8 Bạc đạn

3.1.8 Mặt bích:

Thông số kỹ thuật:

Bảng 3-6 Thông số kĩ thuật mặt bích

Chất liệu Hợp kim


Màu sắc Bạc
Trục nối động cơ 8mm
GVHD : Nguyễn Văn Thái

Hình 3-9 Mặt bích

● Ròng rọc
Bảng 3-7 Thông số kĩ thuật ròng rọc

Sản phẩm Ròng rọc GT2


Vật liệu Nhôm
Đường kính ngoài puley 18mm
Đường kính trong (trục) 5mm
Đường kính đỉnh răng 12.2mm
GVHD : Nguyễn Văn Thái

Hình 3-10 Ròng rọc GT2 trục 5mm

3.1.9 Công tắc hành trình 5E4 10T125 loại có bánh xe

Thông số:
Bảng 3-8 Thông số kĩ thuật công tắc hành trình 5E4 10T125 loại có bánh xe

Kích thước 16 x 28 x 10mm (R x D x S)


Cần gạt 30mm

Hình 3-11 Limit switch


GVHD : Nguyễn Văn Thái

3.1.10 Trụ đồng Hex-M3 cái cái 15mm

Hình 3-12 Trụ đồng Hex-M3 15mm


GVHD : Nguyễn Văn Thái

3.1.11 Trụ nhựa Hex-M3 cái cái 40mm

Hình 3-13 Trụ nhựa Hex-M3 40mm

3.1.12 Ống ruột gà:

Hình 3-14 Ống soắn ruột gà

3.1.13 Arduino Uno

Thông số:
GVHD : Nguyễn Văn Thái

Bảng 3-9 Thông số kĩ thuật Arduino Uno R3

Sản phẩm Atmega328 họ 8bit


Điện áp hoạt động 5VDC (chỉ được cấp qua cổng USB)
Tần số hoạt đọng 16MHz
Dòng tiêu thụ Khoảng 30mA
Điện áp khuyên dùng 7-12VDC
Điện áp giới hạn 6-20VDC
Số chân Digital I/O 14 (6 chân hardware)
Số chân Analog 6 ( độ phân giải 10 bit)
Dòng tối đa trên mỗi chân I/O 30mA
Dòng tối đa (5V) 500mA
Dòng tối đa (3.3V) 50mA
Bộ nhớ flash 32KB (Atmega328) với 0.5KB dùng bởi
bootloader
SRAM 2KB (Atmega328)
EEPROM 1KB (Atmega328)

Hình 3-15 Arduino Uno

3.1.14 Arduino Shield CNC V3

Thông số:
GVHD : Nguyễn Văn Thái
Bảng 3-10 Thông số kĩ thuật Arduino Shield CNC V3

Tương thích GRBL (mã nguồn mở chạy trên Arduino UNO R3 để điều khiển CNC
mini)
Hỗ trợ lên tới 4 trục (trục X, Y, Z và một trục thứ tư tùy chọn)
Hỗ trợ tới 2 Endstop (cảm biến đầu cuối) cho mỗi trục
Tính năng điều khiển spindle
Tính năng điều khiển dung dịch làm mát khi máy hoạt động
Sử dụng các mô đun điều khiển động cơ bước, giúp tiết kiệm chi phí khi thay thế,
nâng cấp
Thiết lập độ phân giải bước động cơ bằng jump đơn giả
Thiết kế nhỏ gọn, các đầu nối tiêu chuẩn thông dụng
Điện áp nguồn cấp đa dạng từ 12V tới 36V.
Tương thích với module A4988 và DRV8825
Tương thích với module Uno R3

Hình 3-16 Arduino Shield CNC V3

3.1.15 Mạch điều khiển động cơ bước A4988

Thông số :
Bảng 3-11 Thông số kĩ thuật mạch điều khiển động cơ bước A4988

Công suất ngõ ra 35V


Dòng đỉnh 2A
Có 5 chế độ Full bước, ½ bước, ¼ bước, 1/8 bước, 1/16 bước
Điều chỉnh dòng ra bằng triết áp, nằm bên trên Current Limit = Vref x 2.5
GVHD : Nguyễn Văn Thái

Tự động ngắt điện khi quá nhiệt

Hình 3-17 Mạch điều khiển A4988

3.1.16 Hộp dây điện:

Thông số:

Bảng 3-12 Thông số kĩ thuật hộp dây điện:

Sản phẩm Hộp nhựa đựng mạch điện tử màu trắng


Kích thước 115 x 90 x 55
Chất liệu Nhựa

Hình 3-18 Hộp nhựa


GVHD : Nguyễn Văn Thái

3.1.17 Ốc vít:

Ốc vít để cố định các chi tiết cơ khí

Hình 3-19 Ốc, tán lục giác các loại

3.1.18 Dây điện:

Hình 3-20 Dây điện các loại

3.1.19 Máng dây điện

Máng nhựa đi dây điện giúp mô hình trở nên gọn gàng.
GVHD : Nguyễn Văn Thái

Hình 3-21 Máng nhựa đi dây điện

3.2 Mô phỏng với robot thực từ SolidWork :

3.2.1 Chuyển robot từ SolidWork sang Matlab thông qua Simscape Multibody Link :

Hình 3-22 Chuyển robot từ SolidWork sang Matlab thông qua Simscape Multibody Link :

Ta chuyển robot từ cơ khí được thiết kế từ SolidWork vào trong Matlab nhờ công
cụ SimScape Multibody Link.
Ta đóng gói robot lại thành một khối SubSystem :
GVHD : Nguyễn Văn Thái

Hình 3-23 Đóng gói robot lại thành một khối SubSystem

Ta đưa đầu vào robot là góc khớp. Đầu tiên ta cho đầu vào robot là các góc 0, đây
cũng là vị trí home của robot. Ta thực hiện mô phỏng để xem kết quả mà robot bằng cơ khí
mang lại.

Hình 3-24 mô phỏng để xem kết quả mà robot bằng cơ khí

Vị trí home của robot hoàn toàn chính xác, các góc khớp được đua vào làm cho vị
trí robot đúng so với tính toán.
Ta mô phỏng thêm để kiểm chứng lại cho chính xác :
GVHD : Nguyễn Văn Thái

Hình 3-25 Góc khớp thứ 2 là góc 90 độ để kiểm chứng

Ta đưa vào góc khớp thứ 2 là góc 90 độ để kiểm chứng.

Hình 3-26 Robot cơ khí quay góc khớp thứ 2 là góc 90 độ

Trục Z được đặt từ phải sang trái nên áp dụng quy tắc bàn tay phải ta có thể biết
được link 2 sẽ được quay lên trên một góc 90 độ. Việc này cũng chính xác so với việc đặt
trục theo phương pháp John Jcrag.
3.3 Xây dựng giao diện điều khiển bằng matlab và mô phỏng

Các câu lệnh phổ biến:


GVHD : Nguyễn Văn Thái

− Msgbox(“Text cần hiển thị”): Dùng để hiển thị ra pop-up window thông báo câu
lệnh cho người dùng.
− …=str2num(get(handles.Tag,'string')): Dùng để lấy dữ liệu từ người ngoài nhập
vào (kiểu string).
− …=str2num(get(handles.Tag,'value')): Dùng để lấy dữ liệu từ người ngoài nhập
vào (kiểu value).
− set(handles.KetQua,'String',num2str(kq)): Dùng để xuất ra lại kết quả mong
muốn ra thành kiểu string.
− Axes(handles.axes): Lệnh này được sử dụng khi ta xài nhiều Axes (hình ảnh) để ta
mong muốn hiển thị trên axes nào thì chúng ta sẽ sử dụng lệnh này.
− Giao diện chính: bao gồm tên logo, tên đề tài, tên giảng viên hướng dẫn và nhóm
sinh viên thực hiện. Các nút nhấn chuyển sang giao diện: Kinematics (Kiểm chứng
động học), Exit (Đóng cửa sổ giao diện).

Hình 3-27 Giao diện điều khiển mô phỏng trên Design App - Matlab

Cách thực hiện :


Chèn hình ảnh: Trong giao diện guide, ta chọn phần Image trong phần công cụ
của phần mềm sau đó nhấn chọn Brow để mở file ảnh được lưu trong máy. Lưu ý nên để
ảnh ở cùng một file với giao diện điều khiển :
GVHD : Nguyễn Văn Thái

Hình 3-28 Chọn vào image trên toolbox

Hình 3-29 Chạy chương trình điều khiển


GVHD : Nguyễn Văn Thái

Chèn chữ: ta kéo thả Label bên thanh công cụ “Component Library” ra giao diện
thiết kế, ghi nội dung bằng cách nhân đúp chuột vào thành label để thay đổi nội dung, định
dạng lại ô chữ ở các mục khác trong bảng Inspector :

Hình 3-30 Chèn chữ vào trong label

Tạo nút nhấn: để tạo nút nhấn link sang các giao diện khác, ta chỉ cần kéo thả
button bên thanh công cụ ra giao diện thiết kế, vào viewcallback/callback để tạo ra chương
trình chức năng cho nút nhấn. Tại đây ta chỉ cần gõ vào tên của giao diện cần link như hình
dưới đây ;
function GOTOButtonPushed(app, event)
closereq;
run 'app1.mlapp';
Hàm “Closereq” dùng để đóng ứng dụng lại và hàm “run” dùng để mở một giao
diện khác mà ta đã tạo bằng desgin app.
Giao diện kiểm chứng động học: Ở phận giao diện này nhóm có menubar để tạo
ra sự chuyển tab một cách uyển chuyển và chuyên nghiệp, ta vào phần ‘COMPONENT
LIBRARY và kéo xuống phần ‘FIGURE TOOLS’ để kéo thả vào trong phần giao diện mà
ta muốn thiết kế:
GVHD : Nguyễn Văn Thái

Hình 3-31 Chọn vào Menu Bar trên toolbox

Ở giao diện chính bao gồm tính toán động học thuận, động học nghịch cho Robot
đồng thời sẽ có thêm các ‘’edit fied’’ và các thanh ‘Slider’ dùng để thay đổi các góc của
robot. Ở đây nhóm có thiết kế thêm phần “UIAxes” dùng để thể hiện trạng thái của robot
khi ta thay đổi các góc theta.

Hình 3-32 Giao diện chính điều khiển

Ở phần động học thuận, ta chỉ cần kéo các ‘Slider’ thì trạng thái robot sẽ lập tức
thay đổi theo mà không cần thông qua một nút nhận nào để thiết lập trạng thái. Đồng thời
khi ta nhấn “Switch On” thì file “Simulink” cũng sẽ bắt đầu mô phỏng và robot được ta
chuyển vào SimScape cũng chạy theo để mô phỏng các góc mà ta đặt trên giao diện. Để
làm được việc này, ta cần sử dụng câu lệnh :
set_param('awe/t1','Value','0');
set_param('awe/t2','Value','0');
set_param('awe/t3','Value','0');

set_param('awe/c','Commented',"on");
set_param('awe',"StartTime",'0','StopTime','inf');
set_param('awe',"SimulationCommand",'start');
Ta dùng câu lệnh “set_param” để gọi file “Simulink” và bắt đầu mô phỏng.
Về phần động học nghịch ta nhập tọa độ x,y,z và nhấn nút nhấn “Computed” sẽ
hiện ra kết quả của 3 góc theta, lúc này robot và trên “UIAxes” cũng sẽ thay đổi để đi đến
vị trí ta mong muốn.
Exit để thoát chương trình và Go Home để về lại giao diện chính.
GVHD : Nguyễn Văn Thái

● Cách thực hiện :


Ta khởi động giao diện điều khiển được thiết kế bằng “design app” của matlab. Ở giao
diện chính sẽ hiện thị các thông tin cơ bản của người thiết kế.
Ta nhấn nút “EXIT” thì sẽ thoát khỏi app và dừng chương trình.

Hình 3-33 Thoát chương trình

Nếu ta nhấn nút “GO TO” thì sẽ chuyển đến giao diện chính để thực hiện công việc điều
khiển :
GVHD : Nguyễn Văn Thái

Hình 3-34 Chuyển trang chương trình

Giao diện điều khiển sẽ hiện lên và tắt đi giao diện chính :

Hình 3-35 Giao diện điều khiển chính

Để thực hiện công việc mô phỏng, ta cần kéo Switch “ON - OFF”, lúc này, robot từ
simulink sẽ được chạy và thiết lập ở vị trí home khi các góc theta đều tiến về 0. Công việc
tiếp theo, ta chỉ cần mô phỏng động học thuận và ngược.
GVHD : Nguyễn Văn Thái

Hình 3-36 Khởi động chương trình mô phỏng

Sau khi gạt switch home thì trên biểu đồ thể hiện vị trí home của robot giống với
robot được gọi ra từ simulink, ở phần vị trí điểm đầu cuối của robot thể hiện vị trí home
của robot, các góc theta và các thanh Slider đề về không, “editField text ” thể hiện vị trí
của các thanh theta cũng tiến về không.
Tiến hành mô phỏng động học thuận cho robot :
1. Mô phỏng với góc theta 1, 2, 3 lần lượt là : 0, 90 và -90 độ ta thu được :

Hình 3-37 Mô phỏng động học thuận trường hợp 1

Theo quy tắc bàn tay phải thì góc hướng lên trên vì cùng chiều dương và góc
hướng xuống dưới vì góc âm ngược chiều dương. Vị trí robot được thể hiện ở các ô
“Position x”, “Position y” và “Positon z” tượng trương cho các vị trí của robot trên các trục
tham chiếu như được đặt ở phần cơ sở lý thuyết.
2. Mô phỏng với góc theta 1, 2, 3 lần lượt là : 90, 0 và -90 độ ta thu được :
GVHD : Nguyễn Văn Thái

Hình 3-38 Mô phỏng động học thuận trường hợp 2

Tương tự như trên do trục Z của robot hướng lên nên robot sẽ quay góc theta 1, 1 góc
90 độ về bên tay trái theo quy tắc bàn tay phải. Vị trí cũng được thể trên các ô “Position x”,
“Position y” và “Positon z”.
3. Mô phỏng ở 1 một góc bất kì ngẫu nhiên theta 1,2,3 lần lượt là -3.578,73.45 và -
97.52 :

Hình 3-39 Mô phỏng động học thuận trường hợp 3

Sau khi mô phỏng với trường hợp này ta cũng thu được các vị trí tương ứng với góc
khớp của robot. Ta sẽ kiểm chứng động học nghịch bằng các vị trí ở trên.
Tiến hành mô phỏng động học nghịch cho robot :
Trường hợp 1 : Mô phỏng động học nghịch robot với vị trí và 235, 52 và 162 tương
ứng với trường hợp 1 khi ta mô phỏng động học thuận :
GVHD : Nguyễn Văn Thái

Hình 3-40 Mô phỏng động học nghịch trường hợp 1

Các góc được tính toán ra một cách chính xác và cung cấp cho robot di chuyển đến bị
trí chính xác, đối xứng với động học thuận thì hoàn toàn chính xác. Trên các ô “Position
x”, “Position y” và “Positon z” hiện thị ra vị trí hiện tại của robot, lúc này sự tính toán là
hoàn toàn khớp với vị trí ta mong muốn.
Trường hợp 2 : Mô phỏng động học nghịch robot với vị trí và -52, 267 và 162
tương ứng với trường hợp 2 khi ta mô phỏng động học thuận :

Hình 3-41 Mô phỏng động học nghịch trường hợp 1

Cũng như trường hợp trên, thì trường hợp này việc tính toán ra kết quả cũng hoàn toàn
chính xác, vị trí robot hiện thị trên các ô vị trí cũng khớp với vị trí mong muốn của ta khi
sử dụng động học nghịch.
Ở trường hợp cuối cùng với vị trí lần lượt là 272; 35,06 và 102.3 :
GVHD : Nguyễn Văn Thái

Hình 3-42 Mô phỏng động học nghịch trường hợp 1

Tương tự như các trường hợp trên, sự sai lệch không đáng kể là do việc làm tròn
số, tuy nhiên robot vẫn hoạt động một cách chính xác, vị trí tính toán được vẫn trùng khớp
với vị trí ta mong muốn.
Quy hoạch quỹ đạo cho robot :

Hình 3-43 Quy hoạch quỹ đạo cho robot

Với khối đầu là quy hoạch quỹ đạo theo đường thẳng, khối này sẽ tính toán đưa ra các vị
trí của robot để quy hoạch quỹ đạo, sau đó được đưa vào khối động học nghịch để tính
toán ra các góc khớp theta chính xác và đưa vào robot để tiến hành, quy hoạch quỹ đạo,
một phần là đưa vào lại khối động học thuận để kiểm tra vị trí của robot.
Ở đây nhóm quy hoạch quỹ đạo dạng bậc ba với thời gian quy hoạch là 4s :
GVHD : Nguyễn Văn Thái

Hình 3-44 biểu đồ đường màu xanh thể hiện đường thẳng mà quỹ đạo robot đi qua

Kết quả thu được : Trên biểu đồ đường màu xanh thể hiện đường thẳng mà quỹ đạo
robot đi qua.
Trạng thái cuối của robot :

Hình 3-45 Trạng thái cuối của robot


GVHD : Nguyễn Văn Thái

3.4 Xây dựng giao diện điều khiển trên mô hình thực với Window

Forms App:

Để có thể tạo ra một giao diện, ta click chọn Window Forms App và ngôn ngữ là c#.net:

Hình 3-46 Window Forms App

Ở phần giao diện chủ đạo nhóm có thiết kế thêm phần đăng nhập với 2 ô textbox là
1 nút nhấn dùng để đăng nhập, nếu ta không nhập mật khẩu hoặc tài khoản thì sẽ có một
Message Box hiện ra thông báo để ta nhập vào và không cho phép để trống hoặc nếu ta
nhập sai tài khoản hoặc mật khẩu thì cũng sẽ có một Message Box hiện ra để cảnh báo.
Ở trường hợp ta không nhập mật khẩu hoặc tài khoản :
GVHD : Nguyễn Văn Thái

Hình 3-47 Giao diện đăng nhập thiếu tài khoản và mật khẩu

Ở trường hợp ta nhập sai mật khẩu và tài khoản :

Hình 3-48 Giao diện khi nhập sai tài khoản hoặc mật khẩu

Việc này giúp cho người dùng dễ kiểm soát chương trình điều khiển một cách linh
hoạt.
Về phần ảnh bìa, để có thể chèn được ảnh bìa vào bên trong thanh “ToolBox” và
tìm kiếm “PictureBox”.
GVHD : Nguyễn Văn Thái

Hình 3-49 Chọn PictireBox trên thanh toolbox

Sau đó ta chọn tỉ lệ ảnh cho phù hợp với khung hình bằng cách sửa đổi ở phần Properties :

Hình 3-50 Thay đổi thuộc tính của PictureBox


GVHD : Nguyễn Văn Thái

Phần “SizeMode” ta chọn “StretchImage” để chọn ảnh tự điều chỉnh tỉ lệ cho phù
hợp với khung ảnh. Phần Size ta có thể chọn hoặc kéo trực tiếp trên “PictureBox”. Ta nên
đổi tên của các gói để dễ dàng lập trình.
Để có thể hiện thị được ảnh ra bên ngoài giao diện chính ta vào phần chương trình
và sử dụng các câu lệnh :

Hình 3-51 Xuất ảnh lên PictureBox

Khi vừa khởi động thì ảnh sẽ được hiện thị ra ngoài màn hình. Ta chỉ cần dán
đường dẫn của ảnh vào phần Bitmap.
Sau khi ta đăng nhập vào được thì giao diện sẽ được chuyển hướng đến giao diện
chính bằng câu lệnh :
this.Hide();
Form2 frm2 = new Form2();
popup popup = new popup();
frm2.ShowDialog();

Hình 3-52 Giao diện điều khiển chính


GVHD : Nguyễn Văn Thái

Để có thể sử dụng được giao diện kết nối với máy tính thông qua truyền thông
UART ta cần phải kết nối với máy tính bằng gói Serial Port.

Hình 3-53 Cổng kết nối SerialPort

Sau đó để lấy được các cổng com đang kết nối với máy tính và hiện ra combo box
ta cần lấy “Combo Box”.

Hình 3-54 Chọn ComboBox trên thanh Toolbox

Để lấy được các port đang giao tiếp với máy tính và xuất lên “ComboBox” ta thực
hiện các lệnh :
comboBoxPort.DataSource = SerialPort.GetPortNames();
Để có thể kết nối được với cổng com ta chọn, ta cần thêm một nút nhấn “connect”.
Câu lệnh để ta có thể thiết lập port cần kết nối :
serialPort.PortName = comboBoxPort.Text;
serialPort.Open();
Tương tự với “Com Port” , “Baudrate” cũng được thiết lập tương tự.
Baudrate là một thuật ngữ được sử dụng trong viễn thông và kỹ thuật truyền dẫn để
chỉ tốc độ truyền dữ liệu trên một kênh liên lạc. Nó đo lường số lượng các ký tự (bits)
được truyền qua kênh trong một thời gian nhất định, thường được đo bằng đơn vị "baud"
(baud là số lượng tín hiệu truyền dẫn sử dụng mỗi giây).
Tuy nhiên, đôi khi thuật ngữ "baudrate" cũng được sử dụng để chỉ tốc độ truyền dữ
liệu tổng thể, bao gồm cả bit dữ liệu và các bit kiểm tra/tiền tố. Ví dụ, trong các giao thức
truyền thông như RS-232, "baudrate" thường được sử dụng để chỉ tốc độ truyền dữ liệu
tổng thể, bao gồm cả các bit kiểm tra và bit dừng.
GVHD : Nguyễn Văn Thái

Tóm lại, baudrate là tốc độ truyền dữ liệu trên kênh truyền dẫn, được đo bằng đơn
vị "baud" và có thể chỉ tốc độ truyền dữ liệu tổng thể hoặc chỉ tốc độ truyền dữ liệu bit dữ
liệu tùy thuộc vào ngữ cảnh sử dụng.
Ta cần tạo một chuỗi, sau đó thêm chuỗi đó vào “Combo Box” để chọn được
baudrate.
string[] bauds = { "1200", "2400", "4800", "9600", "115200" };
comboBoxBaud.Items.AddRange(bauds);
Đồng thời khi kết nối ta thể hiện lên label dòng chữ “Đang kết nối” hoặc “Chưa kết
nối” để thể hiện trạng thái hiện tại.
Ta gộp chung các khối lại với nhau : Phần kết nối, động học thuận và động học
nghịch. Để dễ kiểm soát ta dùng “Group Box”.

Hình 3-55 Chọn GroupBox trên thanh toolbox

Về phần động học thuận, để sử dụng các thanh “Trackbar” ta cũng vào phần
ToolBox để chọn :

Hình 3-56 Chọn TrackBar trên thanh toolbox

Sau đó ta điều chỉnh font, kích cỡ, màu sắc ở phần property :
GVHD : Nguyễn Văn Thái

Hình 3-57 Thay đổi thuộc tính thanh TrackBar

Để “Textbox” có thể thay đổi theo khi ta kéo thanh trackbar thì ta phải cài đặt thuộc tính
“Mouse Move” thanh trackbar :

Hình 3-58 Phải cài đặt thuộc tính “Mouse Move” thanh trackbar

Ta cần thay đổi “textbox” để hiện thị các góc theta ra khi ta thay đổi, ta cần thêm hàm cho
động học thuận :
GVHD : Nguyễn Văn Thái

private double[] ForwardKinematics(double T1, double T2, double T3)


{
double Theta1 = T1 * pi / 180;
double Theta2 = T2 * pi / 180;
double Theta3 = T3 * pi / 180;

double Px = Math.Cos(Theta1) * (l1 + l2 * Math.Cos(Theta2) + l3 *


Math.Cos(Theta2 + Theta3)) - d1 * Math.Sin(Theta1);
Px = Math.Round(Px, 2);
double Py = Math.Sin(Theta1) * (l1 + l2 * Math.Cos(Theta2) + l3 *
Math.Cos(Theta2 + Theta3)) + d1 * Math.Cos(Theta1);
Py = Math.Round(Py, 2);
double Pz = l3 * Math.Sin(Theta2 + Theta3) + l2 * Math.Sin(Theta2);
Pz = Math.Round(Pz, 2);
double[] vitri = { Px, Py, Pz };

return vitri;
}
Ở hàm này, ta tạo ra một hàm con và trả về các giá trị về vị trí khi ta thay đổi các góc khớp
và hiển thị ra các “textbox”
Theta1_temp = (double)trackBarThe1.Value;
Theta2_temp = (double)trackBarthe2.Value;
Theta3_temp = (double)trackBarthe3.Value;

textBoxthe3.Text = Theta3_temp.ToString();

double[] vitri = ForwardKinematics(Theta1_temp, Theta2_temp, Theta3_temp);

double Px = vitri[0];
double Py = vitri[1];
double Pz = vitri[2];

textBoxXFor.Text = Px.ToString();
textBoxyFor.Text = Py.ToString();
textBoxzFor.Text = Pz.ToString();
Để gửi dữ liệu sang cổng serial cho vi điều khiển ta cần hàm “Serial.Write()”. Ở
đây dữ liệu được gửi có dạng : “PulseTheta1+a+PulseTheta2+b+PulseTheta3+c+s”. Ta cần
lấy dữ liệu từ các “trackbar” đang được thay đổi và chuyển về dạng “Integer32” sau đó
GVHD : Nguyễn Văn Thái

hiện thị lên các “textBox”. Sau đó, ta lưu lại vào biến “theta_temp”. Ta gán giá trị đọc
được vào biến “Theta” sau đó cần tìm góc quay thêm so với góc đã tồn tại lúc trước, các
giá trị trước đó sau khi kết thúc ta, ta so sánh giá trị đọc được với giá trị trước đó, nếu có
sự thay đổi thì ta sẽ lấy góc hiện tại trừ đi góc trước đó, góc cung cấp “Theta_supply” sẽ là
hiệu của 2 góc đó. Xung cung cấp sẽ là góc “Theta_supply”, nhân với xung của 1 vòng là
200 và tỉ số truyền của puly sẽ là 3.75 do puly ở trục động cơ và puly to. Puly ở trục động
cơ là 16 răng và puly to dùng để truyền động là 60 răng nên sẽ có tỉ số truyền như vậy. Ta
có giảm bước của động cơ đi 16 lần.
Công thức truyền động :

trackBarThe1.Value = Convert.ToInt32(textBoxthe1.Text);
trackBarthe2.Value = Convert.ToInt32(textBoxthe2.Text);
trackBarthe3.Value = Convert.ToInt32(textBoxthe3.Text);

Theta1_temp = Convert.ToInt32(textBoxthe1.Text);
Theta2_temp = Convert.ToInt32(textBoxthe2.Text);
Theta3_temp = Convert.ToInt32(textBoxthe3.Text);

Theta1 = Theta1_temp;
Theta2 = Theta2_temp;
Theta3 = Theta3_temp;

if (Theta1_past != Theta1)
{
Theta1_supply = Theta1 - Theta1_past;
Theta1_past = Theta1;
}
else

Theta1_supply = 0;

if (Theta2_past != Theta2)
{
Theta2_supply = Theta2 - Theta2_past;
Theta2_past = Theta2;
}
else
GVHD : Nguyễn Văn Thái

Theta2_supply = 0;

if(Theta3_past != Theta3)
{
Theta3_supply = Theta3 - Theta3_past;
Theta3_past = Theta3;
}
else

Theta3_supply = 0;

pulse_t1 = (Int32)(Theta1_supply * 200 * 3.75 * 16 / 360);


pulse_t2 = (Int32)(Theta2_supply * 200 * 3 * (59/11) * 16 / 360);
pulse_t3 = (Int32)(Theta3_supply * 200 * 3.75 * 16 / 360);

Console.WriteLine(Theta1_supply);
Console.WriteLine(Theta2_supply);
Console.WriteLine(Theta3_supply);

serialPort.Write(pulse_t1.ToString() + "A" + pulse_t2.ToString() + "B" +


pulse_t3.ToString() + "C"+ "s");
Để có thể thay đổi ta cần kết nối với cổng serial, nếu chưa kết nối thì sẽ hiện lên một
“Message Box” thông báo để chúng ta có thể kết nối và sử dụng.
GVHD : Nguyễn Văn Thái

Hình 3-59 Khi cổng Serial chưa được kết nối

Ta cần thực hiện các câu lệnh để có thể hiện ra thông báo :
if (!serialPort.IsOpen)
{
MessageBox.Show("Cổng serial chưa được kết nối", "Thông báo",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
Nếu cổng “serial” không được mở thì ta sẽ hiện ra một thông báo yêu cầu kết nối
với cổng COM.
Tương tự như vậy, khi ta “Set home” cho robot, ta reset tất cả các biến. có trong bài
và gửi một kí tự “r” xuống arduino.
double l1 = 105;
double l2 = 162;
double l3 = 130;
double d1 = 52;
Theta1 = 0;
Theta2 = 0;
Theta3 = 0;

Theta1_temp = 0;
Theta2_temp = 0;
Theta3_temp = 0;

Theta1_supply = 0;
GVHD : Nguyễn Văn Thái

Theta2_supply = 0;
Theta3_supply = 0;

Theta1_past = 0;
Theta2_past = 0;
Theta3_past = 0;

trackBarThe1.Value = Convert.ToInt32(Theta1);
trackBarthe2.Value = Convert.ToInt32(Theta1);
trackBarthe3.Value = Convert.ToInt32(Theta1);

double[] Position = ForwardKinematics(Theta1_temp, Theta2_temp,


Theta3_temp);
textBoxthe1.Text = Theta1.ToString();
textBoxthe2.Text = Theta2.ToString();
textBoxthe3.Text = Theta3.ToString();
serialPort.Write("r");

Về động học nghịch dựa các công thức tính toán ở chương số 2, dựa vào đó ta viết
ra hàm để tính toán ra các góc khớp, đưa robot đến vị trí mà ta mong muốn.
Hàm được để tính động học nghịch được tính toán như sau:
double x = Convert.ToDouble(textBoxXInv.Text);
double y = Convert.ToDouble(textBoxyInv.Text);
double z = Convert.ToDouble(textBoxzInv.Text);

// Tinh theta1:
double alpha = Math.Atan2(x, y);
double theta1n = Math.Atan2(Math.Sqrt(1 - ((d1 / Math.Sqrt(x * x + y * y)) *
(d1 / Math.Sqrt(x * x + y * y)))), d1 / Math.Sqrt(x * x + y * y)) - alpha;
// Tinh theta2
double un = x * Math.Cos(theta1n) + y * Math.Sin(theta1n) - l1;
double v = z;
double betan = Math.Atan2(un, v);
double t2xn = ((un * un + v * v + l2 * l2 - l3 * l3) / (Math.Sqrt(((2 * un * l2) * (2
* un * l2)) + (2 * v * l2) * (2 * v * l2))));
double t2y1n = Math.Sqrt(1 - ((un * un + v * v + l2 * l2 - l3 * l3) /
(Math.Sqrt(((2 * un * l2) * (2 * un * l2)) + (2 * v * l2) * (2 * v * l2)))) * ((un * un + v * v
+ l2 * l2 - l3 * l3) / (Math.Sqrt(((2 * un * l2) * (2 * un * l2)) + (2 * v * l2) * (2 * v *
GVHD : Nguyễn Văn Thái

l2)))));
double t2y2n = -Math.Sqrt(1 - ((un * un + v * v + l2 * l2 - l3 * l3) /
(Math.Sqrt(((2 * un * l2) * (2 * un * l2)) + (2 * v * l2) * (2 * v * l2)))) * ((un * un + v * v
+ l2 * l2 - l3 * l3) / (Math.Sqrt(((2 * un * l2) * (2 * un * l2)) + (2 * v * l2) * (2 * v *
l2)))));
double theta2n = Math.Atan2(t2xn, t2y1n) - betan;
double theta2n2 = Math.Atan2(t2xn, t2y2n) - betan;
// Tinh toan theta3 :
double theta3n = Math.Atan2(v - l2 * Math.Sin(theta2n), un - l2 *
Math.Cos(theta2n)) - theta2n;
double theta3n2 = Math.Atan2(v - l2 * Math.Sin(theta2n2), un - l2 *
Math.Cos(theta2n2)) - theta2n2;

double theta1ndeg = theta1n * 180 / pi;

double theta2ndeg = theta2n * 180 / pi;


double theta2n2deg = theta2n2 * 180 / pi;

double theta3ndeg = theta3n * 180 / pi;


double theta3n2deg = theta3n2 * 180 / pi;

theta1ndeg = (Int32)theta1ndeg;
theta2ndeg = (Int32)theta2ndeg;
theta3ndeg = (Int32)theta3ndeg;

theta1ndeg = (Int32)theta1ndeg;
theta2n2deg = (Int32)theta2n2deg;
theta3n2deg = (Int32)theta3n2deg;

double[] bonghiem1 = { theta1ndeg, theta2ndeg, theta3ndeg };


double[] bonghiem2 = { theta1ndeg, theta2n2deg, theta3n2deg };

Các hàm toán học được sử dụng trong thư viện “Math” dùng để tính toán các hàm
“Sin”,”Cos”, “Căn bậc2”,… sau khi tính toán ra 2 bộ nghiệm ta lần lượt lưu vào các mảng
là “bonghiem1” và “bonghiem2”.
Ở phần này, ta tạo một “ComboBox” để lưu 2 bộ nghiệm vừa tính toán được, ta tạo
một chuỗi “string” để xác định ra các bộ nghiệm.
string[] Nghiem = { "Solution 1", "Solution 2" };
comboBoxNg.Items.AddRange(Nghiem);
GVHD : Nguyễn Văn Thái

Ở chuỗi String này ta lưu vào là “Solution 1” và “solution 2”, tiếp theo ta thêm vào
trong “ComboBox” để thêm chuỗi này vào bằng lệnh “AddRange” để thêm vào.
Khi load form sẽ mặc định là bộ nghiệm 1 được sử dụng bằng cách thêm vào phần
load form “comboBoxNg.Text = "Solution 1"” .
Để sử dụng các bộ nghiệm ta sử dụng các câu lệnh :
if (comboBoxNg.Text == "Solution 1")
{
textBoxThe1Inv.Text = bonghiem1[0].ToString();
textBox1The2Inv.Text = bonghiem1[1].ToString();
textBoxThe3Inv.Text = bonghiem1[2].ToString();
}
else
{
textBoxThe1Inv.Text = bonghiem2[0].ToString();
textBox1The2Inv.Text = bonghiem2[1].ToString();
textBoxThe3Inv.Text = bonghiem2[2].ToString();
}

Nếu ta chọn nghiệm 1 thì sẽ lấy các giá trị của bộ nghiệm 1 để thực hiện tính toán
và xuất ra các “textbox”. Còn ngược lại thì sẽ dùng bộ nghiệm còn lại và xuất ra để tính
toán.
Cũng như phần động học thuận, sau khi tính toán ra các góc thì cũng sẽ gửi đi các
xung tương ứng với các góc quay tiếp tục so với góc ban đầu. Dữ liệu được gửi có dạng :
“PulseTheta1+A+PulseTheta2+B+PulseTheta3+C+s”.
Trước khi dữ liệu được gửi ta cần nhấn vào nút “Tính toán góc khớp” để tính toán
ra được các góc khớp. Sau đó sẽ gửi xung cần điều khiển qua cổng Serial xuống arduino.
GVHD : Nguyễn Văn Thái

Chương 4. Thiết kế thi công và kết quả thực

nghiệm

4.1 Thiết kế cơ khí :

Về phần cơ khí, nhóm thiết kế trên phần mềm AutoCad và mô phỏng 3D trên phần
mềm SolidWork để xem hình dáng của cánh tay robot. Việc thiết kế bằng cả 2 phần mềm
giúp nhóm sinh viên có thể kiểm soát được độ chính xác của bản thiết kế một cách chi tiết
nhất.

Hình 4-1 Bản vẽ SolidWork phần đế

Đây là bản vẽ tổng quan 3D của phần đế. Sau đây sẽ là phần chi tiết tất cả các
thành phần cấu tạo nên phần đế của robot :
GVHD : Nguyễn Văn Thái

Hình 4-2 Bản vẽ AutoCad phần đế

Tổng thể về phần đế và kích thước từng lỗ được nhóm trình bày kĩ trong file
AutoCad.
Ta sẽ thiết kế đến khâu 1 :
GVHD : Nguyễn Văn Thái

Hình 4-3 Bản vẽ SolidWork phần link 1

Bản vẽ khâu 1 của cánh tay robot trong AutoCad :

Hình 4-4 Bản vẽ AutoCad phần link 1

Bản vẽ khâu thứ 2 cho robot :


GVHD : Nguyễn Văn Thái

Hình 4-5 Bản vẽ SolidWork phần link 2

Thiết kế link thứ 2 trên AutoCad chi tiết các thành phần:

Hình 4-6 Bản vẽ AutoCad phần link 2

Thông số 3D của khâu cuối của robot thiết kế trên phần mềm SolidWorks :
GVHD : Nguyễn Văn Thái

Hình 4-7 Bản vẽ SolidWork phần link 3

Thiết kế cơ khí của robot trên phần mềm AutoCad :

Hình 4-8 Bản vẽ AutoCad phần link 3

Sau khi thiết kế ta lắp ghép các link lại thành robot hoàn chỉnh :
GVHD : Nguyễn Văn Thái

Hình 4-9 Robot hoàn thiện trên SolidWork

4.2 Thi công cánh tay robot :

Sau khi có được bản vẽ được lên một cách chi tiết, ta thực hiện thi công robot, vật liệu
chính được xử dụng trong báo cáo là Mica.

Hình 4-10 Cánh tay robot khi nhìn từ phải


GVHD : Nguyễn Văn Thái

Hình 4-11 Cánh tay robot khi nhìn từ trên xuống

Hình 4-12 Cánh tay robot khi nhìn từ trong ra


GVHD : Nguyễn Văn Thái

Hình 4-13 Cánh tay robot khi nhìn từ trước vào

Các hình ảnh robot thi công được hoàn thiện với các rãnh nẹp điện và các ống ruột
gà được quấn một cách cẩn thận, phần đề được cố định trên một tấm gỗ có kích thước
40x60, do diện tích khá to nên nhưỡng vật dụng chứa trên đấy nhìn rất gọn gàng.
4.3 Thiết kế mạch điện cho cánh tay robot :

Hình 4-14 Bản vẽ mạch điện sử dụng cho robot


GVHD : Nguyễn Văn Thái

Ở phần điều khiển, có một module phục vụ để điều khiển cho động cơ Step là module
Shield CNC V3, như vậy ta chỉ cần cắm board này vào vi xử lý trung tâm là arduino uno
và nối dây như trên hình để có thể điều khiển được động cơ.
4.4 Thực nghiệm kiểm chứng robot :

4.4.1 Kiểm chứng động học thuận :

Đầu tiên, ta tiến hành Set Home cho robot, lúc này cá góc của robot đều về 0 độ so với trục
tọa độ. Tọa độ điểm đầu cuối cũng tương đương với khi tính toán và mô phỏng.

Hình 4-15 Set Home khi điều khiển robot

Đối với khi ta set vị trí ban đầu của robot bằng nút nhấn “Home” trên giao diện
điều khiển của robot thì các góc của thanh “Track Bar” đều về không, các góc khớp đều
bằng không và điểm đầu cuối là tọa độ của điểm cuối cùng trên khâu 3 của robot so với tọa
độ đã được đặt ở phần cơ sở lý thuyết. Dưới đây là hình ảnh ở vị trí home của robot, các
góc đều bằng 0.
GVHD : Nguyễn Văn Thái

Hình 4-16 Vị trí robot khi sethome

Như trên hình ta cũng thấy có các điểm được đánh dấu, ta sẽ tiến hành mô phỏng
động học của robot bằng cách kéo các thanh “Track Bar” để điểm cuối trên cánh tay robot
đi đến vị trí đấy.
Trường hợp 1 : Ta điều khiển robot đến vị trí được đánh dấu bên tay phải. Sau đó
ta rút ra được các góc khớp theta và cần lưu lại vị trí điểm đầu cuối để kiểm nghiệm động
học nghịch.

Hình 4-17 Trường hợp 1 động học thuận robot

Sau khi gửi dữ liệu bằng nút “Send Forward” ta nhận được vị trí thực tế của robot :
GVHD : Nguyễn Văn Thái

Hình 4-18 Vị trí robot ở trường hợp 1

Cánh tay robot đã đi đúng vị trí với các góc quay như vậy. Cũng đã tính toán được
vị trí của điểm đầu cuối robot.
Ta thử thêm 2 trường hợp để có thể đưa ra nhận xét chính xác nhất.
Trường hợp 2: với điểm được đánh dấu : chính giữa, ta cũng thực hiện giống như
trên và đã tìm kiếm được các góc theta phù hợp với vị trí này:

Hình 4-19 Trường hợp 2 động học thuận robot

Sau khi gửi dữ liệu bằng nút “Send Forward” ta nhận được vị trí thực tế của robot ở
trường hợp này
GVHD : Nguyễn Văn Thái

Hình 4-20 Vị trí robot ở trường hợp 2

Cũng như trường hợp trước, cánh tay điều khiển rất chính xác và trơn tru,
Trường hợp 3 :ta cũng đưa robot đi đến điểm được đánh dấu cuối cùng trên mặt phẳng :

Hình 4-21 Trường hợp 3 động học thuận robot

Sau khi gửi dữ liệu bằng nút “Send Forward” ta nhận được vị trí thực tế của robot ở
trường hợp thứ ba này:
GVHD : Nguyễn Văn Thái

Hình 4-22 Vị trí robot ở trường hợp 3

4.4.2 Kiểm chứng động học nghịch cho robot :

Trường hợp 1 : Ta sử dụng, các vị trí giống ở trường hợp 1 động học thuận để có thể đưa
điểm đầu cuối đến điểm trùng khớp như động học thuận :

Hình 4-23 Trường hợp 1 và bộ nghiệm 1 động học nghịch robot

Ta tính ra được các góc khớp dựa trên bộ nghiệm thứ 1, sau đó gửi qua serial cho
robot điều khiển.
Ngoài ra, ta cũng có thể tính toán được bộ nghiệm thứ 2.
GVHD : Nguyễn Văn Thái

Hình 4-24 Trường hợp 2 và bộ nghiệm 2 động học nghịch robot

Sau đó ta gửi dữ liệu của bộ nghiệm 1 xuống cho robot và kiểm chứng :

Hình 4-25 Vị trí robot ở trường hợp 1

Sau khi gửi dữ liệu thì vị trí hoàn toàn đúng, điểm cuối trên cánh tay robot di
chuyển được đến điểm được đánh dấu trên mặt phẳng.
Trường hợp 2 của động học nghịch : Ta đưa cánh tay robot điểm vị trí được đánh
dấu trên mặt phẳng như ở trưởng hợp 2 của kiểm chứng động học thuận :
GVHD : Nguyễn Văn Thái

Hình 4-26 Trường hợp 2 và bộ nghiệm 1 động học nghịch robot

Ta tính toán bằng bộ nghiệm một ra được các góc hoàn toàn trùng hợp so với ở
trường hợp động học thuận.
Ta tính toán bằng bộ nghiệm thứ 2 :

Hình 4-27 Trường hợp 2 và bộ nghiệm 2 động học nghịch robot

Sau đó ta gửi dữ liệu được tính toán bằng động học nghịch qua cổng serial cho
arduino để điều khiển robot đến vị trí ở trường hợp 2 :
GVHD : Nguyễn Văn Thái

Hình 4-28 Vị trí robot ở trường hợp 2

Hình 4-29 Vị trí robot ở trường hợp 2

Vị trí hoàn toàn khớp so với động học thuận. Điểm cuối trên trên robot đến được
điểm được đánh dấu số 2.
Ta thử thêm một trường hợp cuối để đưa ra kết luận :
GVHD : Nguyễn Văn Thái

Hình 4-30 Trường hợp 3 và bộ nghiệm 1 động học nghịch robot

Bộ nghiệm thứ 2 của vị trí này :

Hình 4-31 Trường hợp 3 và bộ nghiệm 2 động học nghịch robot

Sau đó ta tiến hành gửi dữ liệu này cho robot để có thể kiểm tra được sự chính xác trên mô
hình :
GVHD : Nguyễn Văn Thái

Hình 4-32 Vị trí robot ở trường hợp 3

Cũng như các trường hợp trên, trường hợp này cũng hoàn toàn chính xác. Vị trí điểm đầu
cuối của robot cũng đi đến được vị trí được đánh dấu thứ ba.
Tổng hợp các trường hợp được kiểm chứng :
Bảng 4-1 Các vị trí kiểm nghiệm động học nghịch

STT Vị trí Góc


1 X=160.47
Y= -173.95
Z -173.95
2 X = 251.45
Y= -59.88
Z = 240.12
3 X= 117.68
Y= 131.38
Z= 228.3
GVHD : Nguyễn Văn Thái

Chương 5. Kết luận và hướng phát triển

5.1 Kết quả đạt được :

− Qua đề tài, nhóm đã thực hiện thiết kế mô hình và điều khiển cánh tay robot 3 bậc
tự do thành công:
− Tính toán kích thước và thiết kế hình dạng robot qua phần mềm trên Solidworks.

− Tính toán được các phương trình về động học cho robot.

− Vẽ 2D mô hình thiết kế sơ đồ mạch điện trên AutoCad Electrical.

− Mô phỏng điều khiển từ Matlab và Design App.

− Xây dựng được giao diện điều khiển trên phần mềm c#.net.

− Thiết kế ra được mô hình.

− Lập trình cho robot trên vi điều khiển arduino.

5.2 Hạn chế của đề tài :

− Phần cơ khí còn khả phức tạp, điều khiển linh hoạt rất khó.

− Cánh tay robot còn khả nặng làm cho khả năng điều khiển ở link 1 còn rất khó
mang tải nên phải sử dụng động cơ có hộp số khả tốn kém.
− Phần điện còn khả đơn giản.

− Phần điều khiển còn khả thô, không thể quan sát được trực tiếp trên các biểu đồ.

5.3 Hướng phát triển :

− Điều khiển PID hoặc các bộ điều khiển bám cho robot.

− Thực hiện điều khiển không dây qua Joystick hoặc có thể điều khiển bằng mạng
Wifi và quan sát trực tiếp trên Web.
− Thiết kế nhỏ gọn lại cánh tay robot.
GVHD : Nguyễn Văn Thái

− PHỤ LỤC CÁC CHƯƠNG TRÌNH MATLAB

VÀ ARDUINO

o Chương trình tính toán động học thuận bằng matlab:

clc; clear all; close all;


% syms Theta1 Theta2 Theta3 l1 l2 l3 d1 d2
l1=105;
l2=162;
l3=130;
Theta1=deg2rad(16);
Theta2=deg2rad(-12.5080654878329);
Theta3=deg2rad(-90);
d1=52;
%DH table
DH = [0 0 0 Theta1;
l1 pi/2 0 Theta2;
l2 0 0 Theta3];
P_3_EE=[l3;0;-d1;1];
T_0_i=eye(4);
for i=1:3,
the = DH(i,4);d = DH(i,3); anp = DH(i,2); a = DH(i,1);
%COMPUTE HOMOGENOUS TRANSMATION MATRIX
T_i_1_i = [cos(the) -sin(the) 0 a;
sin(the)*cos(anp) cos(the)*cos(anp) -sin(anp) -sin(anp)*d;
sin(the)*sin(anp) cos(the)*sin(anp) cos(anp) cos(anp)*d;
0 0 0 1];
%T_0_i = simplify(T_0_i*T_i_1_i)
T_0_i =(T_0_i*T_i_1_i)
end
P_0_EE=(T_0_i*P_3_EE)
%P_0_EE=simplify(T_0_i*P_3_EE)
o Chương trình tính toán động học nghịch bằng matlab:

clc;
close all;
%% Khai bao thong so va vi tri :
l1=105;
l2=162;
l3=130;
d1=52;
%% Position Desired
x=-25;
y=52;
z=162;
GVHD : Nguyễn Văn Thái

%% Tinh theta1 :
alpha=atan2d(x,y);
theta1n=atan2d(sqrt(1-(d1/sqrt(x^2+y^2))^2),d1/sqrt(x^2+y^2))-alpha;
theta1p=atan2d(-sqrt(1-(d1/sqrt(x^2+y^2))^2),d1/sqrt(x^2+y^2))-alpha;
%% Tinh theta2
un=x*cosd(theta1n)+y*sind(theta1n)-l1;
v=z;
betan=atan2d(un,v);
t2xn=((un^2+v^2+l2^2-l3^2)/(sqrt(((2*un*l2)^2)+(2*v*l2)^2)));
t2y1n=sqrt(1-((un^2+v^2+l2^2-l3^2)/(sqrt(((2*un*l2)^2)+(2*v*l2)^2)))^2);
t2y2n=-sqrt(1-((un^2+v^2+l2^2-l3^2)/(sqrt(((2*un*l2)^2)+(2*v*l2)^2)))^2);
theta2n=atan2d(t2xn,t2y1n)-betan;
theta2n2=atan2d(t2xn,t2y2n)-betan;
%% Tinh toan theta3 :
theta3n=atan2d(v-l2*sind(theta2n),un-l2*cosd(theta2n))-theta2n;
theta3n2=atan2d(v-l2*sind(theta2n2),un-l2*cosd(theta2n2))-theta2n2;
%------------------------------------------------------------------%
disp('b? nghi?m 1 theo rad là :')
nghiem1rad = [deg2rad(theta1n) deg2rad(theta2n) deg2rad(theta3n)];
disp(nghiem1rad)
disp('Gi?i bài toán ??ng h?c thu?n cho b? nghi?m 1 :')
p0ee1=fk_3dof_01(l1, l2, l3,d1 , deg2rad(theta1n), deg2rad(theta2n), deg2rad(theta3n));
disp(p0ee1)
%------------------------------------------------------------------%
disp('b? nghi?m 1 theo degree là :')
nghiem1deg = [(theta1n) (theta2n) (theta3n)];
disp(nghiem1deg)

%------------------------------------------------------------------%
disp('b? nghi?m 2 theo rad là :')
nghiem2rad = [deg2rad(theta1n) deg2rad(theta2n2) deg2rad(theta3n2)];
disp(nghiem2rad)
p0ee2=fk_3dof_01(l1, l2, l3,d1 , deg2rad(theta1n), deg2rad(theta2n2), deg2rad(theta3n2));
disp('Gi?i bài toán ??ng h?c thu?n cho b? nghi?m 2 :')
disp(p0ee2)
%------------------------------------------------------------------%
disp('b? nghi?m 2 theo degree là :')
nghiem2deg = [(theta1n) (theta2n2) (theta3n2)];
disp(nghiem2deg)
o Chương trình Code cho arduino :

#include <Arduino.h>
#include <Servo.h>
int en = 8;
int dirPin1 = 5; // dirX
int stepPin1 = 2; // stepX
int dirPin2 = 6; // dirY
int stepPin2 = 3; // stepY
int dirPin3 = 7; // dirZ
int stepPin3 = 4; // stepZ
int Xung_DC1 = 0; // hien thi kiem tra
GVHD : Nguyễn Văn Thái

int Xung_DC2 = 0;
int Xung_DC3 = 0;
float DL_DC1 = 0;
float DL_DC2 = 0;
float DL_DC3 = 0;

float DL_QuaKhu_DC1 = 0;
float DL_QuaKhu_DC2 = 0;
float DL_QuaKhu_DC3 = 0;

float DL_HienTai_DC1 = 0;
float DL_HienTai_DC2 = 0;
float DL_HienTai_DC3 = 0;

// So xung
float nStepMax;
float nStepMedium;
float nStepMin;
// Chan co so xung lon nhat, tb, nho nhat
int stepPinMax;
int stepPinMedium;
int stepPinMin;
// Bien hien thi de kiem tra
long nStep1;
long nStep2;
long nStep3;
int Dir3_TN = 0; // bien dieu khien huong dong co 3
int Dir3 = 1;
int SoBuoc = 60;

int HomePulseX = 3450;


long HomePulseY = 25030;
int HomePulseZ = 4000;

bool readX;
bool readY;
bool readZ;

int set = 0;

int x;
#define limitXpin 9
#define limitYpin 10
#define limitZpin 11

String inString = "";


void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(en, OUTPUT);
pinMode(dirPin1, OUTPUT);
GVHD : Nguyễn Văn Thái

pinMode(stepPin1, OUTPUT);
pinMode(dirPin2, OUTPUT);
pinMode(stepPin2, OUTPUT);
pinMode(dirPin3, OUTPUT);
pinMode(stepPin3, OUTPUT);
pinMode(limitXpin, INPUT_PULLUP);
pinMode(limitYpin, INPUT_PULLUP);
pinMode(limitZpin, INPUT_PULLUP);
digitalWrite(en, LOW);
}
void NhanDuLieu()
{
String inChar = Serial.readString(); // Xem thêm về Serial.read() tại
http://arduino.vn/reference/library/serial/1/huong-dan-ham/read
delayMicroseconds(1);
if (inChar[0] == 'r')
{
int i, k;
long j;
nStep1 = 0;
nStep2 = 0;
nStep3 = 0;
digitalWrite(dirPin1, LOW);
digitalWrite(dirPin2, LOW);
digitalWrite(dirPin3, HIGH);

//*-----------------------------------------------------////
for (j = 0; j <= 51491; j++)
{
readY = digitalRead(limitYpin);
if (readY == 0)
{
j = 51491;
}
digitalWrite(stepPin2, HIGH);
delayMicroseconds(300);
digitalWrite(stepPin2, LOW);
delayMicroseconds(300);
}
//*-----------------------------------------------------////
for (k = 0; k < 12000; k++)
{
readZ = digitalRead(limitZpin);
if (readZ == 0)
k = 12000;
digitalWrite(stepPin3, HIGH);
_delay_ms(1);
digitalWrite(stepPin3, LOW);
_delay_ms(1);
}
for (i = 0; i <= 12000; i++)
{
GVHD : Nguyễn Văn Thái

readX = digitalRead(limitXpin);
if (readX== 0)
{
i = 12000;
}
digitalWrite(stepPin1, HIGH);
_delay_ms(1);
digitalWrite(stepPin1, LOW);
_delay_ms(1);
}
//*-----------------------------------------------------////

if (readX == 0)
{
digitalWrite(dirPin1, HIGH);
for (i = 0; i <= HomePulseX; i++)
{
digitalWrite(stepPin1, HIGH);
_delay_ms(1);
digitalWrite(stepPin1, LOW);
_delay_ms(1);
}
}
//*-----------------------------------------------------////
if (readZ == 0)
{
digitalWrite(dirPin3, LOW);
for (k = 0; k <= HomePulseZ; k++)
{
digitalWrite(stepPin3, HIGH);
_delay_ms(1);
digitalWrite(stepPin3, LOW);
_delay_ms(1);
}
}
//*-----------------------------------------------------////
if (readY == 0)
{
digitalWrite(dirPin2, HIGH);
for (j = 0; j <= HomePulseY; j++)
{
digitalWrite(stepPin2, HIGH);
_delay_ms(0.5);
digitalWrite(stepPin2, LOW);
_delay_ms(0.5);
}
}

}
//Servo control
for (x = 0; x < inChar.length(); x++)
{
GVHD : Nguyễn Văn Thái

if ((inChar[x] == '-') || (inChar[x] == '.'))


{
inString += (char)inChar[x];
}
if (isDigit(inChar[x]))
{
// Hàm kiểm tra số đó có là một ký tự số hay không (xem bảng ACSII
http://arduino.vn/reference/bang-ma-ascii )
// Chuyển đổi số đó thành ký tự và thêm vào chuỗi.
inString += (char)inChar[x];
}
// KÍ TỰ
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
if (inChar[x] == 'A')
{
nStep1 = inString.toFloat();
if (nStep1 <= 0) // ÂM // NGHỊCH
{
digitalWrite(dirPin1, LOW);
}
else // DƯƠNG // THUẬN
{
digitalWrite(dirPin1, HIGH);
}
nStep1 = abs(nStep1);
inString = ""; // clear dữ liệu thứ nhất
}
// KÍ TỰ
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
else if (inChar[x] == 'B')
{
nStep2 = inString.toFloat();
if (nStep2 <= 0) // ÂM // NGHỊCH
{
digitalWrite(dirPin2, LOW);
}
else // DƯƠNG // THUẬN
{
digitalWrite(dirPin2, HIGH);
}
nStep2 = abs(nStep2);
inString = ""; // clear dữ liệu thứ nhất
}
// KÍ T CCCCCCCCCCCCCCCCCCCCCCCCCCCCC
else if (inChar[x] == 'C')
{
nStep3 = inString.toFloat();
if (nStep3 <= 0) // ÂM // NGHỊCH
{
digitalWrite(dirPin3, LOW);
}
else // DƯƠNG // THUẬN
GVHD : Nguyễn Văn Thái

{
digitalWrite(dirPin3, HIGH);
}
nStep3 = abs(nStep3);
inString = ""; // clear dữ liệu thứ nhất
}
else if (inChar[x] == 's')
{
set = 1;
}

Serial.println(inString);
}
}
void control()
{
for (int i = 0; i < nStep1; i++)
{
digitalWrite(stepPin1, HIGH);
_delay_ms(1);
digitalWrite(stepPin1, LOW);
_delay_ms(1);
}
for (long j = 0; j < nStep2; j++)
{
digitalWrite(stepPin2, HIGH);
delayMicroseconds(300);
digitalWrite(stepPin2, LOW);
delayMicroseconds(300);
}

for (int k = 0; k < nStep3; k++)


{
digitalWrite(stepPin3, HIGH);
_delay_ms(1);
digitalWrite(stepPin3, LOW);
_delay_ms(1);
}
}
void loop()
{
// put your main code here, to run repeatedly:
while (Serial.available())
{
NhanDuLieu();
if (set == 1)
{
control();
}
}
}

You might also like