Introduction: Scratch-built CNC Router

This Instructable is a record of my own CNC build, the challenges I encountered, and the learnings that I took away. I did not start with any specific blueprints or parts lists for my own project; the fun comes from making your own decisions based on your needs. So while this Instructable is not intended to guide you through every step to make a machine exactly like mine, it should lay the groundwork to help you plan your own machine - hopefully an even better one!

Step 1: Inspiration

As is so often the case, my year-long foray into the world of CNC construction began with a much simpler project. After being inspired by some elegant designs in a local music shop, I had set out to build my own electric violin – an instrument that I do not play, but that nonetheless appeared both challenging and structurally simple enough to match my woodworking skills. I drafted an outline of the body shape I wanted, printed it, and attempted to cut it out of wood with a handheld jigsaw.

The results were not to my satisfaction, and I quickly realized that more advanced tooling would be necessary. I was already familiar with CNC (computer numerical controlled) routers, which I had led trainings on for several years in my college machine shop, and with which I had completed a handful of personal design projects.

Despite my passion for CNCs, I had never entertained the notion of owning one due to their exorbitant cost and weight. However, my serendipitous failure with the violin prompted me to revisit this possibility. After many hours of research into home-built CNCs, I concluded that constructing one from scratch might be both affordable and feasible enough to warrant an attempt.

Step 2: Planning

As with all of my projects, I placed an emphasis on starting "from scratch," or as close as possible. Aside from a handful of CNC-specific components that I bought online, the vast majority of the parts I used could be found in any hardware store.

Before purchasing any materials, I had to make a lot of decisions. How large should the machine be? How much current would it draw? What size and type of motors would be sufficiently strong, yet economical? What mechanical drive system would be best? This required a significant amount of learning. Although I was already proficient with CNC operation, I was initially overwhelmed by the array of choices necessary to design one from scratch. In the end, I did not follow blueprints or use a kit, although many such guides are available online. Instead, I conducted in-depth research on the many facets of CNC construction and designed my own custom machine, part by part, to suit my needs.

The three main factors that influenced my design choices were size, cost, and manufacturability. First, I knew that I wanted a machine similar in size to the ShopBot Desktop, with its 18” x 24” cutting bed. This would be more than sufficient to accommodate my violin project, with room for larger pieces as well. Second, I wanted to keep my CNC economical, and repurpose existing materials whenever possible. Third, I was constrained by my available tooling; I did not have access to a metal shop, which meant I could not build an aluminum-framed machine. I chose stock materials that I could cut to size using a limited selection of hand and power tools. This meant relying primarily on wood for structural applications – an admittedly atypical choice for a CNC, and one that did contribute to the challenges of the project.

Step 3: Frame and Tracks

While some degree of planning is necessary for any successful project, I am a firm believer in learning by doing. Therefore, I began the building process quickly, revising my design as needed along the way. My first step was to build a frame.

Next, I fabricated rollers to allow the gantry to travel – a design that I had selected for its simple off-the-shelf parts and easy customization. I used common skate bearings bolted to aluminum angle brackets, which would travel along steel bars. I also fabricated set-screw blocks to allow for fine adjustment of the tracks.

I used similar techniques to create three sets of tracks, for the X, Y, and Z axes. The result was an unpowered gantry system that could roll smoothly along three axes.

Step 4: Motion System

Next, I installed lead screws and NEMA 23 stepper motors, a system that offered adequate torque and high precision of movement. Aligning the lead screws to be reasonably parallel with the tracks was difficult, and required careful adjustment of the set-screw blocks. Failing to align the screws properly would cause excess friction in the system and result in rapid wear on the parts.

Step 5: Spindle Installation

The centerpiece of any CNC is its cutting spindle, for which I had selected an air-cooled 500-watt brushless motor. This choice offered a high power-to-weight ratio, especially important for my wood-framed machine. Additionally, it was one of the most powerful spindle systems available that ran off normal wall voltage (110-120V). The larger classes of spindles required 220V, which would unnecessarily complicate my electrical system. To mount the spindle to the Z-axis, I drilled and tapped an aluminum plate.

Step 6: Machining Bed

My final step was to attach a machining bed. I first installed cross-beams to prevent the bed from sagging in the center. I then cut the bed out of Medium Density Fiberboard (MDF), drilled holes and installed T-nuts so that clamps could be mounted. At a later point, I would use the machine itself to plane down the bed, thus leveling it relative to the X and Y axes.

Step 7: Software and Electronics

In line with the economical goal of my project, I used exclusively free (and mostly open-source) software. Four distinct software packages were necessary to run the CNC: a computer-aided manufacturing (CAM) program to generate toolpaths, a G-Code sender to send files to the machine, a G-Code interpreter to translate the code into motor motion, and an environment in which the interpreter would run. I settled on Autodesk Fusion 360, Universal G-Code Sender, and a GRBL motion-control package run on an Arduino platform, respectively. Getting these programs to cooperate reliably was one of the most challenging parts of the project. It required extensive research and troubleshooting, as well as collaboration with an exceptionally computer-savvy friend.

Unfortunately, the electronics end was less straightforward. In addition to the Arduino, my system included two power supplies (36V and 48V), three stepper motors, six limit switches, a CNC shield board, motor drivers, and a brushless spindle speed controller, as well as a simple control panel. Although each of these components was compatible with the power requirements and constraints of my machine, getting them to behave correctly required continuous debugging. All told, I burned out three Arduino rigs while learning to correctly balance the power supplies and motor driver potentiometers. Thankfully, the electronics I damaged were inexpensive to replace, and I began to keep a backup system on hand. Once the software and hardware were working reliably, I set out to configure the motor system. GRBL allows the user to set many parameters, including travel resolution, motor acceleration, and maximum speed. Optimizing these variables took some trial and error. For example, setting the acceleration too high would cause the motors to stall; too low, and the motion felt sluggish. I determined satisfactory initial values and have continued to refine them since.

Step 8: Finished Product

My machine never felt truly finished, as there were always improvements to be made and maintenance to be conducted. However, it did reach a point at which it was recognizable as a CNC, and functioned reliably enough to use for my projects.

Step 9: Challenges and Solutions

Over the year-long design and build process, I encountered innumerable challenges, only some of which I had foreseen. Following are a few of the larger issues that I tackled.

A. Axes Alignment and Leveling

Perhaps the most overarching challenge had to do with my choice of materials. The wood frame was inherently less rigid than metal, and even my steel rails turned out to be more flexible than I had anticipated, making it extremely difficult to achieve the degree of accuracy of motion that I hoped for. A barrage of remedial measures lessened the severity of this problem. First, I identified problem areas and added structural support, including cross-beams and steel corner brackets. I also added a series of set screws to help stabilize the rails along the X and Y axes. Although tedious to adjust, these screws prevented the rails from bowing outward under load, and dramatically reduced “wiggle” in the machine. They also allowed me to more accurately level the spindle height relative to the bed, a critical factor for specific types of toolpaths.

B. Correcting Erratic Motor Motion

When I first began testing the machine for travel accuracy, I immediately noticed that the stepper motors behaved erratically under certain conditions. Within a specific range of lower speeds, they would audibly jitter and rattle. Additionally, they would sometimes move haltingly, generally during more complex, lengthy cut jobs. After many hours of troubleshooting, I diagnosed two separate causes. The first had to do with resonance: the motors were “losing steps” at certain frequencies, meaning that they lost track of their intended position. I solved this issue by implementing a “half-stepping” wiring configuration on the microcontroller board, which sacrificed some torque in exchange for increased motor stability and precision of movement.
The second issue, ironically, was caused by overheating motor driver boards. I had not expected this as the drivers already had heat sinks installed and sustained no obvious damage from overheating. I later learned that these tiny boards included automatic heat shutoffs, which would cycle rapidly under higher loads. The cool-down period appeared to be only a fraction of a second, which is why the issue manifested as the stuttering movement that I observed. Although frustrating to diagnose, this issue was simple to solve: I repurposed a small CPU cooling fan to direct airflow across the electronics.

C. Limit Switches Triggering

While not strictly necessary, CNCs often use mechanical limit switches to detect the end of their range of travel along each axis, and to prevent losing position during a cut. They also allow the machine to obtain coordinates relative to the ends of its axes, which is helpful for resuming a job if the initial zero point is lost. After installing simple limit switches on my machine, I found that they would sometimes register a signal even when they were not being pressed. This would unexpectedly freeze the machine mid-operation.
I isolated the cause of this problem by testing the operation of each switch independently under controlled conditions. After verifying that the switches were not damaged, I looked for differences in their setup within the overall electronic system. I concluded that the false readings occurred sporadically on switches whose wires ran adjacent to high-voltage electric wiring, causing electromagnetic interference. After some research, I installed small capacitors where the switches connected to the microcontroller, to filter out this electrical “noise.” This successfully solved the problem, and avoided the need to rewire the machine.

Step 10: Using the CNC

While this year-long journey was full of unexpected twists and detours, I did not lose sight of where it began. In the spirit of coming full circle, I knew that the inaugural task for my new CNC would be completing my electric violin, which I did a few weeks later. The photos and video show my use of Fusion 360 to design, render, toolpath, and build this instrument. As long as the machine holds itself together, I plan on many more projects to come.

Build a Tool Contest

Participated in the
Build a Tool Contest