Gomi – scrapmetal CNC

  1. Intro
  2. Construction
  3. Electronics


Back in 2012 I was coming up with the idea of building a CNC machine from scratch. The maker scene wasn’t as big back then and the 3d printer revolution hasn’t happened yet. But since I had hardly any money back than simply buying one wasn’t an option anyhow… So my idea was to build the machine mostly from junk lying around at my stepfathers workshop. This is also what inspired the name “Gomi” which basically means waste in Japanese.

Using junk as much a possible means no new aluminium profiles, no fancy new linear guidings, no new frequency inverter, no breakout boards, no stepper motor control boards… actually, nothing already finished at all (and if, only for a good deal). Junkdealsers and flea markets are what you’re aiming for.

If you’re going to collect parts from those sources you can’t expect to gather all the necessary parts within a couple of visits. All the stuff you’re going to see was acquired over a period of at least two years. Visiting various scrap merchants and markets all over Vienna (which has an amazing repertory of flea markets btw) really made me realize how much perfectly working, useful and sometimes extremely expensive stuff gets thrown away. In some deals I’ve paid less than 4% of the original value. I’ve seen heavy machinery worth thousands and thousands of Euros being sold for less than the steel price it was made from (e.g. a couple of 7m long lathes from an Austrian steel concern). Let’s start by showing off some of the materials I gained.

One of the first things I was grateful for was finding a solid ground plate to mount pretty much everything else on. It’s a casted aluminium plate, about 50x25cm. The same day I also got a 25mm thick aluminium heating plate which looked suitable as basis material.

Also from a scrap merchant is the following linear guiding. Originally it was 3m long and had three bearings. The ball screws and matching bearings are one of the few things I’ve bought new on ebay. They already made up about half of my whole budget with 230€. To save on the linear guide for the small z-axis I also bought a 16mm linear bearing which will run on 1.2210 steel and substitute the heavy duty guiding.

On the electronic side of things I was able to dig up a milling spindle (actually used for dental stuff) for free and a Control Techniques – Commander SE VFD for 150 bucks. Not an amazingly good deal on the VFD, but since the spindle needs up to 7A I’ve needed quite a powerful one… As I learned later the hardway the friggin thing wasn’t able to power my motor. I’m still not sure why since it should easily deliver the 7A, but apperantly the combination of very low voltages (~10V at the lowest frequency) and high currents drives the VFD I bought into an error mode. On the positive side the companys service is amazing! That thing is probably +15 years old but the guy from my countries service desk did really know his stuff. Anyway, I came up with another really really amazing time consuming idea! Lets built the VFD from scratch! Further details can be found in the VFD article.

As you can see spending some time on scrap yards and flea markets was pretty much worth it. Of course this wasn’t all the materials I actually used. I bought a couple of smaller aluminium plates here and there, different profiles, and some of the stuff I already had lying around at home.


Not starting from scratch but already having certain materials you’re bound to makes work a lot harder. I had to come up with a design for the portal. My stepfather had a pretty good idea on this, which could be done with using only the aluminium heating plate. Those two parts are building the “bridge” of the portal.

Sawing and milling those parts turned out to be harder than I thought because of the high viscosity of the heating plate. The finished parts got a surface treatment with a messing brush.

Right before I started mounting the linear guidings and the pillar parts to the ground plate I milled the first motor mount and checked that there was enough space for the x-axis bearings.

Then it was time to set up the portal on the ground plate. In order to do that I started mounting the cut to length linear guides to the sides of the plate. Working with linear guidings for the first time I quickly discovered that the holes in the guiding tend to be 1mm larger than the actual screw it was made for (e.g. my linear guiding had 9mm holes for M8 screws). I guess that amount of clearance is made for adjusting the whole thing before finally mounting it. So I used a dial indicator for precise positioning before I shot two bolts through the guiding into the plate on each side.

4mm bolts finalized the process and fixated the first axis.

Pretty much the same thing had to be done for the transverse axis.

We are a couple days work in by now and the project takes form.

The following couple of days sucked a lot. Our workshop got flooded because of a surge some local work on a waterpipe caused. Since a god damn celling pipe broke the water splashed fountain-like all over the cellar… Although we cleaned everything to the fullest within two days we couldn’t safe everything from some surface rust. =/
Anyway, followed by our little disaster I started working on the height axis. Since using a linear guiding for the, just a couple of centimeters long z-axis seemed a little overkill, I decided to take a different approach. I ordered a 16mm linear bearing on ebay and 16mm diameter silver steel (1.2210) to act as rail. Silver steel is expensive as f*** btw…

Since everything went too smooth till now I decided to drop the finished turned axle on the ground. Well… ok, it fell, but guess what, the axle got a little hack from the fall, which is directly in the way of one of the running balls of the linear bearing. Brilliant.

I placed the second axle I turned in a box, just in case. For the mount I turned a little block and cut it in half. I also created a plate which will hold all the bearings for the ball screw, the mount for the axle and the connection to the larger ball screw from the y-axis.

To level the ball screw nut and the linear bearing I’ve used a thickness gauge. I also just realised, that german is still my favourite language when it comes to naming mechanical stuff. A thickness gauge isn’t just some “gauge” for us… There are special words for everything.

Adding more and more parts the whole construction started to become kinda heavy. So I decided that the next steps must include a pedestal to increase the overall stability. Nothing too fancy, it’s just a 40×40 square tube. The screws for mounting the whole thing were sunk into aluminium tubes.

Looking at the last two pictures you can see the motor mount I created up front. Honestly I didn’t pay too much attention on where to place the motors. Since the one for the x-axis you can see on the picture later on only misses a moving linking sheet of the portal by like 2mm I consider myself rather lucky…

Time for a little overview again.

The next step was to create some muffles as connection between the flanges of the ball bearings and the linear guidings. Made three of them and another day was gone… To my defense they are rather complex though, at least for what I consider “complex” when milling and lathing.

After the blocks were done I started linking the ball bearings and the linear guidings with blank sheets and other constructions. I’ve created a bent sheet between the two pedestals and the muffle mounted on the ball screw. That was the sheet I meant when I talked about how close it fits beneath my motor…

…whose mounting plate could now be screwed on as well.

Another motor mount for the y-axis. This was made from the last… lets call it debris of my heating plates.

As next step I assembled the whole z-axis plate to the y-axis linear guiding. As I mentioned before the linear guidings come with 9mm diameter holes which is why I lathed little bushes to make my M8 screws fit tight.

Linking the actual portal (y-axis) with the z-axis proved more difficult than I imagined. The ball screw for the z-axis and the linear guiding are not exactly aligned. One sits with its back to the other one. Another aspect is that we now have to create a motor mount which actually moves around and preferably also sits at the back of the linear guiding. So what I came up with is to create some kind of “L”-shaped cage which could hold the motor and connect the ball screw with the z-axis and mounting plate of the spindle. I started by creating the sheet which holds the motor and then milled the “cage” which links the whole thing with z-axis.

The rectangular hole in the top should fit the motor. The extra sheet was necessary to bring the motor shaft and the z-axis ball screw to the same level.

I love how the frontplate of my cage (= the spindle mount) already looks like swiss cheese and how I got a lot of screws to place…

Now with all the parts coming together I could finally assemble the cage, the z-axis motor and the whole z-axis spindle mount with it’s bearings and guidings.

I know that self-praising sucks, but looking back at that day I must say that this was probably the most productive days of my entire life so far. Funny thing though… that was in September 2012 and I back then I had thought… “hey, I’m almost done!” Turns out I’m not even half way there yet, but let’s continue shall we? With the ball screws and the guidings finally linked the mill now actually looks like it could work some day.

What’s still missing to this point are drive belts and gears. I ordered mine from a Czech company called TYMA. They carried the three 5M belts and gears for like 1/10 the price I would have paid in Austria… For some reason I didn’t take pictures of the belts alone, but I guess you know what a belt looks like.

As I learned later even the slightest misalignment causes the belts to run off the gears which is why I added plates at the end off every single one of them. The gears itself respectivly got fixed with setscrews. To make the setscrews do their job I drilled a little hole into each motor shaft. This was actually kinda sketchy… Drilling on a completly round object ain’t fun, even with a post drill.

After that I mounted the belts on all three axis.

Alright, so if you know a thing or two about gears, belts and drives you probably know that usually you need a tensioner in order to achieve the right amount of… well… tension. If you know that, good for you, I didn’t which is why my y-axis didn’t hardly move at all.

Lucky me I had the x and z-axis of my builds calculated estimated so precisely that I only had to re-do my y-axis and adding a tensioner. So what I came up with was this… thing. It’s a bearing on a stick… with a thread… kinda.

Mounted that thing looks like that… The slothole allowed me to finally tension the belt the right amount.

To further improve smooth movement of the y-axis I had to fine-tune the muff of the linear guiding a bit.

At this point the mechanical part was already looking pretty good. What was still left was creating a spindle mount and adding limit switches to all axis. I’ve started with the former and milled a plate and two muffs to mount the spindle motor to the z-axis.

Afterwards I’ve given my attention to the limit switches and so I created a couple of sheets to place one switch at each end of every axis.

As the name suggests each limit switch acts as an e-stop which holds the motors as soon as the machine activates it, but also as homing switch for calibration during initial startup.


Building CNC electronics is mostly about handling stepper motor control, monitoring (limit switches, voltages, …) and some simple logic like turning an axis on or off. Although most modern systems use USB as connection of choice I went with the oldschool way of using a parallel port. This allows for the simplest imaginable interface to the PC with one line per signal. To stay flexible I’ve split everything into three smaller sub-PCBs.

  1. Parallel breakout board
    Breakout for up to two parallel ports
    Option to put pull-ups/downs on every signal individually
    Distribution of supply and GND
  2. Control board
    HD44780 display output
    Monitoring (charge pump, voltages, …)
    Inputs for limit switches
  3. Motor driver boards
    TB6560 based driver up to 3A

The parallel breakout and control board ended up being two-sided whereas the motor drivers fit on a single side. Because of the simplicity of the design I’ve etched all PCBs at home.

Finding a suiting case in the depths of my stepfathers workshop wasn’t difficult. From the pretty disgusting looks of it I assume that I had picked the former habitation of a little mouse family…

Apparently mice really like to nibble on isolation?

Anyhow, I started to cut some openings into the front and back. Motor connectors, parallel and serial ports, USB (for power) and some LEDs…

Some spar varnish makes it shine like new.

The groundplate was equipped with M3 spacers to allow mounting the PCBs.

Once the varnish has dried I started putting all the elements together. I’ve mounted connections, display, voltmeter, switches, a fan and so on.

Afterwards I worked on the internal connectors which means crimping a lot of cables… As every parallel port features 17 IOs this was quite a monotonous task.

And then I still had to do the wiring from parallel breakout to control and to the motor driver board.

So I pretty much spent an entire day on that alone…

In order to prevent the TB6560 drivers from overheating I’ve also added heat sinks which I cut together from old CPU coolers.

At that time I’ve been very eager to test things so I set up a (temporary) workplace and gave the whole thing a shot. I was pretty pleased with the results as everything worked flawlessly. The test software (based on the french RTOS PICOS18 btw) produced some display output and switched the motors on.