Съдържание:

Робот за избор и поставяне на база Arduino: 8 стъпки
Робот за избор и поставяне на база Arduino: 8 стъпки

Видео: Робот за избор и поставяне на база Arduino: 8 стъпки

Видео: Робот за избор и поставяне на база Arduino: 8 стъпки
Видео: #6 How to Program Outseal Arduino PLC Delay -Timers 2024, Ноември
Anonim
Робот за избор и поставяне на база Arduino
Робот за избор и поставяне на база Arduino
Робот за избор и поставяне на база Arduino
Робот за избор и поставяне на база Arduino
Робот за избор и поставяне на база Arduino
Робот за избор и поставяне на база Arduino

Направих супер евтина (по -малко от 1000 долара) ръка за индустриални роботи, за да дам възможност на учениците да хакнат по -мащабна роботика и да даде възможност на малките местни производства да използват роботи в своите процеси, без да разбиват банката. Неговият Eassy да изгради и направи възрастовата група хора от 15 до 50 години.

Стъпка 1: Изискване за компоненти

Изисквания за компоненти
Изисквания за компоненти
Изисквания за компоненти
Изисквания за компоненти
Изисквания за компоненти
Изисквания за компоненти
Изисквания за компоненти
Изисквания за компоненти

1. Arduino + щит + щифтове + кабели

2. Мотоконтролер: dm860A (Ebay)

3. Стъпков двигател: 34hs5435c-37b2 (Ebay)

4. Болтове M8x45+60+70 и болтове M8.

5. 12 мм шперплат.

6. 5 мм найлон.

7. Щори шайби 8мм.

8. Винтове за дърво 4.5x40mm.

9. Броячът M3 е потопен, 10. 12v захранване

11. драйвер на серво мотор arduino

Стъпка 2: Изтеглете Gui

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

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

Стъпка 3: Свързване

Връзка
Връзка
Връзка
Връзка
Връзка
Връзка

Свържете проводниците, които са дадени на изображението, за да ви разбере по -добре.

трябва да свържем драйвера на двигателя към Arduino и други конектори, които са необходими според вашия робот.

Стъпка 4: Качете фърмуер и проверете резултата от кода в таблото за управление на Arduino

Инсталиране на фърмуера на Arduino - GRBL:

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

Забележка: При компилиране в Arduino може да получите конфликт. Премахнете всички други библиотеки от папката на вашата библиотека (../documents/Arduino/libraries).

Настройка на фърмуера

Задайте активиране на по -ново изчакване. Използвайте серийна връзка и напишете:

$1=255

Задайте насочване:

$22=1

Не забравяйте да зададете серийно предаване на скорост: 115200

Полезни G-кодове

Задайте нулева точка за робота:

G10 L2 Xnnn Ynnn Znnn

Използвайте нулева точка:

G54

Типична инициализация към централен робот:

G10 L2 X1.5 Y1.2 Z1.1

G54

Преместете робота в бързо положение:

G0 Xnnn Ynnn Znnn

Пример:

G0 X10.0 Y3.1 Z4.2 (връщане)

Преместете робота на позиция със специфична скорост:

G1 Xnnn Ynnn Znnn Fnnn

G1 X11 Y3 Z4 F300 (връщане)

F трябва да бъде между 10 (slooooow) и 600 (бързо)

Единици по подразбиране за X, Y и Z

Когато използвате настройките за стъпка/единици по подразбиране (250 стъпки/единица) за GRBL и

стъпково задвижване, настроено за 800 стъпки/об., следните единици се прилагат за всички оси:

+- 32 единици = +- 180 градуса

Пример за обработка на код:

Този код може да комуникира директно с Arduino GRBL.

github.com/damellis/gctrl

Не забравяйте да зададете серийно предаване на скорост: 115200

Код uoload на ардунио

импортиране на java.awt.event. KeyEvent;

импортиране на javax.swing. JOptionPane;

обработка на внос.serial.*;

Сериен порт = нула;

// изберете и променете подходящия ред за вашата операционна система

// оставете като нула, за да използвате интерактивен порт (натиснете 'p' в програмата)

Име на порт на низ = null;

// Име на низ на порт = Serial.list () [0]; // Mac OS X

// Име на низ на порт = "/dev/ttyUSB0"; // Linux

// String portname = "COM6"; // Windows

логическо стрийминг = невярно;

скорост на плаване = 0,001;

String gcode;

int i = 0;

void openSerialPort ()

{

if (име на порт == null) връщане;

if (порт! = нула) port.stop ();

порт = нов сериен (това, име на порт, 115200);

port.bufferUntil ('\ n');

}

void selectSerialPort ()

