Introduction: CNC G-Code Interpreter Using Processing

Hi guys, for years I'm trying to make my own CNC router so I can make PCB easier.

What I'm trying to make is a G code interpreter who can sends signals to an arduino board. So the arduino board can control a simple CNC router to draw a circuit over a PCB.

I hope this project inspirer some peoples to support, improve, and make this things gonna real.

Any suggestions, comments, bug, improvement, please send to me.


Step 1: The Processing Code.

The code is real simple. I generate an G file in Eagle Layout editor. Read this file in processing. And I move, or Draw, the lines.

On the next step I will shoe how to generate the G file, and use my code to draw the PCB on screen.

The file named as 12.txt is a G file to use as example.

The file named as "motor shield" is a example already routed on the eagle. You just need to generate the G-file.

The file named as "teste" is simple example already routed on the eagle. You just need to generate the G-file too.

Step 2: Generating the G File.

Open any project that you already made, or just download the example above.

Open the *.brd file.

Click on the CAM Processor icon, the one that looks like a movie film.

On the layer windows deselected all, and select only the Top OR Bottom layer. Make sure you deselected all other layer or my program will won't recognize the code.

Make sure that on the Style tab this check-box are checked. Mirror, Upside Down, pos. Coord.

Click on file button and save the file inside of your sketch folder. Something like this: C:/Users/Otavio/Documents/Processing/cnc/data/12.txt

Change my name for yours.

Then click on the "process job" button.

A warning message will appear, ignore it. Just click on OK.

Nice, if you do everything right. the file will be create, and locate inside the data folder of your sketch.

If you open the file you will see some codes like this one:

G01*
X000000Y000000D02*
D10*
X005919Y003615D02*
X005842Y003802D01*
X003086Y006558D01*

Ok, now on Run your sketch and see the results. It looks amazing, don't?

Step 3: Lets Check the Results.

On the images below you can see and compare both circuits.

I know that the pads aren't draw, but I intend to leave this part to the arduino board handle.

The part that send messages to arduino is not done yet.

Any suggestions are welcome.



Please guys, if you like it, rate it.

Comments

author
wombat99 made it!(author)2017-05-08

Hi all.

I know this is an old Instructable, but I'm hoping that someone is still watching this and can help me out.

I was able to get the Processing script to run (after deleting the first dozen or so lines as mentioned in other comments), however, every time I hit the <Run> button, the resulting image does not contain all of the lines. According to the console window, all of the commands are being processed, but the display simply does not display everything. I've attached some images to show you what's happening.

Any idea why some of the lines are not being displayed? Any idea on how to remedy this?

Thank you for your time.

CNC G-Code Interpreter - 001.jpgCNC G-Code Interpreter - 002.jpgCNC G-Code Interpreter - 003.jpg
author
lamia1991lamia made it!(author)2017-02-06

hello friends i have problem in my processing i need a solution please

Captureg.PNG
author
mmebra made it!(author)2015-10-13

hay bros , lovely work 'bravo )

can you gives me the basics of your project !

like :

how you can progrm the GUI and what did you used to make the arduino sketch :)

thank you in avnc :)

author
otaviousp made it!(author)2015-10-13

Hey,

Thank you for the feedback.

About the GUI I used the Processing IDE. Is much like the Arduino IDE.

About the Arduino Sketch, i did not understand your question.

Sorry my bad English.

author
shashank318 made it!(author)2015-10-16

Can you send the link of IDE you used.

author
shashank318 made it!(author)2015-10-16

Can you please tell me which software you are using for processing generated G code. i don't know much about it. Please reply fast.

author
pmagalh%C3%A3es made it!(author)2014-05-14

Oi Otavio tudo bem ?

Sou de Belo Horizonte e estou como bolsista em um programa da faculade em que colaboro na construção de uma fresadora. Estamos tentando desenvolver sua terceira versão e uma das demandas é que ela seja controlada diretamente pela interface Rhinoceros 3D + Grasshopper. Usando o plugin Firefly para o Grasshopper consegui mandar o GCode direto para a máquina, mas estou tento problemas na geração do código. Gostaria de saber como você tem se saido nas tentativas de criar uma forma direta de exportar o g-code para o Arduino sem intermédio de softwares controladores. Se for conveniente podemos conversar por Facebook. Meu nome Pedro Henrique Figueiredo Magalhaes.

Um abs !

author
otaviousp made it!(author)2014-05-15

Beleza Pedro,

Faz tempo que nao volto para esta area, mas deve ter evoluido bastante.

Tem uma versao que se nao me engano é a Mendel http://reprap.org/wiki/Mendel, o gcode é salco em cartao SD e um arduino le o gcode e executa o comando.

Abraço

author
ideal_izzet made it!(author)2014-04-17

1- i cant download (other files)FVY088TFZNHOWHW.tmp

2-your pde doest work

author
otaviousp made it!(author)2014-04-22

1 rename the file to .pde

2 what is the error?

author
omdiferit made it!(author)2013-06-01

When i run the program i get an unexpected char 'i' too. How have you fixed nerdling?

author
The+nerdling made it!(author)2013-03-06

whenever i try your code all i get is unexpected char: 'i'
what should i do?

author
otaviousp made it!(author)2013-04-13

Can you explain better your problem?

author
The+nerdling made it!(author)2013-04-13

never mind i fixed it
thanks anyway

author
vsbora made it!(author)2012-08-20

Hello , i´m tryimg to download the cnc.pde file but it only downloads a temp file, can anybody helpme? my email is virendrasingh.bora@gmail.com ,
I am trying to arduino understand my GCODE .

author
otaviousp made it!(author)2012-08-22

Just try to rename the extension of the file from .tmp to .pde

Regards

author
mgingerich made it!(author)2012-08-02

Nice project! This gives me hope because I plan to write the same sort of thing for the propeller microcontroller.

author
BANAELECTRONICO made it!(author)2012-03-17

Hello!! greatproyect!!, i´m tryimg to download the cnc.pde file but it only downloads a temp file, can anybody helpme? my email is aliasthesmileyboybana@hotmail.com i´m tryin to do a 3d printer and router :)

author
BANAELECTRONICO made it!(author)2012-03-18

Hello Hello i make some variatios to the Code, and now ir works well, i got some trobles with the original one, there is my version, thank you Octaviusp :)


void setup()
{
size(1000,1000);
background(0);


}
int ESCALA = 2;
int offsetx=0,offsety=0;

void draw()
{
String lines[] = loadStrings("12.txt");
for(int i=3;i String[] strx = split(lines[i], 'X');
int[] x=int (split(strx[1],'Y'));
strx = split(strx[1],'Y');
int[] y=int (split(strx[1],'D'));
strx = split(strx[1],'D');
int[] d= int (split(strx[1],'*'));
println(x[0]);
println(y[0]);
println(d[0]);
if(d[0]==2) move((x[0]/100*ESCALA),(y[0]/100*ESCALA));
if(d[0]==1) anda(x[0]/100*ESCALA,y[0]/100*ESCALA);

}
}

void move(int x1,int y1){
println("move");
strokeWeight(5);
stroke(255);
point(x1,y1,0);
offsetx=x1;
offsety=y1;
println(x1);
println(y1);
println("fin move");
}

void anda(int x,int y){
int countx=offsetx,county=offsety;

smooth();
strokeWeight(2.0);
strokeCap(ROUND);
line(countx,county,x,y);
offsetx=x;
offsety=y;
}

author
hondaman900 made it!(author)2011-10-03

Can you post your Processing code? The .PDE file is an Arduino sketch, and not the Processing code. Thanks, or please e-mail to hondaman900@gmail.com.

author
otaviousp made it!(author)2011-10-03

The file "cnc.pde" is the processing code. There is no Arduino sketch on this example yet.

author
hondaman900 made it!(author)2011-10-03

But the cnc.pde uses non-Processing Arduino statements, and wants to include Stepper.h, which is an Arduino include. Also, #include is an Arduino-only statement. Processing uses "import". So I'm pretty sure it's not a Processing sketch and would love to see the Processing code.

Also, did you make further progress with this project since you built the Instructable?

Thanks in advance

author
otaviousp made it!(author)2011-10-03

void setup()
{

size(700,700);

}
int ESCALA = 2;
int offsetx=0,offsety=0;

void draw()
{
String lines[] = loadStrings("14.txt");

for(int i=3;i String[] strx = split(lines[i], 'X');
strx = split(strx[1],'Y');
String[] stry = split(strx[1],'D');
String[] D= split(stry[1],'*');

if(int(D[0])==2) move(int(strx[0])/100*ESCALA,int(stry[0])/100*ESCALA);
if(int(D[0])==1) anda(int(strx[0])/100*ESCALA,int(stry[0])/100*ESCALA);

}

while(true){
}
}

void move(int x,int y){
strokeWeight(5.0);
offsetx=x;
offsety=y;
println(" moveu");
//point(x,y);
}

void anda(int x,int y){
int countx=offsetx,county=offsety;

smooth();
strokeWeight(2.0);
strokeCap(ROUND);
line(countx,county,x,y);

offsetx=x;
offsety=y;
}

author
otaviousp made it!(author)2011-10-03

Just remove the commented part.

author
Arduino+Guy made it!(author)2011-03-24

I am currently building a CNC machine and this is really helpful, but when will the arduino sketch be done? and has anyone done something similar? Thanks.

author
oshondrom made it!(author)2010-11-17

can you send me those files at oshondrom@gmail.com
i love your project!

author
ivansg made it!(author)2010-10-29

Cool project!
Bom ver que é do brasil!
Quando terminar minha CNC, irei testar...
Abraço

author
Grumpy+Mike made it!(author)2010-07-14

The CNC.pde code is no such thing it is just the standard Arduino example of follow a pot with a stepping motor code.

author
otaviousp made it!(author)2010-07-14

Actually my code is based on the Arduino example but with a graphic interface.

author
marcos1971 made it!(author)2010-03-28

Ola parabéns pelo teu trabalho, mas download dos arquivos não funciona, se puderes por favor enviar para meu email. marcossilvabrasil@hotmail.com

abraço e obrigado

author
BadWolf+Corp made it!(author)2009-11-29

file download ain't working
can you send me those files at
jordan2_delta@hotmail.com please
thanks

author
otaviousp made it!(author)2009-11-29

just try to rename the file you download.
anyway, I will send it t tou,
cya

author
jeff-o made it!(author)2009-09-17

So, is the goal to draw the circuit using an etch-resist pen on the board, or to run a mill that carves out everything BUT the traces? Just wondering. Someday I'll have a CNC machine of my own, too...

author
otaviousp made it!(author)2009-09-17

Im think using a PEN the same pen you use to draw the circuit on hand. The milling process is a little different, we have to drill on the edge of the trace. But, it can possible to do with a code modification.

author
jeff-o made it!(author)2009-09-17

Ah, ok. I'd definitely push for the cnc mill solution in that case...

author
sammyBoy made it!(author)2009-09-17

I've also been toying with CNC for a while and I was thinking of using my *duino as a control board. I'm going to have a play with your code over the week-end. Looks good, nice instructable.

author
otaviousp made it!(author)2009-09-17

nice, please let me know what you think about the code, and if it is possible to use it.

About This Instructable

89,112views

95favorites

License:

More by otaviousp:CNC G-Code Interpreter using ProcessingHow to connect Arduino and RFIDAngle measurement using gyro, accelerometer and Arduino
Add instructable to: