I've had great success with my inexpensive AnyCubic 3D printer that I got on Amazon Prime day, so I finally decided to get myself a low cost (under $200) CNC mill. I wanted to get something that would allow me to drill holes with reasonable accuracy and also mill PCBs.   I settled on the SainSmart Genmitsu CNC 3018-PRO.  It has an XYZ working area of 300x180x45mm which is sufficient for most things that I do.  It uses GRBL rather than Mach3 control firmware but I think that should be sufficient for a beginner like me.  One reason for the low cost is this is an assemble it yourself kit.  Good news is that even with 3 trays of parts the assembly only takes about an hour or so.


Here's the box full of parts:

Genmitsu CNC 3018-PRO Router Kit


The Arduino based Controller PCB:

  • 3 driver boards and connectors on the right for the X/Y/Z stepper motors
  • Spindle motor driver and connector on the left
  • There are also connectors and circuitry for an optional laser module and display

CNC Controller Board


The front view of the assembled unit:

CNC Router Front View


The rear view of the assembled unit (need to finish the wire management):

CNC Router Back View


GRBL Control software (Candle)

The kit comes with a mini CD with software, drivers, and test jobs.  My first application is to cut some proto PCBs to fit on top of MKR 1300 boards that I am using for my LoRaXes project, so I just need the ability to make linear cuts.  This is my first real experience with CNC and I'll need to figure out a tool flow that works for me.  I intend to use Openscad for CAD since I use that with my 3D printer and it exports DXF and SVG formats in addition to STL.  I need to figure out what to use for CAM (the equivalent to a slicer for 3D printing) to generate the GRBL GCode for the router.  The kit comes with a GRBL control program (Candle) that allows you to import and edit GCode and to visualize and control the CNC job.

GRBL Control Software (Candle)


For this simple job I just manually entered the GCode directly into the program.  Here is the the GCode:

(GCode for simple linear cut along Y axis)
(X=Y=Z=0 is set to surface of PCB at beginning of cut)

G90 (Use Absolute Coordinates)
G1 Z5 F500 (Move Z to 5mm with Feedrate 500mm/min)
G1 X0 Y0 (Home X and Y with Feedrate 500mm/min)
M03 S1000 (Start spindle CW with Speed 1000rpm)
G1 Y-1.0 (Move to Y -1mm with Feedrate 500mm/min)
G1 Z-0.7 F100 (Move Z to -0.7mm with Feedrate 100mm/min)
G1 Y31.0 (Move Y to 31mm with Feedrate 100mm/min)
G1 Z5 F500 (Move Z to 5mm with Feedrate 500mm/min)
M05 (Stop spindle)
G1 X0 Y0 (Home X and Y with Feedrate 500mm/min)
M30 (Terminate program)


I manually increase the cutting depth (line 10) for each cutting pass.  I don't think there is a "looping" construct in GCode so I'll just need to add multiple passes once I get the spindle speed and feedrate figured out for the PCB material and tool that I am using.  I copied and edited code from one of the sample jobs that was included.  I'll need to determine what the spindle speed setting is actually doing since the spec indicates 3 speeds: Spindle: 775 motor, 12V, 3000 RPM; 24V, 7000 RPM; 36V, 9000 RPM.  I don't know if the controller has a continuously variable voltage that would allow you to interpolate/extrapolate speeds (the line I copied had 1000 RPM).


Two things that I wish that they had provided with this kit - a decent set of clamps and some sample end mills.  I couldn't figure out how to use the "clamps" that they provided and the only routing bits they provided were "V" cutters that are suited for engraving in wood.  I couldn't figure out what type of clamp to use with the small PCB, so I 3D printed a fixture to hold it and to provide the "waste board" structure under it.  Luckily I had also salvaged some short 0.8mm end mills from somewhere in my past life.


Short video of first milling attempt