{

Низов резултат = (Низ) JOptionPane.showInputDialog (това, "Изберете серийния порт, който съответства на вашата платка Arduino.", „Изберете сериен порт“, JOptionPane. PLAIN_MESSAGE, нула, Serial.list (), 0);

if (резултат! = нула) {

portname = резултат;

openSerialPort ();

}

}

void setup ()

{

размер (500, 250);

openSerialPort ();

}

void draw ()

{

фон (0);

попълнете (255);

int y = 24, dy = 12;

текст ("ИНСТРУКЦИИ", 12, у); y += dy;

текст ("p: изберете сериен порт", 12, y); y += dy;

текст ("1: задайте скорост на 0.001 инча (1 мили) на джогинг", 12, y); y += dy;

текст ("2: задайте скорост на 0,010 инча (10 мили) на джогинг", 12, y); y += dy;

текст ("3: задайте скорост на 10000 инча (100 мили) на бягане", 12, y); y += dy;

текст ("клавиши със стрелки: джогинг в x-y равнина", 12, y); y += dy;

текст ("страница нагоре & страница надолу: бягане по ос z", 12, y); y += dy;

text ("$: display grbl settings", 12, y); y+= dy;

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

text ("0: нулева машина (задайте начало на текущото местоположение)", 12, y); y += dy;

текст ("g: поточен файл с g-код", 12, y); y += dy;

text ("x: спрете стрийминга на g-код (това НЕ е незабавно)", 12, y); y += dy;

y = височина - dy;

текст ("текуща скорост на джогинг:" + скорост + "инчове на стъпка", 12, y); y -= dy;

текст ("текущ сериен порт:" + име на порт, 12, y); y -= dy;

}

void keyPressed ()

{

if (key == '1') скорост = 0.001;

if (ключ == '2') скорост = 0,01;

if (ключ == '3') скорост = 0,1;

if (! стрийминг) {

if (keyCode == НАЛЯВО) port.write ("G91 / nG20 / nG00 X-" + скорост + "Y0.000 Z0.000 / n");

if (keyCode == RIGHT) port.write ("G91 / nG20 / nG00 X" + скорост + "Y0.000 Z0.000 / n");

if (keyCode == UP) port.write ("G91 / nG20 / nG00 X0.000 Y" + скорост + "Z0.000 / n");

if (keyCode == НАДОЛУ) port.write ("G91 / nG20 / nG00 X0.000 Y-" + скорост + "Z0.000 / n");

if (keyCode == KeyEvent. VK_PAGE_UP) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z" + скорост + "\ n");

if (keyCode == KeyEvent. VK_PAGE_DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z-" + скорост + "\ 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 (! стрийминг && key == 'g') {

gcode = null; i = 0;

Файлов файл = null;

println ("Зареждане на файл …");

selectInput ("Изберете файл за обработка:", "fileSelected", файл);

}

if (key == 'x') стрийминг = невярно;

}

void fileSelected (избор на файл) {

if (избор == null) {

println ("Прозорецът беше затворен или потребителят натисна отказа.");

} else {

println ("Избран от потребителя" + selection.getAbsolutePath ());

gcode = loadStrings (selection.getAbsolutePath ());

if (gcode == null) връщане;

стрийминг = вярно;

поток ();

}

}

void stream ()

{

if (! стрийминг) връщане;

while (вярно) {

if (i == gcode.length) {

стрийминг = невярно;

връщане;

}

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

иначе почивка;

}

println (gcode );

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

i ++;

}

void serialEvent (Serial p)

{

Низ s = p.readStringUntil ('\ n');

println (s.trim ());

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

if (s.trim (). startWith ("грешка")) stream (); // XXX: наистина?

}

Стъпка 5: Проектирайте и отпечатайте всички части в шперплат

Проектирайте и отпечатайте всички части в шперплат
Проектирайте и отпечатайте всички части в шперплат

Изтеглете частта и дизайна на робота в AutoCAD и отпечатайте върху 12 мм шперплат лист и част за довършителни работи и дизайн. Ако някой се нуждае от CAD файл, моля, оставете коментара в полето за коментари, ще го изпратя директно.

Стъпка 6: Монтаж

Монтаж
Монтаж
Монтаж
Монтаж

съберете цялата част и подредете в дадената последователност на изображението и следвайте схемата на изображението.

Стъпка 7: Настройка на GBRL настройки

Настройка, която доказано работи на нашите роботи.

$ 0 = 10 (стъпков импулс, usec) $ 1 = 255 (закъснение на празен ход, мсек) $ 2 = 7 (маска за инвертиране на стъпков порт: 00000111) $ 3 = 7 (маска за инвертиране на порт dir: 00000111) $ 4 = 0 (стъпка активиране инвертиране, бул) $ 5 = 0 (преобръщане на ограничителните щифтове, bool) $ 6 = 1 (инвертиране на щифта на сондата, bool) $ 10 = 3 (маска за доклад за състоянието: 00000011) $ 11 = 0,020 (отклонение на кръстовището, mm) $ 12 = 0,002 (толеранс на дъгата, mm) $ 13 = 0 (инчове на отчета, бул) $ 20 = 0 (меки граници, бул) $ 21 = 0 (твърди граници, бул) $ 22 = 1 (цикъл на самонасочване, бул) $ 23 = 0 (маска на самонасочващата се реверсия: 00000000) $ 24 = 100 000 (подаване на самонасочване, mm/min) $ 25 = 500.000 (търсене на самонасочване, mm/min) $ 26 = 250 (hoom debounce, msec) $ 27 = 1.000 (homing pull-off, mm) $ 100 = 250.000 (x, стъпка/mm) $ 101 = 250 000 (y, стъпка/mm) $ 102 = 250,000 (z, стъпка/mm) $ 110 = 500,000 (x макс. Скорост, mm/min) $ 111 = 500,000 (y макс. Скорост, mm/min) $ 112 = 500,000 (z max скорост, mm/min) $ 120 = 10.000 (x ускорение, mm/sec^2) $ 121 = 10.000 (y ускорение, mm/sec^2) $ 122 = 10.000 (z ускорение, mm/sec^2) $ 130 = 200.000 (x max ход, mm) $ 131 = 200.000 (y макс. ход, mm) $ 132 = 200.000 (z max ход, mm)

Стъпка 8: Качете окончателния код и проверете виртуалния резултат в Arduino Uno Software Dashboard

// Единици: CM

поплавък b_height = 0;

поплавък a1 = 92;

поплавък a2 = 86;

float snude_len = 20;

логическо doZ = невярно;

float base_angle; // = 0;

float arm1_angle; // = 0;

float arm2_angle; // = 0;

поплавък bx = 60; // = 25;

плава с = 60; // = 0;

поплавък bz = 60; // = 25;

поплавък x = 60;

поплавък y = 60;

поплавък z = 60;

поплавък q;

поплавък c;

поплавък V1;

поплавък V2;

поплавък V3;

поплавък V4;

поплавък V5;

void setup () {

размер (700, 700, P3D);

cam = нов PeasyCam (това, 300);

cam.setMinimumDistance (50);

cam.setMaximumDistance (500);

}

void draw () {

// ligninger:

y = (mouseX - ширина/2)*(- 1);

x = (mouseY - височина/2)*(- 1);

bz = z;

от = 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 = радиани (90.0) - q;

V5 = радиани (180) - V4 - радиани (90);

arm2_angle = радиани (180.0) - (V5 + V1);

base_angle = градуси (atan2 (bx, by));

arm1_angle = градуси (arm1_angle);

arm2_angle = градуси (arm2_angle);

// println (by, bz);

// arm1_angle = 90;

// arm2_angle = 45;

/*

arm2_angle = 23;

arm1_angle = 23;

arm2_angle = 23;

*/

// интерактивен:

// ако (doZ)

//

// {

// base_angle = base_angle+ mouseX-pmouseX;

//} друго

// {

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

{

rotateX (1.2);

завъртанеZ (-1,2);

фон (0);

светлини ();

pushMatrix ();

// БАЗА

попълнете (150, 150, 150);

box_corner (50, 50, b_height, 0);

завъртане (радиани (основен_ъгъл), 0, 0, 1);

// РЪК 1

попълнете (150, 0, 150);

box_corner (10, 10, a1, arm1_angle);

// РЪК 2

попълнете (255, 0, 0);

box_corner (10, 10, a2, arm2_angle);

// СНЕЖДА

попълнете (255, 150, 0);

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

popMatrix ();

pushMatrix ();

float action_box_size = 100;

превод (0, -action_box_size/2, action_box_size/2+b_height);

pushMatrix ();

превод (x, action_box_size- y-action_box_size/2, z-action_box_size/2);

попълнете (255, 255, 0);

кутия (20);

popMatrix ();

попълнете (255, 255, 255, 50);

кутия (action_box_size, action_box_size, action_box_size);

popMatrix ();

}

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

{

завъртане (радиани (завъртане), 1, 0, 0);

превод (0, 0, d/2);

кутия (w, h, d);

превод (0, 0, d/2);

}

void keyPressed ()

{

ако (ключ == 'z')

{

doZ =! doZ;

}

ако (ключ == 'h')

{

// задавам нула

arm2_angle = 0;

arm1_angle = 90;

base_angle = 0;

}

ако (ключ == 'g')

{

println (градуси (V1));

println (градуси (V5));

}

ако (keyCode == НАГОРЕ)

{

z ++;

}

ако (keyCode == НАДОЛУ)

{

z -;

}

ако (ключ == '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);

}

}

Препоръчано: