Introduction: Custom PCBs on a CNC Router

About: I've been blessed lately to be able to share some of what I've learned and made. I make custom software for a living. I make custom things for myself and others. I make custom gadgets for fun. In my profession…

I bought a CNC router last spring to do some woodworking and to mill aluminum. I'm also an obsessive electronics tinkerer, and I later realized that I had inadvertently taken my tinkering abilities to another level when I added the router to my shop.

Unfortunately, simply knowing that I could use the router to make my own Printed Circuit Boards (PCBs) wasn't sufficient to make them suddenly appear in front of me. There's a reasonably steep learning curve. Also, I had zero previous experience in producing or thinking about how to produce a PCB. There is a fair amount of information on the Internet, but it's pretty fragmented, and it took me a while to find everything I needed and put it together in a way that made it possible to go from start to finish. I hope to remedy that problem for others with this Instructable.

This will go step-by-step through the process of creating your own PCB from nothing but your imagination (and hopefully at least a little electronics know-how). A very basic outline of the process looks like this:

  1. Design your PCB in Fritzing to generate "gerber" files
  2. Turn the gerber files into gcode using FlatCAM
  3. Send gcode to the router using Universal Gcode Sender (or any gcode sender) to cut a PCB

Everything except the tools and raw materials for this project are free, and all the software is cross-platform. What a wonderful world.

Before we get to it... I know that this is a fairly long Instructable with lots of words. I contemplated starting it, “Call me Ishmael.” If making a custom PCB is something you want to do, don't get discouraged - work through all of the steps. I haven't found another guide that goes all the way through the entire process, so I think this is the place you want to be if you're getting started. The "lots of words" aspect comes from the fact that there are a lot of choices to be made along the way. Also, carving a PCB is a complicated and technical process, and I want to provide you with enough detail so that you can walk away feeling confident that you know what you're doing. Once you have gone through the steps two or three times and have a basic understanding of what you're doing, it's actually quite simple. Believe it or not, I am able to perform this entire process, start to finish, in about an hour - and without referring to any documentation. You'll be able to do the same before long.

So, let’s get started with the Moby Dick of Instructables about producing a PCB with a CNC router!

Step 1: Ask Yourself, "Why?"

Why am I doing this, and why should you (or should you)? If you already know that you want to do this and don’t care why I’m doing it, skip this. I’ll never know.

I am a software developer by profession, but I have been fascinated with electronics hardware since I was very young. In recent years, the introduction of the Raspberry Pi and Arduino platforms has put electronics that can interact with the physical world within reach of people like me (and probably you, too).

The natural place to begin working with these cool little gizmos is to prototype on solderless breadboards. That's fine and dandy, but obviously isn't permanent. I needed to move on to something that is.

The pictures show a progression of projects from breadboard to perfboard. Even on a breadboard, projects can quickly get big, ugly and unmanageable (see second image). Soldering components and wires onto a perfboard (third and fourth images) was my first step at making the projects permanent. But perfboards aren't without problems. Here are the main issues I had:

  1. First and foremost, it takes a long time to wire one of these. The fourth image took me about 4 hours to solder (admittedly, I am a little slow)! Soldering the same project into a custom PCB takes me about 10-15 minutes.
  2. It tends to break. When you have many wires running all over the place, something is bound to pop loose eventually. With a custom PCB, you eliminate the wires, thus removing the typical points of failure for most perfboard projects.
  3. Maybe this should be first and foremost... It's not repeatable. If I ever want to create another one of the same thing, or make improvements to one that exists, I start from scratch. As a result, I never ended up updating my perfboarded projects, and that's sad. In contrast, the fifth image is a custom PCB that I made that went from version 4 to version 8 in less than 2 days, and with fewer than 3 hours of my actual attention.
  4. Functionally, perfboard projects are OK, but aesthetically, not so much. If you're going for "mad scientist," you've accomplished your goal! However, if you want something neat, clean and robust, the perfboard isn't for you.

My goals were to be able to repeat my PCB projects and minimize the time it takes to refactor the design to produce updates. In doing so, I am also creating a better looking PCB that is more reliable.

In short, absolutely everything about this is better. If you own a CNC router and need a PCB, I can't think of a compelling reason to produce it in any other manner. Parenthetically, I know that there are other methods of producing custom PCBs, but I didn't want to start playing with etching acids or any of the (much more dangerous) chemicals involved in additive production processes.

Now, let's talk about equipment.

Step 2: Tool Up

In order to cut a PCB on a CNC router, you will obviously need a CNC router.

Which router? Just about any CNC router will be capable of cutting a PCB, but the number of boards that get ruined along the way and the ultimate quality of the output is going to be highly dependent on the properties of your router. If you haven't chosen one yet, I highly recommend the E3 from BobcCNC (second picture). It's a little more expensive than some others at the "consumer" level, but is a significantly better build than others I have seen. It’s definitely a cut above everything else at its price level (I am not affiliated with the manufacturer in any way, nor am I receiving anything for the endorsement - I'm just a happy customer). The third picture shows a router that I currently have stored in a cupboard (I am not a happy customer of that manufacturer). It's a typical sub-$400 CNC router. I have used it for cutting PCBs, but I don't do so unless I'm in some sort of pinch because the spindle motor vibrates, which causes burrs in the cuts, and that means extra manual post-routing clean-up. If you do this a lot or have other things for which you need a CNC router, you won't be sorry if you spend extra money to get a better router. Specifically, one that has a real Alternating Current router attached. Bottom line: Just about any CNC router will work, but you will get better results the less your machine vibrates and the less “play” it has in the X and Y axes. Cheaper routers with DC spindle motors tend to have those specific problems.

What software do I need? There are lots of options, but I am a big fan of Open Source software, and there are good OSS choices. For this Instructable, I use Fritzing to design the board, FlatCAM for generating the gcode files that the CNC router needs, and Universal Gcode Sender to pass the gcode to the router. All of these will run on Windows, Linux and macOS with the exception of FlatCAM. It does not currently run on macOS (not easily, anyway). If you're a Mac user, I suggest running FlatCAM in a Linux virtual machine. If you don’t already have a Linux Virtual Machine setup and don’t know how to do it, here's an Instructable for you.

I chose the best software options for my selection criteria, which was primarily to get from start to finish successfully for the first time, then figure out how to best repeat that process. These software choices will do the same for you without barriers related to budget or Operating System.

What bits do I need? I have spent a few months experimenting with bits. When I buy bits, I buy cheap ones in quantity, so I cannot comment on which expensive bits are better than others. I prefer to have bits that I can think of as disposable, and I am not upset when one gets dull or breaks and needs to be thrown away. When I cut a PCB, I use three different bits:

  1. Isolation routing of traces and pads is done using a 0.2mm, 20º, titanium coated carbide, V-shaped engraving bit. I've tried quite a few variations, and this is the combination that's given me the most consistent results. (Amazon link)
  2. Drilling of through-holes is done with a 0.5mm, titanium coated carbide straight bit. Since some of the through-holes are as small as 0.6mm, this requires a very small straight bit. (Amazon link) You can’t use a V-shaped bit to drill through-holes for reasons that I hope are obvious if you’ve ever see a V-shaped bit, so a very small straight bit is the only choice.
  3. Clearing excess copper from the board, drilling mounting holes, and cutting the board loose takes a 1.5mm straight bit. Going larger on this will speed up production, but you will have more manual clean-up when you're done. Going smaller makes everything take longer, and smaller bits are much more fragile. 1.5mm is the size where I'm happy. (Amazon link)

I have tried quite a lot of ways to cut these boards using only one or two bits, but never with satisfactory results. So, three it is.

What other materials will I need? There are a couple consumables and one more tool you will need to get this going.

  1. Copper-clad PCB. Obviously, you're going to need some blank PCBs to start cutting. Just in case you're not familiar with CNC terminology (or maybe I made it up, I'm not sure), I will commonly refer to a blank copper board as "stock." For the projects I do, I use "single-sided, copper-clad PCB." (Amazon link) Do a search for that term on Amazon, and you will get quite a few options. Most of the options you see will run about $2 per board. I have repeatedly ordered the one option that gets me 50 (small) boards at $0.46 each. At that price, I think of these boards as disposable, and it doesn't upset me to ruin one, nor am I reluctant to experiment. NOTE: Unless/until you have a fair amount of experience, I recommend using small boards as opposed to cutting many pieces out of one larger board. Smaller boards are less expensive, easier to work with, and you will have fewer problems with the "leveling" of your CNC router, which can be a significant problem when you're dealing with a necessary precision that's measured in hundredths of a millimeter.
  2. Double-sided tape. There are lots of hold-down methods. The one I have found most effective (and easiest) for cutting PCBs is double-sided tape. I've also been through quite a few rounds of tests of consumer, commercial and industrial (technically only available to purchase by corporations) tapes, so I can tell you that not all will work - and others will work a little too well (you won't be able to extricate your work piece from the bed of the router when it's done). I have gotten the best results from Scotch/3M, 15 lb outdoor tape, which can be purchased at most hardware stores. (Amazon link) The 10 lb version of the same is also sufficient, but I prefer the 15 lb. The 30 lb version is too strong, and you'll wreck things.
  3. A multimeter. If you're cutting PCBs, I hope you already have one! If not, get one now. Seriously. Stop reading, get in your car, go to the hardware store and get one. What is it, like, $12? This Instructable will be waiting for you when you get back. If you need a multimeter and can't decide which one to get, one of the prizes for the Electronics Tips and Tricks Challenge is this one. (Amazon link) You don't technically have to have a multimeter to cut PCBs on a CNC router, but life will be much easier if you do. You'll be using a multimeter for two important tasks:
    1. Setting the Z-axis zero/home. You can do this without a multimeter, but having one enables you to find the proper zero within a hundredth of a millimeter.
    2. Verifying your work when you're done. If you fail to test your traces when everything is finished... I don't even know how to end that sentence. Why wouldn't you take 20 seconds to verify your work?!

Now that you're convinced that this is for you and you know what tools you need, let's design a PCB!

Step 3: Design in Fritzing

You have some choices for software to design your PCB. I wanted to go free and I prefer Open Source, and Fritzing is the go-to application in that category. I was already using it to document my breadboard projects, so it was a natural choice. For those of you who are Eagle fans, I plan to release an Instructable that covers designing the board with Eagle in December. After having a little experience with Eagle, I believe that Fritzing is the right choice for beginners of the topic of creating a custom PCB, and Eagle is a good "graduation" step. A link to the Instructable will be here when it's ready and live.

If you don't already have it, go here to download and install Fritzing.

When you open Fritzing, start a new file, and you will see the default breadboard view. Find the parts you need for your project in the parts panel (on the right), and drag them onto the canvas. I'm making a board for an ESP8266 development board, a voltage regulator, two capacitors, a terminal block and 2 five-pin headers for input/output (first image).

Personally, when I design a PCB, I do not connect wires in the breadboard view, nor do I use the breadboard that is placed onto the canvas by default. The times I have made the connections in the breadboard view, then tried to make a PCB, it took me more time to work around Fritzing's decisions (and things that subsequently fail to work) than it took me to design the PCB from scratch. My picture shows the components arranged above the breadboard, and that’s the way they stayed in the breadboard view throughout the entire project.

Now that your components are on the canvas in the breadboard view, switch to the PCB view by clicking "PCB" at the top of the screen. This view will be a bit of a mess when you open it (second image), but don't start cleaning up until you've handled a couple of maintenance tasks or you'll make more work for yourself later. Click Routing in the menu, then Autoroute/DRC settings. Set the Production type to "custom," then set the Trace width to "extra thick." Things come out better if your traces are a little thicker than they are on commercially made boards. NOTE: Fritzing still uses a default trace size of 24 mil, regardless of this setting, so you will need to resize your traces individually anyway. This setting will make sure that the Design Rules Check that runs later is in agreement with your design.

Now click OK, and you'll be back to the PCB view, but there are two more things to setup. First, at the bottom of the screen. verify that "View from Above" is your current view. Next to that, set the clickable layer to "Bottom Layer." I'm assuming that, for now, you're milling a one-sided PCB, and you don't want to accidentally be working on the wrong layer. That’s kind of a pain to correct after-the-fact, so getting these settings correct in the beginning will help avoid frustration later.

Now that your settings are in order, drag your components around until they are roughly where you imagine them being on your board (third image). You WILL adjust placement of components later, so don't worry about everything being perfect just yet. If you've never designed a PCB before, this can be "fun." My main piece of advice is to start with your most awkwardly shaped component, largest component or component with the most traces in/out, place it in the middle, and work around it. In my case, this was an ESP8266 development board, which was the central focus of the project. You can see how I arranged it on the board in regards to which inputs and outputs I was going to need, as well as knowing where I was going to need to access power and ground.

Your components are laid out roughly where you want them on the board, so start making traces. To do so, click and hold your mouse button over one of the orange/red leads and drag to the connecting lead. With each trace that you create, make sure to set the width to 48 mil in the inspector on the right. You're going to have a problem if you use the width of "standard" 24 mil for traces. I like to roughly route the traces as I add them to the canvas. It is sometimes difficult to gain control of overlapping traces in the User Interface, so you can avoid some frustration by making the traces get out of each other's way, even if the placement is temporary. Depending on how complicated your design is or how many components you are adding, you may need to spend time rearranging the physical location of components to get a pattern that enables you to have traces that do not cross.

OPTIONAL: I like to add mounting holes to the corners of boards that I make so that I have a way to mount them to things (seventh image). It also makes a future cutout step a little simpler. If you want to do the same, select the "CORE" parts bin on the right, scroll to the bottom, and drag a hole from PCB View onto the canvas. I like to set the hole properties to "M3 screw 3.2mm," and I set the ring thickness to 0.1mm. You need to add a small ring of copper for reasons I'll explain later. I highly recommend doing this. You’ll see the nice finish this adds to your boards in later steps. Being able to mount a PCB is also a ubiquitous need, so you should make the holes.

Once you've got your traces in place (fourth image), you want to make sure that everything meets Fritzing's standards (and that you didn't miss anything), so click Routing at the top of the screen, then click Design Rules Check. If it finds any problems (fifth image), it will tell you and highlight the conflicts in red. Fix ‘em if you got ‘em (sixth image).

Your design is finished (seventh image), so click Export for PCB at the bottom of the screen, then click Extended Gerber. I recommend creating a separate folder for your gerber files. There are several of them.

Before you move on to the next step, let's clean something up. Fritzing just generated 9 files in its gerber output, and we only need to use 3 of them. Removing the 6 that we don't need will help keep things organized later, and you will come to appreciate that. Open the folder that contains the gerber output files and remove all of them except those that end with:

  • _copperBottom.gbl
  • _drill.txt
  • _maskBottom.gbs

Alright! You're done with the design, so it's time to move on to FlatCAM and getting everything prepared to go to your router.

Step 4: Get, Install and Configure FlatCAM

This entire step is nothing more than the first-time configuration of FlatCAM. And it's a long step. I am doing it this way on purpose because there aren't any guides that I could find that helped me make sense of all the options, and once I had used the application a little bit, it was quite apparent that having all the settings correct made everything much, much easier. This step isn't actually as long as it seems on the surface - I just used a lot of words to describe what you're seeing because you won't know what most of it is the first time you're there. Once you see it and read the explanation, it will make sense and you won't need this help any longer.

FlatCAM is a very capable, efficient, well thought-out and well organized application. It's also one of the least intuitive programs you're ever likely to come across, and it has so many options that it can be overwhelming. When you first use it, it will seem chaotic and confusing. Don't worry, though. Once you've used it a few times, everything will make sense, and you won't need to refer to any external resources to know what you're doing. You'll quickly find out what I mean when I say that it is well organized, but also entirely non-intuitive.

If you haven't already done so, go to and download and install FlatCAM. Installation instructions are here. If you are running macOS, see my previous note about running FlatCAM from a Linux virtual machine. Don't follow the macOS installation instructions. It won't work unless you somehow live in the past and were able to bring the current version of FlatCAM with you. I’ve worked it out, and that’s roughly the physics required to get FlatCAM working on macOS.

I couldn't find any place online that provided any guidance as to how configure this whole thing, so, you're welcome. Here are my settings after several months of tests and trials, along with some notes as to how I came to those values. Use these as a guide if you don't know exactly what to use.

Go ahead and open FlatCAM and click the Options tab in the upper left.* Make sure that "APPLICATION DEFAULTS" is displayed in the drop-down list next to the gear icon in the upper-left. If it is not, make it so. I'll assume that you know how to use a drop-down list.

  • First of all, PLEASE switch the units to mm! Working in inches in this application (and in life) really sucks. When you are figuring out necessary cut depths, no matter who you are or how you have been trained, telling the application to go 0.1mm deeper will always be easier to understand and will make your brain less angry with you than trying to figure out how many fractions of an inch - represented in decimal, of course - you need to change. (If I'm at 3/32" and I need to go 1/64" deeper, how deep is that in total? in decimal?!). Just use metric. Your brain will thank you for the extra time it suddenly has free to think about useful things. Such as...
  • Gerber Options. This is all about scraping the copper from the surface of the board, plus a setting that we won't use.
    • Plot options determine how things are drawn in the interface. I keep all 3 boxes checked. They have no affect on the output - just on what you see. That's true of all "Plot options" settings, so I won't provide further description of them below. As a general rule, you want plot options checked so you can see things, but sometimes, there’s too much clutter and/or drawing the screen is taking longer than you want to wait. Now you have the information, you can make your own decisions.
    • Isolation routing determines how the router carves around your traces and pads. Here are my settings:
      • Tool dia: 0.2; Set this to your actual tool diameter
      • Width (# passes): 5; I have found that 5 passes provides good results. Fewer than 3 gets things a little too close for my comfort (and soldering skills), and more than 5 has seemed unnecessary, and each pass takes extra time. Between 3 and 5 should provide good results. As you do this more often, you will start understanding finer nuances, such as the relationship this particular setting has to the amount of manual post-routing clean-up you have to do vs. how this setting affects production time, and you may discover values that you prefer. If you’re unsure, I recommend trying mine. I’ve done a whole lot of that discovery, and these settings are where I’m happy (for now).
      • Pass overlap: 0.08; A normal Pass overlap is 40% of the tool diameter. For example, if you are using a 0.1mm tool, the pass overlap should be 0.04.
      • Combine Passes: Checked; If you do not check this, you will have to generate a separate CNC file for each pass, so cut your work significantly by checking this box! If you can't think of a compelling reason to split each pass into separate gcode files, you don't need to do that, so check the box.
    • Board cutout settings determine how your work gets extricated from the stock when everything is done. If you follow my directions, these settings will not be used since there is a better cutout method for my chosen hold-down method (double-sided tape). More on that when we get there. For now, I set these to what I think I would use if I used the feature:
      • Tool dia: 1.5
      • Margin: 5.0
      • Gap size: -0.1
      • Gaps: 4
    • Non-copper regions and Bounding box are nifty features. Non-copper regions are (essentially) what the CNC router scrapes away from the board - everything except your designed traces, pads and other copper features. The bounding box is pretty much what it sounds like. A box that goes around the boundary of your work. You'll see how these work and why I like for them to be the same later. I set them both to:
      • Boundary Margin: 3.0; The larger you make this, the longer your boards will take in the “clearing” stage for clearing empty (unused/not needed) space, but making it too small leaves the mounting holes thin and brittle. I personally found 5 to “feel” like too much extra material, and 3.0 “feels” about right. This is going to be a personal preference.
      • Rounded corners: Checked; Really? Why is "not rounded corners" even an option?!
  • Excellon options. This section is about how through-holes are drilled.
    • Plot options. First option checked.
    • Create CNC Job is where all the important details about how to drill a hole go. Here's how mine are set:
      • Cut Z: -1.7; Measure your PCB with a caliper if you are not sure how thick it is. I set mine to 0.1mm below the surface of the PCB because it is important that all holes go all the way through, despite variations in surface conditions. An extra 0.1mm is typically enough to do that for me. You may need to experiment. Going "significantly" too deep is not a problem for the output production or quality of the PCB, but does increase the risk of breaking bits. Going too shallow is a problem (which can be remedied with a rotary tool, but come on).
      • Travel Z: 5.0; SET THIS! When I first installed FlatCAM, the default was 0.1. This determines how far above your PCB the tool will go when it needs to rapidly change position along the X/Y. 0.1mm wasn't enough to clear the work, and it broke bits. It took me a few tries before I figured out that it was this setting causing the behavior. 5 is overkill (but, you know, I just killed several bits, so I went agro), but the extra distance is benign if your router moves quickly on the Z axis. Between 1 and 2 is sufficient if it doesn't.
      • Feed rate: 150.0; This is in mm/minute. Keep this low. You need to use a tiny and fragile bit, and you're going to break many of them if you go too fast. NOTE: remember to pay special attention to the “Multiple passes” and “Depth/pass” settings on each job when you are working with small bits because there are no default settings for those particular options, and you have to set them every time you need to use small bits to prevent breakage.
      • Toolchange Z: 1.0; I do not believe this setting will ever apply to anyone I meet during my lifetime. I’m certain that, if this applies to you, you already know how to do what I’m saying here, so you don’t need me. I’d like to pick your brain though. Hit me up in the comments.
      • Spindle speed: 30000; This is irrelevant unless your router’s spindle speed can be controlled by its microcontroller through gcode. Most cannot. Set it to your router's actual maximum spindle speed, if you know what that is. If not, setting it ridiculously high just runs your spindle at its maximum speed (assuming that your microcontroller can affect the spindle speed of your router).
    • Mill Holes. This one setting is where you set the width of the tool that you will be using by default for drilling through-holes. Mine:
      • Tool dia: 0.5; This has to be smaller than your smallest through-hole. You'll see later how to determine what that is.
  • Geometry Options. Like the Gerber Options section, this covers settings related to scraping copper from the surface of the board, but this is more focused on how to generate CNC instructions.
    • Plot Options: Checked
    • Create CNC Job. Mine are like this:
      • Cut Z: -0.25; Technically, "-0.15" is the correct answer to this question because that's how thick a typical copper layer is (in mm, of course). There are a few aspects of the output that decrease in quality or desirability as the cut depth increases (the most obvious is that V-shaped bits start cutting too far into your traces), so you want this to be as shallow as possible while still scraping off all the copper layer. In my personal setup, and with the PCBs that I have chosen to use, I have found that adding and extra 0.1mm to the cut depth is necessary to compensate for variations in the depth of my router bed and (possibly) slight imperfections in the copper surface. You may have to experiment with this on your own, but this is a good place to start. If you need to go deeper than about 0.5mm to get beneath the copper layer all the way around the board, you need to make some adjustments to your physical setup - probably level your router bed.
      • Travel Z: 5.0; I have it set to this value for the same reason given in the Excellon options. Because it scares me. 1 - 2 is probably fine.
      • Feed Rate: 350.0; This can be quite a bit faster than the drilling operations since the bit is much less brittle. I can actually go much faster than this on my router, but 350 mm/min works consistently and well for me. At around 1200 mm/min, things start to go badly for me. You'll need to know the characteristics/behavior of your router and bit to know how to set this, but 350 mm/min is a good (albeit very conservative) starting point. If you have a DC powered spindle motor, or you have a some “play” in your X or Y axis, you may need to go slower than this. Sorry.
      • Tool dia: 0.2; Set this to the same as your isolation routing tool diameter
      • Spindle speed: 30000; As above, this is probably not relevant. You probably know what to enter for your router already, regardless of whether this is applicable to you, so go ahead and put it in there.
    • Paint area is the part of the board that is left over between your bounding box and your traces (that will make sense later if it doesn't now). Essentially, this is all of the copper that you want to remove (everything that isn’t a designed trace, pad or copper feature). You can choose to leave copper in the painted area, but I don't recommend it (second image). There are (at least) a couple of legitimate reasons to leave the non-copper region in place, but if you are just getting started, I suggest clearing it now and learning those reasons after you have a little more experience. As mentioned in Step 2, I have found that a 1.5mm bit is ideal for this operation, so here are my settings:
      • Tool dia: 1.5mm; If you want to know why, re-read step 2.
      • Overlap: 0.6; This should be 40% of the Tool dia - a common overlap ratio in CNC work.
      • Margin: 0.2; This determines how close to your traces and pads the "clearing" operation will get. To know what you can put here and still get acceptable results, figure out how much space your isolation routing will leave ((number of passes * tool dia) - ((number of passes - 1) * overlap)), and make sure the margin is less than that. If you use my settings, isolation routing will leave a 0.68mm margin, so I need to use something smaller. I use something significantly smaller because leaving a larger margin will increase the amount of manual cleanup I have to do after the router is done. Going too small, and you run the risk of disturbing your traces. I have found that anywhere between 0.1 and 0.2 provides good results.
    • CNC Job Options are mostly irrelevant, and I'll tell you why immediately below. Here are mine:
      • Plot Options:
        • First item checked
        • Tool dia: 0.2; I made this the same as my isolation routing bit's diameter, but this gets overridden by the actual tool diameter from a previous step every time you make it to a screen where this setting "could" take affect. That's why I say that these settings are mostly irrelevant.
      • Export G-Code:
        • I leave both of the larger input boxes blank. If you're a gcode wiz and have some defaults that you want to add before and/or after every job, put the code in here. If you don’t know what that means, leave the boxes empty.
        • Dwell: Checked; This causes the router to pause for (Duration [next setting]) seconds after completing each job.
        • Duration: How long to "dwell" after each job: 1; This and the setting above are not incredibly important.

Wow! You've made it through the settings. That may have been a little rough, but but it really will help you to have everything configured. Plus, you just learned a bunch of terminology and good default settings that will come in handy later.

OK. There are a couple last things to mention before moving on to regular use of FlatCAM. They have to do with some User Experience issues that aren't obvious, and you're likely to get a little stuck or frustrated right away if you're not aware:

  • The first one is immediately in front of you. Right now, your "APPLICATION DEFAULTS" and "PROJECT DEFAULTS" will be different. If you start a new project, it will inherit the current "PROJECT DEFAULTS," so the work you just did would be for nothing (for this project, anyway). Here's the non-intuitive workaround:
    • Close FlatCAM, then re-open it. When you do that, the two settings will synchronize to those you just set and your new projects will have the correct default settings. You should do this any time you change your default application settings.
  • Tip number B: FlatCAM will never, ever annoy you by asking things such as, "Are you sure you want to exit without saving changes to the project you've been working on for the past hour without saving even once?" Although I appreciate their fight against obnoxious popups, it means that I have to remember to save. Someone I know very well has lost work this way.
  • Tip the third: If it seems like nothing is happening for a while, take a peek at the "FlatCAM TCL Shell" window at the bottom or the status indicator in the very lower-right of the application (it usually says "Idle"). Sometimes the shell is telling you that it is waiting for you to do something, and sometimes it's just busy fulfilling a request.

Now we can use FlatCAM!

* For the OCD-capable readers: The inconsistent capitalization is not my fault! The FlatCAM app does it that way. My OCD tried to copy them character-for-character, but in its deep sadness, frustration and confusion, it may have mixed some of them up. Sorry.

Step 5: Generate Gcode in FlatCAM

There are quite a few steps involved in getting the gerber files you generated earlier into gcode that your router can handle. I've promised before, and probably will again, that this will make sense after you do it a few times. FlatCAM really is well-organized, it's just a necessarily difficult thing you're doing, and the user interface lacks any hints at intuition. Check out the video. That shows me going through the whole process in realtime.

The second image for this step is a basic depiction of my workflow. It should help you visualize the process. I follow two outlines to generate the files I need in FlatCAM. You will need to repeat each of the steps in the first outline several times for each PCB, each time with a slightly different goal and with slightly different things to do on the way through. Those different goals and subsequent things to do are defined by the second outline, which you will go through once for each PCB. Here are the outlines so that you get a picture of what you will be doing - don't start clicking yet! Specific steps are coming below.

The first outline describes the basic process of going from gerber to gcode. These are the things you will do multiple times on each PCB. It looks like this:

  1. Create geometry. This is turning the shapes from your files into something meaningful for the next step.
  2. Create toolpaths. This is where FlatCAM combines your files and settings and turns them into X/Y/Z coordinates, lines, arcs, etc.
  3. Export gcode. Finally, output files that the router can use.

The patterns of this outline are very repetitive (click this, click that, click the other. repeat. repeat again. repeat again). You will get familiar with the patterns very quickly, and will be able to work through them efficiently within a few minutes.

The second outline is that of the actual CNC tasks that I am performing. For example, "Carve isolation routes with a 0.2mm bit, then drill through-holes." You can adjust these (hopefully to simplify them) to suit your needs, but I have found that this is a good workflow for producing reasonably simple PCBs at consistently good quality.

  1. With the same bit that I am going to use to carve isolation routes, cut a line around the boundary of the work piece to verify that the tool is deep enough around the entire workpiece before moving on to step 2 (make manual adjustments if necessary).
  2. Carve isolation routes.
  3. Drill through-holes.
  4. Repeat step 1 with the larger bit that will be used to clear the non-copper regions
  5. Clear non-copper regions
  6. Drill mounting holes (optional)
  7. Cut the workpiece out of the original stock

Begin with item1 from the second outline and perform each step from the first outline from start-to-finish. In other words:

  • First, generate gcode that cuts a boundary around the work (item 1 from the second outline) by:
    • Creating geometry
    • Creating toolpaths
    • Exporting gcode
  • Next, generate gcode to carve isolation routes by:
    • Creating geometry
    • Creating toolpaths
    • Exporting gcode

... (steps 3 - 6)

  • Finally, generate gcode to cut the workpiece out by:
    • Creating geometry
    • Creating toolpaths
    • Exporting gcode

This is a linear and logical workflow through the process that reduces the number of mistakes made or steps accidentally missed. Don't ask me how I know that. Watch the video at the top of this step, and you'll see the process played out on a real PCB that I developed (the same one that's pictured repeatedly).

Now that you have an idea of how these steps will work, let's get into the specifics. If you didn't close FlatCAM after changing your settings, do so now. Open (or re-open) the application.

Start by opening your files. You have 2 gerber files, which define trace and pad geometry, and one excellon file, which defines geometry for through-holes.

  1. File > Open Gerber > Open the file that ends with _copperBottom.gbl
  2. File > Open Gerber > Open the file that ends with _maskBottom.gbs
  3. File > Open Excellon > Open the file that ends with _drill.txt

You should now see your design. Yay!

Before you get to generating gcode, you need to mirror the geometry. When you designed the board in Fritzing, you designed from the perspective of top-down (it's hard to design otherwise - for me, anyway). However, the router will be cutting from the perspective of bottom-up, so it needs to be mirrored on the Y axis.

You will need to do this once for every project you begin:

  1. Click on "Tool" in the menu bar. NOTE: I'm talking about the "Tool" menu item at the very top, not the "Tool" tab that's right beneath it! Under the tool menu, click "Double-Sided PCB Tool."
  2. Now click the "Tool" tab.
    1. Mirror Axis: Select "Y"
    2. Axis Location: Select "Box"
    3. Click the "Mirror Object" button
    4. In the "Bottom Layer" drop-down, select the second item
    5. Repeat step 3
    6. In the "Bottom Layer" drop-down, select the third item
    7. Repeat step 3

You have now performed the things that need to be done once with every new project, so you can move on to the repetitive steps. This is a good time to save your FlatCAM project for the first time and give it a name. Click the File menu, then Save. FlatCAM doesn't provide a file extension by default, so I like to provide one of ".flatcam" That doesn't leave a lot of ambiguity about the application needed to use the file. After you've saved the project once, you can use CTRL-S/CMD-S to save it as often as you like.

Now I work through each phase of the second outline. If you're just reading through this Instructable and aren't going through the process right now, you'll want to just skim this list. It's both long and boring. If you are working through the process, this will get you through each step in detail:

  1. Using the same bit parameters you will use to cut isolation routes, draw a bounding box around the workpiece to verify that the bit is deep enough to cut copper around the whole board.
    1. Click the Project tab
    2. Select the _copperBottom.gbl file and switch to the Selected tab
    3. Scroll down to the Bounding Box section and click Generate Geometry
    4. Click the Project tab
    5. Select the last item in the list, which will end with _copperBottom.gbl_bbox, then click the Selected tab.
    6. Under Create CNC Job, verify the settings (they will be correct if you set your defaults properly), then click Generate
    7. Click the Project tab, select the last item (now ending with _copperBottom.gbl_bbox_cnc) and click the Selected tab.
    8. Verify that everything is correct (it should be), and click the Export G-Code button. You've generated your first gcode file! You are going to end up with a lot of gcode files, so for organization purposes, I create a separate folder for gcode files, then I name my files with a sequence number, a tool diameter and something meaningful to the gcode file's purpose. For example, this file would be called "" This helps me keep things in order in my brain and in my actual workflow.
  2. Cut isolation routes using the same bit as step 1
    1. Click the Project tab, select the _copperBottom.gbl file, then click the Selected tab
    2. In the Isolation Routing section, verify the parameters and click Generate Geometry
    3. Click the project tab, select the last item in the list (_copperBottom.gbl_iso), then click the Selected tab
    4. Under Create CNC job, verify the parameters, then click Generate
    5. Click the Project tab, select the last item in the list (_copperBottom.gbl_iso_cnc), and click the Selected tab
    6. Verify everything and click the Export G-Code button. I called my file
  3. Drill through-holes with a 0.5mm straight bit
    1. Click the Project tab, select the _drill.txt file (This is the "Excellon File" from earlier), then click the Selected tab. If you followed my steps above and added a hole for mounting, you will need to drill the holes in two phases because the mounting holes are too large for a 0.5mm bit and you will break bits.
    2. The Tools section contains a list of all the hole diameters in your project. Start by clicking on the first one in the list, scroll down, then click the second-to-last item in the list while holding the SHIFT key on your keyboard. This will highlight all of the diameters except the last one. Now scroll down to the Mill Holes section, verify that the tool diameter is correct, then click Generate Geometry. NOTE: If you did not add mounting holes earlier, you should select all items in the Tools list now. This generates the geometry needed to create gcode for the selected hole diameters.
    3. Click the Project tab, select the last item in the list (_drill.txt_mill), then click the Selected tab.
    4. Change the Cut Z value to something slightly deeper than your board. I use "-1.7"
    5. Set the Tool dia to the actual diameter of your bit. I use "0.5"
    6. IMPORTANT: Check the Multi-Depth box and set the Depth/pass to a value that is not larger than your Tool dia. Failing to do this will cause broken bits. I set mine to 0.2. 40% of the tool diameter is a typical value for depth/pass.
    7. Verify the other parameters under Create CNC Job, then click that section's Generate button.
    8. Click the Project tab, select the last item in the list (_drill.txt_mill_cnc), then click the Selected tab
    9. Verify everything and click the Export G-Code button. I call my file
  4. Using the same bit parameters you will use to clear the non-copper region, draw a bounding box around the workpiece to verify that the bit is deep enough to cut copper around the whole board.
    1. Click the Project tab, select the _copperBottom.gbl_bbox item (this will be 4th in the list if you followed these steps exactly), then click the Selected tab
    2. Under Create CNC Job, change the Tool dia setting to match the bit you will using (I set mine to 1.5), then click the Generate button.
    3. Click the Project tab, select the last item in the list (_copperBottom.gbl_bbox_cnc_1), then click the Selected tab
    4. Verify everything, then click Export G-Code. I call my file
  5. Clear the non-copper regions
    1. Click the Project tab, select the first item (_copperBottom.gbl), then click the Selected tab.
    2. Scroll down to the Non-copper regions section and click its Generate Geometry button.
    3. Click the Project tab, select the last item in the list (_copperBottom.gbl_noncopper), and click the Selected tab
    4. In the Paint Area section, verify the parameters and click the Generate button. Nothing happening? FlatCAM isn't locked up. It's waiting for you to do something. Look in the FlatCAM TCL Shell Window, and you'll see what it is waiting for. Frankly, I’m not 100% confident that I know what it means when it’s telling me to “click inside of a polygon,” but I discovered that, if I click inside of an empty area on my PCB (within the “bounding box”), the “Paint” operation does what I want. But my bounding box isn't actually a polygon, so the chosen terminology is confusing.
    5. Click the Project tab, select the last item on the list (_copperBottom.gbl_noncopper_paint), then click the Selected tab
    6. In the Create CNC Job section, set the Tool dia correctly ("1.5" for me), verify the other parameters, then click the Generate button
    7. Click the Project tab, select the last item in the list (_copperBottom.gbl_noncopper_paint_cnc), then click the Selected tab.
    8. Verify everything, then click Export G-Code. I call my file
  6. Drill mounting holes (if you added them in Fritzing)
    1. Click the Project tab, select the _drill.txt file, then click the Selected tab
    2. In the list of tools, click the last one (the largest) to highlight its "#"
    3. Under the Mill Holes section, change the Tool dia accordingly (I use "1.5"), then click Generate Geometry
    4. Click the Project tab, select the last item (_drill.txt_mill_1), then click the Selected tab
    5. Change the Cut Z value to something slightly deeper than your board. I use "-1.7"
    6. Set the Tool dia to the actual diameter of your bit. I use "1.5"
    7. Check the Multi-Depth box and set the Depth/pass to a value that is not larger than your Tool dia. I set mine to 0.4.
    8. Verify the other parameters under Create CNC Job, then click that section's Generate button.
    9. Click the Project tab, select the last item in the list (_drill.txt_mill_1_cnc), then click the Selected tab.
    10. Verify everything and click the Export G-Code button. I call my file
  7. Last step! Extricate the work piece from the stock material
    1. Click the Project tab, select the _copperBottom.gbl_bbox item, then click the Selected tab.
    2. Change Cut Z to the "deeper than your board" value you have chosen. I use -1.7
    3. Verify that Tool dia matches the tool you will be using. Mine is set to 1.5.
    4. Check the Multi-Depth box and set the Depth/pass to a value that is not larger than your Tool dia. I set mine to 0.4.
    5. Click the Generate button
    6. Click the Project tab, select the last item on the list (_copperBottom.gbl_bbox_cnc_2), then click the Selected tab.
    7. Verify the information, then click the Export G-Code button. I call my file
    8. Don't forget to save your project!

Remember when I told you that I would explain later why you were adding a 0.1mm copper ring to the mounting holes? Hopefully you can see why now. Doing so pushes the boundaries of the “copper region” of the board to nicely match a margin surrounding the mounting holes, and you end up with a “bounding box” and “non-copper region” that have identical outer boundaries. It makes the final output very nice and minimizes manual cleanup.

Awesome! Now you have gcode files that your router can use! However, I'm not looking forward to retooling and starting and stopping 7 CNC jobs. Since tooling, setting up and using the router requires manual intervention, I want to simplify the workflow by combining files in a way that leaves me with slightly more manageable tasks.

Step 6: Final Gcode Preparation

To be clear, this is totally unnecessary.

If you want, you may run the gcode files you created, one at a time. However, combining gcode files is not terribly difficult, so you will save yourself some time if you do so.

However, feel free to skip this step.

If you followed my instructions, your files will begin with a sequence number (01, 02, 03...), so they will appear in the order in which they are intended to be run. All you’re really doing here is combining files 05, 06 and 07 so that you don’t have to babysit the machine during that part of the process. The following instructions assume that you followed the previous steps and named files as I did. If you did not, look at the previous step as a key to the files I’m talking about here.

01, 0.2mm outline: I like to run this file as-is without modifying it. The purpose of this gcode is to test the tool depth around the boundary of the work piece. You may skip running it, but I recommend running the test. If this runs and your bit does not cut through the copper all the way around the board, you can adjust the zero point of the Z axis and run the test again. This is a way to verify that the bit is at the proper depth to cut all your traces before it starts digging into things that matter. Also, it runs very quickly, so you know within a minute if you’re OK. Sometimes you won’t know that your board isn’t totally level until the end of a job if you haven’t tested first. Just run the test. Even though this uses the same tool as the next job, I like to run them as separate jobs so that I have a chance to make adjustments and rerun the test if necessary.

02, 0.2mm isolate: If you ran the test above and your bit depth is correct, just load this file up and run it. No modifications are necessary. This will be the last use of the 0.2mm bit, so when this file is done, you’ll need to change to the 0.5mm bit.

03, 0.5mm drill: This is the only use of this fragile tool, so again, there’s no need to modify the file. Just load the tool, zero the Z axis, load the file, and run it.

04, 1.5mm outline: This is similar to the “01” file, but to test the depth of the 1.5mm bit. No modifications are needed. Just as with the “01” file, I prefer to keep this separate from the gcode that follows, even though it uses the same bit, so that I have an opportunity to make adjustments and rerun the test if I need to.

The other files (05, 06 and 07): You’re about to find out exactly how good you are at copying and pasting.

  • Open file “05” in a text editor. Any text editor should do, as long as it outputs plain text.
  • Scroll to the last line of the file.
  • The last gcode instruction in the file is “M05.” If your router obeys this, it will turn off your spindle motor. You don’t want that, so delete that line.
  • Open the “06” file in a text editor. Select all (through the edit menu, or CTRL-A or CMD-A or...), and then copy (CTRL-C, CMD-C, etc.).
  • Go back into the “05” file, and paste (CTRL-V, CMD-V, you know the drill) where the “M05” line used to be.
  • Scroll to the end of the “05” file again and remove the newly added “M05” line that appears at the end.
  • Now do the same with the “07” file. Open it, select all, copy.
  • Back in the “05” file, paste.
  • This time, DO NOT remove the “M05” line. You’re done.

Save the file, and that’s it. The original “05” file and the “06” and “07” files are superfluous. You may trash them.

I personally prefer to name the modified file something like “” then I delete the original “05,” “06” and “07” files, but you’re an adult and I can’t make those decisions for you.

The moment has finally arrived! Let’s get to cutting a custom PCB!

Step 7: Cut It Out (on a CNC Router)

You still with me? Awesome! Almost there. And yes, I am studying to be a hand model, but we haven't covered Lotions in my coursework yet.

This is where you will get to see the results of your work.

The first step is going to be to load your blank stock into the router. There are lots of ways to affix your work to the bed of the router, but I prefer double-sided tape. Specifically, Scotch/3M, 15 lb, outdoor (exterior) double-sided tape. I have experimented with a lot of different tapes, and that's the one with which I've had the best results. My pictures show how I have taped my PCBs, which are roughly 7.5cm x 10cm.

On that small of a board, I use two pieces of tape running parallel to each other, running about 80% of the total width of the board. If the board were large, I would make sure that there is tape in each of the the four corners, and enough to keep my workpiece held down during the cutout process. You must use at least two pieces of tape because the tape has a significant thickness/depth, and using only one piece will leave your workpiece off-balance. Your router is very likely to knock it out of place. Also, don't use double-sided tape that has no thickness. It won't work. Trust me. Holding a PCB down with tape is easy:

  1. Cut an appropriate length from the roll using a large pair of scissors (small scissors will get stuck like a dinosaur in a tar pit!).
  2. Press the sticky side of the tape firmly against the non-copper side of the board until it's really stuck.
  3. Peel back the protective film from the other side of the tape and get ready to mount it on your router. Hint: Separating the protective film from the adhesive can be a little tricky. It tends to be easier to do with the help of an x-acto knife.

There's no special trick to mounting a PCB into a CNC router, but if you are experiencing less than satisfactory results, here are some nuances about PCB routing that don't tend to exist when you work with other materials:

  1. Remember that the level of tolerance for the depth of cut is very low. If you have problems getting the depth right, you may need to level your router bed. This problem is significantly more apparent while routing PCBs than it is routing wood or other materials. Your margin of error is only fractions of a millimeter!
  2. If you are having problems with a consistent level/depth of your cuts, you will probably find that having your workpiece mounted in a particular location on your router's bed will produce better results than other locations. Once I have found a "sweet spot," I use it until I've wrecked that part of the spoil board too much for it to be "sweet" any longer.
  3. Also given the requirement of precision, coupled with the fact that you may be using pretty small boards as your stock material, you need to make sure that the board is lined up pretty straight on the X and Y axes. On my router bed, I have measured and drawn lines across the spoil board so that I don't have to spend very much time measuring alignment on each piece that I load.

Once the double-sided tape's mounting side is exposed and you've gotten the board lined up, stick it to the bed of the router. After you've done that, press it down into the bed of the router. You want to avoid getting oil from your skin on the copper as much as possible. I recommend taking a shop rag and pressing down on the board while wiping any previous residue. Skin oil and copper are not a good long-term combination. Press down with a a little bit of force (don't go crazy - just push on it) for several seconds to make sure the tape adheres properly.

Now on to the second part: Load your first bit and zero your router's axes. If you've used your CNC router before, you're going to be very familiar with most of this process. I like to find an "acceptable" zero point for the X and Y axes, then I find the precise zero point for the Z axis with a multimeter.

Go ahead and load your first bit into the router. If you're following my lead, this is a 0.2mm, 20º, titanium coated carbide, V-shaped engraving bit.

The only thing to keep in mind while setting the X and Y axes is that your workpiece needs to fit entirely within the boundaries of your blank stock. Sometimes this is a little tricky because FlatCAM doesn't always pick a (0,0,0) that's entirely outside of the usable workpiece. For example, in an image that I included with this step, I show where a zero point was chosen slightly within the boundaries of the workpiece. If I were to set my work's (0,0,0) location at the absolute lower left-hand corner of the board, I would lose a small piece of that corner. As a result, I am in the habit of setting the X and Y axes several millimeters into the board, but each board design, as well as your personal choice, may require a different decision to be made.

Setting the Z axis is the fun part.

  • Start by lowering your bit until it nearly touches the workpiece.
  • Clip a multimeter lead onto the router bit and turn the multimeter to its ohmmeter mode. You'll be testing for continuity between the router bit and the PCB to see if they are touching.
  • Press the tip of the other multimeter lead against the PCB.
  • Lower the router bit in 0.1mm increments until you get a reading on the ohmmeter, then raise the bit 0.1mm until it is no longer touching
  • Lower the router bit in 0.01mm increments until you get a reading on the ohmmeter. Pausing between each step to prevent accidentally descending too quickly, keep lowering the bit in 0.01mm increments until you get a solid/steady reading on the ohmmeter. It will remain steady when you have a solid connection. This should take place about 0.02 - 0.05mm within the initial point at which the ohmmeter registers "weak" continuity (depending on the sensitivity of your ohmmeter and various physical properties of your bit).
  • Now hit the button in your gcode sender that says "this is the zero"

Now, that's accurate!

It's time to load the gcode files and cut a PCB!

You can use any gcode sender you like. It really doesn't matter at this point. If you have something that you know how to use, use it. I use Universal G-code Sender (UGS) on a Raspberry Pi that runs Linux. I prefer to run things that way so that I don't have to devote one of my "real" computers to the operation of my CNC router, but as I said, however you are comfortable getting gcode to your router, do that. Also, I'm a nerd.

Your router is now zeroed, so load the first file, turn your router on (if necessary) and run the file.

If you followed my example, the first file runs a test of the bit depth. If it failed to cut the copper all the way through, and all the way around the board, move the bit back to its zero location, turn the router on (that's important), lower the bit 0.1mm (make it go 0.1mm deeper on the Z axis), then reset that spot as your new zero for the Z axis by hitting the appropriate button in your gcode sender. Re-run the test. Repeat this process until you get a round of the test in which the copper was cut away around the entire outline.

You just verified the very important Z-zero for the (also very important) second file, so load that file up, turn your router on, and run the file. This one will take a little while. If everything goes well, your traces and pads will be isolated from the rest of the board.

Now, change to your second bit (in my examples, this is a 0.5mm straight bit). You're going to need to reset the zero point for your Z axis at this point, and you may need to do so somewhere else on the board. It's not uncommon to have your zero point cleared of copper already! If that happens, don't worry, as long as you don't accidentally hit the buttons that reset the X and Y axes, you can move the router to anywhere in the work field you want, and your machine will know how to return to the original spot.

Once the second bit is loaded, zero its Z axis the same way as described above. Since all of your bits are metal, a continuity test will tell you exactly when they touch the copper, so this method of zeroing the Z axis will always work.

We're not going to run a pre-test on this bit's depth since we intentionally set it up in FlatCAM to drill deeper than the board's depth. Turn the router on and load and run the third file. This one will go quickly. You'll want to watch it until you're comfortable that it's not running too fast and breaking bits.

Now change to the third bit (a 1.5mm straight bit) and follow the process for setting the zero point of the Z axis. You know how to do that now, right? Doesn't take long, does it?

The fourth file tests the depth of this bit, so go ahead and load that file, turn your router on, and run the file. If you need to make adjustments, do so the same way as described above, and keep re-running the test file until you have success. In theory, if you needed to make any adjustments during the tests you ran for your first bit, you'll need to make the same adjustments here. I haven't tested that theory completely, but that's typically how it plays out.

Now your Z axis is set for the final time! Go ahead and load the fifth file, turn the router on, then run the file. Again, this will take a little while. However, when this file completes...

It's done! Now it's time to unstick your work from the router and clean up (if necessary).

Step 8: Extricate Your Work and Cleanup

Now that you've been through all that work, it would be a shame to wreck things by not caring for how you remove your work from the router. Here are a few hints:

  • Before beginning the process of removing the workpiece from the router bed, make sure your router head and any loaded bits are well out of the way.
  • Never, ever, under any circumstances (ever) stick your hands near the tool area of your router while it has power - regardless of whether the spindle is currently spinning. Come on. It's a robot, and it probably already wants to kill you. Don't give it opportunity. I mention that here instead of in the introduction because, at this point in the process, you will be working near the dangerous tool head, but your attention will be on something else - removing a PCB. Combinations like that are how very bad accidents happen. Cut the power, and avoid every possibility.
  • If you are having problems with the tape being too sticky (you're pulling up pieces of your spoil board or breaking PCBs in the extrication process), the 10 lb version of the same tape from Scotch/3M is likely to make you happy. (Amazon link)
  • With most jobs, the outer part of the stock - the part that still has copper and is cut away from your work - will have very little tape under it and will peel off easily. Start there, then deal with your workpiece once the excess has been removed.
  • When removing your work, DO NOT use a pry bar, and do not use a screwdriver as though it's a pry bar. You will break your workpiece, and you are likely to cause untimely damage to your spoil board. The best way I have found to "pry" a particularly stuck PCB loose from the router bed is to put a screwdriver between the PCB and the router bed, get a hand under the screwdriver, then pull up. Bottom line: Don't use solid objects for leverage. Something will get ruined.
  • The tape will be easier or harder to remove, depending on varying environmental conditions. I haven't witnessed an exact failure point, but keep an extra careful eye on your work if you are operating your router in very hot or very cold conditions.
  • Knowing that environmental conditions can adversely affect the tape's ability to stay put can work to your advantage, too. Tape still not coming loose? Apply heat from a heat gun for a very short time. Doing so melts the backing, and it will come right up (but may leave a mess if you get it too hot).

When work pieces come off of the router, they sometimes require a little manual cleanup. If you find yourself doing a lot of cleanup, you probably need to adjust your settings (or maybe replace your bit). You shouldn't have to spend more than a few minutes cleaning up after your robot. If you do, you haven't instructed it properly. Most of my PCBs come off of the router in an acceptable condition, but it is common to need to do one or both of these to get things tidied up:

  • If there is any copper left in the non-copper regions, clear it with a rotary tool and a small engraving bit. I like to use a Dremel 106 (Amazon link) or Dremel 107 (Amazon link). Pay special attention to the narrow channels between parallel traces. It's not uncommon for isolation routing to miss a very small piece that the non-copper clearing can't reach because of the size of the bit and/or margin setting. You should clean those out with a rotary tool to reduce the risk of short circuits. If this happens regularly, add more passes to your isolation routing in FlatCAM and/or decrease the overlap in the non-copper clearing stage. You don't want any copper at all to be left in the non-copper regions, so clean up whatever your router couldn't/didn't get. If your router is leaving more than you want to deal with, you should be able to tweak the CNC job setup to make it better.
  • If there are jagged edges/burrs on the traces, you can clean them up with a rotary tool and buffing pads (Amazon link). Be gentle when doing this! Buffing pads are abrasive, and the copper layer will delaminate if you are too rough or take off too much material. I've watched it happen, and it made me sad. Gently buff the surface of the board, and the burrs will come right off. If you are continually getting more jagged edges than you want to deal with or can clean without ruining the PCB, you probably need to replace your V-shaped bit.

You've got yourself a PCB!

Before you move on, please do yourself a favor and test your traces. Simply turn your multimeter to its ohmmeter setting, touch one end of a trace with one of the multimeter's leads, then touch each other end of that trace with the other lead from the multimeter. Repeat for every trace. If you have continuity between the ends of all your connected traces, you're ready to populate the new board with components and solder!

Step 9: Revise, Repeat

That was a whole lot of steps, but I’m going to say it... That’s all there is to it!

My favorite thing about being able to produce my own PCBs is how quickly and easily I can update the design/layout and have a fully working project in my hands. For example, the particular board you see most often in this Instructable went from nothing to version 8 in a few weeks. Not only that, in the same time, I produced at least a dozen fully-functioning prototypes and I now have seven of the version 8 boards in full production.

This is the exact Instructable that I wish were written when I first wanted to learn how to do this, so I hope somebody else on this planet is as weird as I used to be (I’m better now) and finds it useful.

And believe me when I tell you (for the final time), do this a few times, and you’ll never need to refer to any documentation ever again. It really isn’t that difficult, it’s just a bit tedious. However, the results are definitely worth it!

My production capabilities haven’t just gone up a notch, I’m on a different planet compared to where I was several months ago. Everything is faster, everything is easier, everything is more stable, everything is more better. That makes me and my continually updated projects happy, and I hope it does the same for you and your’s.

Step 10: What Next?

This isn't the Instructable I intended to write. When I began writing, my objective was to show how I was making a backlit sign.

Well... As my projects tend to go, "the backlit sign" turned into four different signs, 36 continuous hours of 3D printing, a custom-made WiFi controller, an Arduino project and a mobile app that works on both iOS and Android. During the creation process, it occurred to me that the way I wanted to pull it off was going to require four separate Instructables. Fortunately, one of them was recently written and published by another person, so I only need to make three! One down, two to go.

This Instructable is the first part of the most sophisticated (best) way to make "the sign" project. It can be done without a custom PCB, but it's way better this way. If you're eager to put your CNC router to work making PCBs but don't have any of your own designed yet, hang on for the second and third parts. They'll be here in November. Part two will cover making your own WiFi controller and part three will pull it all together and document how I made all four signs. The images above are a sneak peek.

UPDATE: Part 2 is here! Check it out here. (Link to WiFi LED Light Strip Controller)

Be sure to come back for parts two and three. The WiFi controller is awesome, and the signs are really cool.

Stay awesome (if you are)!

Electronics Tips & Tricks Challenge

Second Prize in the
Electronics Tips & Tricks Challenge