Daftar Isi:
- Langkah 1: Persyaratan Komponen
- Langkah 2: Unduh Gui
- Langkah 3: Koneksi
- Langkah 4: Unggah Firmware dan Periksa Hasil Kode di Dasbor Arduino
- Langkah 5: Desain dan Cetak Semua Bagian dalam Lembar Kayu Lapis
- Langkah 6: Perakitan
- Langkah 7: Atur Pengaturan GBRL
- Langkah 8: Unggah Kode Akhir dan Periksa Hasil Virtual di Dasbor Perangkat Lunak Arduino Uno
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
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
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
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
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
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);
}
}