First Tests:

Its pretty noisy, I think I may have to build a box to muffle the sound or my neighbors may ask me to stop!

Here are the first test pieces (sandpaper is to stop them moving around):

For the first one (on the left) the Z axis broke (screw fell out) and stopped going up and down. I fixed it for the second one, but realised I had a software issue putting the shape in the wrong place. The third one worked fine, so I tried to cut out a more complex shape next (the skull head of a monster from a computer game I'm working on). For the first cut I ran out of wood, but got the size right for the second.

By this point the end mill was starting to burn the wood a bit, and the Z axis was losing its position a little. Since then I've been working on the code (which is available on GitHub) and have started to get some really exciting results:

Tools I have used so far:

Drilling accurate holes has definitely been one of the hardest things with this project. I had to remake several parts when everything didn't line up quite right. When I tried to fit the bearings onto the rod after drilling a slightly wonky hole (sawdust under the part) it tore the balls out of two of the linear bearings.

Cutting accurate lines was also something I couldn't do, so everything was put together by eye. A drill press and a bandsaw would be really nice things to have! At least I can now cut and drill accurately (though very slowly) on my CNC machine.

The tap (like the Dremel) is one of those tools I never realised I needed until I had it, and now I find all sorts of ways to make use of it. It is a wondrous thing to own and everyone should own at least one.

Things I had lying around that have been used:

I'm using every single pin on the Arduino. At one point I thought I was going to have to buy a Mega, but then I realised you can use the analog pins as digital ones.

Things I have had to buy (so far):

Total so far (including postage): £83.73

Not too bad, considering a 3D printer comes in at around £400 minimum last time I looked. Everything was from ebay. I nearly abandoned the idea when I realised how expensive metal rails are. I did not expect a quarter of the cost of the project to be on those.


Since the limit switches came in packs of 10 I decided to keep things simple and try and use three of them to keep track of the position of each axis. I didn't want to build some sort of optical/magnet based thing if I didn't have to. I cut down a T nut into a square shape and fitted the switch so it would click in and out

The servo attaches to the threaded rod with a bit of aluminium tube with little home made set screws fitted to it. They fall out due to the vibration of course, so I probably need to superglue them in or something.

One of the axes wasn't counting properly so I changed the profile a bit which was a big improvement. I should probably do the other two. I also put tape on the switch to stop it wiggling on the nail mounts.


On the Arduino end I decided to keep things as simple as possible. You send a G Code command over the serial port and it executes it and sends back confirmation. I had a bit of a look for libraries for interpreting G Code and calculating lines and curves, but couldn't find anything so just wrote my own.

On the computer end I needed a script that could send a text file one line at a time over a serial port and wait for a response. I have a Macbook and a windows PC and I also wanted it to run from either if possible. I make stuff in Unity for a living so that was already installed on both and luckily it turns out with a bit of encouragement you can access the serial port on both platforms.

I also made a little script that can generate G Code slices from a 3D mesh in the unity editor. This was just because with a quick hunt I couldn't find any really great free G Code generating software, and the Unity editor is something I am very comfortable working in.

Once I have the CNC machine cutting curves I'll stick the code up on GitHub for people to pick through. I don't plan to make it particularly elegant or robust, but I had difficulty finding any source code resources when I wrote it so I feel like I should share.

Future Plans

My immediate plans are to sort out the Y axis drift I am experiencing, and experiment with soundproofing.

At some point I also need to use the CNC machine to cut a PCB of a shield for the Arduino, so that I can tidy up this:

I also have a solid state relay I am going to hook up so that the G Code can turn the Dremel on and off. I need a spare pin for that though, which is another problem I'm not yet sure how to fix.

I am really exploring uncharted territory for me, so any advice/critique/thoughts welcome!