Мазмұны:

Arduino негізін таңдау және орналастыру роботы: 8 қадам
Arduino негізін таңдау және орналастыру роботы: 8 қадам

Бейне: Arduino негізін таңдау және орналастыру роботы: 8 қадам

Бейне: Arduino негізін таңдау және орналастыру роботы: 8 қадам
Бейне: Урок №12. Интеграция Arduino с Lego EV3. Beyond Robotics 2024, Шілде
Anonim
Arduino негізін таңдау және орналастыру роботы
Arduino негізін таңдау және орналастыру роботы
Arduino негізін таңдау және орналастыру роботы
Arduino негізін таңдау және орналастыру роботы
Arduino негізін таңдау және орналастыру роботы
Arduino негізін таңдау және орналастыру роботы

Мен студенттерге үлкен көлемді робототехниканы бұзуға және шағын жергілікті өндірістерге роботтарды банкті бұзбай -ақ қолдануға мүмкіндік беретін өте арзан (1000 доллардан аз) өнеркәсіптік робот білігін жасадым. Бұл 15 жастан 50 жасқа дейінгі адамдарды құруға және жасауға оңай.

1 -қадам: компоненттерге қойылатын талаптар

Компоненттерге қойылатын талаптар
Компоненттерге қойылатын талаптар
Компоненттерге қойылатын талаптар
Компоненттерге қойылатын талаптар
Компоненттерге қойылатын талаптар
Компоненттерге қойылатын талаптар
Компоненттерге қойылатын талаптар
Компоненттерге қойылатын талаптар

1. Arduino + Shield + түйреуіштер + кабельдер

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

3. Қадамдық қозғалтқыш: 34hs5435c-37b2 (Ebay)

4. M8x45+60+70 болттар мен M8 болттар.

5. 12 мм фанера.

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

7. Соқыр шайбалар 8мм.

8. Ағаш бұрандалар 4,5х40мм.

9. М3 есептегіш батып кетті, 10. 12в қуат көзі

11. servo мотор жүргізушісі 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

Серияны bod күйіне қоюды ұмытпаңыз: 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

Ардуниодағы код

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

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

импортты өңдеу.сериал.*;

Сериялық порт = бос;

// операциялық жүйеге сәйкес жолды таңдаңыз және өзгертіңіз

// интерактивті портты пайдалану үшін нөл ретінде қалдырыңыз (бағдарламада 'p' басыңыз)

Жолдың аты = null;

// Жолдың порт аты = Serial.list () [0]; // Mac OS X

// Жолдың порт атауы = «/dev/ttyUSB0»; // Linux

// Жолдың порт аты = «COM6»; // Windows

логикалық ағын = жалған;

қалқу жылдамдығы = 0,001;

Жол gcode;

int i = 0;

жарамсыз openSerialPort ()

{

if (portname == null) қайтару;

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

порт = жаңа сериялық (бұл, порт атауы, 115200);

port.bufferUntil ('\ n');

}

selectSerialPort () жарамсыз

{

Жол нәтижесі = (Жол) JOptionPane.showInputDialog (бұл, «Arduino тақтасына сәйкес келетін сериялық портты таңдаңыз.», «Сериялық портты таңдау», JOptionPane. PLAIN_MESSAGE, нөл, Serial.list (), 0);

if (нәтиже! = нөл) {

порт аты = нәтиже;

openSerialPort ();

}

}

жарамсыз орнату ()

{

өлшемі (500, 250);

openSerialPort ();

}

жарамсыз жеребе ()

{

фон (0);

толтыру (255);

int y = 24, dy = 12;

мәтін («НҰСҚАУЛАР», 12, у); y += dy;

мәтін («p: сериялық портты таңдау», 12, у); y += dy;

мәтін («1: жылдамдықты 0,001 дюймге (1 миль) жүгіруге орнату», 12, у); y += dy;

мәтін («2: жүгіру жылдамдығын 0,010 дюймге (10 миль) қою», 12, у); y += dy;

мәтін («3: жүгіруді 0.100 дюймге (100 миль) орнатыңыз», 12, у); y += dy;

мәтін («көрсеткі пернелері: x-y жазығында жүгіру», 12, у); y += dy;

мәтін («бет жоғары және бет төмен: жүгіру z осінде», 12, у); y += dy;

мәтін («$: display grbl settings», 12, y); y+= dy;

мәтін («с: үйге бар», 12, у); y += dy;

мәтін («0: нөлдік машина (үйді ағымдағы орынға орнату)», 12, у); y += dy;

мәтін («g: а-кодтық файлды ағынмен жіберу», 12, у); y += dy;

мәтін («x: g-кодты жіберуді тоқтатыңыз (бұл бірден емес)», 12, у); y += dy;

y = биіктігі - dy;

мәтін («ағымдағы жүгіру жылдамдығы:» + жылдамдық + «дюйм бір қадамға», 12, у); y -= dy;

мәтін («ағымдағы сериялық порт:» + порт атауы, 12, у); y -= dy;

}

void пернесі басылды ()

{

if (key == '1') жылдамдық = 0,001;

if (key == '2') жылдамдық = 0,01;

if (key == '3') жылдамдық = 0,1;

if (! ағынмен) {

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»);

// 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 = бос; i = 0;

Файлдық файл = null;

println («Файл жүктелуде …»);

selectInput («Өңделетін файлды таңдаңыз:», «fileSelected», файл);

}

if (key == 'x') ағын = жалған;

}

void fileSelected (Файлды таңдау) {

if (таңдау == бос) {

println («Терезе жабылды немесе пайдаланушы бас тартты.»);

} басқа {

println («Пайдаланушы таңдалды» + selection.getAbsolutePath ());

gcode = loadStrings (selection.getAbsolutePath ());

if (gcode == null) қайтару;

ағын = ақиқат;

ағын ();

}

}

бос ағын ()

{

егер (! ағынмен) оралса;

while (true) {

егер (i == gcode.length) {

ағын = жалған;

қайтару;

}

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

басқа үзіліс;

}

println (gcode );

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

i ++;

}

жарамсыз serialEvent (сериялық р)

{

Жол s = p.readStringUntil ('\ n');

println (s.trim ());

if (s.trim (). startWith («ok»)) stream ();

if (s.trim (). beginWith («қате»)) stream (); // XXX: шынымен?

}

5 -қадам: фанера парағының барлық бөлігін жобалау және басып шығару

Фанер парағындағы барлық бөлікті жобалау және басып шығару
Фанер парағындағы барлық бөлікті жобалау және басып шығару

Робот бөлігі мен дизайнын AutoCAD -те жүктеп алып, 12 мм фанера парағына және әрлеу мен дизайн бөлігіне басып шығарыңыз. Егер біреуге cad файлы қажет болса, пікірді түсініктеме бөлімінде қалдырыңыз, мен сізге тікелей жіберемін.

6 -қадам: құрастыру

Ассамблея
Ассамблея
Ассамблея
Ассамблея

барлық бөлікті жинап, берілген суреттің ретін реттеңіз және сурет диаграммасын орындаңыз.

7 -қадам: GBRL параметрлерін орнатыңыз

Бұл біздің роботтарда жұмыс істейтінін дәлелдеді.

$ 0 = 10 (қадамдық импульс, usec) $ 1 = 255 (бос тұрудың кешігуі, msec) $ 2 = 7 (қадамдық порттың инверттеу маскасы: 00000111) $ 3 = 7 (dir port invert mask: 00000111) $ 4 = 0 (invert, bool $ 5 = 0 (шекті түйреуіштерді инверттеу, бол) $ 6 = 1 (зондты бұру, бол) $ 10 = 3 (күй туралы есеп маскасы: 00000011) $ 11 = 0,020 (түйістің ауытқуы, мм) $ 12 = 0,002 (доға төзімділігі, мм) $ 13 = 0 (есеп дюймі, бол) $ 20 = 0 (жұмсақ шектеулер, бол) $ 21 = 0 (қатаң шектеулер, бол) $ 22 = 1 (homing циклы, бол) $ 23 = 0 (homing dir invert маскасы: 00000000) $ 24 = 100.000 (homing feed, мм/мин) $ 25 = 500.000 (homing search, мм/мин) $ 26 = 250 (homing debounce, msec) $ 27 = 1.000 (homing pull-off, mm) $ 100 = 250.000 (x, step/mm) $ 101 = 250.000 (у, қадам/мм) $ 102 = 250.000 (z, қадам/мм) $ 110 = 500.000 (x максималды жылдамдық, мм/мин) $ 111 = 500.000 (у максималды жылдамдық, мм/мин) $ 112 = 500.000 (z максималды жылдамдық, мм/мин) $ 120 = 10.000 (x accel, mm/sec^2) $ 121 = 10.000 (y accel, mm/sec^2) $ 122 = 10.000 (z accel, mm/sec^2) $ 130 = 200.000 (x max travel, мм) $ 131 = 200.000 (у максималды саяхат, мм) $ 132 = 200.000 (z максималды жол жүру, мм)

8 -қадам: Қорытынды кодты жүктеп, Arduino Uno бағдарламалық құралдар тақтасындағы виртуалды нәтижені тексеріңіз

// Бірліктер: CM

float b_height = 0;

float a1 = 92;

float a2 = 86;

float snude_len = 20;

логикалық doZ = жалған;

float base_angle; // = 0;

қалқымалы қол1_бұрыш; // = 0;

қалқымалы қол2_angle; // = 0;

float bx = 60; // = 25;

= 60; // = 0;

float bz = 60; // = 25;

float x = 60;

у = 60;

float z = 60;

қалқу q;

қалқыма c;

қалқымалы V1;

қалқымалы V2;

қалқымалы V3;

қалқымалы V4;

қалқымалы V5;

жарамсыз орнату () {

өлшемі (700, 700, P3D);

cam = жаңа PeasyCam (бұл, 300);

cam.setMinimumDistance (50);

cam.setMaximumDistance (500);

}

жарамсыз жеребе () {

// қосқыш:

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

негізгі_бұрыш = градус (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)

//

// {

// базалық_бұрыш = негізгі_бұрыш+ mouseX-pmouseX;

//} басқа

// {

// arm1_angle = arm1_angle+ pmouseX-mouseX;

// }

//

// arm2_angle = arm2_angle+ mouseY-pmouseY;

draw_robot (негізгі_бұрыш,-(arm1_angle-90), arm2_angle+90-(-(arm1_angle-90)));

// println (base_angle + «,» + arm1_angle + «,» + arm2_angle);

}

жарамсыз draw_robot (қалқымалы базалық бұрыш, қалқымалы қол1_бұрыш, қалқымалы қол2_бұрыш)

{

rotateX (1.2);

rotateZ (-1.2);

фон (0);

шамдар ();

pushMatrix ();

// НЕГІЗ

толтыру (150, 150, 150);

box_corner (50, 50, b_height, 0);

айналдыру (радиандар (негізгі_бұрыш), 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);

// ЖҰЛАҚ

толтыру (255, 150, 0);

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

popMatrix ();

pushMatrix ();

float action_box_size = 100;

аудару (0, -акция_бокс_өлшемі/2, әрекет_бөлігі_өлшемі/2+b_ биіктігі);

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

}

бос_бұрыш

{

айналдыру (радиандар (айналдыру), 1, 0, 0);

аудару (0, 0, d/2);

қорап (w, h, d);

аудару (0, 0, d/2);

}

void пернесі басылды ()

{

егер (кілт == 'z')

{

doZ =! doZ;

}

егер (кілт == 'h')

{

// барлығын нөлге қойыңыз

arm2_angle = 0;

arm1_angle = 90;

base_angle = 0;

}

егер (кілт == 'g')

{

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

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

}

егер (keyCode == UP)

{

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

}

}

Ұсынылған: