Lập trình điều khiển cánh tay Robot bằng PLC và Arduino

Bài viết này được san sẻ với mục tiêu : điều tra và nghiên cứu, tìm hiểu và khám phá, hướng dẫn lập trình tinh chỉnh và điều khiển cánh tay robot sử dụng bo mạch vi điều khiển và tinh chỉnh Arduino. Sự phối hợp của PLC S7-200 và Arduino trong mạng lưới hệ thống mà bài viết này là không có tính trong thực tiễn. Bởi tất cả chúng ta hoàn toàn có thể sử dụng một trong hai bộ điều khiển và tinh chỉnh PLC S7-200 hoặc bo arduino là hoàn toàn có thể triển khai được và phân phối tất thảy những tính năng mà nhu yếu công nghệ tiên tiến của mạng lưới 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 giải trí 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 tàng trữ trung gian. Sau khi phôi đã được đặt lên trên băng tải của trạm và bảo vệ phôi hoàn toàn có thể chuyển dời, băng tải hoạt động giải trí vận động và di chuyển phôi, phôi gặp cảm ứng đặt trên băng tải sau thời hạn định trước, băng tải dừng, tay gạt hoạt động giải trí, gạt phôi sang trạm tiếp nối để sẵn sàng chuẩn bị cho những quy trình gia công tiếp theo .

Chi tiết về từng dòng PLC: https://sangtaotrongtamtay.vn/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 giải trí của cánh tay robot như sau : Xi lanh đi xuống => Tay kẹp gắp loại 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ả loại sản phẩm => Xi lanh đi lên => Động cơ quay cánh tay robot về vị trí bắt đầ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 hoàn toàn có thể điều khiển và tinh chỉnh linh động góc quay của cánh tay robot bằng cách biến hóa số độ động cơ cần quay trong chương trình điều khiển và tinh chỉnh. Độ đúng mực khi điều khiển và tinh chỉnh quay cánh tay robot nhờ động cơ bước, tinh chỉnh và điều khiển đúng chuẩn 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 vận dụng trong tinh chỉnh và đ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 hoàn toàn có thể kiểm soát và đ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ư những độ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à điểm yếu kém, vì là hệ hở nên không có khâu phản hồi dẫn đến thực trạng góc quay không đủ số độ nhu yếu => Không quản lý và vận hành đúng tiến 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 khoảng trống 3 chiều ( 3D ) và những hình ảnh hoàn toàn có thể hoạt động giải trí được. Một mạng lưới hệ thống 3D – CAD đơn thuần được cho phép tạo ra những 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ẽ cấu trúc của robot. Trong EASY-ROB tất cả chúng ta hoàn toàn 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ó những tính năng phóng to, thu nhỏ đối tượng người tiêu dùng vẽ như nhiều ứng dụng phong cách thiết kế khác …
Chương trình được cho phép phong cách thiết kế những robot đến 12 bậc tự do. Chuyển động của robot hoàn toàn có thể được điều khiển và tinh chỉnh theo những biến khớp hoặc những tọa độ Đề những. Chúng ta cũng hoàn toàn có thể miêu 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 những trình tinh chỉnh và điều khiển động học thuận và ngược của những thông số kỹ thuật robot thông dụng, khi phong cách 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ó cấu trúc đặc biệt quan trọng hoặc có những khâu bị động gắn với những hoạt động của những khớp thì cần phải giải bài toán động học ngược hoặc xác lập hàm toán học miêu tả sự nhờ vào của khâu bị động so với khớp quay, viết chương trình xác lập sự nhờ vào đó bằng ngôn từ C và sau đó dùng tập tin MAKE.EXE trong C để dịch thành tập tin thư viện link động ẻ_kin. dll ( Easy-Rob kinematic Dynamic link library ). Khi chạy chương trình, EASY-ROB sẽ link với tập tin này và thực thi kiểu động học đã được khai báo trong chương trình tinh chỉnh và điều khiển .
Easy-Rob có 1 số ít những lệnh tinh chỉnh và điều khiển riêng, chương trình được viết theo kiểu giải quyết và xử lý tuần tự, tập tin dạng text, hoàn toàn 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 hoàn toàn có thể biến hóa được. Chúng ta hoàn toàn có thể viết một chương trình hoạt động cho một robot theo một quỹ đạo mong ước, hoàn toàn có thể kiểm tra năng lực vươn tới của cánh tay, xác lập vùng thao tác của robot … Robot mô phỏng hoàn toàn có thể cầm nắm hoặc thả đối tượng người dùng thao tác. Các hoạt động của robot hoàn toàn có thể ghi vào một tập tin và hoàn toàn có thể thực thi lại .
Việc sử dụng ứng dụng Easy-Rob để mô phỏng robot giúp tất cả chúng ta hai năng lực điều tra và 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 hoạt độ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
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


#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

}

}


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

5
3
votes

Article Rating

Các bài viết liên quan

Viết một bình luận