A compact desktop CNC machine combining mechanical design,
electronics, software control, and digital fabrication
I contributed to the 3D modeling of the CNC machine in Autodesk Inventor and prepared all technical drawings. I supported the assembly process and contributed to the development of the control code using GRBL firmware. I also guided key decisions based on experience with the tools, materials, and machines used in the fabrication lab. My focus was on translating the design concept into precise digital models and ensuring electronic control systems worked seamlessly with the mechanical structure.
I contributed to the design of the parts and continuously adapted the models based on real component measurements. I supported the entire manufacturing and assembly process, especially in the fabrication of metal components and laser-cut acrylic parts. I performed extensive physical testing, ensured proper fitting of all components, and debugged assembly issues. I also prepared all presentation materials. My focus was on bridging the gap between digital design and physical reality.
Week-long timeline from initial research through final testing and documentation.
Color Legend: Research CAD Work Fabrication Assembly & Testing Documentation
We decided to develop a minimalist CNC machine because it combines mechanical design, electronics, software control, and digital fabrication in one integrated system.
Our main inspiration came from small desktop CNC machines and from a YouTube playlist by Prof. Garcia (CNC Facil de hacer en Casa), which helped us understand the basic structure, movement system, assembly sequence, and workflow from design to G-code execution.
Based on this research, we adapted the idea to the materials and components available in our lab — creating a compact 3-axis CNC machine using lead screws, linear bearings, stepper motors, an Arduino Uno with GRBL, and a CNC Shield with A4988 drivers.
Before modeling in Inventor, we started with a hand sketch to understand the general shape, position of the axes, and space required for each component. Below you can see the evolution from the hand sketch directly to the 3D digital model.
Step 1 — Hand sketch with initial dimensions and layout
Step 2 — Same structure translated into Autodesk Inventor 3D model
Each component was modeled separately: base, side supports, moving bed, motor supports, and plates for the X, Y, and Z axes.
All parts were placed into an Inventor assembly file to visualize the complete CNC structure — identifying the position of motors, lead screws, shafts, couplings, bearings, acrylic plates, and aluminum profiles.
After fabrication and assembly, the physical machine closely matched the digital design. The comparison below shows how the virtual model translated into the real built machine.
Digital Model — Autodesk Inventor
Physical Machine — Final Built Result
From the 3D model, we exported the flat faces of structural pieces as DXF files, which were then used to laser cut the acrylic components on the C4V Laser machine.
After completing the 3D model, we started mechanical fabrication: measurement, CAD verification, CAM preparation, CNC metal cutting, milling, laser cutting, and 3D printing.
We measured and marked the aluminum profiles to match the Inventor model dimensions precisely.
Before machining, we reviewed the part geometry in Inventor to verify shapes, dimensions, and hole positions.
We used EdgeCAM to prepare cutting paths, verify toolpaths, and generate G-code for the CNC metal-cutting machine.
The CNC Kitamura Mycenter-3XG machining center reads the G-code from EdgeCAM and mills metal parts with high precision.
The LAGUN milling machine was used to drill precision holes for motor mounting, shaft supports, and fasteners.
Structural aluminum beams were cut to exact lengths using a precision metal saw.
Five different machines available in Fablab Ulima, each serving a specific purpose in the manufacturing workflow.
CNC Kitamura Mycenter-3XG
Metal milling and cutting of structural aluminum plates
C4V Laser Cutter
Cutting acrylic structural plates from DXF files
Bambu Lab X1-Carbon AMS
3D printing of motor mounts and support parts
Precision Metal Saw
Cutting aluminum profiles and beams to exact lengths
Support components and motor mounts were fabricated on the Bambu Lab X1-Carbon AMS printer, allowing rapid iteration before committing to permanent metal solutions.
Digital design and physical reality don't always align perfectly. Here we document the specific problems encountered and how we solved each one.
THE PROBLEM
Our Inventor model specified certain distances between mounting holes for the NEMA stepper motors. When the actual motors arrived, the holes in our fabricated metal plates did not align — the original design showed incorrect hole spacing (Ancho 23.30 mm, Largo 17.72 mm).
THE SOLUTION
We redesigned the motor mounting plates with corrected dimensions (43.5 mm and 22 mm spacing), re-cutting in transparent acrylic instead of the originally planned metal.
BEFORE — Incorrect dimensions in CAD
AFTER — Corrected dimensions matching real motor
THE PROBLEM
The flexible couplings connecting stepper motors to lead screws required precise spacing. Our initial design did not account for the exact thickness of the couplings, resulting in misalignment.
THE SOLUTION
We manually drilled and adjusted holes in mounting plates. Acrylic proved more flexible for iterative corrections than metal. We tested alignment repeatedly until the couplings rotated concentrically with the lead screws.
THE PROBLEM
The linear ball bearings required exact positioning. After assembly, some bearings were slightly misaligned, causing binding when moving the axes manually.
THE SOLUTION
We used shims and spacers to adjust bearing positions and manually opened existing holes where needed. All corrections were fed back into the digital model.
Key differences between what we originally designed and what we had to change once working with physical components.
| Component | Original Plan | What We Changed | Reason |
|---|---|---|---|
| Motor mounting plates | Metal, 23.3 mm x 17.72 mm | Acrylic, 43.5 mm x 22 mm | Real motor dimensions differed from CAD |
| Mounting material | Steel / aluminum plate | Transparent acrylic | Easier to re-drill and adjust during iteration |
| Coupling alignment | Direct CAD measurement | Manual adjustment with shims | Physical coupling thickness not accounted for |
| Bearing positions | Estimated from Inventor | Adjusted with spacers on-site | Slight misalignment caused binding on axes |
| Y-axis support | Metal component | 3D-printed part | Faster to fabricate and test first |
| Power supply voltage | 12V battery | 24V for wood engraving | 12V insufficient torque for milling bit on wood |
The CNC machine combines three coordinated motions: the X/Z tool carriage, the Y-axis moving bed, and a control workflow tested manually then digitally.
The central carriage holds the tool. The X-axis moves it left to right; the Z-axis moves the tool up and down to approach or separate from the work surface.
The lower bed moves the material forward and backward. We manually tested this axis by rotating the rods through the couplings to verify smooth movement before powering the system.
After manual verification, the machine was controlled via OpenBuilds CONTROL. From the laptop we jogged the axes, moved the bed, and established the work origin before running a G-code job.
| Component | Description |
|---|---|
| Flexible shaft couplings x3 (8 mm) | Connect stepper motor shafts to lead screws. |
| Lead screws x3 (8 mm, ~40 cm) | Convert rotational motion into linear X/Y/Z movement. |
| Lead screw nuts x3 | Travel along screws, transferring motion to moving parts. |
| Linear ball bearings x12 (8 mm) | Smooth guided linear movement along steel shafts. |
| Hardened steel shafts x5 (8 mm, ~40 cm) | Guide the movement of carriage and bed. |
| Shaft supports x2 (8 mm) | Hold and align guide shafts for structural stability. |
| Standard bearings x3 (8 mm) | Support rotating parts and reduce friction. |
| Laser-cut acrylic plates | Machine bed, structural supports, and mounting surfaces. |
| Aluminum profiles (V-slot) | Main structural frame of the CNC machine. |
| 3D-printed support parts | Specific holders and mechanical adaptations. |
| Tool holder / spindle holder | Holds the engraving, drawing, or cutting tool. |
| Fasteners (M3 screws, nuts, spacers) | Assemble and secure all mechanical parts. |
| Component | Description |
|---|---|
| Arduino Uno + GRBL firmware | Main controller — interprets G-code commands. |
| CNC Shield | Distributes STEP/DIR signals to each motor driver. |
| A4988 stepper motor drivers x3 | Control current and movement of each stepper motor. |
| Stepper motors x3 (NEMA) | Generate movement for X, Y, and Z axes. |
| 24V power supply (main system) | Powers CNC Shield, A4988 drivers, and stepper motors. |
| 12V power supply (spindle) | Powers the spindle / engraving motor only. |
| USB cable | Connects laptop to Arduino Uno — transmits G-code. |
| Spindle / engraving motor | Rotary tool for cutting or engraving. |
| Wires and connectors | Connect all motors, drivers, shield, and power supplies. |
| Tool | Purpose |
|---|---|
| Autodesk Inventor | 3D modeling and mechanical design of all CNC parts. |
| EdgeCAM / Libellula | CAM — metal cutting toolpath generation and G-code export. |
| Aspire | Vector design, machining toolpaths, and G-code export. |
| GRBL firmware | Installed on Arduino Uno — converts G-code to motion commands. |
| OpenBuilds CONTROL | Machine control: jogs axes, sets origin, runs G-code. |
| Bambu Studio | Slicing software for 3D-printed support parts. |
| Inkscape | Vector editing for 2D design files. |
| Arduino IDE | Used to flash GRBL firmware onto the Arduino Uno. |
The electrical system connects the software control layer to the physical stepper motors through a chain of signal and power components.
The diagram below shows exactly how each electronic component is connected — from the laptop sending G-code, through the Arduino and CNC Shield, to each individual stepper motor and the separate spindle power circuit.
OpenBuilds CONTROL sends G-code to the Arduino Uno running GRBL firmware, which interprets it and converts it into motion-control instructions.
The Arduino sends 5V logic signals (STEP, DIR) to the CNC Shield — not directly to motors. These signals indicate when and which direction each motor should move.
The CNC Shield distributes STEP and DIR signals to the corresponding A4988 driver for each axis (X, Y, Z).
The A4988 drivers use the 5V logic signals to switch the external 24V power supply, regulating the current delivered to each stepper motor for precise step-by-step movement.
The spindle is powered by a separate 12V supply, keeping the high-current spindle circuit isolated from the stepper motor logic to reduce electrical noise.
| From | To | Signal / Power |
|---|---|---|
| Laptop (USB) | Arduino Uno | G-code data (serial, 5V logic) |
| Arduino Uno | CNC Shield | STEP + DIR per axis (5V logic) |
| CNC Shield | A4988 Driver X/Y/Z | STEP-X/Y/Z, DIR-X/Y/Z |
| 24V Power Supply | CNC Shield (V-motor) | +24V, GND |
| A4988 Driver X/Y/Z | Stepper Motor X/Y/Z | Coil pairs (A1,A2,B1,B2) |
| 12V Power Supply | Spindle Motor | +12V, GND (isolated circuit) |
A digital workflow connecting design, G-code generation, machine control software, electronics, and physical movement — showing how a digital design becomes a physical result.
We created the vector design (text "UP"), set machining toolpaths, and exported the project as a G-code .ngc file.
The .ngc file was opened in OpenBuilds CONTROL to connect the laptop, load the file, jog axes, and set the work origin (X0, Y0, Z0).
OpenBuilds CONTROL sends G-code to the Arduino Uno through USB. GRBL firmware interprets it and converts to motion commands.
Arduino sends 5V STEP and DIR signals through the CNC Shield to the A4988 drivers for each axis.
A4988 drivers use the 5V logic signals to switch 24V external power, delivering precise current to each stepper motor.
The CNC machine executes the programmed movements — engraving, drawing, or drilling the material as defined in the G-code.
Before integrating stepper motors, we manually rotated the lead screws through the flexible couplings to verify that all mechanical components aligned properly and axes moved smoothly without binding.
Manual testing confirmed the mechanical design was sound and the machine was ready for electronic integration.
The CNC machine successfully drilled multiple holes and drew precise lines, demonstrating that the basic mechanical movement and control system were functioning correctly.
Customizable heads for painting, cutting, and engraving — making the machine more versatile for different operations.
A clamping system inside the acrylic box to hold material securely, reducing movement and misalignment during operation.
Replace the 3D-printed Y-axis support with a metal component for improved rigidity and straighter motion.
Distance sensors or a camera to detect the material surface automatically and calculate the work origin.
Complete project summary — design process, fabrication methods, assembly, and final testing results.
© Fablab Ulima 2026 | Design: Tooplate