Introduction: PCB Designing and Isolation Milling Using Only Free Software

Picture of PCB Designing and Isolation Milling Using Only Free Software

In this Instructable I will show you how to design and fabricate your own PCBs, exclusively using free software that runs on Windows as well as on a Mac.

Things you need:

  • computer with internet connection
  • cnc mill/router, the more accurate the better
  • 45°/20° V-Bit
  • 0.8mm drill bit
  • 3mm endmill
  • copper clad board
  • double-sided adhesive tape

Step 1: Get the Software

You need the following software:

Click on the links, download and install the software on your computer. Makercam doesn't need to be downloaded/installed since it runs directly in your browser.

Step 2: Designing in Fritzing

Picture of Designing in Fritzing

Start Fritzing and start a new sketch.

Go to breadboard view by clicking on the breadboard tab on the top of the window.

On the right side is your part-library, select the components you want in your circuit and drag&drop them into the breadboard window. Make sure the parts have the desired specs such as pinout, value and size. You can change these variables of the selected component in the Inspector to the lower right of your screen.

In this example I'm making a circuit that uses an Arduino Nano for switching a 12V relay. For this i need a transistor with a resistor to the base as well as a catch diode in parallel to the relay coil and two screw terminals.

The connections/wires between the components are made by clicking and dragging on a leg/pin of the component. Bendpoints in the wires can be made by clicking and dragging inside a wire.

Make all the connections you need and would do on a real breadboard for the circuit to work.

Step 3: Schematic View

Picture of Schematic View

Now navigate to the Schematic View.

You will see a wiring diagram with all your components and their connections. Tidy things up by dragging the components in a reasonable order and clicking and dragging the dashed connection lines so they're not intersecting themselves.

Step 4: PCB View

Picture of PCB View

Go to PCB View.

Drag your components in a reasonable order. A good rule of thumb is to place the components with the most pins to the center and the other components around. Try to get a compact distribution.

The parts lock automatically to the grid you see in the background. For changing the grid size go to View -> Set grid size.

Step 5: Autoroute

Picture of Autoroute

Click on Routing -> Autorouter/DRC settings and select custom production type. Now you can set the trace width to the desired thickness depending on your machine/endmill/circuit. I used 48mil. Click "OK".

Select the grey rectangle (the PCB Board) and in the Inspector change the layers-dropdown to "one layer (single sided)".

Now hit the Autoroute-button in the bottom of the window and let the computer do the routing work!

Step 6: Some More Routing

Picture of Some More Routing

When the Autorouting is complete, tidy up the traces by clicking and dragging their bendpoints. Right click on the bendpoint and select remove bendpoint for removing it.

Sometimes there are connections the Autorouter cannot route. You have to route them by hand by clicking and dragging the dashed connection lines. Use Jumpers from the parts library for jumping over traces you otherwise would intersect.

You can also add text/logos that will show up in the copper mask by dragging "Silkscreen Image" or "Silkscreen Text" from the library to your board. Select your logo and in the Inspector under Placement - pcb layer dropdown menu select "copper bottom". you can load your own .svg files too by clicking on "load image file" in the inspector.

Step 7: Check Your Circuit

Picture of Check Your Circuit

If you think you are ready with the routing click on Routing -> Design Rules Check for automatically checking your creation for missed connections / overlapping or intersecting traces.

Try to eliminate all errors and repeat the DRC until there are no more problems. Design is finished!

Export your PCB as .svg files by clicking on "Export for PCB" on the bottom. Click on the small arrow on the Export button and select "Etchable (SVG)".

You will get a bunch of svg's exported in your selected directory but we will only use two of them:

  • *yourfilename*_etch_copper_bottom_mirror.svg
  • *yourfilename*_etch_mask_bottom_mirror.svg

All other files can be deleted.

Step 8: Inkscape

Picture of Inkscape

Open the *yourfilename*_etch_copper_bottom_mirror.svg in Inkscape, select everything and repeatedly press ctrl+shift+g until everything is ungrouped.

Select view -> display mode -> outline. You will now see only the vectors without fill or stroke.

Select all traces and go to Path -> Stroke to Path.

Select all traces and go to Path -> Union.


The file is now ready for CAM!

The other .svg we exported from fritzing doesn't need to be processed in Inkscape.

Step 9: Makercam

Picture of Makercam

Open your browser and go to

Go to Edit -> Edit preferences and change the SVG Import default resolution to 90 ppi.

Go to File -> Open SVG file, navigate to your directory and select the "*yourfilename*_etch_copper_bottom_mirror.svg" file.

Step 10: Isolation Milling

Picture of Isolation Milling

Select all your traces (but not the inner circles of the pins) and go to CAM -> profile operation.

If your CNC is GRBL based you may want to do all CAM in makercam in imperial units (see here for further reference). So you have to convert all your millimeters to inches before typing them in.

If you're using a 45° V-Bit with 0.2mm tip for the isolation milling process and dive 0.25mm into the material, the effective tool diameter at the surface of your copper clad board is 0.39mm. This converts to 0,015354331 inches, Yayy!

As said, we want to go 0.25mm deep in the board, so we're typing -0.0098425197 inches as our target depth. The step-down value should be bigger than that so the cutter goes through in one single pass.

I found a feed rate of 150mm/min and a plunge rate of 50mm/min to be working well on my machine.

Click OK.

Step 11: Logo

Picture of Logo

Select the logo/text and go to CAM -> follow path operation.

For more detail in the logo, I used a 20° 0.2mm V-Bit. Since with this operation the center of your cutter follows the paths (as opposed to the profile operation where the "edge" of the cutter follows the path), it's not critical what you type in as for tool diameter.

Target depth is this time -0.2mm (for more detail).

All other values are the same as for the isolation milling.

Click OK.

Step 12: Contour Pass

Picture of Contour Pass

Now we want to cut our PCB out of the stock copper clad board.

Select the outer contour and type in the required values.

I used a 3mm 4-flute bit with a feed of around 400mm/min and a plunge of 50mm/min. Step down was 0.4mm.

Click OK.

Go to CAM -> calculate all.

Go to CAM -> export gcode.

Export every operation in a single file. Since every operation needs another tool, it's best to name the files after the tool.

Step 13: Drilling

Picture of Drilling

Reload the page so you're starting a "new project".

Open the "*yourfilename*_etch_mask_bottom_mirror.svg" file. Don't forget to change the SVG-scaling to 90ppi before doing so!

Select all holes.

Go to CAM -> drill operation.

I used a 0.8mm drill bit. My board was 1.5mm thick, so for a clean hole i used -2mm for the target depth. Peck distance should be bigger than this value for the drill to go through in a single pass. I used a plunge rate of about 50mm/min.

Click OK and all holes get automatically detected.

Go to CAM -> calculate all.

Export your gcode.

Step 14: Preparing the Machine

Picture of Preparing the Machine

Use some strips of double-sided tape to glue down the copper clad board to the spoilboard of your machine.

Make sure that this part of the spoilboard is completely level, for example you can level it with milling a pocket (just needs to be 0.5mm deep) into it.

Or use an autoleveller. For the GRBL users this can be done by using chilipeppr.

Step 15: Start Milling...

Picture of Start Milling...

Load the 45° V-Bit

The zero location of the gcode files is on the lower left corner and on top of the stock surface.

So navigate your machine near to the lower left corner of the stock and lower the spindle so the tip of the bit barely touches the surface. Set this as your zero location and start the isolation milling.

Step 16: ...drilling...

Picture of ...drilling...

Change the tool to a 0.8mm drill bit and set your new Z zero when the tip is touching the surface. Start drilling the holes.

Step 17: ...engraving

Picture of ...engraving

Change the tool to the 20° V-Bit and start the follow path operation for engraving the logo/text.

Step 18: Cut Out

Picture of Cut Out

The last step is to cut the PCB out of the stock material.

Use the 3mm endmill and the second profile operation to do so.

Step 19: Success!

Picture of Success!

There you go with your new homemade PCB!

If you're fast (and your design is not too complex) you can make it from idea to product in under 1h.

I hope this Tutorial helps you in your projects and if you want you can vote for me on the top of this page or here. Thank you!


sophiat23 (author)2017-09-15

This product is awesome on the grounds that we as a whole need to make something great and astounding for a decent things to do distribute of things

Hotline Miam Jacket
sophiat23 (author)2017-09-14

I qould love to do this, but I am a mac user and to use inkscape I would have to download XQuartz, which for me is not an option. Is there some other piece of software that does the same exact thing that can run on my mac without any extra software?
Cyborg Cosplay Jacket

sophiat23 (author)2017-09-14

Cool. Have you at any point taken a stab at utilizing EagleCAD (which is free for littler sheets) and after that dragging/dropping the Eagle BRD document coordinate into ChiliPeppr to process your board utilizing just 2 stages?

Justice League varsity Jacket
Tobiasmx (author)2017-08-24

So glad I found this thanks so much I have the same setup. Great job

JohnL29 (author)2015-05-18

Cool. Have you ever tried using EagleCAD (which is free for smaller boards) and then dragging/dropping the Eagle BRD file direct into ChiliPeppr to mill your board using only 2 steps?

jiminashland (author)JohnL292017-06-27

Great tip!


AustinM47 (author)2016-11-10

This software is great because we all need to make some thing good and amazing for a good things to do allot of things

rah187 (author)2016-09-18

Cool, but I have one question. I am not milling my board with a machine, but rather printing the PCB layout onto a plasic sheet and using it to make boards using the photoresist method. Unfortunautly my dry film is negative, meaning the background needs to be black and the traces need to be left alone. I have looked everywhere on the fritzing program and there doesn't seem to be a way to do this. Is there any way to make the background black and the traces white/transparent by using some other piece of software?

ähöüokul (author)rah1872016-09-19

You can do this easily in Inkscape. Just switch the black color to white and put a rectangle with a black fill in the background.

rah187 (author)ähöüokul2016-09-21

I qould love to do this, but I am a mac user and to use inkscape I would have to download XQuartz, which for me is not an option. Is there some other piece of software that does the same exact thing that can run on my mac without any extra software?

ähöüokul (author)rah1872016-09-23

Then you should get yourself a copy from Adobe Illustrator. Or Affinity Designer.

rah187 (author)ähöüokul2016-09-23

Does Adobe Illustrator have the same functions as Inkscape?

werose (author)2016-02-18

Good work

TaylorS17 (author)2015-10-05

Dude, Thank You! i have been trying to find a reliable way to produce G code that didn't involve a million steps for like a month. You sir are awesome!

Jocobs (author)2015-09-19

Did you build this cnc mill?

neuralfirings (author)2015-08-26

Can you explain this part?

"If you're using a 45° V-Bit with 0.2mm tip for the isolation milling process and dive 0.25mm into the material, the effective tool diameter at the surface of your copper clad board is 0.39mm. This converts to 0,015354331 inches, Yayy!"

I'm getting an effective diameter of 0.2879mm, not 0.39mm.

PhilipS14 (author)2015-08-04

thank you so much! that helped a great deal!

AlexCphoto (author)2015-07-08

I think the target depth on your screen cap is wrong,.. -2mm = -0.0787inch (not -0.787inch)

creator45 (author)2015-05-25

I want to ask how to select all but not the inner circles ...? how i can do that

ähöüokul (author)creator452015-05-25

There are 2 options:

- Press and hold shift while selecting the desired paths.

- Delete all inner circles in inkscape before going to makercam. There is a function where you select one object and inkscape automatically selects other object with the same object type/fill/stroke/color/line width/etc. In hindsight, this would be the better way to do it.

creator45 (author)ähöüokul2015-05-25

Thanks but i think you want to keep the iiner circles for the later drilling but you can also reload the projrct.Thanks anyway!!!!!:)

andrewharbert (author)2015-05-24

Very cool! Any insight in to the CNC part for a noob! Either online a good service or a cheap and easy home model?

bpark1000 (author)2015-05-20

You need to set up a vacuum cleaner on your machine. What I did was to get a plastic crevice tool, stuff the narrow part with rags, and heat it and bend it to almost 90 degrees. This is mounted behind and under the cutting head (not on the up/down moving part holding the motor/spindle) with the hose connection pointing up behind the spindle. I use a speed control to slow the vacuum somewhat to reduce wear and tear on the motor brushes. The dust from epoxy fiberglass circuit board is abrasive, so this will make your machine last longer and prevent clogging under the pressure foot, and you will always have a clear view of the cutting point.

strooom (author)2015-05-20

thanks for sharing this! great text and pictures.

pipala.yadav (author)2015-05-19

Great work......

alzie (author)2015-05-19

Very well done 'able.

Check out this service -

Though I m not afiliated with them,

Ive used their service a few times,

extremely good value.

adalziel (author)2015-05-19

Quick question: this method makes a barrier around the conducting strips rather than remove the rest of the copper like an etching method would. Have you found that your soldering had to be more precise or had any other difficulties with shorts?

adickson5 (author)2015-05-19

awesome, makes it easy for beginners like me!

dr.knowitall (author)2015-05-19

Nice instructable! Proper layout and informative. +1

What are you using as your spindle on your CNC?

diten (author)2015-05-19

Actually, GRBL (9i) on the Arduino already does that, You can check for yourself with A friend tryed just that and Spindle Pwm Control, on:

hasenbaby (author)2015-05-18

Even with your machine bed absolutely and perfectly level, you will usually end up with the board faulty.

The reason is simple: the PCB material itself is not really very even: the usual chemical process handles tolerances in thickness very well.

My solution is to make the Z-height follow the surface of the board. This is done by modifying the G-Code a little: prepend a measurement of the surface and replace all cuts with subroutine calls that automatically adjust for height.

I think that GRBL can not handle such code: the ATMEGA AVR just does not have enough RAM to suport this function. I use LinuxCNC for all my machines now, since it is so much more powerful and hackable.

A python implementation of the probe-and-Z-correct algorithm can be found at

I wrote that as a plug-in for LinuxCNC/Axis, but it should run separately as well.

Such automatic Z-adjustment can save you a lot of frustration, give it a go!

askjerry (author)hasenbaby2015-05-19

I have LinuxCNC on my machine... and I have a probe working very well now. I have been wondering how to probe a surface, save that data, and then combine it to offset my Z-Axis for some problems I have like this one. (Getting uniform lines on a surface not completely flat.) You might be interested to check my progress too...

Actually... I have to add a couple more videos and include my latest... if you can help me with this... I'll be sure to include it in the updates with proper credit of course.


hasenbaby (author)askjerry2015-05-19

Look at the coce I linked to.
This prepends the probing routine to the G-Code input and then does the milling in parallel to the probed surface profile.
By default I am using a 10x10 grid of probe points, but you could easily change that in the code. 10x10 gave me accuracy for my engraved traces below my capabilities for measurement: I can only resolve about 15 µm in my microscope.
My current code is somewhat specialized to engraving PCBs.
PCB etching G-Code moves the tool in the XY-plane while Z is constant and below 0; z=0 is assumed to be the surface of the copper plating.
My filter parses the input G-Code for any G01, assuming they are in the XY-plane. Calls G01 with negative Z are replaced by a call to a subroutine (O-code); the subroutine then does the engraving move with Z varied according to the probed surface (simple bilinear interpolation between the probe points).

My machine is grounded, but the ground connection of the tool is usually a bit wonky; I therefore use an alligator clip to connect the carbide engrave bit to ground. The PCB to be probed is put in the machine bed, electrically isolated. Im my case the isolation is a welcome side-effect of the rubber sheet on top of the vacuum table.
The PCB copper is then connected to the probe input pin, again by alligator clamp.
Between the probing and milling parts I simply insert an M1 (pause) code, remove the alligator clips and mill away.
This could be replaced by a tool change, swapping a mechanical probe for the mill bit.

I was thinking about exending the code to do engrave operations in general and have the tool follow the probed surface.
This would have to deal with variable-Z moves, and I have not yet found a realy use for that.
Instead of moifying my PCB-engrave code, I would probably finish debugging the almost-but-not-quite working Z-Compensation fond at
I really like Nicks idea to wire the Z-compenation into HAL.
His code actually works kind of; I was amazed how well the user-space Python (doing the Z-compenation) interacted with the realtime components.
But the code has issues and is error-prone to use: you have to manually remove the file where the measurements are stored befor creatign a new measurement, the on/off and "reset" functions worked wonky at best and I had strange issues with coordinate systems.
But that solution is worth a look as in peinciple it should be able to follow even (slightly) curved surfaces when engraving.

If I ever work on that again, I'll write about it somewhere near


ähöüokul (author)hasenbaby2015-05-19

In my case the board works perfectly. But you are right, the finer the traces get and the narrower the pins are together, the more important gets the accuracy and calibration of your machine. There are dozens of factors that influence the final result, for example overall rigidity of the machine, runout of the spindle, accuracy of the linear motion system, backlash in the drive system, warped stock material, dull endmills, etc....

If you want perfect results, you have to consider all these factors. But if you want to make a simple and not very complex functioning circuit with 48mil traces, perhaps a prototype and you don't want to spend ages figuring out the best settings, then you can do it the way i showed. Like everything, it all depends...

There are autolevellers for GRBL, too. For example in Chillipeppr or bCNC.

voblak (author)2015-05-19

fritzing is very crappy program for designig PCBs try KiCad

ähöüokul (author)voblak2015-05-19

Like i said, it all depends on what you want to make. I think for people who have never worked with such software, fritzing is a very good choice because of the graphical interface where you can simply drag your components on the breadboard and make wire connections as you would do in real life.

For beginners and simple circuits Fritzing is offering everything you need.

Konstantin Dimitrov (author)2015-05-18

I think that this instructable is very useful. I like it and I have one question, from where I can buy such CNC ?

he's using a shapeoko

ähöüokul (author)holla20402015-05-19

It's a shapeoko-esque homemade machine, but it uses the same hard- and software in general, some details are different:)

Powerbot. try and eBay search on "CNC 3020" they cost from $600 up. However if you are not used to cnc machines, think twice. I bought mine wondering how they worked and about a year later I had finally figured most things out. Guaranteed to fill in those spare hours

Nate Ocean (author)2015-05-19

Probably need a few comments about lung protection. The fiberglass dust from the routing process is bad to breath.

cverry (author)2015-05-18


Andsetinn (author)2015-05-18

Me like. :)

Vaseem Mehran CP (author)2015-05-18

Awsm ... (y)

Happymacer (author)2015-05-17

I like the clear instructions, thanks! I see you are using the Shapeoko? I hope to have mine working in the next few weeks and I'll try this!

KimJinWoo (author)2015-05-17

wow Great!

gada888 (author)2015-05-17

BIG thanks

acheide (author)2015-05-17

Thank you.

About This Instructable




More by ähöüokul:PCB designing and isolation milling using only free SoftwareLogitech X-230 concrete speaker modSpring loaded CNC Penholder for Rapidograph technical pens
Add instructable to: