G300 - 3D Printed CNC Machine




Introduction: G300 - 3D Printed CNC Machine

About: Handyman by passion, engineer by profession

About 6 months ago I started designing a cnc machine that allowed me to carry out some milling works; the design phase was very demanding in terms of time because it involved both the mechanical and the electronic parts.
I decided to call this machine G300 because € 300 is the overall spending target that I set myself, which I was able to meet. I intend to use the G300 mainly on wood and plastic sheets (PP and PE) but I believe it can also be used for aluminum.


Before starting I analyzed some of the existing projects and I particularly appreciated the works of Nikodem Bartnik and Topsie, whom I thank for the contribution they have given to the world of open CNCs and for having given the community some beautiful projects from which, I too was able to draw inspiration.

In the creation of my proposal I was inspired by existing solutions and I evaluated each component with my personal ranking of importance:

  • does it allow me to meet the target budget?
  • is it an optimal solution?
  • is it strong enough?
  • does it have adequate reliability and durability?

I have therefore roughly established the characteristics of my CNC, which will consist of:

  • Frame with 2040 aluminum profiles;
  • 625ZZ V-Slot wheels;
  • GT2 fiber-reinforced belts;
  • Lead Screw for the Z axis;
  • 3D printed elements in PLA;
  • Arduino with GRBL;
  • Nema23 motors with TB6600;
  • Katsu router (Makita RT0700C clone);

For my applications I was interested in having a working area of about 600x450mm and a vertical excursion of about 60mm; the overall size of the CNC (excluding the electronics box) is about 1000x800mm. In case you require a different working area, keep in mind that the aluminum profiles in the X axis must be longer by at least 130mm of the required size, while in the Y axis by at least 160mm.



I have been using Fusion360 for hobby purposes for 5 years now and it has been of help to me on numerous occasions; therefore I chose it to make the G300, modeling in detail every single component necessary for the creation of my CNC.


The feature of Fusion 360 that I liked right away is the simplicity of the tools available, their potential and the graphical interface cleaning. There are also a number of modules that accompany you throughout the creation process: concept with sketches, 3D solids, mechanical analysis, render, and physical creation with the CAM.

The geometry I have chosen is quite square and regular; therefore also the modeling tools are simple and basic: sketch, extrude, stretch, move / copy, fillet, drill. Despite the relative simplicity of the controls, the design phase took several hours, obtained from my free time in a span of about 6 months; the revision of the pieces took me a lot of time as I tried to optimize every single element as much as possible. Optimized design involved: functionality, strength, and finally I tried to give a personal touch to what I had designed.


The three-dimensional model was then completed using the McMaster-Carr library, already included in Fusion360, with a vast assortment of small parts that allowed me to insert all the screws, bolts, nuts, washers, etc.
The few objects not available, or with dimensions not adequate for what I needed, I found them through the free library of www.GrabCad.com With a three-dimensional model, precise down to the tiniest detail, I was able to analyze every single element and make the appropriate changes since the design stage, eliminating the need for a preliminary prototyping.


I am currently developing a custom electronics for the G300 management which consists in the coupling of two separate Arduinos. The first manages CNC operations using GRBL software while the second is dedicated to managing the spindle speed.
In particular, the second Arduino reads the required spindle speed from the TX port of the GRBL and compares it with the real one, measured by an IR sensor, and makes sure that the speeds match using a PI / PID system. It also takes care of the emergency stop of the CNC in case errors are detected (send STOP signal to Arduino GRBL). I'm still testing the system and it's not ready to release yet, so I'm using a traditional circuit for now.



The main tool used is a 3D printer, with which all the main elements of the G300 will be made; a print surface of 20x20cm is required.

  • Screwdrivers
  • Wrenches
  • Allen key
  • Drill
  • Through Hole Tap ø5
  • Level
  • Caliper
  • Square/ruler
  • Two-component epoxy glue for plastic-steel


I created two pdfs: a flattened version useful for having an overall idea of the materials and another in which the parts are divided by component, more useful in the assembly phase. The pdfs are attached at the bottom of this step


Single Zip file:https://drive.google.com/file/d/1GZER1zVRVbrhGvulI...

or download the single files just below


Since I won the CNC competition it seems right to release all the 3D model I created. It can help you during the assembly phase or if you want to customize some components.
In case you want to make remixes, I invite you to always mention my source.


Since the precision of the printed pieces is essential, it is important to check the squaring of the 3D printer and check the dimensional accuracy of the printed pieces; a 20x20cm printing surface is required. I used a Tevo Tarantula with 0.4mm nozzle combined with the CURA slicer whose settings have been adjusted to increase the resistance of the pieces:

  • PLA because it is a rigid material, I do not recommend PETG because it is too flexible;
  • slightly higher than normal temperature to ensure better fusion, even at the expense of some small burrs;
  • layer thickness 0.3mm;
  • 30% grid filling;
  • at least 3 perimeter lines;
  • brim 5mm on the outer perimeter;
  • I printed the fill first and then the edge, the fill connections will be vaguely visible on the shell but this ensures a better connection between the two;
  • ironing finish of flat and rigid surfaces.

The stl files are already in the printing position which ensures the best resistance of the piece and the least use of supports. I used about 1.8kg of filament to print all the necessary components.


Strangely my Nema23 had ø4mm threaded holes and I thought it appropriate to widen the hole with a ø4.5mm tip and then make a new ø5mm thread. My 2040 profiles had ø5mm holes while the standard is ø4.2mm; so I had to thread them for a M6 bolt (and therefore enlarge the holes in the two side panels).

If your profiles are perfectly standard, thread them for the M5 and there is no need for changes to the other elements.

The M5 L75 threaded bars must be inserted in the components “Y carriage LA”, “Y carriage LB”, “Y carriage RA”, “Y carriage RB”, “X carriage A” and “X carriage B”; in the X panels they must be positioned both above and below. They will be fixed with two-component epoxy glue: for its correct use follow the product instructions; I left them to cure for at least a day.

To give greater rigidity to the 20mm plywood top, I made a 10cm-high grid of panels with a mesh of about 25x25cm; the reinforcements are in plywood to which I previously made the comb joints. I then fixed the pieces with pocket holes.

Assembly is quite simple and presents no particular problems but it is important to check its geometry.

For the X track it is important to check the squaring of the lateral surfaces with the long side of the profiles 2040 and that the external vertical distance of the profiles remains constant in each section.

For the Y tracks I verified the orthogonality of the feet with the base plane and then that the distance between track and floor is always constant. I also verified that the free sections of the two 2040 profiles have the same size.

In the case of small errors, they can be remedied with a little sandpaper or with a little adhesive tape to insert a small thickness. Do not fix yet the rails to the Y basis.

Then proceed with the assembly of the Y carriage, fixing first the components “LA” and “RA” to the track X; then mount wheels, pulleys and spacer. Then proceed with fixing the external panels "LB" and "RB", the motors, the limit switches (2 on the left and 1 on the right for squaring) and the lower parts of the carriages.

I have assembled them separately but not yet fixed. The X carriage is the component with the most pieces. It is advisable to start by mounting the rear part (pieces D, E, motor, pulley, limit switch, etc.) on panel B, then mount the 608ZZ on the top panel C and the two ø8 bars, checking that they are vertical and parallel to each other.

Mount the lower part of the carriage with the 6 wheels, without tightening the screws. Assemble the upper part of the X carriage (panels A, B and C), check the alignment and then mount the 6 wheels; assemble the Z carriage and all its parts and insert it between the two bars. Place the X block on the rail and complete it by hooking the lower part, check that the X and Z carriages slide easily and then tighten the screws.

The piece is finally completed by housing the trapezoidal screw, the motor for the Z axis, the closed belt.

Fix the left Y guide to the plywood first, to be used as a reference; the track must be fixed as far back as possible, otherwise the work space will stick out from the panel in the front part. Temporarily fix the second Y rail, with the help of the Y carriage, making sure that they are equally distant from the front side of the plane. Measure the squaring of the Y tracks by checking distances and diagonals.

Place the Y carriage on the two tracks and mount the two lower wheel blocks; then insert the GT2 belts giving a slight pretension. The perfect XY orthogonality will be ensured after the first power up, by adjusting the limit switches on the Y carriages.

