Tải bản đầy đủ (.docx) (36 trang)

THIẾT KẾ, CHẾ TẠO ROBOT SCARA 3 BẬC TỰ DO

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.74 MB, 36 trang )

Báo cáo: Đồ án kỹ thuật
Robot
Nhóm 3

THÀNH VIÊN TRONG NHÓM:
Đinh Tiến Vinh
Bùi Xuân Tường
Lê Đức Trung
Lê Thanh Tùng
Nguyễn Thanh Luân
Trương Quang Dũng

Page
1


LỜI NÓI ĐẦU
Vào đầu thế kỉ trước, con người đã có ý tưởng tạo ra những cỗ máy thay
thế mình trong các công việc nặng nhọc, nhàm chán, nguy hiểm. năm 1940,
robot đầu tiên ra đời tại Mĩ, làm nhiệm vụ vận chuyển các hoạt chất phóng xạ.
đến thập kỉ 80, trên thế giới đã có tới 40 nghìn robot thuộc 500 kiểu, do 200
hãng tham gia sản xuất. Ngày nay, robot được sử dụng rộng rãi trong sản xuất,
nghiên cứu khoa học và đời sống. Đó là thiết bị không thể thiếu trong quá trình
sản xuất, đặc biệt là hệ thống sản xuất linh hoạt. Robot ngày càng phát triển,
khéo léo và thông minh, được coi là sản phẩm điển hình của ngành kĩ thuật Cơ
điện tử.
Trước xu thế phát triển đó, hầu hết các trường đại học kỹ thuật ở Việt
Nam đã đưa môn “kỹ thuật robot” vào giảng dạy trong chương trình chính khóa.
Môn học này được giảng dạy chủ yếu cho các chuyên ngành cơ khí, song các
khía cạnh riêng biệt của nó như kỹ thuật điều khiển, lập trình, mô phỏng cũng
được các ngành khác quan tâm. Trong phạm vi của học phần, được sự giảng dạy


và hướng dẫn của thầy Nguyễn Thiên Chương, chúng em đã nghiên cứu và chế
tạo Scara Robot Arm, đây là nội dung chính của bài báo cáo này.
Robot Arm là một loại cánh tay cơ khí, thường được lập trình với các
chức năng tương tự cánh tay con người. Robot Arm có thể là một cơ chế hoàn
chỉnh hoặc là một phần của robot phức tạp hơn. Các liên kết của tay máy được
nối với nhau bằng các khớp tự do, hoặc là chuyển động quay hoặc là chuyển
động tịnh tiến. Các liên kết của các tay máy có thể tạo thành một chuỗi động
học. Đích đến cuối cùng của chuổi động học này được gọi là End Effector,
tương tự như cánh tay con người.
Robot Arm luôn là chủ đề được quan tâm nhiều trong lĩnh vực tự động
hóa bởi tính ứng dụng thực tiễn của nó trong xã hội hiện nay nói chung và trong
ngành công nghiệp nói riêng. Mỗi tay máy đều có một cơ cấu khác nhau, do đó
có các phương trình động học, động lực học cũng khác nhau cho nên việc tính
toán và điều khiển mỗi loại tay máy là rất phức tạp. Có thể thấy tay máy là một
đề tài không mới nhưng nó mang tính chất khó, tính nghiên cứu và ứng dụng
cao.
Bài báo cáo này được nhóm chúng em chuẩn bị dựa theo kiến thức được
học trên lớp và một phần tài liệu tìm kiếm từ các nguồn khác nhau. Vì khả năng
tiếp thu còn hạn hẹp và kinh nghiệm thực tế non kém nên khó tránh được thiếu
sót, chúng em rất mong nhận được sự chỉ bảo và góp ý của thầy để sản phẩm
chúng em tạo ra được hoàn thiện nhất, góp phần bổ sung kiến thức cho bọn em
trong học tập và làm việc sau này. Xin chân thành cảm ơn.

Page
2


Chương 1: Tổng quan
1.1.


Đề tài
Tự thiết kế một Robot cánh tay Scara và điều khiển.

1.2.
-

Sản phẩm thiết kế của nhóm
Yêu cầu của đề tài
Thiết kế giao diện điều khiển bằng ngôn ngữ lập trình PYTHON và sử
dụng vi điều khiển arduino.
Giải và điều khiển robot theo động học thuận, động học nghịch .
Định vị tọa độ cho robot.
Làm ra được 1 ứng dụng cho robot.

Page
3


Chương 2: Thiết kế, chế tạo robot
2.1. Thiết kế
Thiết kế của tay Scara gồm 3 khâu 1 khớp tịnh tiến và 2 khớp xoay, tay A
có chiều dài là 110 mm, tay B là 115 mm. Thiết kế được vẽ trên Solidwork theo
cơ cấu truyền động bánh răng.
Sau khi thiết kế tổng cộng gồm 12 chi tiết lưu thành file .STL và in 3d để
lắp ráp.

Hình ảnh thiết kế tổng thể robot

Page
4



2.2. Phần cơ khí
- 10 chi tiết nhựa in 3d.
- Sử dụng 3 động cơ bước Shinano Kenshi.

- 1 trục vít me bước 8mm dài 30 cm.

- 3 trục tuyến tính dài 35cm.

Page
5


- 4 ổ bi trượt LM8UU.

- 2 ổ bi 15 x 32 x 9 mm.

- 4 ổ bi 6 x 13 x 5 mm.

Page
6


- Ốc vít sử dụng 3li, 4 li và 6 li.

2.3. Phần điện tử
2.3.1. Mạch Arduino MEGA 2560
 Cấu tạo:
 54 chân digital (15 có thể được sử dụng như các chân

PWM).
 16 đầu vào analog.
 4 UARTs (cổng nối tiếp phần cứng).
 1 thạch anh 16 MHz.
 1 cổng kết nối USB.
Page
7


 1 jack cắm điện.
 1 đầu ICSP.
 1 nút reset.

Nó chứa tất cả mọi thứ cần thiết để hỗ trợ các vi điều khiển.
Arduino Mega2560 khác với tất cả các vi xử lý trước giờ vì không sử dụng
FTDI chip điều khiển chuyển tín hiệu từ USB để xử lý. Thay vào đó, nó sử dụng
ATmega16U2 lập trình như là một công cụ chuyển đổi tín hiệu từ USB. Ngoài
ra, Arduino Mega2560 cơ bản vẫn giống Arduino Uno R3, chỉ khác số lượng
chân và nhiều tính năng mạnh mẽ hơn, nên các bạn vẫn có thể lập trình cho con
vi điều khiển này bằng chương trình lập trình cho Arduino Uno R3.
Chức năng: Là một bo mạch vi xử lý được dùng để lập trình tương tác với
các thiết bị phần cứng như động cơ. Để kết nối và làm việc Arduino với phần
mềm python... điều khiển cánh tay Robot.

2.3.2. Mạch RAMPS 1.4
RAMP 1.4 (Reprap Arduino Mega Pololu Shield) là board mở rộng
cắm trên Arduino Mega 2560, dùng để điều khiển cánh tay Robot
và điều khiển các máy in 3D Reaprap (mã nguồn mở Marlin).
RAMPS 1.4 có 5 khay dùng để lắp mô đun điều khiển các động cơ
bước A4988 cho cánh tay Robot, các mạch công suất điều khiển

các đầu đùn (extruder), bàn nhiệt...của máy in 3D.
Page
8


Mạch RAMPS 1.4

Chức năng :
 Dùng để điều khiển các dạng robot 3 trục tịnh tiến và máy in 3D.
 Có thể mở rộng cho các phụ kiên điện tử khác.
 3 mạch công suất cho các đầu sấy và quạt, các mạch xử lý tín hiệu
nhiệt điện trở...
 Điều khiển bàn nhiệt (có bảo vệ bằng cầu chì tự phục hồi 11A).
 Có 5 khay cắm.

2.3.3. Mạch điều khiển động cơ stepper drivers A4988

Chức năng: Mạch điều động cơ mô tơ bước A4988 là 1 mạch vi bước
lưỡng cực điểu khiển động cơ bước. Driver cho phép điểu chỉnh cường độ dòng
điện bằng biến để bảo vệ quá tải dòng điện và nhiệt độ.
A4988 có5chế độ điều khiển:
• Chế độ full bước (fullstep): mỗi tín hiệu điều khiển, động cơ bước quay 1.8
(hoặc 0.9) độ ứng với động cơ 1.8 (hoặc 0.9) độ
• Chế độ ½ bước : mỗi tín hiệu điều khiển, động cơ quay một góc bằng ½ so với
chế độ full bước.
• Chế độ ¼ bước : mỗi tín hiệu điều khiển, động cơ quay một góc bằng ¼ so với
Page
9



chế độ full bước.
• Chế độ 1/8 bước : mỗi tín hiệu điều khiển, động cơ quay một góc bằng 1/8 so
với chế độ full bước.
• Chế độ 1/16 bước : mỗi tín hiệu điều khiển, động cơ quay một góc bằng 1/16
so với chế độ full bước.
Để thiết lập chế độ điều khiển bước, sử dụng các jump trên board RAMPS 1.4
như hình sau.

Như hình trên thì mỗi vị trí driver A4988 có 3 jump (MS1, MS2…) để chọn
chế độ điều khiển.

Robot của nhóm đùng ở chế độ vi bước 1/16 nên cắm cả 3 jump.
2.4. Lắp ráp robot
- Sau khi in 3D hết tất cả chi tiết, ta tiến hành lắp ráp robot.
- Quá trinh lắp ráp: robot được láp ráp từ cụm nhỏ rồi đến tổng thể của 1
con robot hoàn chỉnh.
- Đầu tiên chúng ta lắp phần đế để đỡ robot, gồm có:

Page
10


Sau đó, ráp thành:

Page
11


Page
12



Ráp bánh răng nhỏ vào đầu động cơ

Ráp phần giữa robot

Page
13


Page
14


Page
15


Ráp vào phần đế

Ráp phần trên robot

Page
16


Lắp phần trên vào và hoàn thiện robot

Quá trình lắp ráp đã xong.
Page

17


Chương 3: Chương trình điều khiển và phần đệm
3.1. Chương trình điều khiển
Giao diện và chương trình điều khiển robot được lập trình toàn bộ trên
phần mềm PYTHON.

Để điều khiển được robot thì ta phải giải được động học thuận và động học
nghịch: Bảng Move to Coordinate ( điều khiển theo động học nghịch) và Move
toAngle (động học thuận).
Giải động học thuận
Động học thuận là khi ta biết 3 góc xoay của động cơ sẽ tìm ra tọa độ
x,y,z.
Đầu tiên vẽ tay robot và phân tích động học ra giấy.

Page
18


Lập bảng phân tích từng khâu

Nhân các ma trận A1, A2, A3 với nhau và tìm ra phương trình tọa độ x và
y. Do Scara robot có khớp 1 là khớp tịnh tiến nên chỉ có phương trình x, y.

Việc tiếp theo ta chỉ cần vận kiến thức lập trình và đưa 3 phương trình này
vào PYTHON bằng thư viện math:
Px = (lengthArmB * math.cos(theta1) * math.cos(theta2)) - (lengthArmB
* math.sin(theta1) * math.sin(theta2)) + (lengthArmA * math.cos(theta1))
Py = (lengthArmB * math.sin(theta1) * math.cos(theta2)) + (lengthArmB

* math.cos(theta1) * math.sin(theta2)) + (lengthArmA * math.sin(theta1))
Page
19


Ở đây, theta1 và theta2 là 2 góc mà ta muốn 3 động cơ xoay.

Ứng với 2 góc này sẽ ứng với vị trí P(x,y)
Còn trục z vì là tịnh tiến nên cần nhập tọa độ z là động cơ xoay đến vị trí
mong muốn
Theo hình trên, thì theta1 là góc tayA, theta2 là góc tayB chưa hợp với
phương x.
Ta sẽ nhập 2 góc và trục z của 3 động cơ vào giao diện

Tuy nhiên, 2 góc trên giao diện là 2 góc hợp bởi các tay với phương x để
người sử dụng dễ điều khiển hơn. Vậy nên, khi bấm nút “Move” ta sẽ bù trừ
trong PYTHON góc tayB để thành góc theta2.
Giải động học nghịch
Ngược lại với động học nghịch là khi ta nhập 3 tọa độ x,y,z vào giao diện,
chương trình sẽ suy ra 2 góc đê động cơ xoay làm cho tay tác động cuối cùng di
Page
20


chuyển đến tọa độ x,y,z mà ta mong muốn. Vậy bài toán ở đây là ta đi tìm 2 góc
theta, và để tìm được 3 góc này ta sẽ dùng phương pháp giải hình học.

Vậy là ta có được 2 góc theta, từ đây ta ráp vào phần lập trình trong
PYTHON:
Px = toadox.get()

Py = toadoy.get()
Pz = toadoz.get()
Page
21


denta = ((math.pow(Px, 2) + math.pow(Py, 2) - math.pow(lengthArmA, 2) math.pow(lengthArmB, 2)) / (2 * lengthArmA * lengthArmB))
denta2 = math.acos(denta)
denta_2 = denta2 * 180/math.pi

