How To Make A DIY Arduino CNC Router?

In this instructable, I will help you with a stepwise demonstration of how to build an Arduino based DIY CNC router. Before getting started with the process, please note that the below demonstration includes the use of a 3D printer, which I used to make some parts required in the process. However, you can also use wood to make those parts.

Let’s delve in…

Step 1: Materials

To build a CNC router, the following parts will be required:

  • 1 piece of hardwood plywood of width 18mm, length 2.44m and breadth 0.61m
  • 2 steel tubes of diameter 18 x 1.5mm and length 900mm
  • 2 steel rods of 12mm diameter and 188mm length 
  • 4 nylon linear bearings of 12mm each
  • 8 nylon linear bearings of 18mm each
  • 2 threaded rods, M8, of length 1m 
  • 1 threaded rod, M5, of length 1m 
  • 2 coupler nuts 5mm-M8 
  • 1 coupler nut 5mm-M5
  • 2  NEMA17 (Wantai 42BYGHW811) 1.8 degree/step stepper motor 
  • 1 NEMA17 (Wantai 42BYGHW208) 1.8 degree/step stepper motor 
  • 3 TB6560 stepper driver 
  • 1 120W power supply (12v, 10A) 
  • 3 4-pin wires of 1 meter 
  • A couple of 608 ball bearing, some M8 and M5 nuts, and some screws
  • 1 Arduino UNO board
  • A laptop or raspberry pi 

Note that this does not yet include the milling device. I used a Dremel 8200 series to start, but will change to add my normal router to it, or make something like a DC spindle onto it.

DIY Arduino CNC Router
Step 1: Materials for Arduino CNC Controller

Step 2: The Design

You can use Autodesk Fusion 360 or other relevant CAD-CAM software to design your CNC router within a feasible range (as you require). For example, you can set the spindle motion along all the three axes at ±40cm (in x-direction), ±70cm (in y-direction), and ±10cm (in z-direction).

The Design for Arduino CNC Controller

Step 3: The Y-assembly

Check out the images to understand the measurement.  

  • The measurement of 22-7 as shown in the image implies that you have to drill a 22mm diameter hole to a depth of 7mm. This part is for the bearings
  • Panels A-A and C-C are alike. And panels B-B and D-D are nearly identical to each other; in Panel B-B, you have to drill a 22mm hole for the coupling nut between the threaded rod and stepper motor. However, do not drill the same hole on D-D panel
  • Then drill 18mm holes in both the B-B and D-D panels up to a depth of 9 mm only

Note: Previously, I tried using the 12mm rods only to find those hanging through too much. So, later I tried using the 18mm steel tubes while keeping the rest of the drawing dimensions the same as they were before. Just that, this time I drilled 18mm holes instead of 12m holes in both the B-B and D-D panels.

Fix the NEMA17 42BYGHW811 stepper motor to the B-B panel before wrenching up the 70mm and 80mm pieces together. Then, cut the threaded rod to 750mm and fix it to the stepper motor with the coupler nut. Now, screw both the 80mm and 70mm pieces together, but not yet the large board. Else, you cannot tack the x-assembly to the system. 

Step 4: The X-assembly

In this part, you will require:

  • 4 XY-joints
  • 2 Y-nut-holders

Note: You can either make these by 3D printing or from real wood. However, building these parts from wood would need you to be a little more creative and confident about it.

The panel on the left side should have a 7mm deep hole of 22mm diameter for the bearing and 10mm go through hole. On the right side panel, the 22mm hole should be a go through one (due to the coupler nut).

Note: Similar to the Y-assembly, in the X-assembly, 18mm steel tubes are used in place of 12m rods. Plus, I have demonstrated the process using some 3D printed parts to ensure proper alignment of the steel tubes. However, as I mentioned earlier, you can use the wooden built parts, if you are expert in managing tasks accurately. 

Step 5: Z-block Assembly

The Z-block is a bit complicated as it includes drilling holes with absolute precision. Otherwise, it will result in high intensity friction if the holes in the side panels of X-block and the steel tubes are not properly aligned with each other.  

Here’s a tip: Employ a miter saw for the wood cutting and a drill press to drill the holes. To drill larger holes, first of all, use the drill press to start the hole and then a router to assemble enough space.

Note: The parts demonstrated in the images are all 3D printed as those are less time-honored and easier to gain precision. The white parts attached to the side panels are the nylon bearings.

Z-block Assembly for Arduino CNC Controller
Z-block Assembly for Arduino CNC Controller part 2

Step 6: Integrate All Hardware

Now comes the core part of the project, where you have to assemble all the previously assembled parts and accessories. So, first start with the Z-part assembly, connecting it to the X-frame. Then install the bottom portion of the X-assembly, attaching all to the Y-axis assembly. 

After all the attachments, make sure to double check all the X, Y, and Z axes manually by twisting the threaded rod. In case you find any sort of difficulty in turning any of these axes, that means the steel tubes are not properly aligned, resulting in friction. So, you need to  reassemble and realign the parts, until everything is good.

Step 7: Motor Drivers and Wiring

The wiring with the motor drivers should be as demonstrated in this image. The ground is taken from the Arduino UNO board and not from 12Volt  power supply.

Use a multimeter to detect the Phase A and Phase B: The resistance over each phase (say, B+ and B-) is zero. In wiring, the polarities, of which wire is B+ or B-), don’t matter, as long as the resistance is zero between both the B wires. Same thing follows for the A phase wires. 

To do the minimum basic wiring, connect the digital pins 2-7 and ground pin (GND) to the stepper motor driver boards.

Step 8: Settings Up the Arduino Firmware

Step 8: Settings Up the Arduino Firmware

Download GRBL and extract the same from Github and access the Arduino IDE software through Sketch >> Include Library >> Add zip library >> choose “grbl” directory from the earlier extracted GRBL folder. Reboot the Arduino IDE software and under file >> Examples, there you will get an instance for grbl, named grblUpload. Open the file as you find it and upload the same to the Arduino.

Now, under Tools >> access the Serial monitor and set the baud rate to 115200 bits per second.

By now, you should receive a message notifying “Grbl 0.9j [‘$’ for help]”

So, enter the “$” symbol and hit Return. Again,  enter “$$” and hit Return. There you can check  all the existing settings for your grbl file, which is just by-default. Now, you can modify these current settings as per your requirement.  

Step 9: The First Circle

As you are done with the Arduino firmware setup and hardware assembly, it is time to download the Universal G-Code Sender and link it to your Arduino UNO with a baud rate of 115200 bits per second, once again.

Now level up the power supply and move to the “Machine Control” section to move your DIY Arduino CNC Router utilizing the controls keys on the display.

Fix a pen or marker to the router’s z-axis, and open a text file on notepad naming it circle.gcode and write the codes as follows:

G17 G20 G90 G94 G54

G0 Z0.25X-0.5 Y0.


G01 Z0. F5.

G02 X0. Y0.5 I0.5 J0. F2.5

X0.5 Y0. I0. J-0.5

X0. Y-0.5 I-0.5 J0.

X-0.5 Y0. I0. J0.5

G01 Z0.1 F5.

G00 X0. Y0. Z0.25

Now navigate to the File Mode tab of Universal G Code Sender and open circle.gcode. Then, as you hit the Send button, your CNC router should start drawing a circle maintaining an exact diameter as per your coded instruction.

Well, that’s all. Hope it helps you get a clear basic idea of building a DIY Arduino based CNC router. 

The Edge Cutter is reader-supported website. When you buy through links on our website, we may earn an affiliate commission.

Leave a Comment