This is my build log of vicious1' Mostly Printed CNC.

Here we are running a 2.5w diode laser on it.

Huge shout out to Tim, in the photo above, for helping me get past the final hurdles of this project. He hand-wrote some g-code to get this working before we found a tool to generate it.


The awesome thing about this CNC is that it can be built using only parts made on your 3D printer, a few RepRap electronics and some parts from your local hardware store!


My build started with a trip to home depot where I bought conduit. If you choose your dimensions before you start, you'll even be able to get the conduit cut at the store for free.

If you want to copy my build exactly, here are the dimensions I used (all units are in inches). I sized mine to fit on an extra door I had lying around. I used this door as the cutting table.

Hardwaretotal length(in)qtytotal(in)size(in)plus(in)
Conduitx axis139.2346.43610.4
y axis103.2334.42410.4
z axis31215.587.5
GT2x axis106.8253.446.47
y axis82.8241.434.47
Rod5/16-18 threaded rod1411486
7/16 threaded rod64416124

If you want to build a different size table, this awesome calculator will help you figure out how long to cut each piece:

I also picked up the necessary bolts and nuts. I'm building the US/English version, the metric version will be slightly different.

All sizes are in inches unless noted otherwise

15/16-18 x 5
125/16-18 x 2.5
25/16-18 x 1.5
285/16-18 x 1.25
435/16-18 nylock nut
15/16-18 x 7/8 coupling nut
19M3 x 10mm (ordered from China)
57#6-32 X .75
57#6-32 Nylock Nuts

You'll also want some wiring. Old ethernet or phone cable works great for this.


I ordered all my electronics from China. It's cheap and they work great. They took about 3 weeks to arrive, so order these first, as you start printing out all the parts.

RAMPS 1.4 Electronics Kit 1x $40 GT2 timing belt and pulleys 1x $9 NEMA 17 Stepper Motors holding torque 5x $11 Pack of 100 3mm x 10mm Hex Bolts (to attach the steppers) 1x $5 10 608 Sealed Bearings 6x $3.85 Laser Glasses 3x $1.80 12V 30A Power Supply 1x $26

You'll also want some 2.54mm Standard PCB Shunts for the RAMPS.

Even though the included motor drivers work fine and these TMC2100 silent stepper drivers are expensive, if you plan to run your MPCNC in a living space (as I do, with it in my living room) the $40 upgrade is well worth the peace and quiet. The upgraded motor drivers really do make a difference. Check out this comparison:

I ordered a 2.5w diode laser as the primary end effector. It works great. I also ordered a spindle.

2.5w Diode Laser Module 1x $75 400W 12000rpm ER11 Chuck CNC Brushless Spindle Motor and Driver 1x $80


All the printed parts for the US 3/4" conduit version are here on Thingiverse and the metric versions are in the links on that page 25mm, 25.4mm.

In case you're curious, US 3/4" has an outer diameter of 23.4mm according to

I used ABS to print all the parts. I printed at 253 degree nozzle and a 100 degree heated bed in an enclosed Prusia i3. .2mm layer height. Also, I started by scaling all the parts to 102%, so that after the ABS shrinks, we should get the exact right size. I found out after testing one of these scaled-up parts, that 100% scaling is fine. I suggest you print out all the parts at their normal size, the tolerances are fine, even when using ABS.

Here's part of the main carriage

Whew, that was close... almost ran out of filament on this print


You'll need a table that fits your CNC. My CNC is pretty big, at 3" by 4" so I had to build a custom table.

I ended up using an old door I found in the basement and some scrap wood. I printed out these little holders for the legs, but in hindsight, it would have been better to use a more traditional table building method, like a strip of wood lengthwise around the table to which the legs can be bolted.

Then used the 45 degree brackets and a couple more scraps to hold the legs in place.


The build is pretty straightforward and vicious1 has a good guide on his site over here:

My step-by-step guide follows.


Gather the parts for the tops of the legs

Optionally, glue or acetone weld these parts together

Then bolt them together

Then bolt onto the conduit leg

Do all 4

Then find the bottom parts for the legs and bolt those on as well

X-Y Axis

Grab the printed parts and your shorter bolts

Note how the bolts overhang the nuts by a 1/4". It would probably be fine like this, but I don't like the way they look

I couldn't find 1-1/4" bolts locally, so I used 1-1/2" bolts and cut them down with a hack saw then cleaned them up with a file. I found cutting 5 grooves up from the end was the perfect length

Find the longer bolts, lock nuts and 4 more bearings

Note the bolt direction

Fasten the nuts

Complete all 4

I'm using 3mm x 10mm hex bolts to attach the steppers to the 3D printed mount.

Bolt them on like this


This part is slightly tricky, just follow the pictures and you'll do great. Unfortunately I can't give more detailed written directions since I'm not sure of the names of some of these parts.

Grab this part... see, no idea what to call it... and some bolts

Bolt on the bearings

And do the other one as well

Now you'll need one of the large center sections, bolts, nuts, bearings and a couple wrenches

Install the bearings like so for both parts (only 1 is shown here)

Now find the coupler nut, a small bolt and nut and the 3d printed part. Install the coupler nut into the 3D printed part

Mark the bolt

Cut it down to size. Alternatively use a hack saw for this

Now find your partially assembled pieces

Insert the long bolt

Add the coupler, put the bolt through the hole without the coupler nut

Then through the blue part

It will fit like this

Add the other middle, blue piece

Add the bottom spacer

Then add the bottom orange piece

Bolt it on

Test fit a piece of conduit and check to make it slides easily but is not loose. Adjust the bolt tightness if necessary

Bolt on the last four bearings

Check the tightness with a piece of conduit


Here's what you'll need

After fitting the nuts, fix them firmly in place with hot glue

Drill the conduit and insert the bars holding the nuts. You may have to sand down the opening of the conduit if they don't fit.

Bolt on the universal mount, loosely

Bearing goes up

These are 3x M3x10mm bolts

Install the stepper

And the coupler

Tighten the mount

Install the threaded rod

Final Assembly

Mark, drill and affix two corners

Install the base of the legs

Add the conduit rail

Then add the spacers

And the conduit on the other side

Be sure to install the carriages, then bolt on the top of the legs, loosely. With everything loosely attached now, measure diagonally and make sure everything is square. Drill and screw in the last two corners.

If you're like me, now would be a good time to move (just kidding). Here we are in the new location

Back to the build, insert the small nuts into the slots

Slide the gantry into place and bolt the stepper motor mount onto each of the 4 carriages

Here is how the belts are threaded

Using the zip ties, affix the belts


Here are all the electronics

Let's start with wiring


I used some old ethernet cable (8 wire) and telephone cable (4 wire) to wire the stepper motors and the end effector plug.

For the series stepper motors, I wired them like this, using a 2.54mm pin header.

For the specific steppers listed in the BOM above, the pinout is:

If one motor runs backwards, just try the position of any one of the wires in either pair

I soldered pin headers from standard 2 row 2.54mm pin headers

For the motors on the side opposite the controller, run the cables through the conduit


I just followed vicious1's ramps setup guide here:

Here is a full pinout of the ramps 1.4

Push the ramps shield onto the Arduino mega

Fill all 3 headers below each motor driver slot you intend to use with 3 jumpers. This will give you the most resolution (microsteps) possible. They should look like this when populated:

(Image credit vicious1 )

Be sure to read the pinouts for the motor driver you're using and match them to the pinout on the ramps and install them

Wire the power to your power supply

And print a case, if you want.

Plug in the motors


If using a laser, we'll want to connect these to the D9 terminals, Brown and Pink jumpers in these photos

I used this 12v laser

We'll use the fan pin, D9 for the output, which is fine for our 12v laser, but don't do this with a 5v laser.

The marlin gcodes for fan control are:

M106 -- set fan power
M107 -- fan off

Full documentation for a different, 5v laser installation


The latest version of marlin for the MPCNC is available here, grab the RAMPS 1.4 version. I'm using with the extruder and heated bed enabled.

Feeds and Speeds

This is a list of tools mapped to feeds and speeds that I have found work well.

2.5w Diode Laser

ActionSpeedFan (laser pwm control) Speed


There are different tools that can be used to generate gcode for the MPCNC

For CAM operations, cutting and routing, use Fusion360.

For etching, try the website or or Image2GCode

Fusion360 Post processor

For generating gcode from CAD. You can also import an SVG into a sketch in Fusion360, which is handy if you want to route a specific path very precisely.

Sketch your cut with Fusion360, then use the gcode post processor.

I cleaned up the MPCNC_Mill_Laser.cps post processor. You can grab my updated version from dropbox or github.

Open then open "Assets" -> "Cam Posts" and drag the .cps file in. Full directions:

Follow the directions for use

The V10 post processor here, wasn't working for me:, but if you want to try it, here are the directions:

Inkscape Plugins

I installed inkscape on my mac with homebrew, so that's where I'll copy the extensions. Your path may be different.

J Tech Photonics

The best Inkscape plugin, but it only works for outlines, not fills. I've found is the J Tech Photonics plugin:

Download the correct version, in my case

mkdir jtech && pushd jtech
unzip JTP_Laser_Tool_V2\ -\ inkscape\ 9_2\
# copy the extension into the right folder, the target is in Inkscape under Preferences -> System -> User extensions
mv *.py /usr/local/Cellar/inkscape/0.92.2_1/share/inkscape/extensions/
mv *.inx /usr/local/Cellar/inkscape/0.92.2_1/share/inkscape/extensions/

Import your DFX or SVG or whatever you want to cut.

When importing a DFX, don't scale it and if you dont see the image, pick View -> Zoom -> Drawing

Under File -> Document Properties expand the Resize Page to Content... setting a click the Resize Page to Drawing or Selection button

Under Extensions choose Generate Laser GCode and J Tech Photonics Laser Tool

In the settings set:

Laser ON: M106
Laser OFF: M107
Travel Speed: 1000 (or whatever your machine can do)
Laser Speed: 300 (for engraving or 150 for cutting with a 2.5w laser)
Laser Power: 255 (max power)
Passes: 8 (at a minimum for plywood, 14 to be safe)
Pass Depth: 0

If you get an error like this, you'll need to add a layer to your image:

The full guide for the plugin is here:


This plugin didn't work for me, I got the error: error: no such option: --pen-up-angle, so the script probably needs to be debugged.


To install it, download the zip from github and copy the contents of src/ into your inkscape extension folder. When installed via homebrew on mac, that would be something like this:

mv ~/Downloads/svg2g-master/src/* /usr/local/Cellar/inkscape/0.92.2_1/share/inkscape/extensions/

Once installed, open an image and click File -> Save a Copy

You'll then see the options dialog for Svg2G

I turned off registration, leave homing at 0,0

SketchUp and SketchUCAM

Grab SketchUp free here:

Download SketchUCAM here:

Change the settings for Marlin:

  • Open tools, phlatboyz, options, machine options and set Comments use Bracket or semicolon to false (we want to use semicolons)

  • Open tools, phlatboyz, options, feature options and set Force all gcodes on for Marlin to true

Gcode Ripper

Haven't tried this, but it looks pretty good if you have a windows computer:


I haven't tried this, but it seems to be a popular choice:


For generating engraving gcode from an image.

Download Image2GCode version 1.1 here: or the github version here:

Gcode simulation

Download GCodeSimulator[version].jar from

Run it with java -jar GCodeSimulator[version].jar

PCB Lasering

Open the layout in your PCB program, I'm using Eagle. Hide all but pads and the top layer. Show vias too, if you want those cut.

Then find the ratsnest button and hit it.

Hit print and under options pick only "Black" and "Solid", choose the PDF printer

Now, fire up your favorite image editor. I use Photoshop and import the PDF, turning up the resolution to max when prompted.

In Photoshop, change the main layer to have a white color overlay, insert a layer below it, fill it with black. Make your edits, like adding a little border.

Then send it to your cam program.