1st CNC machine

Dremel CNC

I made a small desktop 3 axis CNC milling machine during the xmas holidays in 2008 and completed it sometime in Jan 2009. The project was inspired by another homemade desktop CNC project and motivated by boredom. The cutting area is about the size of an A4 paper.


The general work area is shown in Figure 1. The milling machine was made from common parts that can be found at Bunnings (Australia) or automotive stores. I’m using stepper motors from an old laser jet printer, a computer power supply for 12V output, an off the shelf stepper motor controller from the US, and a Dremel 300 as the milling tool.

Figure 1: Work area

Figure 2 shows the milling machine from the front.

Dremel CNC
Figure 2: Front view of CNC machine

Figure 3 shows how the threaded rod is connected to the stepper motor using a rubber hose for the coupling. I stole this idea from the Easy Desktop CNC mill mentioned in the intro, pretty clever.

Figure 3: Threaded rod and stepper motor coupling using rubber hose.

The threaded rod and nut are mounted to the base using plumbing copper brackets, as shown in Figure 4. There was a noticeable backlash using one nut so I used two nuts. Originally, I used a plastic base but the compression due to the bracket on the nut caused a slight bulge and created an uneven working surface. I replaced it with a 4mm thick aluminium sheet.

Figure 4: Thread/nut mount. Two nuts are used to reduce backlash.

Figure 5 shows the ball bearing support for the x-axis rod. The ball bearing is needed because the long rod wobbles quite significantly, where as the other axis are short enough to remain rigid. I used a piece of rubber hose to make a tight fitting between the rod and ball bearing. I appeared to have misaligned the bracket slightly in this picture.

Figure 5: Ball bearing support for the x-axis.

The parallel port stepper motor controller is shown in Figure 6. I used 3 EasyDriver controllers for each motor. These controllers really are easy (like shooting fish in a barrel). They accept step and direction as input, 4 wire output for the bipolar stepper motor and 2 input for power (from 7V to 30V). On the board is an adjustable current limiter, which means you don’t need to build a separate voltage regulator for the stepper motor. The controller is set to 1/8 micro stepping by default. The controller works without a heatsink but I added two fans to make sure they run cool. There was a time when the motors were acting funny and jittering randomly on a hot day. I didn’t figure out if it was the motor controller or power supply. The two holes for the fan was cut using the milling machine but due to the plastic melting they came out pretty rough

Figure 6: Motor controller using the EasyDriver board.

Figure 7 shows some of the Dremel tool bits I have been experimenting with. Some have been burnt due to some rather ‘ambitious’ milling of the MDF wood.

Dremel tool bits CNC
Figure 7: Dremel tool bits used. Some of the tools are burnt.

Figure 8 shows Tux (Linux penguin mascot) engraved on wood, one of my first tests.

Tux CNC on MDF wood
Figure 8 shows Tux (Linux mascot) engraved on wood, one of my first tests.


The milling machine was controlled using EMC2 (Enhanced Machine Controller). It runs on the Linux platform and requires a real-time kernel to be installed. I used their LiveCD (Ubuntu) and did a fresh install on to the desktop computer. I found that turning off non-essentials like the soundcard improved the latency a bit. For doing 2D designs I used QCAD. To convert the DXF format from QCAD to G-CODE (used by EMC2) I used dxf2gcode. The workflow can be summarised as

Design in QCAD -> dxf2gcode -> EMC2 -> Final milled product

I decided to test my machine out by choosing to make a gift for a friend’s birthday. I wanted to engrave a happy birthday message plus an anime character (Luffy) from One Piece, which appears to be her favourite anime because she would not stop raving about it. I wanted the engraving to be able to stand upright so would require a separate base to be milled. The first step was to hunt around the net for a suitable image. I chose the following image below

The next step was to import the image into QCAD and trace over it and add the happy birthday message as shown below.

Having designed the engraving, I now needed to make the cut out shape. I chose a simple design with some curves to test how well the machine can handle them. This piece will be mounted onto an oval wood piece.

The design is now converted to G-CODE using dxf2gcode. I made two separate files for the engraving and cut out shape because dxf2gcode doesn’t handle different layers individually (engraving and cut out shape).

Here is the final product. The hardest part was milling the MDF wood! MDF is quite tough and harsh on the tool bits and creates a lot of dust. I had to wear a dust mask and have a vacuum cleaner nearby to clean the mess it left. The oval piece had to be cut across multiple passes. I initially used 2mm per depth pass but found it would leave burn marks on the wood and tool. 1mm was found to work well but not perfect. The problem was mainly due to MDF dust accumulating in the cut grooves. I either need to mount a vacuum hose or air gun near the Dremel to remove the dust. I sanded the oval shape down using the Dremel sanding bit but didn’t come out even, Would have been better to use sandpaper.

I should have also chosen a tool bit with a round head because the one I used, which had a somewhat pointy tip, left white residue marks in the grooves. Other than the problems mentioned, the results are not bad for a first project.

Luffy CNC

33 thoughts on “1st CNC machine”

  1. HI,

    very good project!!

    Here my question for you: do you need only easy driver for send Gcode from Parallel port to Bipolar steppers or do you need on another chipset as arduino ?
    For power can i use PC POWER 230V – 12V/5V or i need to build a dedicated power station ?

    Thank a lot


    1. Hi,

      You only need the EasyDriver, don’t need an extra chip. Just make sure it’s a desktop computer and not a laptop.

      A PC Power should be fine. In fact, I originally used a PC power and it seems to work fine.

  2. Hello nice project!!!

    I am currently collecting info and materials to build my own table top cnc. My steppers are much smaller than yours. I noticed that your machine does not have any bearings at the gantry or on any other moving surfaces.

    My question is; How fluidly does this set up work? my machine will most likely have 3x the cutting surface of yours and need to maneuver heavier materials i.e 3/4″ MDF.

    1. I was using that CNC to cut mostly acrylic/perspex and PVC plastic. The thickest piece I’ve cut is 20mm (close to 3/4″) perspex at about 300x200mm. The work piece is not that heavy so the motors had no problem. The friction between the perspex/aluminium and aluminium/aluminium is very minimal because of the U-channels used, and smoothness.

      I’m not sure I would go for a stepper motor smaller than what I used for a larger cutting surface. But that’s a guess. Maybe you can make a generic motor mount hole so you can swap in a bigger one if needed 🙂

  3. Hi bro,
    I’m from Vietnam, I wanna setup a DIY CNC machine like this, I intend to choose Linux EMC2 as a software, could you please provide me some comment or document on how to setup the environment. like yours.
    Thank you bro

    1. Hi,

      It’s been a long time but I remember it wasn’t difficult. I downloaded the ISO from http://www.linuxcnc.org/index.php/english/download.
      Followed their instructions on setting up the machine, was straight forward enough. I used a parallel port, so the the only tricky part was knowing exactly which pin controlled what. The second part was to calibrate the stepper motors eg. degrees per step and maximum rotation speed. And that’s it. I don’t have any safety switches on my CNC so didn’t have to setup for that.

  4. Hi. I am experimenting with a similar CNC router. Could you tell me which bit you are using to cut MDF and plastic at which RPM and what feedrate? A few tests I’ve made I ended up burning my bits

    1. I mostly worked on perspex and PVC plastic. Those two plastic I found I could run at 15,000 RPM and the highest feedrate my machine could do, which was something like 300mm / minute (not that fast). This was using a 2 flute end mill. However, there was a time when I was cutting a hole inside a pre-made plastic box to house electronic stuff. I have no idea what type of plastic it was and remember seeing it melt quite easily.

  5. Very impressive cnc machine. Been searching the internet as to how I should set up parallel port pins with the easydrivers but there seems to be no infomation. I wondered if you could let me know any information on this? Thanks.

    1. If you search up parallel port pin you should see a diagram showing the input/output pins (pins 2-9). Just hook the easy driver to any of those and tell the CNC software which pin controls what.

  6. Hi there

    Just wondering about the easy drivers. Would it work if I build my own drivers like using the uln2003 driver chip or any stepper driver chip for that matter. I really like your setup and would really like to use drivers that are available her in South Africa.



    1. Hi,

      If it has the ability to micro step then it should work fine. Having said that, I have not actually tried running without micro stepping.

    1. A unipolar is fine as long as your motors are unipolar. At the end of the day if your software can correctly send a pulse and direction signal it’s all good.

  7. Thanks for the info. Good to know I can use unipolar steppers. I have 5 and 6 wire six wire steppers, will just connect 2 of the wires together on the 6 wire stepper as directed in the link I sent you.

  8. I was hoping to use all the same software as you are using. Just realized that the setup in the link uses 4 wires from the uln 2003 to the parallel port. I see above that you only used pin 2-9. This poses a problem as I will need 12 pins to interface to. How many wires did u use between each driver to the parallel port. Would you suggest that I rather use bipolar motors rather.

    1. In that case you want a driver that only needs two output pins to drive it, pulse and direction, whether it be bipolar or unipolar. Bipolar has less wirings, which is always a nice thing. Performance wise, I don’t know any major difference between using unipolar or bipoilar.

      If you have 3 motors, you should only need 6 out of the 8 output pins on the parallel port. Leaving you two spare for other purposes.

  9. Hi there

    I just finished my cnc machine. Thanks for the inspiration.

    Just wondering if you don’t perhaps have the gcode for tux.


    South africa

  10. Hi all – message to kevin…also built a machine using ardunio and usb – works great – was wondering where in SA u are,,,,,,

  11. Hello and thank you for sharing this project.
    Since I’m a newbie in CNC’s world, I’m documenting to make my first small CNC; most likely I will take inspiration from you. Do you think this structure is capable to mill PCBs?

    If I may, I would like to ask you a question. I did not understand how you made the structure of the Z axis of the CNC. You have some more pics from which I can understand how it is made? Thanks in advance 🙂

  12. oooops sorry.
    Now I read your comments in which you say that the CNC has been disassembled, sorry again for my previous comment. I’ll try to come up with something for Z axis 😉

    thanks and hello from Italy

Leave a Reply

Your email address will not be published. Required fields are marked *