Introduction: Homemade CNC Machine

About: Thank you, Instructables!! I have removed many of my Instructables as along with being cringy :P they lacked proper documentation (thus difficult to replicate) and some didn't even work properly. Please enjo…

Hi there I've been here after a long time, and this time I've made a huge project as compared to my earlier ones. This is a full-sized 250 mm X 300 mm work area CNC machine and more interesting things is that it was made in 60$ only. I got some time in my summer vacations and this time I thought to make something apart from my daily work,I can say that it is a fully functional prototype. It is a full version of a CNC. I failed many times during this build but at the end I got precise CNC machine. In the following steps you may notice two different versions of it actually the larger one doesn't work properly so I made smaller one with work area of 25 cm X 30 cm. This is my longest instructable ever I am going to mention each and every thing I faced and did during the building time. I can easily see many mini CNC's on this website made from old floppy drives and CD ROMs. First of all I thought to make a mini version of this CNC but due to a little difference between the cost of mini and full versions I decided to go with this one. I really need a 3D printer to keep making projects in future, if you like this tutorial please don't forget to vote!

Update :- I just recorded a video of it drawing a circle.

See this video of my CNC working with all axes moving :-

Step 1: Failure and Success

As I mentioned in the introduction that I failed many times. To give you a clear picture of making your own CNC mill I will write every success and fail during my build. The larger one worked fine but it wobbled around which annoyed me and the nema 17 motors sometimes weren't enough to move heavy load. The first picture is of the fail version and the second one is of the final successful version. The smaller one drew straight lines with full accuracy I ran rectangle g-code in the video,possibilities are unlimited.

NOTE :- You can make your own g codes using makercam or inkscape. Please consider this.

The whole making process :-

Step 2: Things Required

The list is a bit long :-

  • Nema 17 stepper motors (1.8 degrees.4.4 kg cm torque) X 2
  • 28BYJ-48 5V stepper motor
  • A4988 stepper motor drivers X 3
  • Rainbow wire,connecting wire
  • DC Port
  • 12V 5A DC power supply
  • Arduino UNO R3
  • Copper clad board
  • Printer with gloss sheets
  • 0.8 mm drill bit
  • Drill machine
  • 100 uf capacitors X 3
  • 2 component adhesive
  • Male headers
  • Female headers
  • Plywood
  • Thin nails
  • Multi-meter
  • Soldering iron and solder
  • Scissors
  • Screwdrivers
  • 3 mm drill bit
  • Ferric Chloride
  • Containers
  • M3 screws
  • 500 mm screw rods X 2 (300 mm would be OK if you want a successful version)
  • Smooth rods X 4 (Required for fail version)
  • Flange nuts 8 mm X 2
  • Flexible shaft couplers X 2
  • Nipper
  • Electric iron
  • Hot glue gun with glue sticks
  • Sand paper

Step 3: PCB and Circuit

In the schematic A3967 stepper motor drivers are used but I used A4988 drivers because they are compact and can provide more current than easy driver (A3967). No need to worry you can use any coding and pins are same only you need to adjust current limits shown in further steps. I made my own PCB and the eagle file is provided below. But I am sorry because it is not a shield,the USB port didn't allow the shield to rig onto arduino. I could take USB port apart and solder the connections using wire but this complicated the project and your arduino would be a bit difficult to work with. So I took that apart and instead used rainbow wire to connect it to driver board. Shield works with both arduino UNO and Mega. The pin configuration is totally same.

I can explain how it works! I chose A4988 because it has a built in translator and can make motors move using just two pin. One controlling :-

  1. Dir for direction
  2. Step for giving command of the no. of steps to be moved.

Step 4: Flashing GRBL to Arduino

I used Xloader to flash GRBL to arduino. I have uploaded zipped folder of setup of Xloader below. Install if required and open software. Select the COM port of your arduino and select its model I mean UNO,Mega,Nano etc. Under file choose the .hex file I attached below and then click on upload. Your arduino's tx and rx pins would start blinking and it would be uploaded. Download GRBL controller from random websites , see on zapmaker and install it on your computer keep in mind the operating system of yours,I mean 32 bit or 64 bit either mac os or linux.It will run on a vanilla Arduino (Duemillanove/Uno) as long as it sports an Atmega 328.

Note :- If you are using mega then you can flash 0.9 version,I have attached 0.8 version.

IMPORTANT INFO WHEN UPGRADING TO GRBL v0.9 :Baudrate is now 115200 (Up from 9600).Homing cycle updated. Located based on switch trigger, rather than release point.Variable spindle is now enabled by default. Z-limit(D12) and spindle enable(D11) have switched to access the hardware PWM on D11. Homing will not work if you do not re-wire your Z-limit switch to D12.

Step 5: Etching PCB

Take print outs of .brd file I attached before and go to file>print>selct monochrome and then print it on glossy sheets. We'll be using toner transfer method to etch our PCB. After the print is over check accuracy by placing components over print and finally cut the specific portion out.

Step 6: Transferring Toner

Set the heat level of your electric iron to maximum. Place the cutout over Copper clad board after rubbing it well with sandpaper to remove oxides and stains. Press iron over paper for 10-15 minutes moving it over PCB with great pressure and finally dip it in warm water and slowly rub paper away from copper clad board.

Step 7: Correction of Mistakes

Sometimes some tracks either rub away or are not transferred onto copper clad board. Use a permanent maker to cover those traces. I made two because I knew one may be destroyed while drilling or soldering being on safe side I made two PCBs.

Step 8: Etching

Take about 20 grams of ferric chloride powder and mix it with 100 ml of water (use warm water for faster process). Dip our PCB in solution and you'll see after 20-30 minutes the copper besides traces wear away and you get a nice looking PCB. Wash PCB under cold water. Now you can hold your PCB with bare hands.

NOTE :- Safety is must, use mask,gloves and safety glasses while performing this , otherwise you may be injured. Ferric chloride can stain anything in its way.

Step 9: Sanding and Drilling

Using sand paper sand the black traces away and get a clean PCB. Use either 0.8 mm - 1 mm drill bit to drill all the holes.Drill carefully a small mistake can break lines of your hand-crafted PCB.

Step 10: Soldering

Switch on your soldering iron and solder all the components as directed in schematics and PCB layouts.First of all solder resistors and then other components.Don't apply too much solder all little quantity enough to make the pin and line in contact would be enough!!

Step 11: Tips

For the male headers push the small pins inside to increase their length. If you are making a shield by removing USB port. Use rainbow wire otherwise to make connections to driver board. You might be thinking that there are no connections for the supply line of 12 volts as well as for the step and direction pins of driver to digital pin holes.

Step 12: DIY Ports

Use male header strip ad jack and female headers as ports. Use it for motors and for connections from arduino to driver board.

Step 13: Current Limiting of A4988

Arrange the whole setup and connections as given before and then apply 12 volts dc from wall adapter to gnd and vmot pin through decoupling capacitor near to 100 uf. To achieve high step rates, the motor supply is typically much higher than would be permissible without active current limiting. For instance, a typical stepper motor might have a maximum current rating of 1 A with a 5Ω coil resistance, which would indicate a maximum motor supply of 5 V. Using such a motor with 12 V would allow higher step rates, but the current must actively be limited to under 1 A to prevent damage to the motor.The A4988 supports such active current limiting, and the trimmer potentiometer on the board can be used to set the current limit. One way to set the current limit is to put the driver into full-step mode and to measure the current running through a single motor coil without clocking the STEP input. The measured current will be 0.7 times the current limit (since both coils are always on and limited to 70% of the current limit setting in full-step mode). Please note that changing the logic voltage, Vdd, to a different value will change the current limit setting since the voltage on the “ref” pin is a function of Vdd. Another way to set the current limit is to measure the voltage on the “ref” pin and to calculate the resulting current limit (the current sense resistors are 0.05Ω). The ref pin voltage is accessible on a via that is circled on the bottom silkscreen of the circuit board. The current limit relates to the reference voltage as follows: Current Limit = VREF × 2.5 So, for example, if the reference voltage is 0.3 V, the current limit is 0.75 A. As mentioned above, in full step mode, the current through the coils is limited to 70% of the current limit, so to get a full-step coil current of 1 A, the current limit should be 1 A/0.7=1.4 A, which corresponds to a VREF of 1.4 A/2.5=0.56 V. See the A4988 datasheet for more information. Place your multi-meter's red pin to potentiometer and black to gnd and measure the reference voltage.(source

Vref for Nema 17 was 480 mV

And for Z-axis motor 28BYJ-48 It was set to 35 mV

Step 14: Fail Version (You Can Skip the Steps, Where Fail Version Is Mentioned)

Wooden Frame:-

Mistake 1:-

I chose very thick wooden ply. This made the work difficult of hammering nails and joining everything also drilling holes for rods and motors.

This is simply a tray and bridge see pictures for better clarity.

Step 15: Some Things Were Right

I checked datasheet of my Nema 17 motors and was successful in drilling holes perfect for motors. Even the slider plates were perfect and provided very less resistance while moving across.

Step 16: Motors to Rods Via Shaft Couplers

As shown in the pictures slide and screw to tighten screw rods to motor shafts.

Step 17: Motor Mounting Tips

Carefully observe that the motor should be parallel to tray base. Otherwise in further steps this may cause problem. Also drill a hole directly in front of shaft.

Step 18: Fail Version (Role of Smooth Rods)

Carefully see how smooth rods are mounted parallel to screw rods. Meanwhile also mount the flange nuts using screws making the movement stable.

Step 19: Fixing Shaft Couplers

Use two component adhesive to join screw rods to motors permanently. This was helpful in both versions. It is good to leave it for 6-10 hours for perfect bond.

Step 20: Fail Version (The Y-axis)

It was mounted same as the x-axis but due to a silly mistake I had to use a block for keeping rods in place.

Step 21: Z-Axis

The part I got from 1990's CD Player. You can use today's CD-ROMs but you may need to make some adjustments for that. It was mounted on y-axis moving plate using a screw.

Step 22: Fail Version (Control Box)

Everything was fixed in a box on side of tray with holes for USB port and DC port. Yeah! it looked pretty well.

Step 23: Fail Version ( Done..........:-( )

Finally the fail version was completed but while testing I came to know that it wasn't of my use. So it was time to pickup tools again and get ready for hardwork!

Step 24: Changes (Extra Parts Needed)

Here comes the starting of the steps of successful version. The changes made were :-

  • Usage of drawer slides for less friction and smooth movement
  • Usage of thin plywood that would make drilling,cutting easier and make it more portable
  • Reducing the size of work area because the long threaded rods led the axes to wobble
  • No extra control box,everything fixed inside the machine

Step 25: Fixing Rails

First of all remove slider from rail and using screws fix it to tray.

Step 26: Making Slider

Find the length between two rails and cut a block of that size from thick plywood and again using screws fix it to sliders,also rig flanged nut base to block.

Step 27: Cutting Off Extra Rods

Use rotary tool to cutoff the extra rods and make our CNC look like a real CNC.

Step 28: Y-Axis

Same as earlier try making the bridge structure. And fix all the parts except one change ,I used only one drawer slider instead of two used in making x-axis. Same as earlier mount y-axis motor to bridge and screw down everything to fix everything.

Step 29: Final Finishes

Our CNC is ready to work but a z-axis would make it more useful as it would avoid extra lines. Same as earlier mount the z-axis. And don't forget to rig a pen to it for testing.

Step 30: Findings and Final Thoughts (Done!)

So now it is finished , I was able to find too many things from this project and was able to learn some woodworking also. At last I ran rectangle g-code and the results were awesome. You are seeing over-drawn shapes because I tried different sizes and numbers on same sheet! I am damn sure that it is capable of drawing all g-codes. Thanks for watching my longest instructables yet!

Please vote if you like this tutorial!

Don't forget to subscribe!

Thank you!


Beyond the Comfort Zone Contest

Third Prize in the
Beyond the Comfort Zone Contest

Trash to Treasure Challenge

Runner Up in the
Trash to Treasure Challenge

Automation Contest 2016

Second Prize in the
Automation Contest 2016