Mục lục:

Robot chọn và đặt cơ sở Arduino: 8 bước
Robot chọn và đặt cơ sở Arduino: 8 bước

Video: Robot chọn và đặt cơ sở Arduino: 8 bước

Video: Robot chọn và đặt cơ sở Arduino: 8 bước
Video: Nhập môn IoT với Lập trình Arduino: Bài 13 - Động cơ Servo & Còi cấp cứu 2024, Tháng bảy
Anonim
Robot chọn và đặt cơ sở Arduino
Robot chọn và đặt cơ sở Arduino
Robot chọn và đặt cơ sở Arduino
Robot chọn và đặt cơ sở Arduino
Robot chọn và đặt cơ sở Arduino
Robot chọn và đặt cơ sở Arduino

Tôi đã chế tạo một cánh tay rô bốt công nghiệp siêu rẻ (chưa đến 1000 đô la) để cho phép sinh viên hack rô bốt quy mô lớn hơn và cho phép các cơ sở sản xuất nhỏ ở địa phương sử dụng rô bốt trong các quy trình của họ mà không bị vi phạm. Eassy của nó để xây dựng và tạo ra những người có độ tuổi từ 15 đến 50 tuổi.

Bước 1: Yêu cầu về thành phần

Yêu cầu về thành phần
Yêu cầu về thành phần
Yêu cầu về thành phần
Yêu cầu về thành phần
Yêu cầu về thành phần
Yêu cầu về thành phần
Yêu cầu về thành phần
Yêu cầu về thành phần

1. Arduino + Shield + Pins + Cáp

2. Bộ điều khiển động cơ: dm860A (Ebay)

3. Steppermotor: 34hs5435c-37b2 (Ebay)

4. Bu lông M8x45 + 60 + 70 và bu lông M8.

5. Ván ép 12mm.

6. 5mm Nylon.

7. Vòng đệm mù 8mm.

8. Vít gỗ 4,5x40mm.

9. Bộ đếm M3 bị chìm, 10. Nguồn điện 12v

11. trình điều khiển động cơ servo arduino

Bước 2: Tải xuống Gui

zapmaker.org/projects/grbl-controller-3-0/

github.com/grbl/grbl/wiki/Using-Grbl

Bước 3: Kết nối

Sự liên quan
Sự liên quan
Sự liên quan
Sự liên quan
Sự liên quan
Sự liên quan

Kết nối các dây được đưa ra trong hình ảnh sẽ giúp bạn hiểu rõ hơn.

chúng tôi cần kết nối trình điều khiển động cơ với Arduino và các đầu nối khác được yêu cầu theo robot của bạn.

Bước 4: Tải lên chương trình cơ sở và kiểm tra kết quả mã trong Bảng điều khiển Arduino

Cài đặt phần sụn trên Arduino - GRBL:

github.com/grbl/grbl/wiki/Compiling-Grbl

Lưu ý: Bạn có thể gặp xung đột khi biên dịch trong Arduino. Xóa tất cả các thư viện khác khỏi thư mục thư viện của bạn (../documents/Arduino/libraries).

Thiết lập chương trình cơ sở

Đặt kích hoạt thành thời gian chờ mới hơn. Sử dụng kết nối nối tiếp và viết:

$1=255

Đặt homing:

$22=1

Nhớ đặt serial thành baud: 115200

Mã G hữu ích

Đặt điểm 0 cho rô bốt:

G10 L2 Xnnn Ynnn Znnn

Sử dụng điểm 0:

G54

Khởi tạo điển hình cho robot trung tâm:

G10 L2 X1.5 Y1.2 Z1.1

G54

Di chuyển robot đến vị trí nhanh chóng:

G0 Xnnn Ynnn Znnn

Thí dụ:

G0 X10.0 Y3.1 Z4.2 (trả lại)

Di chuyển robot đến vị trí với tốc độ cụ thể:

G1 Xnnn Ynnn Znnn Fnnn

G1 X11 Y3 Z4 F300 (trả lại)

F phải từ 10 (slooooow) đến 600 (nhanh)

Các đơn vị mặc định cho X, Y và Z

Khi sử dụng cài đặt bước / đơn vị mặc định (250 bước / đơn vị) cho GRBL và

ổ đĩa bước được thiết lập cho 800 bước / vòng quay, các đơn vị sau áp dụng cho tất cả các trục:

+ - 32 đơn vị = + - 180 độ

