Bài viết này được chia sẻ với mục đích: nghiên cứu, tìm hiểu, hướng dẫn lập trình điều khiển cánh tay robot sử dụng bo mạch vi điều khiển Arduino. Sự kết hợp của PLC S7-200 và Arduino trong hệ thống mà bài viết này là không có tính thực tế. Bởi chúng ta có thể sử dụng một trong hai bộ điều khiển PLC S7-200 hoặc bo arduino là có thể thực hiện được và đáp ứng tất thảy các chức năng mà yêu cầu công nghệ của hệ thống này đưa ra.

Yêu cầu công nghệ

Khi cánh tay robot nhận được tín hiệu hoạt động thì tín hiệu gọi cánh tay robot được bật lên. Cánh tay robot sẽ gắp phôi từ một vị trí A trước đó và đặt vào vị trí B trên băng tải của trạm lưu trữ trung gian. Sau khi phôi đã được đặt lên trên băng tải của trạm và đảm bảo phôi có thể di chuyển, băng tải hoạt động di chuyển phôi, phôi gặp cảm biến đặt trên băng tải sau thời gian định trước, băng tải dừng, tay gạt hoạt động, gạt phôi sang trạm kế tiếp để chuẩn bị cho các quá trình gia công tiếp theo.

Chi tiết về từng dòng PLC: https://mesidas.com/dmsp/plc/

Kết cấu thiết bị

  1. Mô hình băng tải: di chuyển phôi
  2. Phôi với 3 loại khác nhau: phôi nhựa với 2 màu trắng, đen và phôi sắt. Ngoài ra, có một số phôi bị lỗi được đưa vào để phân biệt với những phôi trên.
  3. Van điện: điều khiển khớp tịnh tiến và tay kẹp
  4. Cánh tay robot: cánh tay 1 bậc xoay và gắp phôi sang trạm tiếp theo
  5. Bộ nguồn 24VDC: cấp nguồn 24VDC cho mạch điện tử, cảm biến, van điện
  6. Bộ điều khiển lập trình PLC S7 200 CPU 222
  7. Module mở rộng EM 223
  8. Module truyền thông PROFIBUS EM 277
  9. Boar mạch Arduino Uno R3
  10. Cảm biến quang: sử sụng loại khuếch tán, phát hiện phôi ở cơ cấu cấp phôi và cuối băng tải
  11. Mạch điện tử: bộ đệm cho đầu vào/ra PLC và điều khiển tốc độ động cơ băng tải
  12. Nút bấm, khóa điện, chuyển mạch và đèn báo

Cấu tạo cánh tay robot

Cánh tay robot của trạm lưu trữ trung gian có một khớp xoay, một khớp tịnh tiến và khâu chấp hành cuối cánh tay được trang bị 1 tay kẹp.

  • Khớp xoay được điều khiển bằng động bước (Stepper Motor). Phạm vi hoạt động được giới hạn bởi 2 cảm biến từ được gắn trên trục xoay.
  • Khớp tịnh tiến sử dụng khí nén điều khiển. Van điện từ 5/2 tự phục hồi điều khiển tác động xi lanh đẩy ra, hút vào quy định chiều di chuyển khớp.
  • Khâu cuối được gắn với tay kẹp được điều khiển bằng khí nén sử dụng van điện từ 5/2 tự phục hồi để quy định kẹp hay nhả.

Nguyên lý hoạt động của hệ thống

Điều khiển cánh tay robot trạm lưu trữ trung gian FMS

Cấp nguồn: Robot trở về vị trí ban đầu.

Một chu kì hoạt động của cánh tay robot như sau: Xi lanh đi xuống => Tay kẹp gắp sản phẩm => Xi lanh đi lên => Động cơ quay đến vị trị định trước => Xi lanh đi xuống => Tay kẹp nhả sản phẩm => Xi lanh đi lên => Động cơ quay cánh tay robot về vị trí ban đầu.

Chế độ AUTO: Để công tắc ở chế độ AUTO. Ấn nút START_RB, Robot bắt đầu thực hiện chu kì hoạt động. Khi vật đã được đặt vào băng tải và đảm bảo điều kiện cho băng tải hoạt động => Động cơ quay kéo băng tải hoạt động => Khi vật gặp cảm biến quang đặt trên băng tải thì sau 1 giây băng tải dừng => Động cơ kết nối với tay gạt hoạt động, Tay gạt gạt vật sang trạm kế tiếp rồi dừng. Kết thúc quá trình. Ấn nút START_RB để lặp lại quá trình.

Chế độ MAN: Để công tắc ở chế độ MAN.

  • Ấn nút START_RB, Robot bắt đầu thực hiện chu kì hoạt động. Hết chu kì sẽ tự động lặp lại nếu không ấn nút STOP_RB.
  • Ấn nút STOP_RB, Robot thực hiện hết chu kì đang chạy rồi dừng lại.
  • Ấn nút START_BT, Băng tải hoạt động.
  • Ấn nút STOP_BT, Băng tải dừng.

Sử dụng động cơ bước có thể điều khiển linh hoạt góc quay của cánh tay robot bằng cách thay đổi số độ động cơ cần quay trong chương trình điều khiển. Độ chính xác khi điều khiển quay cánh tay robot nhờ động cơ bước, điều khiển chính xác lên đến 1/16 bước (tùy thuộc vào loại động cơ bước sử dụng).

Động cơ bước được áp dụng trong điều khiển vị trí theo vòng hở: Một lợi thế rất lớn của động cơ bước là ta có thể điều chỉnh vị trí quay của roto theo ý muốn mà không cần đến phản hồi vị trí như các động cơ khác, không phải dùng đến encoder hay máy phát tốc (khác với servo). Nhưng đây cũng là nhược điểm, vì là hệ hở nên không có khâu phản hồi dẫn đến tình trạng góc quay không đủ số độ yêu cầu => Không vận hành đúng quy trình.

Mô phỏng chuyển động cánh tay robot trên Easy-Rob

Giới thiệu phần mềm EASY ROB

EASY-ROB là công cụ mô phỏng robot sử dụng đồ họa trong không gian 3 chiều (3D) và các hình ảnh có thể hoạt động được. Một hệ thống 3D-CAD đơn giản cho phép tạo ra các khối hình học cơ bản như khối trụ, khối cầu, khối chữ nhật, khối tam giác… để vẽ kết cấu của robot. Trong EASY-ROB chúng ta có thể dùng chuột để quay hoặc tịnh tiến robot đến một tọa độ tùy ý. EASY-ROB cũng có các chức năng phóng to, thu nhỏ đối tượng vẽ như nhiều phần mềm thiết kế khác…

Chương trình cho phép thiết kế các robot đến 12 bậc tự do. Chuyển động của robot có thể được điều khiển theo các biến khớp hoặc các tọa độ Đề các. Chúng ta cũng có thể mô tả động học của robot theo kiểu DH hoặc trong hệ tọa độ toàn cục (Universal Coordinates). Easy-Rob đã có sẵn các trình điều khiển động học thuận và ngược của các cấu hình robot thông dụng, khi thiết kế ta chỉ cần khai báo kiểu động học thích hợp.

Trong trường hợp robot có kết cấu đặc biệt hoặc có các khâu bị động gắn với các chuyển động của các khớp thì cần phải giải bài toán động học ngược hoặc xác định hàm toán học mô tả sự phụ thuộc của khâu bị động đối với khớp quay, viết chương trình xác định sự phụ thuộc đó bằng ngôn ngữ C và sau đó dùng tập tin MAKE.EXE trong C để dịch thành tập tin thư viện liên kết động ẻ_kin.dll (Easy-Rob kinematic Dynamic link library). Khi chạy chương trình, EASY-ROB sẽ liên kết với tập tin này và thực hiện kiểu động học đã được khai báo trong chương trình điều khiển.

Easy-Rob có một số các lệnh điều khiển riêng, chương trình được viết theo kiểu xử lý tuần tự, tập tin dạng text, có thể soạn thảo chương trình trong bất kỳ trình soạn thảo nào. Các công cụ gắn trên khâu chấp hành cuối có thể thay đổi được. Chúng ta có thể viết một chương trình chuyển động cho một robot theo một quỹ đạo mong muốn, có thể kiểm tra khả năng vươn tới của cánh tay, xác định vùng làm việc của robot… Robot mô phỏng có thể cầm nắm hoặc thả đối tượng làm việc. Các chuyển động của robot có thể ghi vào một tập tin và có thể thực hiện lại.

Việc sử dụng phần mềm Easy-Rob để mô phỏng robot giúp chúng ta hai khả năng nghiên cứu:

  1. Mô phỏng lại một robot đã có các đối tượng làm việc của nó. Đánh giá khả năng làm việc và mức độ linh hoạt của robot, xác định các thông số điều khiển, quỹ đạo chuyển động để dùng trong điều khiển thực.
  2. Nghiên cứu thiết kế động học, các kích thước và kết cấu của robot trên máy tính để có thể chọn được phương án động học tốt nhất, đảm bảo cho robot hoàn thành các nhiệm vụ yêu cầu.

Tiến hành mô phỏng chuyển động cánh tay robot

Chương trình mô phỏng chuyển động:


PROGRAMFILE
erc load view my_view
PTP_AX           9.4999   -10.0000    -0.0087
WAIT 1
erc load view my_view1
PTP_AX           9.4999   -10.0000     0.2793
WAIT 1
ERC LOAD TOOL AM_GRF_C
ERC GRAB BODY vat1
WAIT 1
PTP_AX           9.4999     -10.0000    -0.0174
WAIT 1
erc load view my_view
PTP_AX         100.9999   -10.0000    -0.0174
WAIT 1
erc load view my_view2
PTP_AX         100.9999   -10.0000     0.2880
WAIT 1
ERC LOAD TOOL AM_GRF_O
ERC RELEASE BODY vat1
WAIT 1
PTP_AX         100.9999   -10.0000    -0.0262
WAIT 1
erc load view my_view
PTP_AX           8.9999     -10.0000    -0.0262
WAIT 1
erc load view my_view1
PTP_AX           9.9999     -10.0000     0.2793
WAIT 1
ERC LOAD TOOL AM_GRF_C
ERC GRAB BODY vat2
WAIT 1
PTP_AX           9.9999    -10.0000    -0.0262
WAIT 1
erc load view my_view
PTP_AX         -79.5001   -10.0000    -0.0262
WAIT 1
erc load view my_view3
PTP_AX         -79.5001   -10.0000     0.2793
WAIT 1
ERC LOAD TOOL AM_GRF_O
ERC RELEASE BODY vat2
WAIT 1
PTP_AX         -79.5001   -10.0000    -0.0262
WAIT 1
erc load view my_view
PTP_AX           8.9999     -10.0000    -0.0262
WAIT 1
ENDPROGRAMFILE

Xây dựng lưu đồ thuật toán

Sơ đồ thuật toán chính

Lưu đồ thuật toán chính điều khiển cánh tay robot
Sơ đồ thuật toán chính

Trong đó:

  • a: Số độ quay thuận hoặc nghịch chế độ tay
  • b: Số độ quay thuận hoặc nghịch chế độ tự động
  • c: Tốc độ động cơ
  • u: Biến chạy đếm số độ quay thuận
  • v: Biến chạy đếm số độ quay nghịch
  • HVT: Hạn vị trái (giới hạn chiều quay nghịch)

Sơ đồ thuật toán của chương trình auto

Lưu đồ thuật toán auto điều khiển cánh tay robot

Sơ đồ thuật toán của chương trình man

Lưu đồ thuật toán man điều khiển cánh tay robot

Sơ đồ đấu nối dây

Sơ đồ đấu nối dây cho PLC

Trong đó:

  • START_RB: Nút nhấn chạy cánh tay robot
  • CBQ: Cảm biến quang
  • AUTO/MAN: Công tắc chọn chế độ ( Chạy tự động hoặc chạy bằng tay )
  • START_BT: Nút nhấn chạy băng tải
  • STOP_BT: Nút nhấn dừng băng tải
  • START_Q: Đầu ra cấp tín hiệu điều khiển cho Arduino
  • B_TAI: Băng tải
  • T_GAT: Tay gạt
  • ~220V: Nguồn xoay chiều 220V nuôi PLC
  • (+24V, +5V): Nguồn một chiều 24V, 5V

Sơ đồ đấu nối dây vào boad mạch arduino

Trong đó :

  • CB_HOME: Cảm biến xác định vị trí ban đầu
  • CB2: Cảm biến giới hạn phạm vi góc quay
  • TK: Chân điều khiển tay kẹp gắp, nhả phôi
  • XL: Chân điều khiển xi lanh ( khớp tịnh tiến )
  • EN: Chân bật / tắt driver TB6560
  • DIR: Chân điều khiển chiều quay của động cơ
  • STEP: Chân cấp xung điều khiển

Sơ đồ đấu nối dây vào module relay

Trong đó:

  • XL: Nối với chân XL của boad Arduino
  • TK: Nối với chân TK của boad Arduino
  • VAN_X: Cấp điện cho van điều khiển xi lanh (Van điện từ 5/2 tự phục hồi)
  • VAN_Y: Cấp điện cho van điều khiển tay kẹp (Van điện từ 5/2 tự phục hồi)
  • (+24V, +5V): Nguồn một chiều 24V, 5V
  • Chân VCC, GND: Cấp nguồn nuôi mạch điều khiển
  • Chân VSS+, VSS- : Cấp nguồn nuôi relay
  • EN1, EN2, EN3, EN4: Các chân điều khiển relay hoạt động
  • 1: Chân chung cấp nguồn cho tiếp điểm
  • NC 2: Chân tiếp điểm thường đóng
  • NO 3: Chân tiếp điểm thường mở

Sơ đồ đấu nối dây vào driver TB6560

Trong đó:

  • EN: Nối với chân EN của boad Arduino
  • DIR: Nối với chân DIR của boad Arduino
  • STEP: Nối với chân STEP của boad Arduino
  • B – : Nối với chân B – của động cơ bước
  • B + : Nối với chân B + của động cơ bước
  • A – : Nối với chân A – của động cơ bước
  • A + : Nối với chân A + của động cơ bước
  • EN – : Chân điều khiển theo mức 0
  • EN + : Chân điều khiển theo mức 1
  • CW – : Chân điều khiển theo mức 0
  • CW + : Chân điều khiển theo mức 1
  • CLK – : Chân điều khiển theo mức 0
  • CLK + : Chân điều khiển theo mức 1
  • (+24V, GND): Nguồn một chiều 24V

Viết chương trình cho PLC & Arduino

Viết chương trình cho PLC S7-200

  • Khi ấn nút START_RB => M0.0 và T37 có điện
  • Khi T37 có điện thì T37 bắt đầu đếm thời gian, đến 12000ms thì T37 sẽ tác động các tiếp điểm thường mở của T37 đóng lại và các tiếp điểm thường đóng sẽ mở ra.

  • Khi ấn nút START_RB => START_Q có điện

  • Khi T37 được đóng lại hoặc nút START_BT được nhấn => BANG_TAI có điện (băng tải hoạt động)

  • Khi BANG_TAI đóng lại => M0.1 và T96 có điện

  • Khi T96 đếm đến giá trị >= 1120ms thì TAY_GAT có điện (động cơ quay tay gạt hoạt động)

Viết chương trình cho Arduino

</pre>
#define Step 2  //Chân cấp xung điều khiển động cơ

#define Dir  3  //Chân quy định chiều quay của động cơ

#define En   4  //Chân bật/tắt driver

#define Xl   5  //Chân điều khiển xi lanh

#define Tk   6  //Chân điều khiển tay kẹp

#define Start  13 //Chân nhận tín hiệu cho phép robot hoạt động từ PLC

#define Cb     12  //Chân kết nối với hạn vị (Home)

float S = 80;  //Số độ động cơ bước quay

float chedodk = 1/16; //chế độ điều khiển (full step = 1 ; hafl step = 1/2 ;

//vi bước 1/4 ; 1/8 ; 1/16.

unsigned long td = 6;          //Tốc độ quay của 1 bước ( 1 vi bước )

unsigned long t = millis()-td; //Biến thời gian tạm thời

float r = 0;   //Biến đếm số độ đã quay

int   u = 1;   //Biến sử dụng cho chương trình xung

void setup()     //Chương trình thiết lập ban đầu (chỉ chạy 1 lần)

{

Serial.begin(9600);  //Giao tiếp giữa arduino và màn hình máy tính

pinMode(Dir,OUTPUT); //Quy định chân Dir  là chân xuất tín hiệu

pinMode(Step,OUTPUT);//Quy định chân Step là chân xuất tín hiệu

pinMode(En,OUTPUT);  //Quy định chân En   là chân xuất tín hiệu

pinMode(Xl,OUTPUT);  //Quy định chân Xl   là chân xuất tín hiệu

pinMode(Tk,OUTPUT);  //Quy định chân Tk   là chân xuất tín hiệu

pinMode(Start,INPUT);  //Quy định chân Nut  là chân nhận tín hiệu

pinMode(Cb ,INPUT);  //Quy định chân Cb   là chân nhận tín hiệu

digitalWrite(En,HIGH);//Xuất tín hiệu mức cao cho chân En (bật driver)

digitalWrite(Dir,HIGH);//Xuất tín hiệu mức cao cho chân Dir

//(quay cánh tay robot về vị trí ban đầu ban đầu)

digitalWrite(Xl,HIGH);

digitalWrite(Tk,HIGH);

S=S/chedodk;                //Nhân với hệ số vi bước ( chế độ vi bước 1/16)

Serial.print("Số độ động cơ cần quay = ");//Hiển thị text (không xuống dòng)

Serial.print(S/16);       //Hiển thị giá trị S vừa nhập vào

Serial.println(" độ ");

Serial.print("Quay với tốc độ : ");

Serial.print(60/(200*td/chedodk));

Serial.println(" vòng/phút ");

td=td/2;

vitribandau:           //Mặc định vị trí ban đầu cho cánh tay robot

if(digitalRead(Cb)==0)

{

for(;;)

{

xung();

if(digitalRead(Cb)==1)

{

goto vitribandau;

}

}

}

}

void loop() //Vòng lặp chính

{

AUTO();   //Gọi chương trình con AUTO

}

void AUTO() //Khai báo chương trình con AUTO

{

quaythuan:      //Khai báo nhãn quaythuan:

if(digitalRead(Start)==1)

{

Serial.println("Tay gắp đi xuống");

digitalWrite(Xl,0);//Xuất tín hiệu mức logic cho chân Xl(Xi lanh đẩy ra)

delay(1500);

Serial.println("Tay gắp kẹp sản phẩm");

digitalWrite(Tk,0);//Xuất tín hiệu mức logic cho chân Tk(Tay kẹp gắp sản phẩm)

delay(500);

Serial.println("Tay gắp đi lên");

digitalWrite(Xl,1);//Xuất tín hiệu mức logic cho chân Xl(Xi lanh đi về)

delay(1500);

Serial.println("Động cơ Quay thuan");

digitalWrite(Dir,LOW);  //Xuất tín hiệu mức LOW cho chân Dir (Động cơ quay thuận)

r=0; //Gán biến đếm số độ đã quay = 0

for(;;) //Tạo vòng lặp con lặp không giới hạn

{

xung(); //Gọi chương trình con xung

if(r>=S) //Nếu số độ đã quay (r) >= Số độ nhập vào (S) thì

{

delay(500); //Tạo trễ

goto quaynghich; //Nhảy đến nhãn quaynghich:

}

}

quaynghich:     //Khai báo nhãn quaynghich:

Serial.println("Tay gắp đi xuống");

digitalWrite(Xl,0);//Xuất tín hiệu mức logic  cho chân Xl(Xi lanh đẩy ra)

delay(1500);

Serial.println("Nhả sản phẩm");

digitalWrite(Tk,1);//Xuất tín hiệu mức logic  cho chân Tk(Tay kẹp nhả sản phẩm)

delay(500);

Serial.println("Tay gắp đi lên");

digitalWrite(Xl,1);//Xuất tín hiệu mức logic  cho chân Xl(Xi lanh đi về)

delay(1500);

digitalWrite(Dir,HIGH);//Xuất tín hiệu mức HIGH cho chân Dir (Động cơ quay nghịch)

Serial.println("Động cơ Quay nghich");//Hiển thị text Quay nghich

for(;;) //Tạo vòng lặp con lặp không giới hạn

{

xung(); //Gọi chương trình con xung

if(digitalRead(Cb)==1)

{

goto quaythuan; //Nhảy đến nhãn quaythuan:

}

}

}

}

void xung() //Khai báo chương trình con xung ( Tạo xung PWM )

{

if((u==1)&&(millis()-t>=td)) //Nếu u=1 và (millis()-t>=td) thì:

{

digitalWrite(Step,1); //Xuất tín hiệu mức logic 1 cho chân Step (Xung cao)

u=0;                  //Gán u=0

r+=0.9;               //r=r+0.9 ; mỗi lần thực hiện r sẽ tăng lên 0.9

t=millis();           //Gán giá trị thời gian tạm thời = thời gian hiện tại

}

if((u==0)&&(millis()-t>=td)) //Nếu u=0 và (millis()-t>=td) thì:

{

digitalWrite(Step,0); //Xuất tín hiệu mức logic 0 cho chân Step (Xung thấp)

u=1;                  //Gán u=1

r+=0.9;               //r=r+0.9 ; mỗi lần thực hiện r sẽ tăng lên 0.9

t=millis();           //Gán giá trị thời gian tạm thời = thời gian hiện tại

}

}
<pre>

Trên đây, MESIDAS GROUP đã chia sẻ cho các bạn một đề tài nghiên cứu về sự kết hợp của PLC S7-200 và vi điều khiển Arduino trong một ứng dụng điều khiển trạm lưu trữ trung gian FMS. Như đã nói từ đầu bài viết, chủ đề này không tập trung vào tính khả dụng ở ngoài thực tế, mà tập trung vào khả năng sử dụng Arduino và động cơ bước để điều khiển chuyển động khớp xoay của cánh tay Robot (điều khiển cánh tay Robot). Hy vọng rằng, với những thông tin chúng tôi cung cấp trên đây, có thể giúp ích được cho các bạn trong quá trình tìm hiểu, nghiên cứu và học tập. Xin cảm ơn!

5 3 votes
Đánh giá nội dung
Nhận thông báo qua Email
Nhận thông báo cho
guest

8 Bình luận
Mới nhất
Cũ nhất
Inline Feedbacks
View all comments
8
0
Would love your thoughts, please comment.x