İçindekiler:

Arduino Üssü Alma ve Yerleştirme Robotu: 8 Adım
Arduino Üssü Alma ve Yerleştirme Robotu: 8 Adım

Video: Arduino Üssü Alma ve Yerleştirme Robotu: 8 Adım

Video: Arduino Üssü Alma ve Yerleştirme Robotu: 8 Adım
Video: SCUTTLE Denge Robotu - Donanım Dönüşüm Kılavuzu 2024, Temmuz
Anonim
Arduino Üssü Alma ve Yerleştirme Robotu
Arduino Üssü Alma ve Yerleştirme Robotu
Arduino Üssü Alma ve Yerleştirme Robotu
Arduino Üssü Alma ve Yerleştirme Robotu
Arduino Üssü Alma ve Yerleştirme Robotu
Arduino Üssü Alma ve Yerleştirme Robotu

Öğrencilerin daha büyük ölçekli robotikleri hacklemelerini sağlamak ve küçük yerel üretimlerin bankayı bozmadan süreçlerinde robotları kullanmalarını sağlamak için süper ucuz (1000 dolardan az) bir endüstriyel robot kolu yaptım. 15 ila 50 yaş arası insanları inşa etmek ve yapmak kolaydır.

Adım 1: Bileşen Gereksinimi

Bileşen Gereksinimi
Bileşen Gereksinimi
Bileşen Gereksinimi
Bileşen Gereksinimi
Bileşen Gereksinimi
Bileşen Gereksinimi
Bileşen Gereksinimi
Bileşen Gereksinimi

1. Arduino+ Shield + Pinler + Kablolar

2. Motor denetleyicisi: dm860A (Ebay)

3. Step motor: 34hs5435c-37b2 (Ebay)

4. M8x45+60+70 cıvatalar ve M8 cıvatalar.

5. 12mm Kontrplak.

6. 5mm Naylon.

7. Kör pullar 8mm.

8. Ahşap Vidalar 4.5x40mm.

9. M3 Sayaç battı, 10. 12v güç kaynağı

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

2. Adım: Gui'yi İndirin

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

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

3. Adım: Bağlantı

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

Resimde verilen telleri bağlayarak daha iyi anlayacaksınız.

Motor sürücüsünü Arduino'ya ve robotunuza göre gerekli olan diğer konektörlere bağlamamız gerekiyor.

Adım 4: Ürün Yazılımını Yükleyin ve Arduino Dashboard'da Kod Sonucunu Kontrol Edin

Firmware'i Arduino - GRBL'ye kurmak:

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

Not: Arduino'da derleme yaparken bir çakışma yaşayabilirsiniz. Diğer tüm kitaplıkları kitaplık klasörünüzden kaldırın (../documents/Arduino/libraries).

Bellenim kurulumu

Etkinleştirmeyi daha yeni bir zaman aşımına ayarlayın. Seri bağlantı kullanın ve şunu yazın:

$1=255

Hedef aramayı ayarla:

$22=1

Seriyi baud olarak ayarlamayı unutmayın: 115200

Kullanışlı G kodları

Robot için sıfır noktası ayarlayın:

G10 L2 Xnnn Ynnn Znnn

Sıfır noktası kullanın:

G54

Robotu merkezlemek için tipik başlatma:

G10 L2 X1.5 Y1.2 Z1.1

G54

Robotu hızlı konuma getirin:

G0 Xnnn Ynnn Znnn

Örnek:

G0 X10.0 Y3.1 Z4.2 (dönüş)

Robotu belirli bir hızda pozisyona getirin:

G1 Xnnn Ynnn Znnn Fnnn

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

F, 10(yavaş) ile 600(hızlı) arasında olmalıdır

X, Y ve Z için varsayılan birimler

GRBL için varsayılan adım/birim ayarlarını (250 adım/birim) kullanırken ve

800 adım/dev için step sürücü kurulumu tüm eksenler için aşağıdaki birimler geçerlidir:

+- 32 birim = +- 180 derece

İşlem kodu örneği:

Bu kod doğrudan Arduino GRBL ile iletişim kurabilir.

github.com/damellis/gctrl

Seriyi baud olarak ayarlamayı unutmayın: 115200

Arduino'da uoload kodu

java.awt.event. KeyEvent'i içe aktar;

javax.swing. JOptionPane'i içe aktarın;

işleme.serisini içe aktar.*;

Seri bağlantı noktası = boş;

// işletim sisteminiz için uygun satırı seçin ve değiştirin

// etkileşimli bağlantı noktasını kullanmak için boş bırakın (programda 'p'ye basın)

Dize bağlantı noktası adı = boş;

//Dize portadı = Serial.list()[0]; // Mac OS X

//Dize bağlantı noktası adı = "/dev/ttyUSB0"; // Linux

//Dize bağlantı noktası adı = "COM6"; // Pencereler

boole akışı = yanlış;

şamandıra hızı = 0.001;

string gcode;

int ben = 0;

geçersiz openSerialPort()

{

if (portadı == null) dönüş;

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

bağlantı noktası = yeni Seri(bu, bağlantı noktası adı, 115200);

port.bufferUntil('\n');

}

geçersiz selectSerialPort()

{

Dize sonucu = (Dize) JOptionPane.showInputDialog(bu, "Arduino kartınıza karşılık gelen seri bağlantı noktasını seçin.", "Seri bağlantı noktası seçin", JOptionPane. PLAIN_MESSAGE, boş, Seri.list(), 0);

if (sonuç != boş) {

portadı = sonuç;

openSerialPort();

}

}

geçersiz kurulum()

{

boyut(500, 250);

openSerialPort();

}

geçersiz çekiliş()

{

arkaplan(0);

doldur(255);

int y = 24, dy = 12;

text("TALİMATLAR", 12, y); y += dy;

text("p: seri port seç", 12, y); y += dy;

text("1: hızı jog başına 0,001 inç (1 mil) olarak ayarlayın", 12, y); y += dy;

text("2: hızı jog başına 0,010 inç (10 mil) olarak ayarlayın", 12, y); y += dy;

text("3: hızı jog başına 0,100 inç (100 mil) olarak ayarlayın", 12, y); y += dy;

text("ok tuşları: x-y düzleminde ilerleyin", 12, y); y += dy;

text("sayfa yukarı ve sayfa aşağı: z ekseninde ilerleyin", 12, y); y += dy;

text("$: grbl ayarlarını göster", 12, y); y+= dy;

text("h: eve git", 12, y); y += dy;

text("0: sıfır makine (geçerli konuma ayarlayın)", 12, y); y += dy;

text("g: bir g kodu dosyasının akışını gerçekleştirin", 12, y); y += dy;

text("x: g kodu akışını durdurun (bu hemen DEĞİLDİR)", 12, y); y += dy;

y = yükseklik - dy;

text("geçerli hareket hızı: " + hız + " adım başına inç", 12, y); y -= dy;

text("geçerli seri bağlantı noktası: " + bağlantı noktası adı, 12, y); y -= dy;

}

geçersiz tuşBasılmış()

{

if (anahtar == '1') hız = 0.001;

if (anahtar == '2') hız = 0.01;

if (anahtar == '3') hız = 0.1;

if (!akış) {

if (keyCode == SOL) port.write("G91\nG20\nG00 X-" + hız + " Y0.000 Z0.000\n");

if (keyCode == SAĞ) port.write("G91\nG20\nG00 X" + hız + " Y0.000 Z0.000\n");

if (keyCode == UP) port.write("G91\nG20\nG00 X0.000 Y" + hız + " Z0.000\n");

if (keyCode == DOWN) port.write("G91\nG20\nG00 X0.000 Y-" + hız + " Z0.000\n");

if (keyCode == KeyEvent. VK_PAGE_UP) port.write("G91\nG20\nG00 X0.0000 Y0.000 Z" + hız + "\n");

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

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

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

//if (anahtar == '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 (anahtar == '0') openSerialPort();

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

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

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

}

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

gcode = boş; ben = 0;

Dosya dosyası = boş;

println("Dosya yükleniyor…");

selectInput("İşlenecek bir dosya seçin:", "fileSelected", dosya);

}

if (key == 'x') akış = false;

}

void fileSelected(Dosya seçimi) {

if (seçim == boş) {

println("Pencere kapatıldı veya kullanıcı iptal tuşuna bastı.");

} Başka {

println("Kullanıcı seçildi " +selection.getAbsolutePath());

gcode = loadStrings(selection.getAbsolutePath());

if (gcode == null) döner;

akış = doğru;

aktarım();

}

}

geçersiz akış()

{

eğer (!streaming) dönerse;

while (doğru) {

if (i == gcode.length) {

akış = yanlış;

dönüş;

}

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

başka kırılma;

}

println(gcode);

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

ben++;

}

void serialEvent(Seri p)

{

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

println(s.trim());

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

if (s.trim().startsWith("hata")) stream(); // XXX: gerçekten mi?

}

Adım 5: Tüm Parçaları Kontrplak Levhada Tasarlayın ve Yazdırın

Tüm Parçaları Kontrplak Levhada Tasarlayın ve Yazdırın
Tüm Parçaları Kontrplak Levhada Tasarlayın ve Yazdırın

Robot parçasını ve tasarımını AutoCAD'de indirin ve 12 mm'lik kontrplak levha ve bitiş ve tasarım bölümünü yazdırın. Herhangi birinin cad dosyasına ihtiyacı varsa lütfen yorum bölümüne yorum bırakın, ben `doğrudan göndereceğim.

Adım 6: Montaj

toplantı
toplantı
toplantı
toplantı

tüm parçaları toplayın ve verilen görüntü üzerinde sıraya göre düzenleyin ve görüntü diyagramını takip edin.

7. Adım: GBRL Ayarlarını Kurun

Robotlarımızda işe yaradığı kanıtlanmış ayar.

$0=10 (adım darbesi, usec) $1=255 (adım boşta kalma gecikmesi, msn) $2=7 (adım bağlantı noktası ters çevirme maskesi:00000111) $3=7 (dir bağlantı noktası ters çevirme maskesi:0000111) $4=0 (adım etkinleştirme ters çevirme, bool) $5=0 (limit pinleri ters çevir, bool) $6=1 (prob pini ters çevir, bool) $10=3 (durum raporu maskesi:00000011) $11=0.020 (bağlantı sapması, mm) 12$=0.002 (yay toleransı, mm) 13$ =0 (rapor inç, bool) $20=0 (yumuşak limitler, bool) $21=0 (sabit limitler, bool) $22=1 (homing döngüsü, bool) $23=0 (homing dir invert mask:00000000) $24=100.000 (hedef arama beslemesi, mm/dak) 25=500.000 $ (hedef arama, mm/dak) 26=250 $ (yer arama geri dönüşü, msn) 27=1.000 $ (yer arama çekme, mm) 100$=250.000 (x, adım/mm) 101$= 250.000 (y, adım/mm) 102=250.000 (z, adım/mm) 110=500.000 (x maksimum hız, mm/dak) 111=500.000 (y maksimum hız, mm/dak) 112=500.000 (z maksimum hız, mm/dk) 120$=10.000 (x hızlanma, mm/sn^2) 121=10.000 (y hızlanma, mm/sn^2) 122$=10.000 (z hızlanma, mm/sn^2) 130$=200.000 (x maks. hareket), mm) 131=200.000 (y maks. hareket, mm) 132=200.000 (z maks. hareket, mm)

Adım 8: Son Kodu Yükleyin ve Arduino Uno Yazılım Panosundaki Sanal Sonucu Kontrol Edin

// Birimler: CM

float b_height = 0;

kayan a1 = 92;

kayan a2 = 86;

float snude_len = 20;

boolean doZ = yanlış;

kayan taban_açı;// = 0;

float arm1_angle; // = 0;

yüzer arm2_angle; //= 0;

kayan nokta bx = 60;// = 25;

yüzer = 60;// = 0;

kayan nokta bz = 60;// = 25;

kayan nokta x = 60;

yüzer y = 60;

kayan nokta z = 60;

yüzer q;

yüzer c;

yüzer V1;

yüzer V2;

yüzer V3;

yüzer V4;

yüzer V5;

geçersiz kurulum() {

boyut(700, 700, P3D);

cam = yeni PeasyCam(bu, 300);

cam.setMinimumMesafe(50);

cam.setMaximumDistance(500);

}

geçersiz beraberlik() {

// liginger:

y = (fareX - genişlik/2)*(-1);

x = (fareY - yükseklik/2)*(-1);

bz = z;

tarafından = 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 = radyan(90.0) - q;

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

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

taban_açı = derece(atan2(bx, by));

arm1_angle=derece(arm1_angle);

arm2_angle=derece(arm2_angle);

//println(tarafından, bz);

//kol1_açı = 90;

//kol2_açı = 45;

/*

arm2_angle = 23;

arm1_angle= 23;

arm2_angle=23;

*/

// etkileşimli:

// eğer (doZ)

//

// {

// base_angle = base_angle+ mouseX-pmouseX;

// } Başka

// {

// arm1_angle =arm1_angle+ pmouseX-mouseX;

// }

//

// arm2_angle = arm2_angle+ fareY-pmouseY;

draw_robot(taban_açı, -(kol1_açı-90), kol2_açı+90 - (-(kol1_açı-90)));

// println(taban_açı + ", " + kol1_açı + ", " + kol2_açı);

}

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

{

döndürmeX(1.2);

döndürZ(-1.2);

arkaplan(0);

ışıklar();

pushMatrix();

// TEMEL

doldur(150, 150, 150);

box_corner(50, 50, b_height, 0);

döndürme(radyan(taban_açı), 0, 0, 1);

// KOL 1

doldur(150, 0, 150);

box_corner(10, 10, a1, arm1_angle);

// KOL 2

doldur(255, 0, 0);

box_corner(10, 10, a2, arm2_angle);

// SNUDE

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

doldur(255, 255, 0);

kutu(20);

popMatrix();

doldur(255, 255, 255, 50);

kutu(action_box_size, action_box_size, action_box_size);

popMatrix();

}

void box_corner(float w, float h, float d, float döndürme)

{

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

çevir(0, 0, d/2);

kutu(w, h, d);

çevir(0, 0, d/2);

}

geçersiz tuşBasılmış()

{

if (anahtar == 'z')

{

doZ = !doZ;

}

if (anahtar == 'h')

{

// hepsini sıfıra ayarla

arm2_angle = 0;

arm1_angle = 90;

taban_açı = 0;

}

if (anahtar == 'g')

{

println(derece(V1));

println(derece(V5));

}

if (anahtar Kodu == YUKARI)

{

z++;

}

if (anahtar Kodu == AŞAĞI)

{

z --;

}

if (anahtar == 'o')

{

y = 50;

z = 50;

println(q);

println(c, "c");

println(V1, "V1");

println(V2);

println(V3);

println(kol1_açı);

println(V4);

println(V5);

println(arm2_açı);

}

}

Önerilen: