So There I was Browsing The Internet ...

... when I came across this mini CNC router going for cheap on AliExpress . It's a "3018" model, which means the work area is 300mm by 180mm, and is large enough to handle the parts for my 737 overhead panel. And the best part is the price, it is USD115 + USD50 (Fedex International Economy) shipping.

The same design is sold under many different names, and it is also known as a "woodpecker", "linksprite" and "beautystar". The frame is made from 2020 extruded aluminium bars, it features a threaded rod connected to steppers, and runs on smooth rods. 3D printed parts are used to hold the work surface and spindle module.

Since I'm redoing the electronics for my overhead panel, why not create more work for myself and re-do the panels themselves? The Holy Grail of Home Cockpits, backlit panels, is finally within reach.

But is this ultra-cheap CNC any good? Only one way to find out.

A Few Days Later

5 days after placing my order, it arrived.
And here's the unboxing:

Build Notes

A google search led to the widely-copied Assembly Instructions, which is just a series of diagrams with measurements. Between this and AllTheGearNoIdea's youtube video, I plodded along.

The problem I faced was not that the instructions -- despite being very terse -- were incomplete, but rather they did not emphasize what was critical and what was not. So I've put together a list of a few gotchas I encountered below.


The installation can be made a lot easier by having the right set of tools. The kit comes with a set of L-shaped hex tools, but you can probably do better:

  • I had a hex-bit that fit the m6 bolts that I could use with a regular screwdriver-style body. This makes a big difference as I can apply even pressure and a smooth rotation when tightening the bolts.

  • I also used this hex screw driver set. The "2.0mm" was perfect for the bolts that attach the motors to their mounting plates, and also for adjusting the grub screws on the motor couplings. The "3.0mm" one works for tightening the smooth rod mounts.

The hex tools that come with the kit are still handy when doing the final tightening of the bolts, as they probably can handle more torque. But for 90% of the assembly work, these two tools will prove invaluable.
  • If you ordered the model with the ER11 bit holder, you will need two 13mm and 17mm spanners to tighten the collette holder. I "borrowed" the ones that came with my Prusa mk2 3D printer.

Assembling the Frame

Assembling the frame is straightforward. There are lots of videos on assembling this already (here, here and here), so I won't go into details, other than to share the following tips:

  • Organise the 2020 bars by length before starting to help avoid making mistakes.
  • It's important to ensure that the 2020 bars are at right-angles to each other, and flat on their axis. They should also meet each other at the very end of one of the bars. I found it useful to press them against another bar when tightening the T-nuts.


If this is your first time using Aluminium Exterusion bars and T-nuts, they can get some getting used to. The T-nuts supplied may seem a little too small and don't sit in the V-groove very well. This is not a flaw, but a design feature. They are loose for a good reason:
  • You do not have to slide the t-nuts in from the end of the bar. The correct way to use them is to pass your bolt through the hole on the part, and then attach the T-nut on the other side. Only make one or two turns, so the T-nut sits loosely with a large gap.
  • Place the part onto the bar, with the t-nut along the grove. Just do it, even though it doesn't make sense at this point.
  • Turn your bolt anti-clockwise (loosen it) a few rounds. Yes this still doesn't make sense.
  • Now turn your bolt clock-wise (tighten it). Keep the pressure even and the rotation smooth. If you look from the side, you will see the T-nut reach a certain point and magically rotate itself to be perpendicular with the groove.
  • Continue tightening the bolt and secure the part to the bar.

This video shows how the T-nut does it's magical rotation:

Mounting the Y-Carriage

This took many tries to get it right.

The gotcha here is the diagram in the assembly manual for this is wrong ... it show's a width of 300mm when the width is supposed to be 360mm. Therefore the offsets for the smooth rod holders are probably wrong. In reality it doesn't make much difference where exactly the smooth rods are , provided they're the same distance from threaded rod on both sides, and somewhere to around the 1/4 and 3/4 mark. I also preferred to use "distance to edge" rather than "distance to center", so I recalculated everything as follows:

Also no matter how well you measure, it's going to be slightly off 8-) I found a better way was to keep things loose, run the Y-carriage and let things "self-correct", and then tighten them.

  • Start with the motor and make sure it is centered. tighten it, while keeping everything else (smooth rod mounts and work surface mounts) loose.
  • Run the work surface from the motor end to the opposite end (using the software to control the servos). Then:
    • Tighten the bearing holder on the threaded rod
    • Tighten the smooth rod mounts on this end
  • Run the work surface back to the motor end. Then:
    • Tighten the smooth rod mounts on this end.
  • Run the work surface back and forth a few times, making sure nothing seizes (which means one of the rods are not exactly parallel with another). If this happens, loosen, run the work surface up and down, and tighten again. Once things are moving smoothly:
    • Tighten the mounts under the work surface.
If the work surface seizes up when moving, confirm if the motor shaft is not turning (you can see it from behind the motor) and that the threaded rod is not turning. If the motor turns but the threaded rod doesn't, the motor coupling (see below) is probably loose.

Motor Couplings

Before attaching the blue couplings to the stepper motors, check the shaft on the motor. You will see one side has been flattened. Make sure that one of the screws of the coupling presses directly into this side. This will ensure that the coupling doesn't slip against the shaft. Also, tighten the screw on the flat side first (This helps center the coupling over the shaft).


Be careful with the bearings that fit on the other end of the threaded rods from the stepper motors. I accidentally had the bearing slide down the middle of the threaded rod, and it would not budge out of that position.

I ended up having to cut through the bearing with a rotary tool and a cut-off disc to release it. If anybody's wondering, you'll need a 688ZZ bearing to replace it.

Also if you need to replace a threaded rod, it's has a 2mm pitch and 4mm lead, with lengths of 400mm (X) and 300mm (Y).

Mounting the X-Carriage and Z-height Alignment

The height at which the bit touches the work surface should be the same on the left and right hand sides of the work surface. Not having this will result in uneven depths on the work.

The absolute height of the bit is controlled by the upper smooth rod that holds the spindle carrier (imagine the spindle holder being suspended only by the top smoth rod). If this is not parallel with the work surface, the heights on the left and right will be different.

I found it easiest to check the Z-height using the following method:
  • Attach the upper smooth rod of the X-carriage such that the top of the mount is flush with the top of the 2020 bar.
  • Install a bit, and (using the software) move the motor all the way to the left.
  • Lower in increments of 0.1mm until the point where a piece of paper no longer can slide below the bit.
  • Reset the work Z to zero.
  • Raise the bit, and move all the way to the right.
  • Lower in increments of 0.1mm until the point where a piece of paper no longer can slide below the bit.
  • The work Z-height should be zero. If it is not, adjust the right side's upper smooth rod mount to compensate.
  • Repeat until the z-height of the work surface on both sides is 0.


  • Once you're down to a +/- 0.3mm difference, you can effect some adjustment in height by loosening or tightening the nuts on the mounts below the work surface. Don't leave them too loose. Be careful if tilting your machine on it's side, as the spindle will slide freely.
  • When everything is finalized, move the Z up in increments of 1mm as high as it will go. The Z-height at the point where first hits the end, is the maximum size of material + waste you can utilize.

Test moving the spindle left and right using the software. It should move freely without getting caught. Adjust and tighten the motor and bearing mounts.

Finally, tighten the mounts for the lower smooth rod. Make sure the spindle is closest to the mount when doing each one.


The ER11 is bit holder that makes use of colletes to hold the bits in place (just like on a dremel rotary tool). It mounts permanently to the spindle shaft. Not all 3018 models come with it, but it is possible to purchase it separately. By swapping in a different collete size, it is possible to use different sizes of bits. The kit I bought came with a 3.175 (1/8") collete.

The thing with the ER11 is that it will not fit into the spindle shaft directly, but has to be shrink fitted. This involves placing your spindle (in a zip lock bag) in the freezer for a few hours (so the metal shrinks) and also heating up the ER11 body (using a heat gun) before trying to fit the two together. Do not forget to remove the grub screws from the ER11 before attempting to fit it to the spindle shaft (the fit is so tight I don't think the grub screws serve much purpose).

Also maybe i didn't heat up the ER11 long enough (I used the hot air gun from a solder rework station, which i think does the job but i should have heated it up for longerm, like 10 minutes, to let the heat distribute itself evenly), but I was not able to get the last centimeter or so in, even with some light hammering (I didn't over do it as I didn't want to bend the spindle shaft). I've seen photos where the ER11 is all the way up to the neck of the spindle so I'm sure there is a gap (I should have measure the depth of the ER11 hole first). It still sits true and works fine, but I've lost 1 cm of Z-height. There is no way it will come off the spindle shaft now, so I'm "stuck" with it. Looking at some of the photos of ER11 mounted on spindles, it does look like they subjected it to a flame thrower. I either live with it, or (1) replace/upgrade the spindle with one that comes with a ER11 pre-attached or (2) replace the vertical frame with 30cm 2020 exterusion bars.


My software stack for CNC work was selected based on (1) running on Linux and (2) open-sourced. My main interest was to do engraving and cutting on acrylic sheets.


The type of engraving and cutting I do is mostly in two dimensions, so I use Inkscape for most of my design work. You can draw open paths, or closed paths (The fill and stroke doesn't matter, the CNC software just uses the path data). Truetype fonts can be used to add text, but they most be converted (Path -> Object to Path) to a path. The final work is saved as an SVG file.


Unlike 3D printing, where CAD designs can be sliced mostly automatically by the software, with CNCs there is still a lot of manual work involved in determining how the CAD model will be fabricated. This is done by determining toolpaths, which is the path a tool will take while applying itself to the job material.

The simplest CAM software I found that I liked was This runs within a web browser, and is probably as simple as it gets. You load your CAD SVG files, and initialize jscut by telling it about the bit (tool) you are using as well as the material details. Then you select paths from your SVG, and assign them to toolpath "Operations". The following types of toolpath operations are supported by jscut:

  • Pocket
    • This carves out an indentation on the material, along the path specified, as well as within the closed area of the path. You can specify the depth of the cut. It is also possible to specify a margin, which determines how much extra material to cut or leave behind.
  • Inside
    • This cuts along the inside of a closed path. The material in the middle is left as is.
  • Outside
    • This cuts along the outside of a close path. The material in the middle is left as is.
  • Engrave
    • In jscut, this traces the line of a path by having the tool following it exactly.
  • V-Pocket
    • This makes use of the properties of a v-bit where it is small at the tip but wider at the base. It allows you to make pocket cuts with sharp corners (but sloped edges), by raising the bit and using the only the tip at the edges. In jscut there is no way to specify the depth of the V-cut however, which is fixed at 0.5mm.
JScut also allows you to create tabs which are small pieces of material left so that a closed path doesn't come lose from the job.

The nice thing with jscut is that it previews your SVG fill colours on the display -- useful if you've used this to mark which operations are of what type. The painful part of jscut is that there is no way to select paths by area, you have to click on each path independently. This gets really tiring when there is text to be selected, as each character needs to be selected.

The bits that comes with the kit are V-bits, with length 30mm diameter 3.175mm tool tip 0.1mm angle=20deg. I have no idea what kind of feed rates to use so 100 inches/min for rapid movement, 5 inches/min for plunge, and 40 inches/min for cutting (I should really start "thinking" in metric for these).

I got the best results for engraving the lettering of my cockpit panels by ignoring the V-ness of the v-bits, and specifying them as having a diameter of 0.1mm or 0.2mm (too shallow and some paint gets left behind, too deep and the characters become fat), and just using the tip of them to engrave by creating a Pocket operation of 0.1mm thickness. This was enough to remove the paint material while keeping the lettering flat, and still having sharp corners.

The final step in jscut is to save the GCODE containing all the toolpaths.


A "sender" software is needed to transmit the gcode file to the USB serial port of the CNC machine.

I found the CNCjs software excellent for this. It is web-browser based, which means that I can install it into a Raspberry Pi mounted on my CNC itself, and access it from a tablet or my desktop PC. For the initial testing, I used the "standalone" version running on my laptop.

CNCjs shows you a preview of the toolpaths from the uploaded GCode. It also displays the machine and work coordinates of the bit, and allows you to move the bit around. There is also support for a webcam module.

Unlike 3D printing, where the position of the object to be printed is specified relative to the machine's "home" position, with CNCs most of the time you want the operation to take place relative to the work piece you've placed on the work surface. So what is important is the offset relative to the object, rather than the work surface. Therefore the cutting work starts with manually positioning the bit on the bottom-left corner of the object, for example, and then setting this as the "home" of the work piece in the CNCjs software.

Likewise, the starting "Z" level is usually the top of the work piece, rather than the work surface, so setting the "Z" home position needs to be done carefully at the start of each job. A difference of 0.1mm in setting the initial "Z" home can mean a difference of 0.1mm in the cut depth, which can make a difference when you only want to cut by 0.1mm! I will need to look into ways to automate the setting of the initial "Z" home, as doing this manually is too error prone.

Here are the up-close results of my initial engraving tests. The work piece is 3mm clear acrylic (I didn't have any translucent white), spray painted with two coats of black followed by two coats of DPT "Anchor" brand "Pastel Grey". The text was copied from Peter of "Build A Boeing"'s plans for the 737 Overhead Panel, where the font height is 3.7mm:

The top one is at 0.2mm and the bottom one is at 0.1mm (actually, I just adjusted the initial Z to change this). You can see the 0.1mm has left some paint unremoved, but the 0.2mm letters are a bit fatter, loosing some resolution. I still have to spend some time tweaking it to get the best results, and especially automate the Z-height measurement. But so far I am quite happy with the CNC machine.

I might have to look at a better CAM software than jscut (having to select each letter is proving to be just too painful!). The features on most of the freeware ones seem to lack either SVG support or support for V-bits. So I might have to look at a commercial CAM software -- unfortunately most of the prices start at what I paid for the CNC machine itself.

Oh and with the 200W spindle, engraving acrylic didn't make much more noise than a vacuum cleaner. So I will probably get away with cutting in my apartment during the daytime.


There are a few upgrades I've planned for the CNC router:

  • Adding limit-sensors
  • Adding a z-height sensor
  • Adding a Raspberry Pi

I'll write about these in future posts.