Daftar Isi:

Arduino Base Pick and Place Robot: 8 Langkah
Arduino Base Pick and Place Robot: 8 Langkah

Video: Arduino Base Pick and Place Robot: 8 Langkah

Video: Arduino Base Pick and Place Robot: 8 Langkah
Video: Arduino DIY MeArm 4DOF Wooden Robotics Robot Arm Kit + SG90 / MG90s Servo Motor 2024, November
Anonim
Arduino Base Pick and Place Robot
Arduino Base Pick and Place Robot
Arduino Base Pick and Place Robot
Arduino Base Pick and Place Robot
Arduino Base Pick and Place Robot
Arduino Base Pick and Place Robot

Saya telah membuat lengan robot industri super murah (kurang dari 1000 dolar) untuk memungkinkan siswa meretas robotika skala besar dan untuk memungkinkan produksi lokal kecil menggunakan robot dalam proses mereka tanpa merusak bank. Sangat mudah untuk membangun dan membuat kelompok usia 15 hingga 50 tahun.

Langkah 1: Persyaratan Komponen

Persyaratan Komponen
Persyaratan Komponen
Persyaratan Komponen
Persyaratan Komponen
Persyaratan Komponen
Persyaratan Komponen
Persyaratan Komponen
Persyaratan Komponen

1. Arduino+ Perisai + Pin + Kabel

2. Pengendali motor: dm860A (Ebay)

3. Motor langkah: 34hs5435c-37b2 (Ebay)

4. Baut M8x45+60+70 dan baut M8.

5. Kayu Lapis 12mm.

6. Nilon 5mm.

7. Mesin cuci buta 8mm.

8. Sekrup Kayu 4.5x40mm.

9. Penghitung M3 tenggelam, 10. Catu daya 12v

11. driver motor servo arduino

Langkah 2: Unduh Gui

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

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

Langkah 3: Koneksi

Koneksi
Koneksi
Koneksi
Koneksi
Koneksi
Koneksi

Hubungkan kabel yang diberikan pada gambar adalah pemahaman yang lebih besar untuk Anda.

kita perlu menghubungkan driver motor ke Arduino dan konektor lain yang diperlukan sesuai robot Anda.

Langkah 4: Unggah Firmware dan Periksa Hasil Kode di Dasbor Arduino

Menginstal firmware di Arduino - GRBL:

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

Catatan: Anda mungkin mendapatkan konflik saat kompilasi di Arduino. Hapus semua perpustakaan lain dari folder perpustakaan Anda (../documents/Arduino/libraries).

Pengaturan firmware

Setel aktifkan ke batas waktu yang lebih baru. Gunakan koneksi serial dan tulis:

$1=255

Setel beranda:

$22=1

Ingatlah untuk mengatur serial ke baud: 115200

Kode-G yang berguna

Tetapkan titik nol untuk robot:

G10 L2 Xnnn Ynn Znn

Gunakan titik nol:

G54

Inisialisasi tipikal ke robot tengah:

G10 L2 X1.5 Y1.2 Z1.1

G54

Pindahkan robot ke posisi cepat:

G0 Xnnn Ynnn Znnn

Contoh:

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

Pindahkan robot ke posisi dengan kecepatan tertentu:

G1 Xnnn Ynnn Znnn Fnn

G1 X11 Y3 Z4 F300 (kembali)

F harus antara 10 (slooooow) dan 600 (cepat)

Satuan default untuk X, Y dan Z

Saat menggunakan pengaturan langkah/unit default (250 langkah/unit) untuk GRBL dan

drive stepper diatur untuk 800 langkah/putaran unit berikut berlaku untuk semua sumbu:

+- 32 satuan = +- 180 derajat

Contoh kode pemrosesan:

Kode ini dapat berkomunikasi langsung dengan Arduino GRBL.

github.com/damellis/gctrl

Ingatlah untuk mengatur serial ke baud: 115200

Kode uoload di ardunio

impor java.awt.event. KeyEvent;

impor javax.swing. JOptionPane;

import processing.serial.*;

Port serial = nol;

// pilih dan ubah baris yang sesuai untuk sistem operasi Anda

// biarkan sebagai null untuk menggunakan port interaktif (tekan 'p' dalam program)

Nama port string = null;

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

//String nama port = "/dev/ttyUSB0"; // Linux

//String nama port = "COM6"; // Windows

streaming boolean = salah;

kecepatan mengambang = 0,001;

String kode g;

int saya = 0;

batalkan openSerialPort()

{

if (nama port == null) kembali;

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

port = Serial baru (ini, nama port, 115200);

port.bufferSampai('\n');

}

batal pilihSerialPort()

{

Hasil string = (String) JOptionPane.showInputDialog(ini, "Pilih port serial yang sesuai dengan papan Arduino Anda.", "Pilih port serial", JOptionPane. PLAIN_MESSAGE, batal, Serial.daftar(), 0);

if (hasil != null) {

nama port = hasil;

openSerialPort();

}

}

batalkan pengaturan()

{

ukuran (500, 250);

openSerialPort();

}

batal menggambar()

{

latar belakang(0);

isi(255);

int y = 24, dy = 12;

teks("INSTRUKSI", 12, y); y += hari;

text("p: pilih port serial", 12, y); y += hari;

text("1: setel kecepatan ke 0,001 inci (1 mil) per joging", 12, y); y += hari;

text("2: setel kecepatan ke 0,010 inci (10 mil) per joging", 12, y); y += hari;

text("3: setel kecepatan ke 0,100 inci (100 mil) per joging", 12, y); y += hari;

text("tombol panah: jog di bidang xy", 12, y); y += hari;

text("halaman atas & halaman bawah: joging di sumbu z", 12, y); y += hari;

text("$: menampilkan pengaturan grbl", 12, y); y+= hari;

text("h: pulang", 12, y); y += hari;

text("0: mesin nol (set home ke lokasi saat ini)", 12, y); y += hari;

text("g: streaming file kode-g", 12, y); y += hari;

text("x: hentikan streaming g-code (ini TIDAK langsung)", 12, y); y += hari;

y = tinggi - dy;

text("kecepatan joging saat ini: " + kecepatan + " inci per langkah", 12, y); y -= hari;

text("port serial saat ini: " + namaport, 12, y); y -= hari;

}

tombol batal Ditekan()

{

if (kunci == '1') kecepatan = 0,001;

if (kunci == '2') kecepatan = 0,01;

if (kunci == '3') kecepatan = 0,1;

jika (! streaming) {

if (Kode kunci == KIRI) port.write("G91\nG20\nG00 X-" + kecepatan + " Y0.000 Z0.000\n");

if (Kode kunci == KANAN) port.write("G91\nG20\nG00 X" + kecepatan + " Y0.000 Z0.000\n");

if (Kode kunci == UP) port.write("G91\nG20\nG00 X0.000 Y" + kecepatan + " Z0.000\n");

if (Kode kunci == BAWAH) port.write("G91\nG20\nG00 X0.000 Y-" + kecepatan + " Z0.000\n");

if (Kode kunci == KeyEvent. VK_PAGE_UP) port.write("G91\nG20\nG00 X0.000 Y0.000 Z" + kecepatan + "\n");

if (Kode kunci == KeyEvent. VK_PAGE_DOWN) port.write("G91\nG20\nG00 X0.000 Y0.000 Z-" + kecepatan + "\n");

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

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

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

if (kunci == 's') port.write("$3=10\n");

if (kunci == 'e') port.write("$16=1\n");

if (kunci == 'd') port.write("$16=0\n");

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

if (kunci == 'p') pilihSerialPort();

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

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

}

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

gkode = nol; saya = 0;

Berkas berkas = nol;

println("Memuat file…");

selectInput("Pilih file yang akan diproses:", "fileSelected", file);

}

if (kunci == 'x') streaming = false;

}

void fileSelected(Pilihan file) {

if (pilihan == null) {

println("Jendela ditutup atau pengguna menekan batal.");

} lain {

println("Pengguna yang dipilih " + seleksi.getAbsolutePath());

gcode = loadStrings(selection.getAbsolutePath());

if (gcode == null) kembali;

streaming = benar;

sungai kecil();

}

}

aliran kosong()

{

jika (!streaming) kembali;

sementara (benar) {

if (i == gcode.length) {

streaming = salah;

kembali;

}

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

lain istirahat;

}

println(gkode);

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

saya++;

}

batal serialEvent(Serial p)

{

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

println(s.trim());

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

if (s.trim().startsWith("error")) stream(); // XXX: benarkah?

}

Langkah 5: Desain dan Cetak Semua Bagian dalam Lembar Kayu Lapis

Desain dan Cetak Semua Bagian dalam Lembaran Kayu Lapis
Desain dan Cetak Semua Bagian dalam Lembaran Kayu Lapis

Unduh bagian dan desain robot di AutoCAD dan cetak pada lembar kayu lapis 12mm dan bagian akhir dan desain. Jika ada yang membutuhkan file cad, silakan tinggalkan komentar di kotak bagian komentar, saya akan `Anda kirim langsung.

Langkah 6: Perakitan

perakitan
perakitan
perakitan
perakitan

kumpulkan semua bagian dan atur dalam urutan pada gambar yang diberikan dan ikuti diagram gambar.

Langkah 7: Atur Pengaturan GBRL

Setting yang telah terbukti berhasil pada robots.txt kami.

$0=10 (step pulse, usec) $1=255 (step idle delay, msec) $2=7 (step port invert mask:00000111) $3=7 (dir port invert mask:00000111) $4=0 (step enable invert, bool) $5=0 (pembalikan pin batas, bool) $6=1 (pembalikan pin probe, bool) $10=3 (masker laporan status:00000011) $11=0,020 (penyimpangan persimpangan, mm) $12=0,002 (toleransi busur, mm) $13 =0 (laporan inci, bool) $20=0 (batas lunak, bool) $21=0 (batas keras, bool) $22=1 (siklus homing, bool) $23=0 (masker invert direktori homing:00000000) $24=100.000 (homing feed, mm/mnt) $25=500.000 (homing seek, mm/min) $26=250 (homing debounce, msec) $27=1.000 (homing pull-off, mm) $100=250.000 (x, step/mm) $101= 250.000 (y, step/mm) $102=250.000 (z, step/mm) $110=500.000 (x rate max, mm/min) $111=500.000 (y max rate, mm/min) $112=500.000 (z max rate, mm/mnt) $120=10.000 (x akselerasi, mm/dtk^2) $121=10.000 (y akselerasi, mm/dtk^2) $122=10.000 (z akselerasi, mm/dtk^2) $130=200.000 (x perjalanan maksimum, mm) $131=200.000 (y perjalanan maks, mm) $132=200.000 (z perjalanan maks, mm)

Langkah 8: Unggah Kode Akhir dan Periksa Hasil Virtual di Dasbor Perangkat Lunak Arduino Uno

// Satuan: CM

float b_height = 0;

mengapung a1 = 92;

pelampung a2 = 86;

float snude_len = 20;

boolean doZ = salah;

float base_angle;// = 0;

float arm1_angle; // = 0;

float arm2_angle; //= 0;

float bx = 60;// = 25;

melayang sebesar = 60;// = 0;

float bz = 60;// = 25;

mengapung x = 60;

mengapung y = 60;

mengapung z = 60;

mengambang q;

mengapung c;

mengapung V1;

mengapung V2;

mengapung V3;

mengapung V4;

mengapung V5;

batalkan pengaturan() {

ukuran (700, 700, P3D);

cam = PeasyCam baru(ini, 300);

cam.setMinimumDistance(50);

cam.setMaximumDistance(500);

}

batal menggambar() {

// ligninger:

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

x = (mouseY - tinggi/2)*(-1);

bz = z;

oleh = y;

bx = x;

float y3 = kuadrat(bx*bx+by*by);

c = kuadrat(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;

lengan1_sudut = q;

V4 = radian(90,0) - q;

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

arm2_angle = radian(180,0) - (V5 + V1);

base_angle = derajat(atan2(bx, by));

arm1_angle=derajat(arm1_angle);

arm2_angle=derajat(arm2_angle);

//println(oleh, bz);

//lengan1_sudut = 90;

//lengan2_sudut = 45;

/*

lengan2_sudut = 23;

lengan1_sudut= 23;

lengan2_angle=23;

*/

// interaktif:

// jika (doZ)

//

// {

// sudut_dasar = sudut_dasar+ mouseX-pmouseX;

// } lain

// {

// arm1_angle = arm1_angle+ pmouseX-mouseX;

// }

//

// arm2_angle = arm2_angle+ mouseY-pmouseY;

draw_robot(sudut_dasar, -(sudut1_sudut-90), sudut_lengan+90 - (-(sudut1_sudut-90)));

// println(sudut_dasar + ", " + sudut_lengan + ", " + sudut_lengan);

}

void draw_robot(sudut_dasar mengambang, sudut_lengan mengambang, sudut_lengan mengambang)

{

putarX(1.2);

putarZ(-1.2);

latar belakang(0);

lampu();

pushMatriks();

// BASIS

isi(150, 150, 150);

box_corner(50, 50, b_height, 0);

putar(radian(sudut_dasar), 0, 0, 1);

// lengan 1

isi(150, 0, 150);

box_corner(10, 10, a1, arm1_angle);

// lengan 2

isi(255, 0, 0);

box_corner(10, 10, a2, arm2_angle);

// SNUDE

isi(255, 150, 0);

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

popMatriks();

pushMatriks();

float action_box_size=100;

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

pushMatriks();

translate(x, action_box_size- y-action_box_size/2, z-action_box_size/2);

isi(255, 255, 0);

kotak (20);

popMatriks();

isi(255, 255, 255, 50);

box(ukuran_kotak_aksi, ukuran_kotak_aksi, ukuran_kotak_aksi);

popMatriks();

}

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

{

memutar(radian(memutar), 1, 0, 0);

terjemahkan(0, 0, d/2);

kotak (w, h, d);

terjemahkan(0, 0, d/2);

}

tombol batal Ditekan()

{

jika (kunci == 'z')

{

doZ = !doZ;

}

jika (kunci == 'h')

{

// setel semua ke nol

lengan2_sudut = 0;

lengan1_sudut = 90;

dasar_angle = 0;

}

jika (kunci == 'g')

{

println(derajat(V1));

println(derajat(V5));

}

if (Kode kunci == UP)

{

z++;

}

jika (Kode kunci == BAWAH)

{

z --;

}

jika (kunci == 'o')

{

y = 50;

z = 50;

println(q);

println(c, "c");

println(V1, "V1");

println(V2);

println(V3);

println(lengan1_sudut);

println(V4);

println(V5);

println(lengan2_angle);

}

}

Direkomendasikan: