Professional Documents
Culture Documents
Báo Cáo Đ Án Robot
Báo Cáo Đ Án Robot
BÁO CÁO ĐỒ ÁN
ĐỀ TÀI: THIẾT KẾ VÀ THI CÔNG
MÔ HÌNH CÁNH TAY ROBOT 4 BẬC
TỰ DO
MỤC LỤC
CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI..........................................................................1
1. Đặt vấn đề............................................................................................................1
2. Mục tiêu đề tài.....................................................................................................1
3. Phương pháp nghiên cứu....................................................................................2
4. Giới hạn đề tài.....................................................................................................3
5. Nội dung đề tài.....................................................................................................3
CHƯƠNG 2: THIẾT KẾ ROBOT BẰNG PHẦN MỀM SOLIDWORK................5
1. Vẽ mô hình trên Solidwork................................................................................5
2. Đặt trục cho mô hình........................................................................................15
CHƯƠNG 3: TÍNH TOÁN ĐỘNG HỌC THUẬN, ĐỘNG HỌC NGHỊCH........17
1. Động học thuận..................................................................................................17
2. Động học nghịch................................................................................................19
2.1.Tìm theta1.......................................................................................................19
2.2.Tìm theta2.......................................................................................................19
2.3 Tìm theta3.......................................................................................................20
2.4 Tìm theta4.......................................................................................................20
2.5.Kết luận...........................................................................................................20
3. Không gian làm việc.............................................................................................21
CHƯƠNG 4: LƯU ĐỒ GIẢI THUẬT CỦA HỆ THỐNG......................................23
1. Lưu đồ Set Home...............................................................................................23
2. Lưu đồ làm việc.................................................................................................24
CHƯƠNG 5: SƠ ĐỒ KẾT NỐI DÂY CỦA ROBOT..............................................25
CHƯƠNG 6: THI CÔNG MÔ HÌNH.......................................................................26
1. Thiết kế phần cứng............................................................................................26
1.1 Lựa chọn thiết bị.........................................................................................26
1.2 Chi phí các thiết bị......................................................................................29
2. Giao diện hệ thống............................................................................................30
CHƯƠNG 7: ĐÁNH GIÁ...........................................................................................31
1. Kết quả đạt được...............................................................................................31
2. Hạn chế...............................................................................................................31
3. Hướng phát triển...............................................................................................31
ĐA_ROBOT GVHD:TS.TRẦN ĐỨC THIỆN
1
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
Xa hơn nữa, đề tài nghiên cứu này có thể giúp nghiên cứu và phát triển các
thuật toán và công nghệ cho robot 4 bậc tự do: Mục tiêu này tập trung vào việc nghiên
cứu và phát triển các thuật toán và công nghệ mới để cải thiện hiệu suất, độ chính xác
và khả năng tự động hóa của robot 4 bậc tự do.
3. Phương pháp nghiên cứu
Nghiên cứu các tài liệu liên quan nhằm tổng hợp lựa chọn các phương án từ đó
đưa ra mô hình robot phù hợp, trên cơ sở đó tính toán thiết kế bộ điều khiển cho robot
Chế tạo mô hình để kiểm chứng kết quả.
a) Phương pháp nghiên cứu lý thuyết
- Tìm hiểu qua sách vở, tài liệu trên các diễn đàn.
- Tìm hiểu về các bài toán, mô hình hóa giúp cho việc tính toán và chọn
các trang thiết bị điện và cơ khí.
- Tìm hiểu cơ sở lý thuyết về các loại động cơ, hệ thống cảm biến, bộ điều
khiển điển hình trong robot 4 bậc tự do.
- Tìm hiểu về cơ sở lý thuyết cho Arduino, giao diện C#, ứng dụng, viết
chương trình điều khiển và giao diện người dùng cho robot.
b) Phương pháp nghiên cứu thực nghiệm
- Nghiên cứu robot 4 bậc tự do trên thực tế hoặc các mô hình của đề tài
trước.
- Sử dụng phần mềm Solidworks để thiết kế và mô phỏng hệ thống cơ khí.
- Nghiên cứu từ các video trên mạng về phần kết nối, hoạt động vủa các
thiệt bị cũng như cách điều khiển chúng.
c) Phương pháp thực hiện sử dụng phương pháp quản lí 5M+1E
Khi áp dụng mô hình 5M+1E vào nghiên cứu thiết kế mô hình hệ thống lưu
kho tự động, các yếu tố 5M+1E có thể được hiểu như sau:
Manpower (Nhân lực): Đảm bảo có đủ nhân lực và nguồn lực cần thiết để
thực hiện dự án. Điều này bao gồm việc xác định vai trò và trách nhiệm của từng
thành viên trong nhóm nghiên cứu và đảm bảo sự phối hợp và làm việc hiệu quả giữa
các thành viên.
2
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
Material (Vật liệu): Quản lý và kiểm soát việc sử dụng vật liệu trong quá
trình xây dựng robot. Điều này bao gồm việc tìm kiếm và lựa chọn các vật liệu phù
hợp với yêu cầu kỹ thuật, kiểm soát chất lượng vật liệu và quản lý kho vật liệu.
Machine (Máy móc): Đảm bảo có đủ và phù hợp các thiết bị và máy móc
cần thiết để thực hiện quá trình xây dựng robot. Bao gồm việc lựa chọn, mua sắm,
bảo trì và sử dụng các thiết bị và máy móc một cách hiệu quả.
Method (Phương pháp): Xác định và áp dụng các phương pháp xây dựng
robot và quản lý dự án. Bao gồm việc lựa chọn phương pháp thiết kế, phương pháp
lắp ráp, phương pháp kiểm tra và kiểm soát chất lượng, cũng như phương pháp quản
lý thời gian và nguồn lực.
Measurement (Đo lường): Đo lường và đánh giá quá trình và kết quả của dự
án. Điều này bao gồm việc định nghĩa các chỉ số, tiêu chí đo lường và phương pháp
đánh giá để theo dõi tiến độ, chất lượng và hiệu suất của quá trình xây dựng robot.
Environment (Môi trường): Đánh giá và quản lý các yếu tố môi trường có
thể ảnh hưởng đến quá trình xây dựng robot. Bao gồm việc đảm bảo an toàn lao động,
tuân thủ các quy định về môi trường và quản lý rủi ro trong quá trình làm việc. quả và
hiệu suất cao.
Phương pháp quản lý 5M+1E giúp đảm bảo sự cân đối và hiệu quả trong
quản lý dự án xây dựng robot 4 bậc tự do. Bằng cách quản lý chặt chẽ các yếu tố quan
trọng này, bạn có thể tăng khả năng hoàn thành dự án đúng hạn, đạt được chất lượng
và hiệu suất mong muốn.
4. Giới hạn đề tài
Đề tài thiết kế mô hình robot 4 bậc tự do có một số giới hạn như sau:
- Hình dạng thiết kế chưa được tối ưu
- Mô hình bị giới hạn góc quay nên không gian làm việc Robot còn hạn
chế
- Mô hình chỉ sử dụng chất liệu mica nên độ bền còn thấp, khả năng chịu
tải thấp
- Hoạt động hạn chế, thiếu linh hoạt.
5. Nội dung đề tài
Cấu trúc của bài báo cáo được tổ chức như sau:
3
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
4
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
5
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
6
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
Hình 6. Hình ảnh mặt cắt và các hình chiếu của đế tròn xoay
7
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
Hình 7. Hình ảnh mặt cắt và các hình chiếu của miếng đệm lót ở đế
Hình 8. Hình ảnh mặt cắt và các hình chiếu của miếng đệm nối các link với
nhau
8
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
Link 1:
Hình 9. Hình ảnh mặt cắt và các hình chiếu của link 1.1
Hình 10. Hình ảnh mặt cắt và các hình chiếu của link 1.3
9
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
Hình 11. Hình ảnh mặt cắt và các hình chiếu của link 1.2
Hình 12. Hình ảnh mặt cắt và các hình chiếu của miếng thánh giá
10
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
Hình 13. Hình ảnh mặt cắt và các hình chiếu của miếng đệm nối các link
Link 2:
Hình 14. Hình ảnh mặt cắt và các hình chiếu của link 2_1
11
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
Hình 15. Hình ảnh mặt cắt và các hình chiếu của link 2_2
Hình 16. Hình ảnh mặt cắt và các hình chiếu của miếng đệm nối các link
12
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
Link 3:
Hình 17. Hình ảnh mặt cắt và các hình chiếu của link 3_1
Hình 18. Hình ảnh mặt cắt và các hình chiếu của link 3_2
13
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
Hình 19. Hình ảnh mặt cắt và các hình chiếu của miếng đệm nối các link
Khâu 4:
Hình 20. Hình ảnh mặt cắt và các hình chiếu của link 4_1
14
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
Hình 21. Hình ảnh mặt cắt và các hình chiếu của miếng gắn nam châm
2. Đặt trục cho mô hình
Để thực hiện đặt trục robot ta thực hiện các bước sau:
Bước 1: Vẽ cấu hình robot và xác định các đường vuông góc chung của
robot
Bước 2: Vẽ trục tọa độ thứ {0} trùng với góc tọa độ
Bước 3: Xác định trục Zi trùng với trục động cơ (tại các khớp quay thứ i)
Bước 4: Xác định trục Xi dọc theo các đường vuông góc chung giữa 2
trục Z kề nhau
Bước 5: Xác định trục Yi theo quy tắc bàn tay phải
Bước 6: Xác định sao cho trục của hệ tọa độ {0} trùng với hệ tọa độ {1}
và hệ trục tọa độ {N} sẽ chọn XN là ngẫu nhiên (thường chọn dọc theo vị trí
điểm đầu cuối)
15
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
Hình 22. Hình ảnh đặt trục theo phương phép biến đổi của J.Craig
16
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
1 0 0
2 0 0 +
3 0 0
4 0 0
5 0 0 0
Trong đó: i là vị trí của khớp; là góc giữa trục Zi và Zi+1 được tính quanh
trục Xi; là khoảng cách giữa trục Zi và Zi+1 được đo theo trục Xi; là khoảng cách
giữa trục Xi-1 và Xi dọc theo trục Zi; là góc giữa trục Xi-1 và Xi quanh trục Zi.
Công thức quay tịnh tiến của J.craig
212\*
MERGEFORMAT (.)
17
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
313\*
MERGEFORMAT (.)
Ta lần lượt tính từng ma trận chuyển đổi các hệ 1,2,3,4,5. Sau đó, ta nhân các
ma trận lại với nhau ra được ma trận tổng quát. Lấy phần tử hàng 1 cột 4, hàng 2 cột 4,
hàng 3 cột 4 của ma trận tổng quát này ta ra được công thức vị trí điểm cuối
( Px,Py,Pz).
Ta có :
p x =l 5 c 1 s 2 s3 s 4 −l 3 c 1 s 2−l 4 c 1 c2 c 3−l 4 c 1 c3 s2−l 5 c 1 c2 c 3 s 4−l 5 c 1 c 2 c 4 s 3−l 5 c1 c 4 c 3 s 2−l 1
515\*
MERGEFORMAT (.)
616\* MERGEFORMAT (.)
18
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
Ta có : 717\*
MERGEFORMAT (.)
818\*
MERGEFORMAT (.)
2.1.Tìm theta1
Ta có : 919\*
MERGEFORMAT (.)
S 12112\*
MERGEFORMAT (.)
Ta được: 13113\*
MERGEFORMAT (.)
2.2.Tìm theta2
19
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
16116\*
MERGEFORMAT (.)
17117\*
MERGEFORMAT (.)
Đặt: 23123\*
MERGEFORMAT (.)
20
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
26126\*
MERGEFORMAT (.)
Với L1 = 65;
L2 = 238;
L3 = 105;
L4 = 130;
L5 = 149;
2.5.2. Kết luận động học nghịch
a)
b)
Với và .
Trong đó, .
21
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
c)
Với và .
Trong đó, .
d)
3. Không gian làm việc
Dựa vào tọa độ điểm của robot ta tìm được từ động học thuận ở phần 2.1 và giới
hạn góc quay của robot, kết hợp với phần mềm Matlab, ta tìm được không gian làm
việc của robot khi theta234 = 0.
L1 = 65;
L2 = 233;
L3 = 105;
L4 = 130;
L5 = 122.5;
tt=0; ii = 0; jj = 0;
for t1 = -90:5:90
for t3 = -90:5:90
for t2 = -90:5:90
for t4 = -90:5:90
if (t2 + t3 + t4) == 0 %% Điều kiện của khâu cuối
tt=tt+1;
Px = L5*cosd(t1)*sind(t2)*sind(t3)*sind(t4) -
L3*cosd(t1)*sind(t2) - L4*cosd(t1)*cosd(t2)*sind(t3) -
L4*cosd(t1)*cosd(t3)*sind(t2) - L5*cosd(t1)*cosd(t2)*cosd(t3)*sind(t4) -
L5*cosd(t1)*cosd(t2)*cosd(t4)*sind(t3) - L5*cosd(t1)*cosd(t3)*cosd(t4)*sind(t2) -
L1;
Py = -sind(t1)*(L4*sind(t2 + t3) + L3*sind(t2) + L5*sind(t2 +
t3 + t4)) ;
Pz = L2 + L4*cosd(t2 + t3) + L3*cosd(t2) + L5*cosd(t2 + t3 +
t4);
emtry(:,tt) = Px;
emtry1(:,tt) = Py;
emtry2(:,tt) = Pz;
end
end
end
end
end
figure(1);
plot3(emtry,emtry1,emtry2);
22
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
23
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
24
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
25
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
Hình 23. Sơ đồ nối dây kết nối Arduino Shield V3 và Module Driver A4988
5.2. Sơ đồ kết nối Arduino Shield V3 với động cơ và các thiết bị khác
Hình 24. Hình sơ đồ nối dây kết nối Arduino Shield V3 và với động cơ và các
linh kiện khác
26
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
27
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
28
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
29
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
Trơn roc-tron-2gt20-ranh-6-5mm-
2GT20 truc-5mm
10 Bạc Đạn 2.800 4 11.200 https://www.thegioiic.com/bac-
Vòng Bi dan-vong-bi-trong-5mm-ngoai-
16mm-day-5mm
11 Vòng đai 49.000 4 196.000
31
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
32
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
33
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
L1 = 65;
L2 = 233;
L3 = 105;
L4 = 130;
L5 = 122.5;
x = P(1,1);
y = P(1,2);
z = P(1,3);
theta234 = 0;
%% Tính theta1
theta1 = atan2d(y,x + L1);
if(theta1 < -90 || theta1 > 90)
theta1 = atan2d(-y,-x - L1);
end
%% Tính nx ny
nx = cosd(theta1)*L1+ cosd(theta1)*x + sind(theta1)*y + L5*sind(theta234);
ny = z - L2 - L5*cosd(theta234);
%% Tính theta3
c3 = (nx^2 + ny^2 - L4^2 - L3^2)/(2 * L3 * L4);
if(abs(c3 - 1) < 0.0001)
c3 = 1;
end
s3_1 = sqrt(1 - c3^2);
s3_2 = -sqrt(1 - c3^2);
theta3_1 = atan2d(s3_1, c3);
theta3_2 = atan2d(s3_2, c3);
%% Tính theta2
c2_1 = (ny * (L4*cosd(theta3_1) + L3) - nx*L4*sind(theta3_1)) /
((L4*cosd(theta3_1) + L3)^2 + (L4*sind(theta3_1))^2);
s2_1 = (-nx*(L4*cosd(theta3_1)+L3) - L4*ny*sind(theta3_1)) / ((L4*cosd(theta3_1)
+ L3)^2 + (L4*sind(theta3_1))^2);
theta2_1 = atan2d(s2_1, c2_1);
34
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
namespace GuiControlRobot
{
internal class InverseKinematics
{
public static double[,] CalculateTheta(double x, double y, double z, double theta234)
{
double L1, L2, L3, L4, L5;
L1 = 65;
L2 = 238;
L3 = 105;
L4 = 130;
L5 = 149;
theta234 = theta234 * (Math.PI / 180);
double theta1;
double nx, ny;
double c3, s3_1, s3_2, theta3_1, theta3_2;
double c2_1, s2_1, theta2_1, c2_2, s2_2, theta2_2;
double theta4_1, theta4_2;
double[,] theta = new double[2, 4];
//Tính theta1
theta1 = Math.Atan2(y, x + L1);
if ( x+L1 < 0)
{
theta1 = Math.Atan2(-y, -x - L1);
}
// Tính nx ny
nx = (Math.Cos(theta1) * L1) + (Math.Cos(theta1) * x) + (Math.Sin(theta1) * y) + (L5 * Math.Sin(theta234));
ny = z - L2 - (L5 * Math.Cos(theta234));
// Tính theta3
c3 = (nx*nx + ny*ny - L4*L4 - L3*L3) / (2 * L3 * L4);
if(Math.Abs(c3 - 1) < 0.0001)
c3 = 1;
s3_1 = Math.Sqrt(1 - (c3*c3));
s3_2 = -Math.Sqrt(1 - (c3*c3));
theta3_1 = Math.Atan2(s3_1, c3);
theta3_2 = Math.Atan2(s3_2, c3);
// Tính theta2
c2_1 = (ny * (L4 * Math.Cos(theta3_1) + L3) - nx * L4 * Math.Sin(theta3_1)) / ((Math.Pow((L4 *
Math.Cos(theta3_1)+ L3), 2) + Math.Pow((L4 * Math.Sin(theta3_1)), 2)));
s2_1 = (-nx * (L4 * Math.Cos(theta3_1) + L3) - L4 * ny * Math.Sin(theta3_1)) / ((Math.Pow((L4 *
Math.Cos(theta3_1) + L3), 2) + Math.Pow((L4 * Math.Sin(theta3_1)), 2)));
theta2_1 = Math.Atan2(s2_1, c2_1);
35
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
// Tính theta4
theta4_1 = theta234 - theta2_1 - theta3_1;
theta4_2 = theta234 - theta2_2 - theta3_2;
theta[0, 0] = theta1;
theta[0, 1] = theta2_1;
theta[0, 2] = theta3_1;
theta[0, 3] = theta4_1;
theta[1, 0] = theta1;
theta[1, 1] = theta2_2;
theta[1, 2] = theta3_2;
theta[1, 3] = theta4_2;
//theta[2, 0] = nx;
//theta[2, 1] = ny;
//theta[2, 2] = c3;
return theta;
}
}
}
Chương trình tính động học thuận C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GuiControlRobot
{
internal class ForwardKinematics
{
public static void CalculatePxPyPz(int degree1, int degree2, int degree3, int degree4, out double Px, out double
Py, out double Pz )
{
double L1, L2, L3, L4, L5;
L1 = 65;
L2 = 238;
L3 = 105;
L4 = 130;
L5 = 149;
36
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
}
}
Chương trình C# giao diện người dùng:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
namespace GuiControlRobot
{
public partial class MainControl : Form
{
public MainControl()
{
InitializeComponent();
string[] Baudrate = { "1200", "2400", "4800", "9600", "11520" };
cboBaudrate.Items.AddRange(Baudrate);
Control.CheckForIllegalCrossThreadCalls = false;
}
private void Form2_Load(object sender, EventArgs e)
{
cboCOMPort.DataSource = SerialPort.GetPortNames();
cboBaudrate.Text = "9600";
}
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
37
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
{
try
{
if (serCom.IsOpen)
{
serCom.Close();
}
}
catch (Exception error)
{
MessageBox.Show(error.Message);
}
}
private void button1_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
catch (Exception error)
{
MessageBox.Show(error.Message);
}
}
38
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
if (serCom.IsOpen)
if (checkBox_Simultaneous.Checked)
{
{
serCom.Write(1+"H"+"#");
}
}
}
catch (Exception error)
{
MessageBox.Show(error.Message);
}
}
newX = Math.Round(newX,2);
newY = Math.Round(newY,2);
newZ = Math.Round(newZ,2);
txt_DisplayPx.Text = newX.ToString();
txt_DisplayPy.Text = newY.ToString();
txt_DisplayPz.Text = newZ.ToString();
}
39
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
{
serCom.Write(degree1 + "A" + "#");
serCom.Write(degree2 + "B" + "#");
serCom.Write(degree3 + "C" + "#");
serCom.Write(degree4 + "D" + "#");
}
}
}
degree1 = Convert.ToInt16(d1_1);
degree2 = Convert.ToInt16(d2_1);
degree3 = Convert.ToInt16(d3_1);
degree4 = Convert.ToInt16(d4_1);
if (serCom.IsOpen)
{
if (checkBox_Simultaneous.Checked)
{
serCom.Write(degree1 + "A" + "#");
serCom.Write(degree2 + "B" + "#");
serCom.Write(degree3 + "C" + "#");
serCom.Write(degree4 + "D" + "#");
}
}
}
40
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
if (check == '1')
{
txt_Result_IK.Text = "Pack 1 is correct";
}
if(check == '2')
{
txt_Result_IK.Text = "Pack 2 is correct";
}
if (check == '3')
{
txt_Result_IK.Text = "Both pack are correct";
}
degree1 = Convert.ToInt16(d1_2);
degree2 = Convert.ToInt16(d2_2);
degree3 = Convert.ToInt16(d3_2);
degree4 = Convert.ToInt16(d4_2);
if (serCom.IsOpen)
{
if (checkBox_Simultaneous.Checked)
{
serCom.Write(degree1 + "A" + "#");
serCom.Write(degree2 + "B" + "#");
serCom.Write(degree3 + "C" + "#");
serCom.Write(degree4 + "D" + "#");
41
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
}
}
}
if (serCom.IsOpen)
if (checkBox_Simultaneous.Checked)
{
{
serCom.Write(1 + "M" + "#");
}
}
}
if (serCom.IsOpen)
if (checkBox_Simultaneous.Checked)
{
{
serCom.Write(0 + "M" + "#");
}
}
}
42
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
newT1_1 = Math.Round(newT1_1,2);
newT2_1 = Math.Round(newT2_1,2);
newT3_1 = Math.Round(newT3_1,2);
newT4_1 = Math.Round(newT4_1, 2);
txt_DisplayT1_1.Text = newT1_1.ToString();
txt_DisplayT2_1.Text = newT2_1.ToString();
txt_DisplayT3_1.Text = newT3_1.ToString();
txt_DisplayT4_1.Text = newT4_1.ToString();
txt_DisplayT1_2.Text = newT1_2.ToString();
txt_DisplayT2_2.Text = newT2_2.ToString();
txt_DisplayT3_2.Text = newT3_2.ToString();
txt_DisplayT4_2.Text = newT4_2.ToString();
MessageBox.Show("Disconnected to Robot");
43
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
txtConnect.Text = "Unavailable";
txtConnect.BackColor = Color.Red;
btnDisconnect.Enabled = false;
butConnect.Enabled = true;
}
}
catch (Exception error)
{
MessageBox.Show(error.Message);
}
}
}
}
int docX, docY, docZ, docA; //Biến trạng thái của Limit Switch
char c; //Biến nhận từ giao diện
String InData; // Chuỗi để xử lí
int8_t indexA, indexB, indexC, indexD, indexH, indexM;
//Biến góc và bước truyền vào để điều khiển động cơ
int curDegree1 = 0, curDegree2 = 0, curDegree3 = 0, curDegree4 = 0;
int tarDegree1 = 0, tarDegree2 = 0, tarDegree3 = 0, tarDegree4 = 0;
int diffDegree1 = 0, diffDegree2 = 0, diffDegree3 = 0, diffDegree4 = 0;
44
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
int TT_SetHome = 0;
int TT_Magnet = 0;
void setup()
{
Serial.begin(9600);
pinMode(en, OUTPUT);
pinMode(dirX, OUTPUT);
pinMode(stepX, OUTPUT);
pinMode(limitX, INPUT_PULLUP);
pinMode(dirY, OUTPUT);
pinMode(stepY, OUTPUT);
pinMode(limitY, INPUT_PULLUP);
pinMode(dirZ, OUTPUT);
pinMode(stepZ, OUTPUT);
pinMode(limitZ, INPUT_PULLUP);
pinMode(dirA, OUTPUT);
pinMode(stepA, OUTPUT);
pinMode(limitA, INPUT_PULLUP);
pinMode(magnet, OUTPUT);
digitalWrite(en,LOW);
void Receive_Winform_Data()
{
while (Serial.available() > 0)
{
c = Serial.read();
if(c == '\n')
{
break;
}
else
{
InData += c;
}
}
}
45
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
void Parse_Data()
{
String str_SetHome, str_Magnet, str_DegreeMotor1, str_DegreeMotor2,
str_DegreeMotor3, str_DegreeMotor4 ;
indexH = InData.indexOf('H');
indexA = InData.indexOf('A');
indexB = InData.indexOf('B');
indexC = InData.indexOf('C');
indexD = InData.indexOf('D');
indexM = InData.indexOf('M');
if(indexH >= 0)
{
str_SetHome = InData.substring(0, indexH);
TT_SetHome = str_SetHome.toInt();
}
if(indexM >= 0)
{
str_Magnet = InData.substring(0, indexM);
TT_Magnet = str_Magnet.toInt();
}
if(indexA >= 0)
{
str_DegreeMotor1 = InData.substring(0, indexA);
tarDegree1 = str_DegreeMotor1.toInt();
}
if(indexB >= 0)
{
str_DegreeMotor2 = InData.substring(0, indexB);
tarDegree2 = str_DegreeMotor2.toInt();
}
if(indexC >= 0)
{
str_DegreeMotor3 = InData.substring(0, indexC);
tarDegree3 = str_DegreeMotor3.toInt();
}
if(indexD >= 0)
{
str_DegreeMotor4 = InData.substring(0, indexD);
tarDegree4 = str_DegreeMotor4.toInt();
}
}
void SetHome()
{
//------------------SET HOME LINK 4 ----------------------------
46
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
47
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
digitalWrite(dirY,0);
for(long x = 10; x < 30000; x++ )
{
docY = digitalRead(limitY);
if(docY==0)
x=30000;
digitalWrite(stepY, HIGH);
delayMicroseconds(1000);
digitalWrite(stepY, LOW);
delayMicroseconds(900);
}
//Đưa link 2 về vị trí 0
digitalWrite(dirY,1);
for(int x = 10; x < 3100; x++ ) //tính lại
{
digitalWrite(stepY, HIGH);
delayMicroseconds(900);
digitalWrite(stepY, LOW);
delayMicroseconds(800);
}
//------------------SET HOME LINK 1 ----------------------------
//Đưa link1 về vị trí LSA
digitalWrite(dirX,0);
for(long x = 10; x < 30000; x++ )
{
docX = digitalRead(limitX);
if(docX==0)
x=30000;
digitalWrite(stepX, HIGH);
delayMicroseconds(900);
digitalWrite(stepX, LOW);
delayMicroseconds(900);
}
//Đưa link 1 về vị trí 0
digitalWrite(dirX,1);
for(int x = 10; x < 6000; x++ ) //tính lại
{
digitalWrite(stepX, HIGH);
delayMicroseconds(700);
digitalWrite(stepX, LOW);
delayMicroseconds(700);
}
}
void MoveMotor1()
{
if(tarDegree1 != curDegree1)
{
48
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
49
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
void loop()
{
Receive_Winform_Data();
if(c == '#')
{
Parse_Data();
c = 0;
InData = "";
}
MoveMotor1();
MoveMotor2();
MoveMotor3();
MoveMotor4();
50
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
if(TT_SetHome == 1)
{
Serial.println("Dang SetHome");
SetHome();
TT_SetHome++;
}
if(TT_Magnet == 1)
{
//Serial.println("Dang Hut");
digitalWrite(magnet, 1);
}
if(TT_Magnet == 0)
{
//Serial.println("Dang Nha");
digitalWrite(magnet, 0);
}
51
ĐA_ROBOT GVHD:TS. TRẦN ĐỨC THIỆN
52