Professional Documents
Culture Documents
Hà Nội 2022
MỤC LỤC
LỜI MỞ ĐẦU................................................................................................................2
Chương I: Tổng quan về cánh tay robot học lệnh gắp sản phẩm....................................3
1. Đặt vấn đề..............................................................................................................3
2. Mục đích của đề tài.................................................................................................3
3. Đối tượng và phạm vi nghiên cứu...........................................................................3
4. Phương pháp nghiên cứu khoa học.........................................................................3
5. Ý nghĩa khoa học và thực tiễn đề tài.......................................................................4
Chương II: Thiết kế cánh tay robot gắp sản phẩm.........................................................4
2.1 Thiết kế mô hình cánh tay.....................................................................................4
2.2 Ứng dụng và lợi ích của cánh tay robot.................................................................6
Chương III: Phân tích và thiết kế mô hình.....................................................................7
3.1 Sơ đồ điều khiển vị trí cánh tay.............................................................................7
3.2 Các thiết bị sử dụng trong mô hình.......................................................................8
3.2.1 Arduino..........................................................................................................8
3.2.2 Động cơ servo.............................................................................................12
3. Phần mềm điều khiển...........................................................................................14
3.3.1: Phần mềm Arduino IDE..............................................................................14
3.3.2 Các thao tác hoạt động của cánh tay.............................................................15
3.3.3 Lưu đồ thuật toán.........................................................................................15
3.3.4 Mã nguồn chương trình điều khiển...............................................................16
KẾT LUẬN.................................................................................................................23
1. Kiểm tra tính ổn định...........................................................................................23
2. Hướng phát triển..................................................................................................23
TÀI LIỆU THAM KHẢO............................................................................................24
LỜI MỞ ĐẦU
Trong sự nghiệp công nghiệp hóa và hiện đại hóa đất nước, tự động hóa ngày càng
đóng một vai trò quan trọng. Với tốc độ phát triển như hiện nay chúng ta không chỉ
cần một lượng lao động khổng lồ mà còn đòi hỏi có trình độ, chất lượng tay nghề, kỹ
thuật lao động và thiết bị sản xuất. Mức độ phát triển của khoa học kỹ thuật ngày càng
cao thì vấn đề tự động hóa ngày càng được chú trọng. Tự động hóa các quá trình sản
xuất cho phép cải thiện điều kiện sản xuất. Các quá trình sản xuất sử dụng quá nhiều
lao động sống rất dễ mất ổn định về giờ giấc, về chất lượng gia công và năng suất lao
động, gây khó khăn cho việc điều hành và quản lý sản xuất. Các quá trình sản xuất tự
động cho phép loại bỏ các nhược điểm trên . Đồng thời tự động hóa đã thay đổi tính
chất lao động, cải thiện điều kiện làm việc của công nhân, nhất là trong các khâu độc
hại, nặng nhọc, có tính lặp đi lặp lại nhàm chán, khắc phục dần sự khác nhau giữa lao
động trí óc và lao động chân tay.
Do vậy, ứng dụng robot vào sản xuất là tính tất yếu của quá trình tự động hóa. Việc áp
dụng các cánh tay robot vào dây chuyền sản xuất ngày càng phổ biến. Xuất phát từ
những vấn đề mà thực tiễn đề ra như trên, bản báo cáo này sẽ nghiên cứu cũng như
“Thiết kế và chế tạo cánh tay robot gắp sản phẩm”.
2
Chương I: Tổng quan về cánh tay robot học lệnh gắp sản phẩm
1. Đặt vấn đề
Thế giới hiện nay đang trong quá trình cách mạng công nghiệp 4.0, nó mang đến
cho nhận loại cơ hội để thay đổi bộ mặt các nền kinh tế. Cùng với đó là những hứa
hẹn về cuộc ‘đổi đời’ của các doanh nghiệp tại Việt Nam. Tự động hóa và robot là
một xu hướng quan trọng của tương lai nền công nghiệp. Tự động hóa đem lại
mức độ chính xác và năng xuất cao hơn. Công nghệ này thậm chí có thể hoạt động
tốt ở một số môi trường làm việc khắc nghiệt không an toàn với con người. Mục
đích để phục vụ sản xuất, thậm chí phục vụ nhu cầu giải trí cũng như chăm sóc con
người. Với sự phát triển mạnh mẽ về công nghiệp máy tính và cách mạng công
nghiệp 4.0 trên thế giới cũng như ở nước ta, công nghiệp tự động hóa và robot
cũng phát triển nở rộ đi kèm theo đó là nhu cầu về nguồn lao động có trình độ có
thể làm chủ được công nghệ.
3
5. Ý nghĩa khoa học và thực tiễn đề tài
- Kết quả nghiên cứu của đề tài có thể được ứng dụng xây dựng cánh tay robot tự
động gắp sản phẩm, dựa theo hình dáng, hay chia sản phẩm từ trên băng truyền
xếp vào thùng/khay. Ngoài ra cánh tay máy còn có thể ứng dụng vào hàn, cắt hay
chỉ đơn giản là nâng vật nặng.
- Mô hình kết quả của đề tài có thể làm thiết bị thí nghiệm thực hành tốt và trực quan
cho sinh viên .
● Khớp robot
4
Khớp là khâu liên kết hai thanh nối có chức năng truyền chuyển động để thực
hiện di chuyển của robot.
Khớp robot gồm hai loại: khớp tịnh tiến và khớp quay.
5
cấu dụng cụ (Các dụng cụ là: mũi hàn, dụng cụ cắt đá, mài đá, một bình sơn, cơ
cấu hàn điểm, hàn hồ quang...)
● Mô hình robot được thiết kế
Lợi ích
- Cài đặt nhanh: Ngay cả các nhân viên vận hành chưa được đào tạo cũng ngạc nhiên
khi lần đầu tiên cài đặt cánh tay robot. Tháo gỡ, lắp ráp robot và lập trình nhiệm vụ
đơn giản, đầu tiên thường chỉ mất ít hơn 1 giờ làm việc. Theo trải nghiệm của khách
hàng chúng tôi, thời gian trung bình để tiến hành cài đặt hoàn chỉnh chỉ mất nửa ngày.
6
- Lập trình đơn giản: Việc lập trình trên các cánh tay robot dễ dàng nhanh chóng cho
nên các nhân viên không có nhiều kinh nghiệm vẫn có thể nhanh chóng lập trình cánh
tay robot nhờ hiển thị 3D trực quan được cấp bằng sáng chế. Tất cả những gì nhân
viên vận hành cần làm là di chuyển cánh tay robot đến tọa độ mong muốn hoặc chạm
vào các phím mũi tên trên máy tính bảng có màn hình cảm ứng dễ sử dụng.
- Triển khai linh hoạt: Ngày nay các cài đặt sản phẩm cần linh hoạt và nhanh chóng để
đáp ứng các nhu cầu không ngừng thay đổi và mang tính cạnh tranh cao. cánh tay
robot không bao giờ hạn chế bạn; ngược lại, những cánh tay robot gọn nhẹ dễ dàng di
chuyển và tái triển khai sang các quy trình mới, cho phép bạn tự động hóa hầu như bất
kỳ công việc thủ công nào, kể cả công việc với phạm vi hoạt động rất nhỏ hoặc thay
đổi liên tục
- Nâng cao hiệu quả lao động: Nhờ được lập trình sẵn với các chức năng tương tự như
cánh tay người, các thiết bị này được ứng dụng vào rất nhiều lĩnh vực khác nhau với
mức năng suất cực kỳ hiệu quả, từ: hàn, sơn, lắp ráp các bảng mạch in, dán nhãn, hỗ
trợ xử lý vật liệu, kiểm tra sản phẩm và thử nghiệm…
- Tiết kiệm không gian và chi phí: Không cần phải sử dụng đến nhiều nguồn lực hay
các máy móc to lớn, 1 cánh tay robot 3 bậc có thể dư sức hoàn thành các công việc 1
cách nhanh chóng, giúp tiết kiệm chi phí thuê nhân công, chi phí bảo trì, bảo dưỡng
máy móc, chi phí thuê mặt bằng…
- Hạn chế sai sót: Với sự lập trình, tính toán cẩn thận trong từng chi tiết, những cánh
tay robot chắc chắn sẽ đảm bảo mọi thao tác được tiến hành một cách chuẩn xác, Điều
đó có nghĩa là chúng ta sẽ chẳng bao giờ để xảy ra các lỗi sai, các vấn đề trục trặc
trong quá trình sản xuất.
7
Bài toán điều khiển cánh tay robot là đưa khâu chấp hành đến vị trí làm việc mong
muốn. Nguyên lý điều khiển trí cánh tay được trình bày như Hình. được so sánh với
các giá trị thông khớp hiện tại được mắt người phản hồi về, sai lệch sẽ qua bộ điều
khiển tác động đến các động cơ của cánh tay. Từ các thông số khớp hiện tại được lấy
liên tục từ mắt, vị trí hiện tại của khâu chấp hành sẽ tính được theo thời gian thực.
3.2.1 Arduino
● Giới thiệu về Arduino
Arduino 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ư cảm biến, động cơ, đèn hoặc một số thiết bị khác. Lý do
Arduino được biết đến rộng rãi là nhờ môi trường phát triển ứng dụng cực kỳ
dễ sử dụng, ngôn ngữ lập trình dễ tiếp cận. Hơn cả thế nữa điều đặc biệt nhất
tạo nên cộng đồng Arduino mạnh mẽ là vì Arduino có mức giá rất thấp, mã
nguồn từ phần cứng đến phần mềm đều mở.
● Giới thiệu Arduino Uno
8
Vi điều khiển
Năng lượng
9
Arduino UNO có thể được cấp nguồn 5V thông qua cổng USB hoặc cấp nguồn
ngoài với điện áp khuyên dùng là 7-12V DC và giới hạn là 6-20V. Nếu cấp
nguồn vượt quá ngưỡng giới hạn trên sẽ làm hỏng Arduino UNO.
GND (Ground): cực âm của nguồn điện cấp cho Arduino UNO. Khi dùng các
thiết bị sử dụng những nguồn điện riêng biệt thì những chân này phải được nối
với nhau.
5V: cấp điện áp 5V đầu ra. Dòng tối đa cho phép ở chân này là 500mA.
3.3V: cấp điện áp 3.3V đầu ra. Dòng tối đa cho phép ở chân này là 50mA.
Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO, nối cực dương của
nguồn với chân này và cực âm của nguồn với chân GND.
IOREF: Điện áp hoạt động của vi điều khiển trên Arduino UNO có thể được đo
ở chân này. Và dĩ nhiên nó luôn là 5V. Mặc dù vậy chúng ta không được lấy
nguồn 5V từ chân này để sử dụng bởi chức năng của nó không phải là cấp
nguồn.
RESET: việc nhấn nút Reset trên board để reset vi điều khiển tương đương với
việc chân RESET được nối với GND qua 1 điện trở 10KΩ.
Bộ nhớ
Vi điều khiển Atmega328 tiêu chuẩn cung cấp cho người dùng:
● 32KB bộ nhớ Flash: những đoạn lệnh bạn lập trình sẽ được lưu trữ trong
bộ nhớ Flash của vi điều khiển. Thường thì sẽ có khoảng vài KB trong
số này sẽ được dùng cho bootloader nhưng đừng lo, bạn hiếm khi nào
cần quá 20KB bộ nhớ này đâu.
● 2KB cho SRAM (Static Random Access Memory): giá trị các biến bạn
khai báo khi lập trình sẽ lưu ở đây. Bạn khai báo càng nhiều biến thì
càng cần nhiều bộ nhớ RAM. Tuy vậy, thực sự thì cũng hiếm khi nào bộ
nhớ RAM lại trở thành thứ mà bạn phải bận tâm. Khi mất điện, dữ liệu
trên SRAM sẽ bị mất.
● 1KB cho EEPROM (Electrically Eraseble Programmable Read Only
Memory): đây giống như một chiếc ổ cứng mini – nơi bạn có thể đọc và
ghi dữ liệu của mình vào đây mà không phải lo bị mất khi cúp điện
giống như dữ liệu trên SRAM.
10
Các cổng vào/ra
Arduino UNO có 14 chân digital dùng để đọc hoặc xuất tín hiệu. Chúng chỉ có
2 mức điện áp là 0V và 5V với dòng vào/ra tối đa trên mỗi chân là 40mA. Ở
mỗi chân đều có các điện trở pull-up từ được cài đặt ngay trong vi điều khiển
ATmega328 (mặc định thì các điện trở này không được kết nối).
Một số chân digital có các chức năng đặc biệt như sau:
Arduino UNO có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu
10bit (0 → 210-1) để đọc giá trị điện áp trong khoảng 0V → 5V. Với chân
AREF trên board, bạn có thể để đưa vào điện áp tham chiếu khi sử dụng các
11
chân analog. Tức là nếu bạn cấp điện áp 2.5V vào chân này thì bạn có thể dùng
các chân analog để đo điện áp trong khoảng từ 0V → 2.5V với độ phân giải
vẫn là 10bit.
Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp
I2C/TWI với các thiết bị khác.
- Động cơ servo được thiết kế cho những hệ thống hồi tiếp vòng kín.
- Khi động cơ quay, vận tốc và vị trí sẽ được hồi tiếp về mạch điều khiển
- Chức năng chính của Servo đó là điều khiển vị trí, thay đổi tốc độ chính xác, điều
chỉnh momen phù hợp với những ứng dụng công việc.
Động cơ RC servo 9G
Động cơ RC Servo 9G là động phổ biến dùng trong các mô hình điều khiển nhỏ và
đơn giản như cánh tay robot. Động cơ có tốc độ phản ứng nhanh, được tích hợp sẵn
Driver điều khiển động cơ, dễ dàng điều khiển góc quay bằng phương pháp điều độ
rộng xung PWM.
Đặc điểm:
12
- Điện áp hoạt động: 4.2-6V
- Nhiệt độ: 0 ℃ – 55 ℃
- Tốc độ: 0.3 giây / 60 độ
Khung cánh tay robot
13
3. Phần mềm điều khiển
Môi trường phát triển tích hợp (IDE) của Arduino là một ứng dụng
crossplatform (nền tảng) được viết bằng Java, và từ IDE này sẽ được sử
dụng cho ngôn ngữ lập trình xử lý (Processing programming language) và
project Wiring. Nó được thiết kế để dành cho những người mới tập làm
quen với lĩnh vực phát triển phần mềm. Nó bao gồm một chương trình code
editor với các chức năng như đánh đầu cú pháp, tự động brace matching, và
tự động canh lề, cũng như compile(biên dịch) và upload chương trình lên
board chỉ với 1 cú nhấp chuột. Một chương trình hoặc code viết cho
Arduino được gọi là một sketch.
Các chương trình Arduino được viết bằng C hoặc C++. Arduino IDE đi kèm
với một thư viện phần mềm được gọi là "Wiring", từ project Wiring gốc, có thể
giúp các thao tác input/output được dễ dàng hơn. Người dùng chỉ cần định nghĩa 2
hàm để tạo ra một chương trình vòng thực thi (cyclic executive) có thể chạy được
- setup() : hàm này chạy mỗi khi khởi động một chương trình, dùng để thiết lập các cài
đặt
- loop() : hàm này được gọi lặp lại cho đến khi tắt nguồn board mạch
Một chương trình điển hình cho một bộ vi điều khiển đơn giản chỉ là làm
cho một bóng đèn Led sáng/tắt. Trong môi trường Arduino, ta sẽ phải viết
một chương trình giống như sau:
14
3.3.2 Các thao tác hoạt động của cánh tay
● Thiết lập cánh tay robot về trạng thái ban đầu
● Quay cánh tay máy về hướng điểm gắp vật
● Hạ cánh tay máy
● Mở tay gắp và kẹp
● Hạ tay gắp, kẹp xuống
● Gắp, kẹp vật thể
● Di chuyển đến vị trí khác
15
Khi setup điều khiển cánh tay robot thông qua các chiết áp khi đạt được vị trí
mong muốn ấn record vị trí đó được lưu lại vào trong ram . Ấn nút play robot
tự động di chuyển theo những vị trí đã record theo tứ tự lần lượt . Khi tạm
dừng chương trình robot sẽ dừng lại khi nào ấn lại nút play robot sẽ hoạt động
trở lại .
Trong trường hợp mất điện đột ngột khi khởi động lại chương trình ấn nút
play robot sẽ tự động di chuyển theo chương trình đã setup ngay trước đó
Lập trình
16
#define servo_max 5
#define step_max 200
#define start_pause_pin 12
#define record_pin 7
#define ENABLE_EEPROM_PIN 2
#define led_pin 13
#define delay_toc_do 20
byte pin_analog[servo_max] = { A0, A1};
byte pin_servo[servo_max] = {3, 5};
unsigned int A0_value, A1_value;
byte get_goc(byte servo_i)
{
switch (servo_i) {
case 0:
A0_value =analogRead(A0);
return map(A0_value, 0, 1023, 0, 179);
break;
case 1:
A1_value = analogRead(A1);
return map(A1_value, 0, 1023, 0, 179);
break;
default:
break;
}
}
const unsigned int SIZE_MEMORY_EEPROM = 1024;
#include <EEPROM.h>
#include <Servo.h>
Servo servo[servo_max];
int step_move = 0;
byte goc_servo[servo_max][step_max];
byte goc_tam_thoi[servo_max] = { 90 };
void setup()
{
pinMode(led_pin, OUTPUT);
Serial.begin(9600);
pinMode(start_pause_pin, INPUT_PULLUP);
pinMode(ENABLE_EEPROM_PIN, INPUT_PULLUP);
pinMode(record_pin, INPUT_PULLUP);
17
for (byte i = 0; i < servo_max; i++) {
pinMode(pin_analog[i], INPUT);
servo[i].attach(pin_servo[i]);
}
ADCSRA = ((ADCSRA & (B11111000)) | B00000100);
learn_and_move();
}
digitalWrite(led_pin, HIGH);
delay(time_delay);
digitalWrite(led_pin, LOW);
delay(time_delay * 2);
}
}
void record(unsigned int step_x)
{
for (byte i = 0; i < servo_max; i++) {
goc_servo[i][step_x] = get_goc(i);
}
nhap_nhay(100, 2);
Serial.println(goc_servo[0][step_x]);
}
void move_all()
{
18
for (byte i = 0; i < servo_max; i++) {
hieu = abs(goc_tam_thoi[i] - get_goc(i));
if ((hieu >= 1) && (hieu < 170)) {
goc_tam_thoi[i] = get_goc(i);
}
} // lấy góc
move_all();
}
void nap_eeprom_sang_ram()
{
}
}
}
void luu_vao_eeprom()
{
EEPROM.write(SIZE_MEMORY_EEPROM - 1, step_move);
delay(15);
nhap_nhay(500, 3);
digitalWrite(led_pin, HIGH);
for (byte i = 0; i < servo_max; i++) {
//Serial.print("luu");
//Serial.println(i);
for (int step_j = 0; step_j < step_move; step_j++) {
EEPROM.write(step_j + i * step_max, goc_servo[i][step_j]);
delay(15);
}
}
nhap_nhay(500, 3);
19
digitalWrite(led_pin, LOW); // tắt đèn
}
void pause()
{
if (digitalRead(start_pause_pin) == 0) {
while (true) {
digitalWrite(led_pin, 1);
delay(300); // chống nhiễu
Serial.println("PAUSE");
if (digitalRead(ENABLE_EEPROM_PIN) == 0) {
// nhấn lưu eeprom
delay(300);
luu_vao_eeprom();
}
if (digitalRead(start_pause_pin) == 0) {
Serial.println("START");
digitalWrite(led_pin, 0);
delay(300);
goto out_pause;
}
}
}
out_pause:;
void auto_move()
{
Serial.println(step_move);
nhap_nhay(50, 3);
float hieu_f[servo_max];
unsigned int step = 0, step_next;
byte time;
byte thay_doi;
while (true) {
20
//lấy hiệu góc hiện tại và góc sau
step_next = 0;
}
Serial.println(step);
Serial.println(goc_servo[0][step]);
Serial.println(goc_servo[0][step_next]);
Serial.println(hieu_f[0]);
for (float loading = 1.0; loading <= 100.0; loading++) {
Serial.print(loading);
Serial.print("‚");
Serial.print(hieu_f[0]);
Serial.print("‚");
Serial.println(goc_tam_thoi[0]);
if ((loading >= 0.0) && (loading < 20.0)) {
time = delay_toc_do * 2 + 5;
}
else if (loading < 30.0) {
time = delay_toc_do / 2 + 5;
}
else if (loading < 90.0) {
time = delay_toc_do + 5;
}
21
else {
time = delay_toc_do * 2 + 5;
}
// delay(delay_toc_do);
while ((millis() % delay_toc_do) != 0) {
pause();
} //while
void learn_and_move()
{
step_move = 0;
while (digitalRead(start_pause_pin) != 0) {
//b1: điều khiển servo bằng biến trở
while (digitalRead(record_pin) != 0) {
control_servo();
record(step_move);
if (step_move < step_max) {
step_move++;
}
}
buoc_3:
step_move--;
auto_move();
22
}
void loop()
{
}
KẾT LUẬN
23
TÀI LIỆU THAM KHẢO
https://uniduc.com/vi/blog/canh-tay-robot-la-gi
https://carnovn.com/tim-hieu-su-ra-doi-cua-canh-tay-robot-3-bac-va-loi-ich-cua-
chung/
https://123docz.net//document/1167908-thiet-ke-che-tao-va-dieu-khien-canh-tay-
robot-3-bac-tu-do.htm
https://baoanjsc.com.vn/tin-hang/arm-robot--nhung-ung-dung-cua-canh-tay-
robot_2_1_31596_vn.aspx
http://arduino.vn/bai-viet/42-arduino-uno-r3-la-gi
https://www.academia.edu/35289814/Canh_Tay_robot_arm_robot_
24