Mündəricat:

Arduino Əsas Seçim və Yerləşdirmə Robotu: 8 addım
Arduino Əsas Seçim və Yerləşdirmə Robotu: 8 addım

Video: Arduino Əsas Seçim və Yerləşdirmə Robotu: 8 addım

Video: Arduino Əsas Seçim və Yerləşdirmə Robotu: 8 addım
Video: Zigbee LAN koordinatoru SLZB-05, zigbee2mqtt quraşdırılması və konfiqurasiyası, cihaz bağlantısı 2024, Noyabr
Anonim
Arduino Base Robotu seçin
Arduino Base Robotu seçin
Arduino Base Robotu seçin
Arduino Base Robotu seçin
Arduino Base Robotu seçin
Arduino Base Robotu seçin

Tələbələrə daha geniş miqyaslı robot texnikasını sındırmaq və kiçik yerli istehsalların bankları pozmadan robotları proseslərində istifadə etmələrini təmin etmək üçün super ucuz (1000 dollardan az) sənaye robot qolu hazırladım. 15 yaşdan 50 yaşa qədər olan insanları qurmaq və etmək çox asandır.

Addım 1: Komponent tələbləri

Komponent tələbləri
Komponent tələbləri
Komponent tələbləri
Komponent tələbləri
Komponent tələbləri
Komponent tələbləri
Komponent tələbləri
Komponent tələbləri

1. Arduino + Shield + Pins + Kabellər

2. Motor nəzarətçisi: dm860A (Ebay)

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

4. M8x45+60+70 boltlar və M8 boltlar.

5. 12 mm Kontrplak.

6. 5 mm neylon.

7. Kor yuyucular 8 mm.

8. Taxta Vintlər 4.5x40mm.

9. M3 sayğac batdı, 10. 12v enerji təchizatı

11. servo motor sürücüsü arduino

Addım 2: Gui yükləyin

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

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

Addım 3: Bağlantı

Bağlantı
Bağlantı
Bağlantı
Bağlantı
Bağlantı
Bağlantı

Şəkildə verilən telləri bağlamaq sizin üçün daha yaxşı bir anlayışdır.

Motor sürücüsünü Arduino və robotunuza uyğun olaraq lazım olan digər bağlayıcılara bağlamalıyıq.

Addım 4: Firmware yükləyin və Arduino Tablosunda Kod Nəticəsini yoxlayın

Arduino - GRBL -də firmware qurmaq:

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

Qeyd: Arduinoda tərtib edərkən bir münaqişə yarana bilər. Bütün digər kitabxanaları kitabxana qovluğunuzdan silin (../documents/Arduino/libraries).

Firmware quraşdırılması

Daha yeni bir zaman aşımına icazə verin. Bir serial bağlantısı istifadə edin və yazın:

$1=255

Sahibliyi təyin edin:

$22=1

Seriyanı baud olaraq təyin etməyi unutmayın: 115200

Faydalı G kodları

Robot üçün sıfır nöqtəsini təyin edin:

G10 L2 Xnnn Ynnn Znnn

Sıfır nöqtəsini istifadə edin:

G54

Orta robotun tipik başlanğıcı:

G10 L2 X1.5 Y1.2 Z1.1

G54

Robotu sürətlə mövqeyinə keçirin:

G0 Xnnn Ynnn Znnn

Misal:

G0 X10.0 Y3.1 Z4.2 (qaytar)

Robotu müəyyən bir sürətlə mövqeyə aparın:

G1 Xnnn Ynnn Znnn Fnnn

G1 X11 Y3 Z4 F300 (dönüş)

F 10 (slooooow) ilə 600 (sürətli) arasında olmalıdır

X, Y və Z üçün standart vahidlər

GRBL və

800 addım/devir üçün qurulan step sürücü, bütün oxlar üçün aşağıdakı vahidləri tətbiq edir:

+- 32 ədəd = +- 180 dərəcə

Kod işləmə nümunəsi:

Bu kod birbaşa Arduino GRBL ilə əlaqə qura bilər.

github.com/damellis/gctrl

Seriyanı baud olaraq təyin etməyi unutmayın: 115200

Arduino -da kod uoload

java.awt.event. KeyEvent daxil edin;

javax.swing. JOptionPane idxal edin;

idxal emalı.serial.*;

Serial port = null;

// əməliyyat sisteminizə uyğun xətti seçin və dəyişdirin

// interaktiv portdan istifadə etmək üçün sıfır olaraq buraxın (proqramda 'p' düyməsini basın)

String port adı = null;

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

// String port adı = "/dev/ttyUSB0"; // Linux

// String port adı = "COM6"; // Windows

boolean axını = yalan;

üzmə sürəti = 0.001;

String gcode;

int i = 0;

void openSerialPort ()

{

if (portname == null) qayıtmaq;

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

port = yeni Serial (bu, port adı, 115200);

port.bufferUntil ('\ n');

}

etibarsız selectSerialPort ()

{

String nəticə = (String) JOptionPane.showInputDialog (bu, "Arduino lövhənizə uyğun olan serial portunu seçin.", "Serial portu seçin", JOptionPane. PLAIN_MESSAGE, sıfır, Serial.list (), 0);

if (nəticə! = sıfır) {

port adı = nəticə;

openSerialPort ();

}

}

boş quraşdırma ()

{

ölçü (500, 250);

openSerialPort ();

}

boş çəkiliş ()

{

fon (0);

doldurun (255);

int y = 24, dy = 12;

mətn ("TƏLİMATLAR", 12, y); y += dy;

mətn ("p: serial portunu seçin", 12, y); y += dy;

mətn ("1: sürəti hər qaçış üçün 0,001 düym (1 mil) olaraq təyin et", 12, y); y += dy;

mətn ("2: hər qaçışda sürəti 0.010 düym (10 mil) olaraq təyin et", 12, y); y += dy;

mətn ("3: hər qaçışda sürəti 0.100 düym (100 mil) olaraq təyin et", 12, y); y += dy;

mətn ("ox düymələri: x-y müstəvisində qaçış", 12, y); y += dy;

mətn ("səhifə yuxarı və səhifə aşağı: z oxunda qaçış", 12, y); y += dy;

mətn ("$: display grbl settings", 12, y); y+= dy;

mətn ("h: evə get", 12, y); y += dy;

mətn ("0: sıfır maşın (cari yerə ev təyin)", 12, y); y += dy;

mətn ("g: g-kod faylını axın et", 12, y); y += dy;

mətn ("x: g-kodu axını dayandır (bu dərhal deyil)", 12, y); y += dy;

y = hündürlük - dy;

mətn ("cari qaçış sürəti:" + sürət + "addım başına düym", 12, y); y -= dy;

mətn ("cari serial port:" + port adı, 12, y); y -= dy;

}

void key Pressed ()

{

if (key == '1') sürət = 0.001;

if (key == '2') sürət = 0.01;

if (key == '3') sürət = 0.1;

if (! axın) {

əgər (keyCode == SOL) port.write ("G91 / nG20 / nG00 X-" + sürət + "Y0.000 Z0.000 / n");

əgər (keyCode == SAĞ) port.write ("G91 / nG20 / nG00 X" + sürət + "Y0.000 Z0.000 / n");

əgər (keyCode == UP) port.write ("G91 / nG20 / nG00 X0.000 Y" + sürət + "Z0.000 / n");

əgər (keyCode == AŞAĞI) port.write ("G91 / nG20 / nG00 X0.000 Y-" + sürət + "Z0.000 / n");

əgər (keyCode == KeyEvent. VK_PAGE_UP) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z" + sürət + "\ n");

əgər (keyCode == KeyEvent. VK_PAGE_DOWN) port.write ("G91 / nG20 / nG00 X0.000 Y0.000 Z-" + sürət + "\ n");

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

əgər (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");

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

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

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

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

əgər (açar == '$') port.write ("$$ / n");

əgər (key == 'h') port.write ("$ H / n");

}

if (! axın && key == 'g') {

gcode = sıfır; i = 0;

Fayl faylı = null;

println ("Fayl yüklənir …");

selectInput ("İşlənəcək bir fayl seçin:", "fileSelected", fayl);

}

if (key == 'x') axın = yalan;

}

void fileSelected (Fayl seçimi) {

əgər (seçim == null) {

println ("Pəncərə bağlandı və ya istifadəçi ləğv etdi");

} başqa {

println ("İstifadəçi seçildi" + selection.getAbsolutePath ());

gcode = loadStrings (selection.getAbsolutePath ());

əgər (gcode == null) qayıt;

axın = doğru;

axın ();

}

}

boş axın ()

{

əgər (! axın) qayıtsa;

while (doğru) {

əgər (i == gcode.length) {

axın = yalan;

qayıtmaq;

}

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

başqa qırmaq;

}

println (gcode );

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

i ++;

}

boş serialEvent (Serial p)

{

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

println (s.trim ());

if (s.trim (). başlayırWith ("ok")) stream ();

if (s.trim (). startWith ("error")) stream (); // XXX: həqiqətən?

}

Addım 5: Kontrplak vərəqdə bütün hissələri dizayn edin və çap edin

Kontrplak vərəqində bütün hissələri dizayn edin və çap edin
Kontrplak vərəqində bütün hissələri dizayn edin və çap edin

Robot hissəsini və dizaynını AutoCAD -də yükləyin və 12 mm kontrplak təbəqəyə, bitirmə və dizayn hissəsinə çap edin. Hər kəsin cad faylına ehtiyacı varsa, şərh bölməsinə yazın.

Addım 6: Quraşdırma

Məclis
Məclis
Məclis
Məclis

bütün hissələri toplayın və verilən şəkildəki ardıcıllıqla düzün və şəkil sxeminə əməl edin.

Addım 7: GBRL Ayarlarını Qurun

Robotlarımızda işlədiyini sübut edən bir quruluş.

$ 0 = 10 (addım pulse, usec) $ 1 = 255 (addım boş gecikmə, msec) $ 2 = 7 (addım port invert maskası: 00000111) $ 3 = 7 (dir port invert maskası: 00000111) $ 4 = 0 (add invert, bool $ 5 = 0 (limit pinləri invert, bool) $ 6 = 1 (prob pin invert, bool) $ 10 = 3 (status hesabat maskası: 00000011) $ 11 = 0.020 (qovşağın sapması, mm) $ 12 = 0.002 (qövs tolerantlığı, mm) $ 13 = 0 (hesabat düymləri, bool) $ 20 = 0 (yumşaq məhdudiyyətlər, bool) $ 21 = 0 (sərt limitlər, bool) $ 22 = 1 (homing dövrü, bool) $ 23 = 0 (homing dir invert maskası: 00000000) $ 24 = 100.000 (homing feed, mm/min) $ 25 = 500.000 (homing search, mm/min) $ 26 = 250 (homing debounce, msec) $ 27 = 1.000 (homing pull-off, mm) $ 100 = 250.000 (x, step/mm) $ 101 = 250.000 (y, addım/mm) $ 102 = 250.000 (z, addım/mm) $ 110 = 500.000 (x max dərəcəsi, mm/dəq) $ 111 = 500.000 (y max dərəcəsi, mm/dəq) $ 112 = 500.000 (z max dərəcəsi, mm/dəq) $ 120 = 10.000 (x sürət, mm/san^2) $ 121 = 10.000 (y sürət, mm/san^2) $ 122 = 10.000 (z sürət, mm/san^2) $ 130 = 200.000 (x maksimum səyahət, mm) $ 131 = 200.000 (y max səyahət, mm) $ 132 = 200.000 (z max səyahət, mm)

Addım 8: Son Kodu Yükləyin və Arduino Uno Proqram Tablosunda Virtual Nəticəni yoxlayın

// Vahidlər: CM

float b_height = 0;

float a1 = 92;

float a2 = 86;

float snude_len = 20;

boolean doZ = yalan;

float base_angle; // = 0;

üzən qol1_angle; // = 0;

üzən qol2_angle; // = 0;

float bx = 60; // = 25;

float = 60; // = 0;

float bz = 60; // = 25;

float x = 60;

float y = 60;

float z = 60;

üzmək q;

üzmək c;

üzən V1;

üzən V2;

float V3;

üzən V4;

üzən V5;

boş quraşdırma () {

ölçü (700, 700, P3D);

cam = yeni PeasyCam (bu, 300);

cam.setMinimumDistance (50);

cam.setMaximumDistance (500);

}

boş çəkmə () {

// bağlayıcı:

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

x = (mouseY - hündürlük/2)*(- 1);

bz = z;

ilə = 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;

qol1_angle = q;

V4 = radian (90.0) - q;

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

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

base_angle = dərəcə (atan2 (bx, by));

qol1_angle = dərəcə (qol1_angle);

arm2_angle = dərəcə (qol2_angle);

// println (by, bz);

// qol1_angle = 90;

// qol2_angle = 45;

/*

qol2_angle = 23;

qol1_angle = 23;

qol2_angle = 23;

*/

// interaktiv:

// əgər (doZ)

//

// {

// təməl_bucaq = baza_bucağı+ mouseX-pmouseX;

//} başqa

// {

// qol1_angle = qol1_angle+ pmouseX-mouseX;

// }

//

// arm2_angle = arm2_angle+ mouseY-pmouseY;

draw_robot (əsas_angle,-(qol1_angle-90), qol2_angle+90-(-(qol1_angle-90)));

// println (əsas_bucaq + "," + qol1_angle + "," + qol2_angle);

}

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

{

rotateX (1.2);

rotateZ (-1.2);

fon (0);

işıqlar ();

pushMatrix ();

// BAZA

doldurun (150, 150, 150);

box_corner (50, 50, b_height, 0);

döndür (radianlar (əsas_bucaq), 0, 0, 1);

// QOL 1

doldurun (150, 0, 150);

box_corner (10, 10, a1, qol1_angle);

// Qol 2

doldurun (255, 0, 0);

box_corner (10, 10, a2, arm2_angle);

// QARŞI

doldurun (255, 150, 0);

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

popMatrix ();

pushMatrix ();

float action_box_size = 100;

tərcümə (0, -action_box_size/2, action_box_size/2+b_height);

pushMatrix ();

tərcümə (x, action_box_size- y-action_box_size/2, z-action_box_size/2);

doldurun (255, 255, 0);

qutu (20);

popMatrix ();

doldurun (255, 255, 255, 50);

qutu (action_box_size, action_box_size, action_box_size);

popMatrix ();

}

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

{

döndür (radianlar (döndür), 1, 0, 0);

tərcümə (0, 0, d/2);

qutu (w, h, d);

tərcümə (0, 0, d/2);

}

void key Pressed ()

{

əgər (açar == 'z')

{

doZ =! doZ;

}

əgər (açar == 'h')

{

// hamısını sıfıra qoyun

qol2_angle = 0;

qol1_angle = 90;

base_angle = 0;

}

əgər (açar == 'g')

{

println (dərəcə (V1));

println (dərəcə (V5));

}

əgər (keyCode == YUKARI)

{

z ++;

}

əgər (keyCode == AŞAĞI)

{

z -;

}

əgər (açar == 'o')

{

y = 50;

z = 50;

println (q);

println (c, "c");

println (V1, "V1");

println (V2);

println (V3);

println (qol1_angle);

println (V4);

println (V5);

println (qol2_angle);

}

}

Tövsiyə: