Introduction: DIY CNC Router - Class Project

About: Filmmaker. Physicist. Fixer.

Every extravagant tool acquisition is, to your average person, a complete mystery. "What the hell do you need that for?" is a commonly exclaimed question. I usually don't need a specific answer to these questions to want a tool. Just the fact that I know it can let me do something that I can't do without it is somehow enough. I admit I am attracted to CNC technology for this simple but vague reason, and that I do covet it, somewhat, as merely the current super-gadget.

Other times a tool you don't have suggests itself to you naturally. You come across a point in a task that demands that tool. I had this moment of understanding that I "needed' a CNC router two years ago when I was making a box I designed for a friend.

The idea was that it would be a wooden puzzle box. It would have the graph of a mathematical equation engraved on the lid, and the combination to the box, engraved in polished aluminum on its face, would be the equation to the graph on the lid. I knew immediately it was a great idea. But I had absolutely no way to do detailed carvings in wood with no mistakes, and I knew even less about engraving metal.

I managed to finish that project without a CNC machine. I did it with a table router and a set of alphabetical metal stamps from Harbor Freight. (Had to go back for the punctuation set too!) But I understood after that project what I could do with a CNC machine that I couldn't reliably do on my own.

Step 1: Do the Thing When the Thing Needs Doing.

In addition to coming across execution problems I didn't know how to handle in my own projects, all my craftiest associates had been proselytizing to me about CNC technology since before I knew what it was. Once I had spent some time working with others' machines, a CNC router quickly rose to the top of my list of tools I needed to acquire. When I enrolled in an Instrumentation Electronics class at Northeastern Illinois University that required I come up with an impressive electronics project by the end of the semester, I knew I could do well in the class through pursuit of this project, and, more importantly, that I would leave the class closer to my goal of understanding and possessing a CNC controlled fabrication system.

Because whenever one course of action seems to be suggested from two seemingly unrelated sources, I opt to completely ignore that it's an obvious sign of obsession on my part, and take it as a sign that I should do what I was going to do all along anyway. So, with this chronic mechanism in place, and bolstered by quotes such as: "strike while the iron is hot", "fortune favors the bold", and other inspiring but reckless sentiments, I set about on the first step of my CNC build - the selection and acquisition of the electronics.

Step 2: The Electronics

After reading through other CNC build Instructables and forums (such as, and asking friends with their own machines, I settled on an electronics package containing four NEMA 34 1841oz/in stepper motors, four stepper motor drivers, and four power supplies, one per motor. This package at the time (Spring '16) cost $540.00 plus shipping and handling.

I knew I could use my Arduino Uno to control these motors in a simple way. (Not through any kind of design software, but just through direct Arduino pin control, or the use of the Arduino "Stepper Library.") So once I unpacked everything I set about wiring it together to see these motors brought to life.

I got life out of the motors immediately and was very excited about it for a short lived moment. But once I played with them and Arduino code some more, I discovered that I wasn't getting any kind of steady, sensible movement out of my motors.

This turned out to be a problem with the settings of the (Leadshine MA860H) stepper driver. Each of my four stepper drivers came equipped with 10 DIP switches that allow the user to modify the microstepping of the driver. For my initial tests, I had left the drivers in their factory settings, which call for the highest resolution, that is to say, the greatest number of steps per rotation. After research on stepper motors behaving unpredictably in this setup, I discovered that the Arduino as the processor can only handle a certain amount of steps per rotation, and if that is exceeded, the results become erratic. From here, I just switched through all the driver settings starting from the highest revolution, and working my way down, until I found the highest resolution that harvested sensible action from the motors. For my motors and drivers, this ended up being a setting of pulses per revolution.

Once I cracked this DIP switch code, the motors behaved as expected, but they still were not controlled for design or mechanical effect. I knew there were PC based programs I could control a CNC setup with, such as Mach3, and that I would get that aspect of it working no matter what, so I focused next on what seemed the biggest obstacle for me - a solid and precise mechanical build.

Step 3: The Gratefully Stolen Mechanics

This page is easy because I'm not a design genius who thought of a new way of doing this. I can merely defer. After deciding that I was going for a certain price range for my setup, I searched through all the DIY CNC setups I could find. Out of all I considered for that price and possibility, the most achievable as well as solid and precise design I found was "Absorber of Light"s six-part YouTube series "How to: DIY Arduino CNC Router Cutter Welder" found at:

Step 4: Arduino>GRBL>Easel

In addition to the structure of my project owing a great debt to Absorber of Light's series, his videos also introduced me to Easel by Inventables. Easel is a free, web-based design software that can communicate to an Arduino Uno based CNC machine.

When I started my project, it was my plan to run it off my Arduino because, like all the other ingredients, it's what I had. And like every other step, I was amazed to find out it was not only possible, but pretty easy.

Navigating the Easel website is fairly straightforward. The only tricky part is getting Easel to communicate with your Arduino. This requires your Arduino to be flashed with GRBL.

GRBL is a The procedure for flashing your Arduino with GRBL is covered here on the github website:

On this site they also link to a method for flashing GRBL for Mac users through an app called HexUploader, which uploads the hex file needed to create the GRBL library in the Arduino IDE:

Once this hex file is uploaded to your Arduino, you just need to Import the GRBL library to your libraries list. Then go to File>Examples>grbl>grblUpload and upload that program to Arduino.

That SHOULD be it as far as the software goes. That SHOULD be all you need to do. But...

Step 5: GRBL>Arduino Problems/tricks

If I provided no new problems or found solutions here, this would merely be an exercise in sycophantic criticism of Absorber of Light's already existing Instructable. Which, while deserved, would fork no lightning, and would do nothing to help ease the path between new CNC acolyte and CNC builder.

So - the biggest problem I encountered that was not addressed in the Absorber of Light series was successfully getting Easel to recognize that my Arduino Uno had been flashed with GRBL.

If you're facing this problem, the symptom of which, for me, was Easel appearing to operate properly but without any motor function, the problem could be something as simple as having the wrong port selected for your Arduino, or the port being occupied by another program while you're trying to run Easel.

But the more likely problem in my experience, is that you have not properly flashed GRBL to your Arduino. When I encountered this impasse, I kept trying over and over to reflash GRBL to my Arduino, but no matter what I did, Easel would not recognize it, and the serial monitor function which allows the Easel user to interface with the GRBL code just read ?marks endlessly. I searched through forum after forum, but I never managed to find all the clear cut answers on one page, so I'll try to offer that here.

Firstly, attached is the pinout for using an Arduino Uno with GRBL and Easel.

Next, make sure you have the newest version of Arduino IDE installed on your board.

Make sure the proper serial port is selected in Arduino IDE and in Easel if there is a port select option.

Make sure you change the baud rate of that port to 115200 baud.

Clear the Arduino and then upload the grblUpload example file from the GRBL library to your Arduino.

Close Arduino IDE and try to activate your machine through Easel.

IF THIS STILL DOESN'T WORK: Try to clear your Arudino EEProm configurations by going to File>Example>EEPROM>eeprom_clear. Upload this program to your Arduino. This properly clears your Arudino and allows for fresh GRBL installation.

It was only after doing this last step that Easel responded, and it is an amazing feeling when all of a sudden the likely insurmountable obstacles are gone and you're shocked that your thing is working just like it's supposed to. Anyway, hope this step solves that problem and opens that door for at least a couple of you.

Step 6: Progress As of Semester Deadline: THE 1D PRINTER!

By the time I had to present my project for this class that had served as maybe half an excuse to take it on, of course I was not as far as I had wished to be. But at the same time I was much further along than my Murphy's Law realism told me I would be by then. On the last high pressure day of building before presenting, I decided to polish up and perfect my x-axis for presentation, with the other motors wired to show their synched up parts in the operation, but not connected to the machine mechanically. My x-axis moves steady, smooth, and precise, and Easel works better than I could've imagined an online CNC carving software could work.

Step 7: So You're Not a Welder... (and Other Perceived/imaginary Problems)

As easy as I maintain every step of this was, it is a big project, calling on a few different skills or backgrounds. But it's all absolutely masterable. And if a certain detail of my DIY version seems impossible to you, go back to the fundamentals of what you're trying to make and you can probably discover a different way to do it. For instance, I followed my DIY mentor's lead on this project and welded my machine together. This had the blowback of making people look at it and think "Well, I can't do that, I'll never be able to weld." That's not at all essential. In his series Absorber notes that it could just as well be done with nuts and bolts, and that he just chose welding cause that's what he does for a living. The important thing is understanding the fundamentals of the machine you're trying to build. Once you understand it in that way, perfect methods and perfect materials for your build will present themselves to you everywhere you look. Just gotta throw them together.