Ví dụ về mã xử lý:

Mã này có thể giao tiếp trực tiếp với Arduino GRBL.

github.com/damellis/gctrl

Nhớ đặt serial thành baud: 115200

Uoload mã trong ardunio

nhập java.awt.event. KeyEvent;

nhập javax.swing. JOptionPane;

nhập xử lý.serial. *;

Cổng nối tiếp = null;

// chọn và sửa đổi dòng thích hợp cho hệ điều hành của bạn

// để lại dưới dạng null để sử dụng cổng tương tác (nhấn 'p' trong chương trình)

Chuỗi portname = null;

// String portname = Serial.list () [0]; // Mac OS X

// Chuỗi portname = "/ dev / ttyUSB0"; // Linux

// Chuỗi portname = "COM6"; // Các cửa sổ

boolean streaming = false;

tốc độ phao = 0,001;

Chuỗi gcode;

int i = 0;

void openSerialPort ()

{

if (portname == null) return;

if (port! = null) port.stop ();

port = new Serial (this, portname, 115200);

port.bufferUntil ('\ n');

}

void selectSerialPort ()

{

Chuỗi kết quả = (Chuỗi) JOptionPane.showInputDialog (this, "Chọn cổng nối tiếp tương ứng với bảng Arduino của bạn.", "Chọn cổng nối tiếp", JOptionPane. PLAIN_MESSAGE, vô giá trị, Serial.list (), 0);

if (result! = null) {

portname = kết quả;

openSerialPort ();

}

}

void setup ()

{

kích thước (500, 250);

openSerialPort ();

}

void draw ()

{

nền (0);

điền (255);

int y = 24, dy = 12;

text ("HƯỚNG DẪN", 12, y); y + = dy;

text ("p: chọn cổng nối tiếp", 12, y); y + = dy;

text ("1: đặt tốc độ thành 0,001 inch (1 triệu) mỗi lần chạy bộ", 12, y); y + = dy;

text ("2: đặt tốc độ thành 0,010 inch (10 triệu) mỗi lần chạy", 12, y); y + = dy;

text ("3: đặt tốc độ thành 0,100 inch (100 triệu) mỗi lần chạy", 12, y); y + = dy;

text ("các phím mũi tên: chạy bộ trong mặt phẳng x-y", 12, y); y + = dy;

text ("trang lên & trang xuống: chạy theo trục z", 12, y); y + = dy;

text ("$: hiển thị cài đặt grbl", 12, y); y + = dy;

text ("h: go nha", 12, y); y + = dy;

text ("0: 0 máy (đặt nhà ở vị trí hiện tại)", 12, y); y + = dy;

text ("g: truyền một tệp mã g", 12, y); y + = dy;

text ("x: dừng phát trực tuyến mã g (điều này KHÔNG phải ngay lập tức)", 12, y); y + = dy;

y = chiều cao - dy;

text ("tốc độ chạy bộ hiện tại:" + tốc độ + "inch mỗi bước", 12, y); y - = dy;

text ("cổng nối tiếp hiện tại:" + tên cổng, 12, y); y - = dy;

}

void keyPressed ()

{

if (key == '1') speed = 0,001;

if (key == '2') speed = 0,01;

if (key == '3') speed = 0,1;

if (! streaming) {

if (keyCode == LEFT) port.write ("G91 / nG20 / nG00 X-" + speed + "Y0.000 Z0.000 / n");

if (keyCode == RIGHT) port.write ("G91 / nG20 / nG00 X" + speed + "Y0.000 Z0.000 / n");

if (keyCode == UP) port.write ("G91 / nG20 / nG00 X0.000 Y" + speed + "Z0.000 / n");

if (keyCode == DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y-" + speed + "Z0.000 / n");

if (keyCode == KeyEvent. VK_PAGE_UP) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z" + speed + "\ n");

if (keyCode == KeyEvent. VK_PAGE_DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z-" + speed + "\ n");

// if (key == 'h') port.write ("G90 / nG20 / nG00 X0.000 Y0.000 Z0.000 / n");

if (key == 'v') port.write ("$ 0 = 75 / n $ 1 = 74 / n $ 2 = 75 / n");

// if (key == 'v') port.write ("$ 0 = 100 / n $ 1 = 74 / n $ 2 = 75 / n");

if (key == 's') port.write ("$ 3 = 10 / n");

if (key == 'e') port.write ("$ 16 = 1 / n");

if (key == 'd') port.write ("$ 16 = 0 / n");

if (key == '0') openSerialPort ();

if (key == 'p') selectSerialPort ();

if (key == '$') port.write ("$$ / n");

if (key == 'h') port.write ("$ H / n");

}

if (! streaming && key == 'g') {

gcode = null; i = 0;

Tệp tin = null;

println ("Đang tải tệp tin…");

selectInput ("Chọn một tệp để xử lý:", "fileSelected", tệp);

}

if (key == 'x') streaming = false;

}

void fileSelected (Lựa chọn tệp) {

if (selection == null) {

println ("Cửa sổ đã bị đóng hoặc người dùng nhấn hủy.");

} khác {

println ("Người dùng đã chọn" + select.getAbsolutePath ());

gcode = loadStrings (selection.getAbsolutePath ());

if (gcode == null) return;

streaming = true;

dòng();

}

}

void stream ()

{

if (! streaming) return;

trong khi (đúng) {

if (i == gcode.length) {

phát trực tuyến = false;

trở lại;

}

if (gcode .trim (). length () == 0) i ++;

khác phá vỡ;

}

println (gcode );

port.write (gcode + '\ n');

i ++;

}

void serialEvent (Serial p)

{

String s = p.readStringUntil ('\ n');

println (s.trim ());

if (s.trim (). startedWith ("ok")) stream ();

if (s.trim (). startedWith ("error")) stream (); // XXX: thật không?

}

Bước 5: Thiết kế và in tất cả các phần trong tấm ván ép

Thiết kế và in tất cả các bộ phận trong tấm ván ép
Thiết kế và in tất cả các bộ phận trong tấm ván ép

Tải xuống phần robot và thiết kế trong AutoCAD và in trên tấm ván ép 12mm và phần hoàn thiện và thiết kế. Nếu ai có nhu cầu về file cad thì hãy để lại ý kiến ở phần bình luận khung mình sẽ `gửi trực tiếp cho các bạn.

Bước 6: Lắp ráp

cuộc họp
cuộc họp
cuộc họp
cuộc họp

thu thập tất cả các phần và sắp xếp theo trình tự trên hình ảnh được cho và theo sơ đồ hình ảnh.

Bước 7: Thiết lập Cài đặt GBRL

Cài đặt đã được chứng minh là hoạt động trên rô bốt của chúng tôi.

$ 0 = 10 (xung bước, usec) $ 1 = 255 (độ trễ không tải bước, mili giây) $ 2 = 7 (mặt nạ đảo cổng bước: 00000111) $ 3 = 7 (mặt nạ đảo cổng dir: 00000111) $ 4 = 0 (đảo ngược kích hoạt bước, bool) $ 5 = 0 (đảo ngược chân giới hạn, bool) $ 6 = 1 (đảo ngược chân đầu dò, bool) $ 10 = 3 (mặt nạ báo cáo trạng thái: 00000011) $ 11 = 0,020 (độ lệch đường giao nhau, mm) $ 12 = 0,002 (dung sai vòng cung, mm) $ 13 = 0 (báo cáo inch, bool) $ 20 = 0 (giới hạn mềm, bool) $ 21 = 0 (giới hạn cứng, bool) $ 22 = 1 (chu kỳ homing, bool) $ 23 = 0 (mặt nạ đảo ngược homing dir: 00000000) $ 24 = 100.000 (nguồn cấp dữ liệu homing, mm / phút) $ 25 = 500.000 (homing tìm kiếm, mm / phút) $ 26 = 250 (homing debounce, msec) $ 27 = 1.000 (homing pull-off, mm) $ 100 = 250.000 (x, bước / mm) $ 101 = 250.000 (y, bước / mm) 102 đô la = 250.000 (z, bước / mm) 110 đô la = 500.000 (x tốc độ tối đa, mm / phút) 111 đô la = 500.000 (tốc độ tối đa y, mm / phút) 112 đô la = 500.000 (tốc độ tối đa z, mm / phút) $ 120 = 10.000 (x accel, mm / giây ^ 2) $ 121 = 10.000 (y accel, mm / giây ^ 2) $ 122 = 10.000 (z accel, mm / giây ^ 2) $ 130 = 200.000 (x di chuyển tối đa, mm) $ 131 = 200.000 (hành trình tối đa y, mm) $ 132 = 200.000 (hành trình tối đa z, mm)

Bước 8: Tải lên mã cuối cùng và kiểm tra kết quả ảo trong Bảng điều khiển phần mềm Arduino Uno

// Đơn vị: CM

float b_height = 0;

float a1 = 92;

float a2 = 86;

float snude_len = 20;

boolean doZ = false;

float base_angle; // = 0;

float arm1_angle; // = 0;

float arm2_angle; // = 0;

float bx = 60; // = 25;

float by = 60; // = 0;

float bz = 60; // = 25;

float x = 60;

float y = 60;

float z = 60;

phao q;

phao c;

float V1;

phao V2;

phao V3;

float V4;

phao V5;

void setup () {

kích thước (700, 700, P3D);

cam = new PeasyCam (this, 300);

cam.setMinimumDistance (50);

cam.setMaximumDistance (500);

}

void draw () {

// ligninger:

y = (mouseX - width / 2) * (- 1);

x = (mouseY - height / 2) * (- 1);

bz = z;

bằng = y;

bx = x;

float y3 = sqrt (bx * bx + by * by);

c = sqrt (y3 * y3 + bz * bz);

V1 = acos ((a2 * a2 + a1 * a1-c * c) / (2 * a2 * a1));

V2 = acos ((c * c + a1 * a1-a2 * a2) / (2 * c * a1));

V3 = acos ((y3 * y3 + c * c-bz * bz) / (2 * y3 * c));

q = V2 + V3;

arm1_angle = q;

V4 = radian (90,0) - q;

V5 = radian (180) - V4 - radian (90);

arm2_angle = radian (180.0) - (V5 + V1);

base_angle = độ (atan2 (bx, by));

arm1_angle = độ (arm1_angle);

arm2_angle = độ (arm2_angle);

// println (do, bz);

// arm1_angle = 90;

// arm2_angle = 45;

/*

arm2_angle = 23;

arm1_angle = 23;

arm2_angle = 23;

*/

// tương tác:

// if (doZ)

//

// {

// base_angle = base_angle + mouseX-pmouseX;

// } khác

// {

// arm1_angle = arm1_angle + pmouseX-mouseX;

// }

//

// arm2_angle = arm2_angle + mouseY-pmouseY;

draw_robot (base_angle, - (arm1_angle-90), arm2_angle + 90 - (- (arm1_angle-90)));

// println (base_angle + "," + arm1_angle + "," + arm2_angle);

}

void draw_robot (float base_angle, float arm1_angle, float arm2_angle)

{

xoayX (1.2);

xoayZ (-1,2);

nền (0);

đèn ();

pushMatrix ();

// CƠ SỞ

điền vào (150, 150, 150);

box_corner (50, 50, b_height, 0);

xoay (radian (base_angle), 0, 0, 1);

// ARM 1

điền vào (150, 0, 150);

box_corner (10, 10, a1, arm1_angle);

// ARM 2

điền (255, 0, 0);

box_corner (10, 10, a2, arm2_angle);

// SNUDE

điền (255, 150, 0);

box_corner (10, 10, snude_len, -arm1_angle-arm2_angle + 90);

popMatrix ();

pushMatrix ();

float action_box_size = 100;

dịch (0, -action_box_size / 2, action_box_size / 2 + b_height);

pushMatrix ();

dịch (x, action_box_size- y-action_box_size / 2, z-action_box_size / 2);

điền (255, 255, 0);

hộp (20);

popMatrix ();

điền (255, 255, 255, 50);

box (action_box_size, action_box_size, action_box_size);

popMatrix ();

}

void box_corner (float w, float h, float d, float xoay)

{

xoay (radian (xoay), 1, 0, 0);

dịch (0, 0, d / 2);

hộp (w, h, d);

dịch (0, 0, d / 2);

}

void keyPressed ()

{

if (key == 'z')

{

doZ =! doZ;

}

if (key == 'h')

{

// đặt tất cả thành 0

arm2_angle = 0;

arm1_angle = 90;

base_angle = 0;

}

if (key == 'g')

{

println (độ (V1));

println (độ (V5));

}

if (keyCode == UP)

{

z ++;

}

if (keyCode == DOWN)

{

z -;

}

if (key == 'o')

{

y = 50;

z = 50;

println (q);

println (c, "c");

println (V1, "V1");

println (V2);

println (V3);

println (arm1_angle);

println (V4);

println (V5);

println (arm2_angle);

}

}

Đề xuất: