Overview of Standard and Alternative CNC linear guides – part I

Precision and strength of CNC machines is highly dependent upon the linear guides on which elements move. There are many many different ways CNC axis can move around. Part I is about general overview of existing linear guides and some alternatives. Part II will be about experimentation with T aluminum profile for use with small CNC machines.

Highly precise machines usually use linear motion guides like the one from HiWin. Such linear motion solutions are due to their complexity rather expensive. MGN12 model usually used in making high end Delta 3D printers can cost up from $40 for 40cm and up depending on length.


But there are alternatives. The most known alternative is MakerSlide which started as Kickstarter project. In europe amberspyglass offers 1m lenght makerslides for £12.00.

It is good for medium sized machines but when going for small to tiny machines the where size and weight is an issue they are not that practical.


Makerslide offers good rigidity for the price. It was aluminum profile of choice when building Shapeoko  CNC machines.


Slightly beefed up version on makerslide is c-beam and V-slot from Openbuild. Also OpenRail is a good add on to standard aluminum profiles to make them into high end linear rails.


Also standard aluminum profiles 1010 or 2020 are popular in making 3D printers, especially Kossel mini.

openbeam-3-pieces-of-750mm-black-anodised-openbeam (1)


Somewhere in between of HiWin and Makerslide are guide rods. They can be purchased from tiny to massive diameters and are used all over the place.  They are not that expensive by them self but require additional items to make them fully useful.


Such guides offer a wide array of carriages that can ride on the rail.


Now, all of these are more or less standard ways of making CNC machines move with precision. While making smaller or huge CNC machines such linear guides are sometimes impractical and other times prohibitively expensive. Thus I needed an alternative solutions for linear guides. While experimenting it was found that almost anything with little imagination can be used as rails for CNC machines.  Especially pipes, square, T and V aluminum profiles.

Note: I dont have images of all experiments so Im using internet images.

Some of examples are:


V profile, good for large scale 3D printers as they have no Z axis force put on them.  Easy to acquire and fast to guild.


Simple setup for use with medium CNC machines. Has no limiters so prone to wobbling.


Rather robust setup for use with square or round pipes.

One of good examples of alternative guide lines is Mostly 3D printed CNC. Files and videos can be found of thingiverse.




CNC movement designs

In 3 years of building CNC machines I’ve built almost all of popular CNC  movement styles; from  Delta, CoreXY, HBot and classic 3 axis Cartesian machines.  Each of mentioned movement systems has its advantages and disadvantages. But the most interesting is Delta.

Delta configuration is by far the most attractive to watch move. It’s almost, no, it is mesmerizing. When my Kossel is working I can stare at it for hours.  Several different configuration of motors exist but the movement style is the same. DeltaRamki

Advantages of Delta setup is that it can move rapidly, much more than any other configuration (except SCARA?). Its disadvantages are small operating area and as you make it bigger (except height) it gets more and more complex.

All styles listed here at the end of the day work in Cartesian coordinate system but only one is thought about when that name is used without any additional descriptions or attributes.

CNC machines are traditionally 3 axis Cartesian machines. It’s rather simple and intuitive system where each of the axis has its own motor. Such arrangement has little to non disadvantages if you keep it small and tight. As soon as you go to 1m and above in any dimension, things start to fall apart. The stiffness of machine needs to be increased which introduces additional cost, weight and often additional motors as 1m length of any material will tend to bow if driven from only one side. The opposite side will tend to just lag behind as motion vector is transferred to it. If machine is not stiff enough the lag can be such that the machine is unusable.


In addition to those issues, with larger machines there is an issue that motors travel together with axis. It’s not really an issue as it increases stiffness but complicates cable routing and adds weight to axis limiting the acceleration and speed at which it can move.

There are workaround for those issues but at the end, they are workaround solutions that do nothing to solve underlying issues and can introduce a whole set of other issues. One example is removing the need for Y axis to move and instead moving the work bed. Work bed is usually a flat stiff sheet that can be moved using one motor compared to two for Y gantry. But then, you are moving your work piece and adding stress to it. If the workpiece is brittle Y axis can not move or accelerate fast. The same is true if work piece is heavy.

Still, it is the most popular and useful movement system.

With popularization of alternative uses of CNC machines for novel uses such as 3D printers and laser cutters new movement systems and arrangements are being developed. Most of them are not intended to be used with large machines or machines whose axis are under stress like when cutting material.

Take for example Hbot arrangement of belts and pulleys.

Hbot is a very elegant solution for a lot of issues. Motors are stationary and due to pulley system there is a lot of torque. But, such arrangement needs to be built under tight tolerances. If belts become loose accuracy will be decreased drastically  and immediately. With that in mind it is still the most elegant and practical solution for X and Y axis for a CNC machine that has little to no stress on gantry, like 3D printers or Laser cutters. Additional information about this can be found on Double Jump webpage and FABtotum.



To solve issues of slack belts CoreXY was developed and is my current favorite when building smaller machines. It eliminates the issue with slack belts but to do so adds an element that is frowned upon in engineering.


And that is crossed belts that rub against each other. That is a huge point of failure and a real problem but doesn’t need to be a dealbreaker. Several options to solve this exist.

One is to just leave it as it is and put up a finger to classical engineering practices. Just replace the belt if and when it gets worn out. Depending on use of machine this could take years. My machines are now running for a year without any significant wear on the belts. The wear is minimal as not a lot of stress is put on them. They move very light gantrys with 3D printer heads or laser assemblies. If it were under big loads like big spindle then it would be another matter.

Then there is introduction of separator in form of additional roller or rollers that are placed where belts meet. Roller/s are made of non abrasive material like delrin, teflon, nylon or polished steel and create a smooth surface against which belts can move without wearing and tearing. In a pinch even ABS can be used as separator.

Third option is the most complicated one and that is to place each motor and belt on different planes. One motor and belt is just below the other for the height of the belt itself. This eliminates the crossing of belts but unnecessarily increases complexity of the build.


No separator and option with delrin separator is usually enough for normal and low speed operations.

Styles mentioned here are just the most practical, but still, just a slice of possible movement styles. There are a lot of different ones but the rest are more or less gimmicky.

Some of more alternative movement styles:


The end of a Era and start of a New, IoT era of hacking hardware

Samurize is done, gone. Its website is now just a shell. Files can be access directly over ftp but link to them have been broken on the site.

Vepar Config

Samurize is, was “an advanced system monitoring and desktop enhancement engine”. I’ve used it for years but now there is no point as it will not be supported. Community is trying to open source it but libs and code have become cumbersome and compiling errors are to many.

For some reason, there is no interest in keeping such tool alive. Which is a huge surprise to me as I found it extremely useful, and have participated in plugin and theme development.

VeparVUOne of my most popular plugin with last count of over 6229  downloads was KeyLed.  It allowed the user to define triggers and to control the status leds on keyboard as VU meter, HDD read/write indicator and much more. The trick is that the trick of controlling your keyboard lights is a very, very old one.  Like the 2B2B2B41544829 bug in telephone modems, , the COM1 in zip files or the legendary 2600hz. Sigh…The good old days …. … are coming back 🙂

Those issues are so low level, so embedded in the operation of devices or firmware that some of them have not been solved up to this day as it would require too much investment of time and money to fix them and it is easier to just keep calm and quiet hoping no one notices.

Old issues and exploits are a good starting point when looking at future of IoT security problems. Some of those problems have already surfaced especially with most of current devices being shipped and installed with default or no passwords. What is your bluetooth device password? Is it 0000 ? Now, imagine that you have bluetooth mic or data storage.

The next era is of disposable powerful and cheap interconnected devices that are full of holes and possibly have access to your personal data. What is even more worrisome is that most of those devices will be connected to some device that interacts with its environment. Devices such as garage doors, temperature controllers, wireless lights. I would suggest watching Mr. Robot or at least reading this.

This is on its way, and that train can not and should not be stopped as it represent an evolution of internet. What you need to be is informed so you can ask proper questions and be mindful and critical of producers of IoT gear.

One of the best examples of weak security in embedded systems is described in a document  Internet Census 2012 – Port scanning /0 using insecure embedded devices. It describes one person’s quest to do a scan of entire internet for the last time before the change over to IPv6. At one point it contained over 420 Thousand Clients out of which most were embedded machines; Coffee machines, refrigerators, routers and other machines with weak, default or no security. It is one extremely interesting read, I would highly recommend it.  I especially liked and enjoyed the joke at the end.

Now imagine if such project had malicious intent and place it some 5 to 10 years in the future where a lot of additional thing will be in IoT. The launch of Stuxnet showed just how much damage a piece of code can do, and not to software which for most people is rather abstract but to physical objects.

Now, back to KeyLed or low level Port 64h. It’s not an exploit per se but a good example of hardware hacking and works only on keyboards connected using PS/2 connector, not USB.

Computer communicates with keyboard on I/O ports 60h which is data port, and with port 64h which is Command/Status port of keyboard. By writing to port 60h we bypass the system and change the LED indicator for eg. Caps Lock to off without changing the Caps Lock status. Caps Lock stays on even if LED is off. This enables us to play with keyboard lights without any worries.

Port 64h is used to detect if keyboard is ready. We do that by waiting that status of port 64h becomes 0. Then we prepare keyboard to change keyboard light by writing EDh to port 60h and then wait port 64h to once again become 0.

The waiting for 64h port to become 0 is a safety measure that can be bypassed but I would recommend against it. You would still be able to change the LED state but by waiting for ready state you remove some unwanted artifacts like missing keystrokes etc.

After we prepare the keyboard we can turn off and on Keyboard lights. By writing to port 60h combinations of

  1. Caps Lock = 4 or second bit = 1 (00000100)
  2. Num Lock = 2 or first bit = 1 (00000010)
  3. Scroll Lock = 1 or zero bit = 1 (00000001)

We can selectively turn on and off lights on the keyboard without changing capslock or numlock status.

Windows XP introduced restrictive methods for accessing hardware ports, most of IoT devices deployed currently around the world that have Over the Air update enabled (OTA) have no security check. This enables an attacker to basically overwrite the embedded devices firmware with his own and do it remotely with little to no risk of detection. An attacker would need to know the target device make and model which is, trust me,  not that difficult to find out.

So, to bypass that restriction we need a way to access those hardware ports in Windows. Luckily, there already is a library that can to that for us. In the good old Dos there was Int 9 and direct access to ports but not anymore. Library that I used was Inpout32.dll. It is open source so if you really like it you could incorporate it directly into your applications removing the need for “one additional file to carry around”.  After registering the dll functions in your code you can simply do the following:

Procedure Set_keyboard_lights(n,c,s : boolean);
	val : byte;
	val := 0;
	IF s THEN inc(val);
	IF n THEN inc(val,2);
	IF c THEN inc(val,4);
	repeat until (inp32($64) AND 2)=0;
	repeat until (inp32($64) AND 2)=0;

Procedure presented will take three parameters that can be either true of false; NumLock Status, CapsLock Status and NumLock Status.

This small snippet is all you need to control your Keyboard Lights. Have Fun!!