Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Cara membuat plotter CNC 2D mini menggunakan drive DVD bekas, L293D

Komponen dan persediaan

Arduino UNO
Otak mesin
× 1
Pelindung motor L293D
Kontrol motor stepper dari sumbu
× 1
Tower pro motor Servo 9g
Pena gerakan Zaxis ATAS &pena BAWAH
× 1
Memo DVD Dr
sumbu X &sumbu Y mekanis
× 1
Kabel jumper (generik)
× 1

Aplikasi dan layanan online

Arduino IDE
Memproses IDE
Inkscape

Tentang proyek ini

Susun dua DVD Drive bekas seperti pada gambar

1. Unduh Arduino IDE

2. Unduh IDE Pemrosesan

3. Buka Arduino IDE dan muat kode yang diunduh dari di sini .

4. Buka Processing IDE dan muat kode yang diunduh dari di sini .

Buka Drive DVD memo dan lepaskan baki bergerak internal. Baki ini memiliki mekanisme stepper di atasnya, akan bertindak sebagai sumbu X &sumbu Y kami. Lihat gambar terlampir untuk memahami cara merakit mesin Anda. Buat lubang pada wadah drive DVD kosong, pasang sumbu X dan sumbu Y pada wadah DVD masing-masing dengan bantuan baut mur.

Sekarang tempatkan mereka secara tegak lurus satu sama lain.

Kode G

Untuk membuat file g-code yang kompatibel dengan mesin CNC ini Anda harus menggunakan Inkscape.

Inkscape adalah perangkat lunak grafis vektor berkualitas profesional yang berjalan di Windows, Mac OS X dan Linux. Ini digunakan oleh para profesional desain dan penghobi di seluruh dunia, untuk membuat berbagai macam grafik seperti ilustrasi, ikon, logo, diagram, peta, dan grafik web. Inkscape menggunakan SVG standar terbuka W3C (Scalable Vector Graphics) sebagai format aslinya, dan merupakan perangkat lunak sumber terbuka dan gratis. Unduh dan instal Inkscape dari sini.

(Penting :unduh versi 0.48.5) Sekarang Anda perlu menginstal Add-on yang memungkinkan ekspor gambar ke file kode-g. Pengaya ini dapat ditemukan di sini dengan catatan penginstalan.

Silakan ikuti video di YouTube cara membuat file G-code.

  • Unggah file gctrl ke IDE pemrosesan dan klik tombol MAINKAN di jendela pemrosesan.
  • Pertama tekan 'p' untuk memilih port komunikasi Anda
  • Jika mau, Anda dapat mengatur kecepatan joging dengan menekan tombol 1,2, atau 3 dari keyboard
  • Tekan 'g' untuk memuat file kode-G
  • Mesin Anda siap untuk diplot segera setelah Anda menekan enter dengan memilih file g-code

Sekarang plotter Anda sudah siap. Beberapa tautan unduhan file G-code yang sudah jadi:

  • https://www.dropbox.com/s/bazynxife4k1trv/Hisoka.gcode?dl=0
  • https://www.dropbox.com/s/h6bkdr5lhegbj6a/papay.gcode?dl=0
  • https://www.dropbox.com/s/ueku5ckt6m4cmg4/spong1.gcode?dl=0

Terima kasih atas perhatian Anda! Kunjungi tautan ini untuk ilustrasi lengkap.

Video untuk melihat mesin secara langsung:

Kode

  • Kode CNC Arduino
  • Memproses kode
Kode CNC ArduinoArduino
Upload kode ini ke Arduino
#include #include #define LINE_BUFFER_LENGTH 512char STEP =MICROSTEP;// Posisi servo untuk Up and Down const int penZUp =95;const int penZDown =83; // Servo pada pin PWM 10const int penServoPin =10;// Seharusnya tepat untuk stepper DVD, tetapi tidak terlalu penting di siniconst int stepsPerRevolution =48; // membuat objek servo untuk mengontrol penServo servo Servo; // Inisialisasi stepper untuk sumbu X dan Y menggunakan pin Arduino ini untuk L293D H-bridgeAF_Stepper myStepperY(stepsPerRevolution,1); AF_Stepper myStepperX(stepsPerRevolution,2); /* Struktur, variabel global */struct point { float x; mengapung y; mengapung z; };// Posisi saat ini plotheadstruct point actuatorPos;// Pengaturan gambar, harus OKfloat StepInc =1;int StepDelay =0;int LineDelay =0;int penDelay =50;// Langkah motor untuk pergi 1 milimeter.// Gunakan sketsa tes untuk pergi 100 langkah. Ukur panjang garis. // Hitung langkah per mm. Masukkan di sini.float StepsPerMillimeterX =100.0;float StepsPerMillimeterY =100.0;// Menggambar batas robot, dalam mm// OK untuk memulai. Bisa naik hingga 50 mm jika dikalibrasi dengan baik. float Xmin =0;float Xmax =40;float Ymin =0;float Ymax =40;float Zmin =0;float Zmax =1;float Xpos =Xmin;float Ypos =Ymin;float Zpos =Zmax; // Setel ke true untuk mendapatkan output debug.boolean verbose =false;// Perlu ditafsirkan // G1 untuk bergerak// G4 P300 (tunggu 150 md)// M300 S30 (pena turun)// M300 S50 (pena up)/ / Buang apa pun dengan (// Buang perintah lain!/********************** * void setup() - Inisialisasi ******* ****************/void setup() { // Setup Serial.begin( 9600 ); penServo.attach(penServoPin); penServo.write(penZUp); delay(100); // Kurangi jika perlu myStepperX.setSpeed(600); myStepperY.setSpeed(600); // Atur &pindah ke posisi default awal // TBD // Notifications!!! Serial.println("Plotter CNC Mini hidup dan menendang! "); Serial.print("Rentang X dari "); Serial.print(Xmin); Serial.print(" ke "); Serial.print(Xmax); Serial.println(" mm."); Serial. print("Rentang Y dari "); Serial.print(Ymin); Serial.print(" sampai "); Serial.print(Ymax); Serial.println(" mm."); }/****** ***************** * void loop() - loop utama ***********************/void loop() { delay(100); char line[ LINE_BUFFER_LENGTH ]; karakter c; int barisIndeks; bool lineIsComment, lineSemiColon; indeks baris =0; barisSemiColon =salah; lineIsComment =salah; while (1) { // Penerimaan serial - Sebagian besar dari Grbl, menambahkan dukungan titik koma while ( Serial.available()>0 ) { c =Serial.read(); if (( c =='\n') || (c =='\r') ) { // Akhir baris tercapai if ( indeks baris> 0 ) { // Baris selesai. Kemudian jalankan! baris[ indeks baris ] ='\0'; // Hentikan string if (verbose) { Serial.print("Diterima :"); Serial.println( baris ); } processIncomingLine( baris, barisIndex ); indeks baris =0; } else { // Kosongkan atau baris komentar. Lewati blok. } lineIsComment =salah; barisSemiColon =salah; Serial.println("Oke"); } else { if ( (lineIsComment) || (lineSemiColon) ) { // Buang semua karakter komentar if ( c ==')' ) lineIsComment =false; // Akhir komentar. Lanjutkan baris. } else { if ( c <=' ' ) { // Buang spasi putih dan karakter kontrol } else if ( c =='/' ) { // Hapus blok tidak didukung. Abaikan karakter. } else if ( c =='(' ) { // Aktifkan tanda komentar dan abaikan semua karakter sampai ')' atau EOL. lineIsComment =benar; } else if ( c ==';' ) { lineSemiColon =true; } else if ( lineIndex>=LINE_BUFFER_LENGTH-1 ) { Serial.println( "ERROR - lineBuffer overflow" ); lineIsComment =salah; barisSemiColon =salah; } else if ( c>='a' &&c <='z' ) { // Huruf besar garis kecil[ lineIndex++ ] =c-'a'+'A'; } else { baris[ barisIndeks++ ] =c; } } } } }}void processIncomingLine( char* line, int charNB ) { int currentIndex =0; char buffer[ 64 ]; // Berharap 64 cukup untuk 1 parameter struct point newPos; pos baru.x =0,0; pos baru.y =0,0; // Perlu menafsirkan // G1 untuk bergerak // G4 P300 (tunggu 150 md) // G1 X60 Y30 // G1 X30 Y50 // M300 S30 (pena ke bawah) // M300 S50 (pena ke atas) // Buang apa pun dengan a ( // Buang perintah lain! while( currentIndex =Xmax) { x1 =Xmax; } jika (x1 <=Xmin) { x1 =Xmin; } jika (y1>=Ymax) { y1 =Ymax; } jika (y1 <=Ymin) { y1 =Ymin; } if (verbose) { Serial.print("Xpos, Ypos:"); Serial.print(Xpos); Serial.print(","); Serial.print(Ypos); Serial.println(""); } if (verbose) { Serial.print("x1, y1:"); Serial.print(x1); Serial.print(","); Serial.print(y1); Serial.println(""); } // Konversi koordinat ke langkah x1 =(int)(x1*StepsPerMillimeterX); y1 =(int)(y1*LangkahPerMillimeterY); float x0 =Xpos; mengapung y0 =Ypos; // Mari kita cari tahu perubahan koordinat long dx =abs(x1-x0); panjang dy =abs(y1-y0); int sx =x0 dy) { for (i=0; i=dx) { lebih-=dx; myStepperY.onestep(sy,STEP); } penundaan (Tunda Langkah); } } else { untuk (i=0; i=dy) { lebih-=dy; myStepperX.onestep(sx,STEP); } penundaan (Tunda Langkah); } } if (verbose) { Serial.print("dx, dy:"); Serial.print(dx); Serial.print(","); Serial.print(dy); Serial.println(""); } if (verbose) { Serial.print("Pergi ke ("); Serial.print(x0); Serial.print(","); Serial.print(y0); Serial.println(")"); } // Delay sebelum baris berikutnya dikirimkan delay(LineDelay); // Perbarui posisi Xpos =x1; Ypos =y1;}// Menaikkan penvoid penUp() { penServo.write(penZUp); penundaan (penDelay); Zpos=Zmaks; digitalWrite(15, RENDAH); digitalWrite(16, TINGGI); if (verbose) { Serial.println("Pena up!"); } }// Menurunkan penvoid penDown() { penServo.write(penZDown); penundaan (penDelay); Zpos=Zmin; digitalWrite(15, TINGGI); digitalWrite(16, RENDAH); if (verbose) { Serial.println("Pena turun."); } }
Memproses kodeJava
Unggah kode ini ke Processing IDE
import java.awt.event.KeyEvent;import javax.swing.JOptionPane;import processing.serial.*;Serial port =null;// pilih dan ubah baris yang sesuai untuk sistem operasi Anda/ / biarkan sebagai null untuk menggunakan port interaktif (tekan 'p' dalam program)String portname =null;//String portname =Serial.list()[0]; // Mac OS X//String nama port ="/dev/ttyUSB0"; // Linux//Nama port string ="COM6"; // Streaming Windowsboolean =false;kecepatan mengambang =0,001;String[] gcode;int i =0;void openSerialPort(){ if (portname ==null) return; if (port !=null) port.stop(); port =Serial baru (ini, nama port, 9600); port.bufferUntil('\n');}void selectSerialPort(){ String result =(String) JOptionPane.showInputDialog(frame, "Pilih port serial yang sesuai dengan papan Arduino Anda.", "Pilih port serial", JOptionPane. QUESTION_MESSAGE, null, Serial.list(), 0); if (hasil !=null) { portname =hasil; openSerialPort(); }}pengaturan batal(){ ukuran(500, 250); openSerialPort();}void draw(){ background(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 naik &halaman bawah:joging di sumbu z", 12, y); y +=hari; text("$:tampilkan 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 -=dy;}void keyPressed(){ if (key =='1') speed =0,001; if (kunci =='2') kecepatan =0,01; if (kunci =='3') kecepatan =0,1; if (!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 (!streaming &&kunci =='g') { gcode =null; 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."); } else { println("Pengguna yang dipilih " + seleksi.getAbsolutePath()); gcode =loadStrings(selection.getAbsolutePath()); if (gcode ==null) kembali; streaming =benar; sungai kecil(); }}void stream(){ if (!streaming) kembali; while (true) { if (i ==gcode.length) { streaming =false; kembali; } if (gcode[i].trim().length() ==0) i++; lain istirahat; } println(gkode[i]); port.write(gcode[i] + '\n'); i++;}void 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?}

Skema

hubungkan semua komponen seperti yang ditunjukkan pada gambar

Proses manufaktur

  1. Membuat Mesin Tulis Pekerjaan Rumah DIY di Rumah
  2. Membuat Monitor Ambilight Menggunakan Arduino
  3. Sistem Robotika Deteksi Manusia Menggunakan Arduino Uno
  4. Mainan yang Dikendalikan Android Menggunakan Raspberry Motor Shield
  5. Cara Membuat Tombol Keyboard Punchable yang Dapat Disesuaikan
  6. Cara Mengukur Massa Bumi Menggunakan Arduino
  7. Cara membuat situs web yang mengomunikasikan Arduino dengan menggunakan PHP
  8. Cara membuat musik dengan Arduino
  9. Cara membuat Pintu Otomatis Berbasis Arduino
  10. Cara Membuat Kompas menggunakan Arduino dan Mengolah IDE