Nguyên lý hoạt động và cách mô phỏng cánh tay Robot Arduino

Share

Như chúng ta đã biết Robot đang ngày càng phát triển trong xã hội công nghệ ngày này. Trong sinh hoạt hàng ngày con người luôn muốn đầu tư để có 1 cuộc sống hiện đại, tiện nghi nhất. Trong công nghiệp tất cả các công ty đang hướng đến tự động hóa hoàn toàn giúp giảm chi phi. Hôm nay Uniduc sẽ tìm hiểu về cánh tay Robot Arduino công nghệ cơ bản nhất của 1 nhà máy công nghiệp

Khái niệm cánh tay Robot Arduino

Cánh tay Robot Arduino là cánh tay Robot được điều khiển bởi bộ điều khiển Arduino. Nó là 1 cỗ máy tự động, mô phỏng hoạt động của 1 cánh tay con người. Cũng như cánh tay con người, cánh tay Robot yêu cầu sự khéo léo chính xác. Chúng gồm bắp tay, khuỷu tay cổ tay và cả bàn tay.

Ngày nay cánh tay Robot đang được sử dụng trong nhiều công việc khác nhau. Chúng có thể vận chuyển hàng hóa, hàn, sơn, kiểm tra,…. mỗi công việc đều được Robot hoàn thành tốt, giúp giảm thời gian vận hành, tăng chất lượng sản phẩm.

Yêu cầu công nghệ

Đối với 1 sản phẩm công nghệ, điều những người thợ vận hành, thợ sửa chữa cần biết đầu tiên là công nghệ sản xuất. Việc học được những công nghệ liên quan giúp hiểu rõ tổng quan sản phẩm từ đó hỗ trợ trong việc bảo trì, sửa chữa rất nhiều

Kết cầu cơ bản thiết bị cánh tay Robot Arduino

  1. Mô hình Conveyor (Băng tải): di chuyển phân phối hàng hóa
  2. Các Tray (phôi) đựng sản phẩm gồm 3 loại: màu đen, màu trắng và tray làm bằng sắt. Ngoài ra, trong quá trình sử dụng giữ lại các Tray hỏng, tray lỗi nhằm cho vào thiết bị để phân biệt với các loại Tray trên
  3. Van điện: giúp điều khiển tay kẹp và khớp tịnh tiến
  4. Cánh tay robot: ở đây chúng ta dùng cánh tay Robot 1 bậc đơn giản. Robot sẽ chỉ có nhiệm vụ gắp Tray và đưa sang vị trí làm việc tiếp theo
  5. Bộ nguồn 24VDC: nguồn giúp cung cấp đủ năng lượng 24VDC cho các linh kiện điện. Như van điện cảm biến và cà mạch điện tử.
  6. Board mạch Arduino Uno R3 ( Ngoài ra chúng ta còn có thể sử dụng bộ điều khiển S7-200 của Siemens cũng đơn giản và rẻ)
  7. CPU 214 AC/DC/RLY
  8. Cảm biến quang: sử dụng để nhận diện Tray 
  9. Một số linh kiện cơ bản như nút bấm. đèn báo Alarm, khóa điện và mạch chuyển đổi

Cấu tạo cánh tay Robot Arduino

Cánh tay Robot 2 bậc

Cánh tay Robot Arduino đơn giản là trạm vận chuyển trung gian. Nó gồm 1 khớp tịnh tiến và 1 khớp xoay ở vị trí bàn tay là 1 Gripper (Tay kẹp) giúp gắp sản phẩm lên đưa đến vị trí làm việc mới

  • Khớp Xoay: được lắp đặt 1 động cơ bước hay còn được gọi là Stepper Motor. Chúng giúp cánh tay Robot xoay vòng trong phạm vi cho phép. Giới hạn phạm vi được điều khiển bởi 2 công tắc hành trình, hoặc 2 Sensor từ
  • Khớp tịnh tiến: ở đây dùng Silent (Xi lanh khí nén) điều khiển tịnh tiến tay Robot. Van điện 5/2 giúp điều khiển tự phục hồi. Silent đưa cánh tay Robot đến các vị trí cần thiết bằng cách đẩy ra và hút vào
  • Vị trí tay Kẹp cũng được lắp đặt hệ thống van điện 5/2. Chúng được điều khiển để di chuyển Gripper lên xuống phù hợp khoảng cách Tray để gắp.

Nguyên lý hoạt động của cánh tay Robot Arduino

Chu kì hoạt động của Robot:

Khi Reset thiết bị tất các cơ cấu Robot sẽ trở về vị trí ban đầu (Home). Trường hợp Robot đang ở vị trí làm việc bị sập nguồn, khi thiết bị cấp lại nguồn Robot cũng sẽ tự động quay về vị trí home.

Toàn bộ chu kì hoạt động của Robot: 

Bước 1: Xi lanh của Gripper được cấp hơi đi xuống đến vị trí sản phẩm

Bước 2: Gripper mở ra gắp sản phẩm

Bước 3: Xi lanh nhả khí giúp kép Gripper lên

Bước 4: Tín hiệu truyền đến động cơ bước, xoay cánh tay đến vị trí đã được thiết lập trước

Bước 5: Đến vị trí thiết lập, xi lanh cấp khí đi xuống

Bước 6: Gripper nhả kẹp sản phẩm

Bước 7: Xi lanh nhả khí

Bước 8: Quay về vị trí home và tiếp tục chu kỳ tiếp theo

Chế độ hoạt động

Gồm 2 chế độ: Auto và Manual

  • Chế độ Auto: Thực hiện toàn bộ chu kỳ nói trên một cách tự động. Khi gặp vật cản Robot sẽ ngắt mạch điện trong vòng 1 giây. Với trường hợp người dùng muốn tạm dừng thiết bị, Robot sẽ thực hiện hết chu kỳ đang làm, rồi mới dừng
  • Chế độ Manual: Chế độ này thường dùng để đánh giá thiết lập Robot và khi thay đổi sản phẩm mới. Người dùng có thể đưa Robot đi từ từ ở các Step (bước vận hành) để xem độ chính xác. Ngoài ra còn có thể điều khiển chọn vị trí gắp và đặt sản phẩm của động cơ bước

Mô phỏng cánh tay Robot

Sơ đồ thuật toán

Sơ đồ thuật toán chung

Trong đó:

  • a: Số độ góc quay thuận nghịch chế Manual
  • b: Số độ góc quay thuận nghịch chế Auto
  • c: Tốc độ động cơ
  • u: Biến đếm số độ thuận
  • v: Biến đếm số độ nghịch
  • HVT(hạn vị trí): Giới hạn quay nghịch

Sơ đồ thuật toán chế độ Manual

Sơ đồ thuật toán Manual

Sơ đồ thuật toán chế độ Auto

Sơ đồ thuật toán Auto

Sơ đồ đấu dây

Sơ đồ đấu nối

Thuật toán

</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>

UNIDUC – KIẾN TẠO NHÀ MÁY SẢN XUẤT TỰ ĐỘNG

 

About Author

https://maysanxuattudong.com/

Daniel là quản trị viên của website maysanxuattudong.com. Daniel cũng là thành viên của công ty Uniduc JSC.

Zalo Chat
Gọi Điện Thoại