Inspired by the Hurco CNC mill in my high school's automotive laboratory, I decided to build my own desktop CNC machine. I took responsibility for the electronics and programming, and my dad helped with the fabrication.
The machine uses stepper motors to drive lead screws on each of its three axes. These stepper motors are controlled by an Arduino running GRBL, and the Arduino is controlled by a computer running a G-code sender. To stream G-code to the machine, I typically use Universal Gcode Sender (UGS). Initially, I intended to use the machine for CNC milling, so I installed a high-speed spindle for carving. More recently, I installed a laser next to the spindle, and the machine can now be used for laser engraving. For design and G-code generation in milling projects I usually use Easel from Inventables, and for laser engraving projects I use LaserGRBL.