I made the square of the spindle axis with the help of a compass made from a piece of wood about 20cm long; one end is fixed to the spindle while the second is free to rotate and allows you to understand if the axis of the cutter is perpendicular to the plane. If not, it can be adjusted by putting small shims between the Z carriage and the drill bracket.


I have included the images of the electrical connections; I'd like to point out that I have connected the limit switches NC in series, so that if they are damaged the CNC will stop; you should install noise filters to reduce noise generated by the motor cables. I followed this guide, in case you want to learn more: https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches


Currently the latest released version of GRBL is 1.1h which introduced automatic squaring, which will be used in this project, using the A3 / A4 pins to be dedicated to the second motor of the Y axis; the second Y axis limit switch will be connected in series with the Z limit switches, as specified by the patch notes.


Before uploading the code it is necessary to enable some functions by editing the config.h file, uncommenting these lines:

#define HOMING_SINGLE_AXIS_COMMANDS // Optional, useful for testing one axis at time
#define HOMING_FORCE_SET_ORIGIN // Optional,I don’t like negative value of coordinates
#define DUAL_AXIS_CONFIG_PROTONEER_V3_51 // Check if enabled

The other G300 parameters can be entered as default in the config.h file, or later using the console.

$1=255 Hold motor in place
$3= Set Invert axis code (see table)
$5=1 Set limit switch to Normally Close (NC)
$20=1 Enable software limit
$21=1 Enable limit switch
$22=1 Enable Homing
$23= Set homing direction (see table)
$30= Set your spindle max speed
$32=0 Laser mode off
$100= X step/mm
$101= Y step/mm
$102= Z step/mm
$110=1000 X Max speed (it can be increased later)
$111=1000 Y Max speed (it can be increased later)
$112=600 Z Max speed
$120=30 X acceleration
$120=30 Y acceleration
$120=30 Z acceleration
$130= X Max travel (for me 620)
$131= Y Max travel (for me 440)
$132= Z Max travel (for me 116)

For the upload I used Arduino IDE https://www.arduino.cc/en/software If you are using an unofficial Arduino board you may need to download additional drivers, for example https://sparks.gogo.co.nz/ch340.html

To upload you can follow this guide: https://www.instructables.com/How-to-Installuse-G...


If you want to create a 3D object or modify something existing I recommend one of these software, both for free: Fusion 360: https://www.autodesk.com/products/fusion-360/pers...
Freecad: https://www.autodesk.com/products/fusion-360/pers...


These are software that, starting from an input geometry, allow to process the GCODE. Depending on what you have to do, there are various possibilities:

Fusion 360: https://www.autodesk.com/products/fusion-360/pers...
FreeMill: https://www.autodesk.com/products/fusion-360/pers...

Estl/CAM: https://www.autodesk.com/products/fusion-360/pers...

There are numerous possibilities on the management software, which must be mounted on the PC dedicated to the CNC; I used a PC from 2012, you don't need great performance, but it's better to avoid laptops:
Candle: https://github.com/Denvi/Candle
Universal G-Code Sender: https://github.com/Denvi/Candle
LinuxCNC: https://github.com/Denvi/Candle
EstlCam: https://github.com/Denvi/Candle
UltimateCNC: https://github.com/Denvi/Candle

The first three are totally free, EstlCam is free but the unlicensed version has Advertising, UltimateCNC has some unlockable features only with the purchase but it is also functional in the free version. To start I used Candle as it is very simple and allowed me to do the settings and calibrations even from a very old Eee PC, later I will configure the dedicated PC with LinuxCNC.


With the control software I verify that the 3 axes are moving in the right direction, otherwise it can be corrected by reversing the 4 motor wires or by making a modification with the console ($ 3). I then proceed with the homing of the 3 axes and with the verification of the correct functioning of the endstops; with homing, automatic squaring will be performed. I transfer the trace of the displacements on the X and Y axes to the wooden surface and check the diagonal; if it is not precise, it will be possible to intervene by adding a small thickness on the stop of the right limit switch or by moving the track. When the squaring is perfect, the second Y track is definitively fixed. At this point the belts can be tensioned; it is important that the tension on the two Y axes is identical: you can put a small weight on the belts and compare the vertical displacement, you can also use a telephone (or ear) to listen to the note produced by a pinch, as if it were string of a guitar. Each time the home is performed, the CNC will return to the perfect square and, since I have set '$ 1 = 255', the motors will remain in tension and will not lose their squareness for the duration of the work session.

It is important to check the calibration of the steps / mm by verifying with a ruler that the real displacements coincide with those provided by the software, otherwise they are updated using the console commands $ 100, $ 101, $ 102.

With Fusion360 I prepare a grid with a 10x10cm mesh that I have to bring back to the MDF martyr surface and it will serve as a reference for the positioning of the pieces to be machined, I also insert some holes in which I subsequently fix the threaded inserts, which will allow to block the pieces to be milled.With Fusion360 I can export the sketch to DWG, and then process the paths on the control software, or use the Fusion 360 CAM module and create the G-Code directly.


I designed the G300 to be a modular machine, for now I have developed the cutter brackets with a diameter of 65mm (for Makita rt0700c, Katsu, etc.) and 52mm (classic 500W spindle with ER11 collet).
It can be easily adapted, by printing a specific support, to mount other cutters or a laser module. If desired, you can also install an extruder to 3D print very large objects, up to 600x440x60mm; in this case, however, it would be necessary to make changes to the hardware as the Arduino Uno / Nano pins are limited. One of the first things I will do will be a chip cleaner: it is really necessary.

Step 10: G300 at Work

My configuration for aluminum

3mm bit with 1 flute
XY feed rate: 500mm/min
Z feed rate: 200mm/min
Z step: 0.25mm (can be increased)

Step 11: Revision

revision 28/05/2021:

- two pdf of the BOM have been published: flattened and multi-level versions;

- added 8mm shaft collar at the bottof of Z Carriage.

revision 23/06/2021:

- added F3Z file with complete 3D Model

CNC Contest

Grand Prize in the
CNC Contest