s_q = math.atan2(Py, Px)
q = ((math.pow(Px, 2) + math.pow(Py, 2) + math.pow(lengthArmA, 2) math.pow(lengthArmB, 2)) / (2 * lengthArmA * math.sqrt(math.pow(Px, 2) +
math.pow(Py, 2))))
dentaq = math.acos(q)
denta1 = s_q - dentaq
denta_1 = denta1 * 180/math.pi
Tính góc ra xung
position[1] = int (denta_1 * ((200 * 16) * 32/9) / 360)
position[2] = int (denta_2 * ((200 * 16) * 32/9) / 360)
position[3] = int ((Pz * 3200)/8)
Lấy góc theta1 và theta2 suy ra từ động học nhân với tổng số xung quay
được 1 vòng và chia cho 360 độ.
Còn trục z sử dụng vít me tịnh tiến có bước ren là 8mm, nên lấy chiều dài
cần tịnh tiến nhân tổng số xung và chia cho 8mm.
Sử dụng giao diện

Page
22



Ta nhập tọa độ vào giao diện, nhấn “Move” robot sẽ di chuyển đến tọa độ
mong muốn.

Nút “Reset” để lấy tọa độ đầu và nút “Home” để cho cánh tay di chuyển
về vị trí home. Vị trí home có 2 góc là tayA = 90, tayB = 90, trucZ = 0.

Nút “Forward” và “Backward” dùng để di chuyển theo phương x.
Nút “Left” và “Right” dùng để di chuyển theo phương y.
Nút “Up” và “Down” dùng để di chuyển theo phương z.

Khung “Curent Position” dùng để hiển thị tọa độ và các góc hiện tại của
tay tác động cuối cùng.
Nút “Connect to MeArm” dùng để kết nối và ngắt kết nối giữa máy tính
với robot.
Ở phần mềm giao diện PYTHON khi thực hiện lệnh nào đó sẽ gửi 1 chuỗi
dữ liệu gồm 6 đến 8 dữ liệu.
Vd:

arduino.write('A'+str(truyen[1])+'B'+str(truyen[2])+'C'+str(truyen[3])

+'D'+str(truyen[4])+'E'+str(truyen[5])+'F'+str(truyen[6])
+'G'+str(2)+'H'+str(0)+'I')
Các kí tự A,B,C,D,... dùng để đóng gói dữ liệu. Để khi arduino nhận có
thể dễ dàng phân biệt và tách dữ liệu để điều khiển. Một chuỗi dữ liệu bao gồm
3 dữ liệu mang xung và 3 dữ liệu xác định chiều quay của động cơ.
Page
23


3.2. Phần đệm Arduino

Như đã trình bày ở mục trước, hầu hết chương trình điều khiển chính
được viết trên PYTHON nên arduino chỉ có nhiệm vụ là nhận chuỗi dữ liệu từ
PYTHON gửi xuống rồi tiến hành sắp xếp và tách lây dữ liệu và điều khiển
động cơ bước theo mong muốn.
Sau khi PYTHON gửi chuỗi dữ liệu xuống, arduino tiến hành nhận và tìm
vị trí của các kí tự A,B,C,D,...
while(Serial.available()>0)
{
digitalWrite(13, HIGH);
recever = Serial.read();
Serial.println(recever );

if(recever=='A'){position_A = count_number_string;}
if(recever=='B'){position_B = count_number_string;}
if(recever=='C'){position_C = count_number_string;}
if(recever=='D'){position_D = count_number_string;}
if(recever=='E'){position_E = count_number_string;}
if(recever=='F'){position_F = count_number_string;}
if(recever=='G'){position_G = count_number_string;}
if(recever=='H'){position_H = count_number_string;}
if(recever=='I'){position_I = count_number_string;}
if(recever=='Z'){position_Z = count_number_string;}

count_number_string++;
Page
24


a[count_number_string]=recever;
}

Tiếp đó tiến hành tách chuỗi lấy dữ liệu:
if((position_B - position_A)> 1)
{
for(i=position_B;i>position_A+1;i--)
{
so = so + (a[i]-48)*j;
j=j*10;
}
j=1;
so_1=so;
so=0;
}
if((position_C - position_B)> 1)
{
for(i=position_C;i>position_B+1;i--)
{
so = so + (a[i]-48)*j;
j=j*10;
}
j=1;
so_2=so;
Page
25


×