Оглавление:

Робот для выбора и установки базы Arduino: 8 шагов
Робот для выбора и установки базы Arduino: 8 шагов

Видео: Робот для выбора и установки базы Arduino: 8 шагов

Видео: Робот для выбора и установки базы Arduino: 8 шагов
Видео: Как Сделать Робота на Arduino UNO / How to Make a Robot on Arduino UNO 2024, Ноябрь
Anonim
Робот для выбора и установки базы Arduino
Робот для выбора и установки базы Arduino
Робот для выбора и установки базы Arduino
Робот для выбора и установки базы Arduino
Робот для выбора и установки базы Arduino
Робот для выбора и установки базы Arduino

Я сделал сверхдешевую (менее 1000 долларов) руку промышленного робота, чтобы студенты могли взламывать крупномасштабную робототехнику и позволить небольшим местным производствам использовать роботов в своих процессах, не нарушая при этом денег. Его легкость в создании и создании людей возрастной группы от 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,5x40 мм.

9. M3 Counter потоплен, 10. Источник питания 12 В

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

Настройка прошивки

Установите enable на более новый тайм-аут. Используйте последовательное соединение и напишите:

$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 (медленно) до 600 (быстро)

Единицы измерения по умолчанию для X, Y и Z

При использовании настроек шага / единиц по умолчанию (250 шагов / единица) для GRBL и

Шаговый привод, настроенный на 800 шагов / об, следующие единицы применяются для всех осей:

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

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

Этот код может напрямую связываться с Arduino GRBL.

github.com/damellis/gctrl

Не забудьте установить последовательный порт на бод: 115200

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

import java.awt.event. KeyEvent;

import javax.swing. JOptionPane;

import processing.serial. *;

Последовательный порт = ноль;

// выбираем и изменяем соответствующую строку для вашей операционной системы

// оставьте значение null, чтобы использовать интерактивный порт (нажмите в программе 'p')

Строка portname = null;

// Строка portname = Serial.list () [0]; // Mac OS X

// Строка portname = "/ dev / ttyUSB0"; // Linux

// Строка portname = "COM6"; // Windows

логическая потоковая передача = ложь;

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

String gcode;

int я = 0;

void openSerialPort ()

{

если (portname == null) return;

если (порт! = ноль) port.stop ();

порт = новый последовательный (это, имя порта, 115200);

port.bufferUntil ('\ п');

}

недействительным selectSerialPort ()

{

String result = (String) JOptionPane.showInputDialog (this, «Выберите последовательный порт, соответствующий вашей плате Arduino.», "Выбрать последовательный порт", JOptionPane. PLAIN_MESSAGE, нулевой, Serial.list (), 0);

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

имя порта = результат;

openSerialPort ();

}

}

установка void ()

{

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

openSerialPort ();

}

недействительная ничья ()

{

фон (0);

заполнить (255);

int y = 24, dy = 12;

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

текст («p: выберите последовательный порт», 12, y); y + = dy;

text («1: установить скорость 0,001 дюйма (1 мил) на шаг», 12, y); y + = dy;

text («2: установить скорость 0,010 дюйма (10 мил) на шаг», 12, y); y + = dy;

text («3: установить скорость 0,100 дюйма (100 мил) на шаг», 12, y); y + = dy;

текст («клавиши со стрелками: бег в плоскости x-y», 12, y); y + = dy;

текст ("страница вверх и страница вниз: перемещение по оси z", 12, y); y + = dy;

text ("$: отображать настройки grbl", 12, y); y + = dy;

текст («ч: иди домой», 12, у); y + = dy;

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

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

text ("x: остановить потоковую передачу g-кода (это НЕ немедленно)", 12, y); y + = dy;

y = высота - dy;

текст ("текущая скорость толчкового режима:" + скорость + "дюймов на шаг", 12, y); y - = dy;

текст ("текущий последовательный порт:" + имя порта, 12, y); y - = dy;

}

недействительный 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-" + скорость + "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 == DOWN) 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");

// если (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");

// если (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");

если (ключ == '0') openSerialPort ();

если (ключ == 'p') selectSerialPort ();

если (ключ == '$') port.write ("$$ / n");

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

}

if (! потоковая передача && key == 'g') {

gcode = null; я = 0;

Файл file = null;

println ("Загрузка файла…");

selectInput («Выберите файл для обработки:», «fileSelected», файл);

}

если (key == 'x') streaming = false;

}

void fileSelected (Выбор файла) {

if (selection == null) {

println ("Окно было закрыто или пользователь нажал кнопку отмены.");

} еще {

println («Выбрано пользователем» + selection.getAbsolutePath ());

gcode = loadStrings (selection.getAbsolutePath ());

если (gcode == null) возврат;

streaming = true;

транслировать();

}

}

пустой поток ()

{

если (! потоковая передача) возврат;

while (true) {

if (i == gcode.length) {

потоковая передача = ложь;

возвращение;

}

если (gcode .trim (). length () == 0) я ++;

иначе сломаться;

}

println (gcode [я]);

порт.write (gcode + '\ n');

i ++;

}

void serialEvent (серийный р)

{

Строка s = p.readStringUntil ('\ n');

println (s.trim ());

если (s.trim (). startWith ("хорошо")) stream ();

если (s.trim (). startWith ("ошибка")) stream (); // ХХХ: правда?

}

Шаг 5: спроектируйте и распечатайте все детали из фанерного листа

Дизайн и печать всей детали из фанерного листа
Дизайн и печать всей детали из фанерного листа

Загрузите деталь робота и конструкцию в AutoCAD и распечатайте на листе фанеры толщиной 12 мм, а также отделку и конструкцию. Если кому-то нужен cad-файл, пожалуйста, оставьте комментарий в поле для комментариев, я отправлю его напрямую.

Шаг 6: Сборка

сборка
сборка
сборка
сборка

соберите все части и расположите в последовательности на изображении, которое дано, и следуйте диаграмме изображения.

Шаг 7: Настройте параметры GBRL

Настройка, которая доказала свою эффективность на наших роботах.

$ 0 = 10 (шаговый импульс, мксек) $ 1 = 255 (шаговая задержка холостого хода, мс) $ 2 = 7 (шаговая маска инвертирования порта: 00000111) $ 3 = 7 (маска инвертирования порта dir: 00000111) $ 4 = 0 (инвертирование шага включения, bool) $ 5 = 0 (инверсия концевых штифтов, bool) $ 6 = 1 (инверсия штифта датчика, bool) $ 10 = 3 (маска отчета о состоянии: 00000011) $ 11 = 0,020 (отклонение перехода, мм) $ 12 = 0,002 (допуск дуги, мм) $ 13 = 0 (отчетные дюймы, bool) $ 20 = 0 (мягкие пределы, bool) $ 21 = 0 (жесткие ограничения, bool) $ 22 = 1 (цикл возврата в исходное положение, bool) $ 23 = 0 (маска инвертирования исходного направления: 00000000) $ 24 = 100,000 (подача в исходное положение, мм / мин) $ 25 = 500,000 (поиск точки начала отсчета, мм / мин) $ 26 = 250 (отклонение от точки начала отсчета, мсек) $ 27 = 1,000 (отвод в исходное положение, мм) $ 100 = 250,000 (x, шаг / мм) $ 101 = 250.000 (y, шаг / мм) $ 102 = 250.000 (z, шаг / мм) $ 110 = 500.000 (x макс. Скорость, мм / мин) $ 111 = 500.000 (y макс. Скорость, мм / мин) $ 112 = 500.000 (z макс. Скорость, мм / мин) $ 120 = 10.000 (ускорение x, мм / сек ^ 2) $ 121 = 10.000 (ускорение y, мм / сек ^ 2) $ 122 = 10.000 (ускорение z, мм / сек ^ 2) $ 130 = 200000 (x макс. ход, мм) $ 131 = 200 000 (макс. ход по оси, мм) $ 132 = 200 000 (макс. ход по оси, мм)

Шаг 8. Загрузите окончательный код и проверьте виртуальный результат на панели инструментов программного обеспечения Arduino Uno

// Единицы: CM

float b_height = 0;

float a1 = 92;

float a2 = 86;

float snude_len = 20;

логическое 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;

float q;

float c;

float V1;

поплавок V2;

float V3;

поплавок V4;

поплавок V5;

void setup () {

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

cam = новый PeasyCam (this, 300);

cam.setMinimumDistance (50);

cam.setMaximumDistance (500);

}

void draw () {

// ligninger:

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

x = (mouseY - высота / 2) * (- 1);

bz = z;

by = 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);

rotateZ (-1,2);

фон (0);

огни ();

pushMatrix ();

// БАЗА

заполнить (150, 150, 150);

box_corner (50, 50, b_height, 0);

повернуть (радианы (base_angle), 0, 0, 1);

// ARM 1

заполнить (150, 0, 150);

box_corner (10, 10, a1, arm1_angle);

// ARM 2

заполнить (255, 0, 0);

box_corner (10, 10, a2, arm2_angle);

// SNUDE

заполнить (255, 150, 0);

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

popMatrix ();

pushMatrix ();

float action_box_size = 100;

translate (0, -action_box_size / 2, action_box_size / 2 + b_height);

pushMatrix ();

translate (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);

коробка (ш, в, г);

перевести (0, 0, d / 2);

}

недействительный keyPressed ()

{

если (ключ == 'z')

{

doZ =! doZ;

}

если (ключ == 'ч')

{

// обнулить все

arm2_angle = 0;

arm1_angle = 90;

base_angle = 0;

}

если (ключ == 'g')

{

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

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

}

если (keyCode == UP)

{

z ++;

}

если (keyCode == ВНИЗ)

{

z -;

}

если (ключ == 'о')

{

у = 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);

}

}

Рекомендуемые: