Arduino Mini CNC: 8 trin (med billeder)

Arduino Mini CNC: 8 trin (med billeder)

Indholdsfortegnelse:

Anonim

Hej venner, i dette projekt vil vi tale om at gøre beskadigede dvd- og cd-rom-drev genbrugt og producere cnc til lave omkostninger. Lad os begynde at bygge det mini cnc-projekt, der trækker

forsyninger:

Trin 1: Materialer

  1. Arduino (kan være nano, uno eller mega)
  2. Beskadiget DVD eller CD-ROM (Stepper motorens inderside kører)
  3. 2 stykker af skadet dvd eller cd-rom (stepper motorens inderside kører)
  4. Servomotor (Mg90 er nok)
  5. 5v 2 amp batteri eller adapter
  6. Plexi plade med 20 x 16 cm og 5 mm tykkelse for at holde X-aksen.
  7. Plexi plade 15 x 16 cm og tykkelse 5 mm for at sikre Y-aksen
  8. Du kan bruge en plexi-plade på 75 × 75 mm og en tykkelse på 5 mm til tegningsfladen.
  9. 1 stk. M5 boltmøtrik (til fastgørelse af pladen)
  10. 14 stk. M4 boltmøtrik

Trin 2: Front og bagside Oversigt over Mini Cnc og forklaringer af dens dele

  1. X plane Plexi Plate (200x150x3 mm)
  2. Y-plan Plexi Plate (200x150x3 mm)
  3. X-akse bevægelsesmekanisme (dvd drive yard mekanisme)
  4. Y-akse bevægelsesmekanisme (dvd drive yard mekanisme)
  5. Z flyafsnit
  6. Servomotor
  7. Blyant holder
  8. Penfastgørelsesmøtrik - skruearrangement (1 stk. M5 boltmøtrik)
  9. Pen
  10. Tegnebord (75x75x5 mm plexi plade)
  11. Akse understøtter og skruemøtrikker
  12. Stepping motor til X-akse bevægelse
  13. Stepping motor til Y-akse bevægelse
  14. Papirklip for at sikre papiret
  15. 14 stk. M4 boltmøtrik
  16. Penholder support
  17. Z-aksen
  18. Kabler
  19. 4 vinkler
  20. Kontrolenheden (Arduino uno, 2 l239d, pertinaks, energiindgangsstik)
  21. USB-kabel til computerforbindelse

Trin 3: Mekanisk del

Vi vil bruge delen med den mekaniske del DVD eller skinne systemet inde i Cd-R0m-drevet. I dette afsnit er steppermotoren forbundet med ormen skrueakslen og bevæger den del af laserlæseren, som er forbundet til akslen, ved at dreje akslen. Vi fjerner denne del uden skade. På samme måde er den anden driver også demonteret og i alt to stepper motor systemer installeret. Hvis du bruger DVD-Rom, kan du også lave laserskærer med sine laserdioder. Dette er de mekaniske dele, der bevæger akserne. Vi vil udtrække andre mekaniske dele fra 3D-printeren.

Du kan downloade dele stl filer her >>

Trin 4: Elektronisk sektion

I vores elektroniske system vil vi forbinde de to steppermotorer, der bevæger x- og y-aksen og en servomotor, som løfter og sænker dysen.

Trin 5: Arduino Code Part

#omfatte

#omfatte

#define LINE_BUFFER_LENGTH 512

const int kalem_kaldir = 130;

const int kalem_indir = 40;

const int kalem_servo_pin = 12;

const int adim_sayisi = 20;

const int hareket_hizi = 250;

Servo kalem_servo;

Stepper y_ekseni (adim_sayisi, 3,4,5,6);

Stepper x_ekseni (adim_sayisi, 9,10,11,12);

float x_adim_mm = 6.0;

flyde y_adim_mm = 6,0;

struct point {float x; flyde y; float z; };

struct point actuatorPos;

float StepInc = 1;

int StepDelay = 0;

int LineDelay = 50;

int penDelay = 50;

flyde Xmin = 0;

flyde Xmax = 40;

flyde Ymin = 0;

flyde Ymax = 40;

flyde Zmin = 0;

flyde Zmax = 1;

flyde Xpos = Xmin;

float Ypos = Ymin;

float Zpos = Zmax;

boolean verbose = false;

void setup () {// Setup

Serial.begin (9600);

kalem_servo.attach (kalem_servo_pin);

kalem_servo.write (kalem_kaldir);

forsinkelse (200);

x_ekseni.setSpeed ​​(hareket_hizi);

y_ekseni.setSpeed ​​(hareket_hizi);

Serial.println ("Çizim Yapan Mini CNC!");

Serial.print ("X min");

Serial.print (Xmin);

Serial.print ("den");

Serial.print (Xmax);

Serial.println ("mm.");

Serial.print ("Y min");

Serial.print (Ymin);

Serial.print ("den");

Serial.print (Ymax);

Serial.println ("mm.");

}

void loop () {

forsinkelse (200);

char line LINE_BUFFER_LENGTH;

char c; int lineIndex;

bool lineIsComment, lineSemiColon;

lineIndex = 0;

lineSemiColon = false;

lineIsComment = false;

mens (1) {

mens (Serial.available ()> 0) {

c = Serial.read ();

hvis ((c == ' n') || (c == ' r')) {

hvis (lineIndex> 0) {

linje lineIndex = ' 0';

hvis (verbose) {

Serial.print ("Alıcı:");

Serial.println (linje);

}

processIncomingLine (linje, lineIndex);

lineIndex = 0; }

ellers {

// Tøm eller kommentarlinje. Spring over blok.

}

lineIsComment = false;

lineSemiColon = false;

Serial.println ("ok");

}

ellers {

hvis ((lineIsComment) || (lineSemiColon)) {

hvis (c == ')') lineIsComment = false;

} ellers {

hvis (c <= '') {

}

ellers hvis (c == '/') {

}

ellers hvis (c == '(') {

lineIsComment = true;

}

ellers hvis (c == ';') {

lineSemiColon = true;

}

ellers hvis (lineIndex> = LINE_BUFFER_LENGTH-1) {

Serial.println ("Yazma Hatası");

lineIsComment = false;

lineSemiColon = false;

} ellers hvis (c> = 'a' && c <= 'z') {

linje lineIndex ++ = c-'a '+' A ';

} ellers {

linje lineIndex ++ = c; }}}}}}

void processIncomingLine (char * line, int charNB) {

int nuværendeIndex = 0; char buffer 64;

struct point newPos;

newPos.x = 0.0;

newPos.y = 0.0;

mens (currentIndex <charNB) {

switch (linje currentIndex ++) {

sag 'u':

penup ();

pause;

sag 'D':

pendown ();

pause;

sag 'G':

buffer 0 = linje currentIndex ++;

buffer 1 = ' 0';

switch (atoi (buffer)) {

sag 0:

sag 1:

char * indexX = strchr (linje + currentIndex, 'X');

char * indexY = strchr (linje + currentIndex, 'Y');

hvis (indexY <= 0) {

newPos.x = atof (indexX + 1);

newPos.y = actuatorPos.y;

} ellers hvis (indexX <= 0) {

newPos.y = atof (indexY + 1);

newPos.x = actuatorPos.x; }

ellers {newPos.y = atof (indexY + 1);

indexY = ' 0'; newPos.x = atof (indexX + 1); }

drawLine (newPos.x, newPos.y);

// Serial.println ("ok");

actuatorPos.x = newPos.x;

actuatorPos.y = newPos.y;

pause; }

pause; sag 'M':

buffer 0 = linje currentIndex ++;

buffer 1 = linje currentIndex ++;

buffer 2 = linje currentIndex ++;

buffer 3 = ' 0'; switch (atoi (buffer)) {

sag 300: {char * indexS = strchr (linje + currentIndex, 'S');

float Spos = atof (indexS + 1);

hvis (Spos == 30) {penDown ();

} hvis (Spos == 50) {

penup (); } pause;

} sag 114:

Serial.print ("Tam Pozisyon: X =");

Serial.print (actuatorPos.x);

Serial.print ("- Y =");

Serial.println (actuatorPos.y);

pause; Standard:

Serial.print ("Komut Tanınmadı: M");

Serial.println (buffer); }}}

}

void drawLine (float x1, float y1) {

hvis (verbose) {Serial.print ("fx1, fy1:");

Serial.print (x1); Serial.print ("");

Serial.print (y1); Serial.println (""); }

hvis (x1> = Xmax) {x1 = Xmax; }

hvis (x1 <= Xmin) {x1 = Xmin; }

hvis (y1> = Ymax) {y1 = Ymax; }

hvis (y1 <= Ymin) {y1 = Ymin; }

hvis (verbose) {Serial.print ("Xpos, Ypos:");

Serial.print (XPOS); Serial.print ("");

Serial.print (Ypos); Serial.println (""); }

hvis (verbose) {Serial.print ("x1, y1:");

Serial.print (x1); Serial.print ("");

Serial.print (y1); Serial.println (""); }

x1 = (int) (x1 * x_adim_mm); y1 = (int) (y1 * y_adim_mm);

float x0 = Xpos; float y0 = Ypos; lang dx = abs (x1-x0); lang dy = abs (y1-y0); int sx = x0

længe jeg; lang over = 0;

hvis (dx> dy) {for (i = 0; i = dx) {over- = dx; y_ekseni.step (sy); }

forsinkelse (StepDelay); }} ellers {for (i = 0; i = dy) {over- = dy; x_ekseni.step (sx); } forsinkelse (StepDelay); }}

hvis (verbose) {Serial.print ("dx, dy:"); Serial.print (dx); Serial.print ("");

Serial.print (dy); Serial.println (""); }

hvis (verbose) {Serial.print ("Gå til ("); Serial.print (x0); Serial.print (","); Serial.print (y0); Serial.println (")"); }

forsinkelse (LineDelay);

Xpos = x1; Ypos = y1; }

void penUp () {kalem_servo.write (kalem_kaldir); forsinkelse (LineDelay);

Zpos = Zmax; hvis (verbose) {Serial.println ("Pen up!"); }}

void penDown () {kalem_servo.write (kalem_indir);

forsinkelse (LineDelay); Zpos = Zmin; hvis (verbose) {

Serial.println ("Pen down."); }}

Trin 6: Behandlingskode

importer java.awt.event.KeyEvent;

importer javax.swing.JOptionPane;

import processing.serial. *;

Seriel port = null;

String portname = null;

boolsk streaming = false;

flydehastighed = 0,001;

String gcode; int i = 0;

void openSerialPort () {

hvis (portnavn == null) returnere;

hvis (port! = null) port.stop (); port = nyt serielt (dette, portnavn, 9600); port.bufferUntil (' n'); }

void selectSerialPort () {

String resultat = (String) JOptionPane.showInputDialog (ramme, "Vælg den serielle port, der svarer til dit Arduino bord.", "Seriel port seç", JOptionPane.QUESTION_MESSAGE, null, Serial.list (), 0);

hvis (resultat! = null) {portname = resultat; openSerialPort (); }}

tomrumsopsætning () {størrelse (500, 250); openSerialPort (); }

void draw () {background (0);

position (255); int y = 24, dy = 12; tekst ("Menuler", 12, y);

y + = dy; tekst ("p: seriel port seç", 12, y); y + = dy;

tekst ("1: hız 0.001 inch", 12, y); y + = dy; tekst ("2: hız 0,010 inch", 12, y); y + = dy;

tekst ("3: hız 0.100 inch", 12, y); y + = dy; tekst ("Yön Tuşları: x-y Düzlemi", 12, y);

y + = dy; tekst ("Sayfa aşağı-yukarı: z exen", 12, y); y + = dy;

tekst ("$: grbl ayarlar", 12, y); y + = dy; tekst ("h: Başlangıç ​​Konumu", 12, y); y + = dy;

tekst ("0: Güncel Konum", 12, y); y + = dy; tekst ("g: g-kode dosya seç", 12, y);

y + = dy; tekst ("x: Çizimi Durdur", 12, y); y + = dy; y = højde - dy;

tekst ("güncel hız:" + speed + "adım", 12, y); y - = dy;

tekst ("güncel seriel port:" + portnavn, 12, y); y - = dy; }

void keyPressed () {if (key == '1') speed = 0.001; hvis (nøgle == '2') hastighed = 0,01;

hvis (nøgle == '3') hastighed = 0,1; hvis (! streaming) {

hvis (keyCode == LEFT) port.write ("G91 nG20 nG00 X-" + hastighed + "Y0.000 Z0.000 n");

hvis (keyCode == RIGHT) port.write ("G91 nG20 nG00 X" + hastighed + "Y0.000 Z0.000 n");

hvis (keyCode == UP) port.write ("G91 nG20 nG00 X0.000 Y" + hastighed + "Z0.000 n");

hvis (keyCode == DOWN) port.write ("G91 nG20 nG00 X0.000 Y-" + hastighed + "Z0.000 n");

hvis (keyCode == KeyEvent.VK_PAGE_UP) port.write ("G91 nG20 nG00 X0.000 Y0.000 Z" + hastighed + " n");

hvis (keyCode == KeyEvent.VK_PAGE_DOWN) port.write ("G91 nG20 nG00 X0.000 Y0.000 Z-" + hastighed + " n");

hvis (nøgle == 'h') port.write ("G90 nG20 nG00 X0.000 Y0.000 Z0.000 n"); hvis (nøgle == 'v') port.write ("$ 0 = 75 n $ 1 = 74 n $ 2 = 75 n"); // hvis (nøgle == 'v') port.write ("$ 0 = 100 n $ 1 = 74 n $ 2 = 75 n");

hvis (key == 's') port.write ("$ 3 = 10 n"); hvis (key == 'e') port.write ("$ 16 = 1 n"); hvis (key == 'd') port.write ("$ 16 = 0 n");

hvis (nøgle == '0') openSerialPort (); hvis (nøgle == 'p') selectSerialPort (); hvis (nøgle == '$') port.write ("$$ n"); }

hvis (! streaming && key == 'g') {gcode = null; i = 0; Fil fil = null; println ("Indlæser fil …"); selectInput ("Vælg en fil, der skal behandles:", "FileSelected", fil); } hvis (nøgle == 'x') streaming = false; }

void fileSelected (Filvalg) {if (selection == null) {println ("Vinduet blev lukket, eller brugeren slog annullere."); }

ellers {println ("Bruger valgt" + selection.getAbsolutePath ());

gcode = loadStrings (selection.getAbsolutePath ()); hvis (gcode == null) returnere;

streaming = true; strøm(); }}

void stream () {hvis (! streaming) returnerer; mens (true) {if (i == gcode.length) {

streaming = false; Vend tilbage; } hvis (gcode i.trim (). længde () == 0) i ++; ellers pause; }

println (gcode i); port.write (gcode i + ' n'); i ++; }

void serialEvent (Serial p) {String s = p.readStringUntil (' n'); println (s.trim ());

hvis (s.trim (). starter med ("ok")) stream ();

hvis (s.trim (). starter med ("fejl")) stream (); // XXX: virkelig? }

Trin 7: INKSCAPE SETTINGS

For at få gccode output med INKSCAPE, skal du først downloade Gb code plugin her makerbot enhjørning >> Inkscape gcode plugin

İnkscape fuld indstilling og detaljer af projektet >> Arduino cnc projekt

Trin 8: Venligst, Stem på projektet:)

Jeg deltog i konkurrencen i CNC og 3D Design CONTEST 2016. Jeg venter på din stemme. Du kan stemme ved at klikke på "stemme" knappen øverst til højre. Tak på forhånd:)