Be the First to Share


    • Arduino Contest

      Arduino Contest
    • Colors of the Rainbow Contest

      Colors of the Rainbow Contest
    • Barbecue Speed Challenge

      Barbecue Speed Challenge



    5 days ago

    To begin with, I would like to congratulate you on such a beautiful project and most of all for sharing it with us, I wanted to ask you this cnc I can manufacture it with dimensions of 1,200mm x 1,200mm.
    And it would be very helpful to have a video of how it is assembled very quickly, because some of us are somewhat nobodies and we will not know where some screws go, or how some parts are assembled, but I go back and I say it is one of the best projects that eh seen to be done in 3d printing and I already have almost all the materials, again thanks with all my heart. :D!


    Reply 2 days ago

    Thanks, I am very pleased that you enjoyed my work. I believe that for workspaces as large as the ones you want the G300 needs some tweaking. For a net area of 1200x1200 you need profiles about 1500mm long and the 2040s for the Y tracks are too deformable, better to use the 2060s; for the X track keep 2040 but add at least another two to three central reinforcements. As already mentioned in another message, the supports of the Y tracks must be modified to accommodate the larger profiles while for the two Y carriages it is sufficient to use threaded bars longer than 2cm compared to what is indicated in the BOM.

    I recorded the entire assembly phase with the intention of publishing it on youtube but I didn't have time to do the video editing.
    To make up for this lack in the next few days I will publish the Fusion360 source file in order to allow everyone to view the components and facilitate any remixes. After all, having won the CNC contest and a cash prize, it seems fair to me to release the .f3d file
    With the Fusion design, the separate BOM per component and the written description of the various steps it should not be complicated to finish the assembly. If you have any doubts, feel free to contact me even in private.


    12 days ago

    I've been very interested in 3D printing/plotting/CNC. I wonder why the router has to be mounted on the head. That seems like a lot of weight/inertia to move. The router could be mounted on the base and a flex shaft used to do the actual carving. Any thoughts?


    Reply 12 days ago

    The weight is essential to reduce the vibrations caused by the resistance of the material to be milled.
    Flex shafts are not suitable for CNCs: they are too light, generate a lot of friction (therefore they overheat) and do not allow the motor torque to be optimally transferred.
    They are only suitable for a dremel, where torque is limited, and for very short jobs.


    Reply 11 days ago

    Only way to find out if it's what you want, is to build it and try it.


    11 days ago

    Well done. Nice design. I can't find any major problems with it.


    4 weeks ago

    I welcome the quality of the work done. It's a pretty clean job. In my humble opinion there's two design problems at the start : plastic and 3d printed parts, and belt drive, which both do not match with CNC router's structural parts or drive expectations. Definitely. What works fine for a CNC 3D printer can't be transposed into a CNC router, because the needs of precision, holding torque and rigidity are different. 3D printers, lasers, plasma have no forces to deal with on the tool head while the tool head is reasonably light. CNC routers/lathes have to deal with a lot of resistance and vibrations and the whole Z is heavy. I did the mistake to add structural parts to some of my CNC routers, and that was terribly rubbish.

    Some people would say theirs works fine and there's hundred of examples around the web. Maybe. Anyway, the young modulus of thermoplastics speaks itself : it's not stiff enough for router applications. Sure you can still lower feed and speed and lower the depth of cut, etching a small amount of material at the time, and probably you will be able to get reasonably shaped parts, with inconveniences of expanding machining time and tools getting dull quickly. Keep in mind palm routers are not meant to work continuously during hours. Second, you can check it out in any manufacturer's specifications : belts stretch under load, that's just how belts are. So you want to oversize the belts to keep the stretch into a negligible amount. For a machine this size, a PE 15mm HTD5M would probably do the trick, but keep in mind belt driven system have low torque compared to screws.

    The second argument is "good enough" for hobby use. Machining time is a factor also for hobbyists who cannot work full time on projects. A good machine allow to jump quickly from a project to the next one. Several hobbies requires precision parts too : mechanical, models, etc. Hobbyists are not meant to maintenance their CNC router every next project. To me, requirements are not very different to professionals'. Industrial CNC routers offers good productivity 24/24 and low maintenance cost. That are the major differences.

    Last argument is the price. Actually, steel is cheaper than aluminium ($/3) or filament ($/9). Anyone's got a drill and knows how to drill a hole, and this would be much quicker than to print parts. Steel add some weight to the CNC router which is a good thing to dump machining vibrations. Whatever the point of view, I'm afraid 3D printed CNC router is a wrong good idea : mechanical properties are rubbish, it cost more and it takes more time.


    Reply 4 weeks ago

    I would welcome your solutions to the above problems!


    Reply 4 weeks ago

    Easy : don't use plastic or 3D printed parts. Use metal instead : corners, tubing, metal plates. Just cut, drill and fasten. ;)


    Reply 4 weeks ago

    Ok, J-Max. Let's say that I want a 50"x30" work area. Doing that in metal for $300 is unrealistic. With PLA it will be slow, shallow cutting and less accurate, that is a given as well. Which DIY would you suggest that can be the given work area, and comes closest to that $300? What is the next best thing?


    Reply 4 weeks ago

    $300 is unrealistic for any CNC router of this size, I'm afraid. Even a MP CNC will cost you more than $500. Unless you're a reclaim genius.


    Reply 4 weeks ago

    I still have track of all material orders, mostly bought on aliexpress:
    4x Nema23+4x TB6600 + Arduino + endstop 68.56€ (Banggood)
    4x 2040 VSlot (2 600mm, 2 750mm) 34.12€
    4 LM8UU+2x 8mm rod 6.91€
    30x 625zz Wheel POM 37€
    GT2 10mm belt+ pulleys 8.45€
    100x T-nut 3.86€
    Nuts, bolts washer about 20€ (local store)
    Katsu router 53.89€ (Amazon)
    24V 10A power supply 21.99€ (Amazon)
    Plywood base 15€ (local store)
    PLA 1.8kg 40€
    TOTAL 309.78€


    Reply 4 weeks ago

    309.78€ is for a 600x400ish travel area but you probably forget few things, like the Z transmission, the DIY boards, the cable carrier, the wiring... For a 1250x750mm as Dutch_Dude wants, the price would raise because if a component is suitable for a short travel, it can be terrible as travel grows. Remember Xcarve's 2040 X beams? In my humble opinion, 8mm stubs are not suitable for router machining so do the 9mm GT2 belt, except if the machine is dedicated to extremely soft materials milling. I had 12mm on a 200x300x80mm machine and that was still pitiful on hard woods. 8mm is already a bit too light for a 300g heatbed, it will probably flex too much while machining. The belt may stretch too much too, even PU white GT2 ones. This is maybe the Achiles' tendon of the machine, behind the plastic parts. May I suggest PLA may cause issues on long machining time, because the router and the motors may reach more than 40°C and will soften the PLA parts in contact ?


    Reply 4 weeks ago

    Agreed - but I guess that is what he build this one for. My question still would be, what is the least expensive metal design then with those dimensions that you think would be an improvement.


    Reply 4 weeks ago

    Well, metal design is not expensive. That dimensions calls for a travelling gantry. To reduce cost, I would go to a simple design like below. Every part of the structure except the front and back 1/8" plates are from the same 2x4x1/8" steel beam section. The structure is probably under $50 or $75 if you choose a fancy stainless steel, you can't beat that with filament and aluminium profiles, but you get a much better structure. Then add the best guides, screw transmission and electronics you can afford.

    CNC Stillbeam.png

    Reply 4 weeks ago

    Thanks for your comment. This machine is clearly intended for people who, like me, dedicate the weekend to a few small jobs, certainly not for professional use.
    In the initial stages I thought about using steel plates but for me making elements accurate to the tenth of a millimeter was out of the question and having them made by specialized companies still had a significant cost.
    The initial idea was to use recycled PP sheets but I had the same processing problem (I would have needed another CNC).
    So I opted to print the parts and I optimized the model to make sure they work as little as possible: the tensioners are close to the profiles, the X bridge is not very high compared to the Y rails etc. etc.


    Reply 4 weeks ago

    It's nice to talk constructively with you about that subject. The best argument we have is all the DIY CNC machines that have been built "good enough for hobby" that curiously beget to V2, V3, V4, etc. Obviously, all the previous versions was not "good" enough. Unfortunately, if you stay with wrong design choices, the upgrades will be endless. Late or soon, the cost of the upgrades will overtake a good genuine machine's price tag. That's why it is crucial to start with suitable materials and components. The machine may be small but will still works flawlessly.

    I missed the "skill/tool/precision" argument. Sorry about that. Actually anyone have (or eventually can get) a saw and a drill. That's just about basic skills. An automatic centring punch cost <$5. Just print a paper template, stick-it to the material. Punch right into the hole locations and drill. You can't miss. The precision will be as good as a 3D printed part, definitely. ;)


    Reply 4 weeks ago

    It is nice to exchange opinions and advice with you. :D
    I also noticed that some projects have undergone numerous revisions but I think it is an integral part of this hobby. If there is something wrong, you improve and learn something new. I almost appreciate the learning phase more than the actual realization of the objects ...

    If you look at the 3D printed parts, almost all of them are simply plates with holes, I have already used a very essential geometry, if you want you can already make them in steel. However, some pieces are easier to print than to work them in steel: the Z carriage, the reinforcements between 2040 and the 4 Y supports in the corners. I didn't want to put together too many heterogeneous elements and so I chose to do everything in PLA.


    Reply 4 weeks ago

    Hear hear, I plan to use your 3d printed plated to cut aluminum plates and "upgrade" ;)


    Reply 4 weeks ago

    but don't call it V2! will be the G300S :D

    gatting serious again
    I am also a (structural) engineer and I know the properties of materials, PLA has a Young's modulus of 3-3.5GPa and it certainly has its limitations. However, it is not correct to make comparisons between materials based only on Young's modulus; eg Shapeoko steel plate is 3.42mm thick, other machines have 5mm aluminum plates, my little one has 10mm PLA plates.
    In terms of flexural stiffness (E * J), which for the uninitiated is directly proportional to the cube of the thickness, we have these results:
    Aluminum (68GPa) 8500, Steel (210GPa) 8400, PLA (3.5GPa) 3500.
    Certainly my CNC has a weaker structure but it's not that bad.