Build a Belt-Driven XY Pen Plotter: Steppers, GRBL, and a Servo Pen Lift
A pen plotter is one of the most satisfying small machines you can build, and it's a genuinely different project from mounting a drag knife or pen holder on an existing CNC router — this is a dedicated, purpose-built XY drawing machine, closer in spirit to a small CoreXY 3D printer than to a routing machine. It draws with real ink on real paper, at a precision and repeatability that makes pen plots look almost printed, and it's an ideal first motion-control build if you want to learn GRBL, stepper wiring, and G-code fundamentals on a machine with none of the dust, noise, or safety concerns of a router or laser. This project builds a compact desktop plotter using a belt-driven XY gantry, an Arduino Uno running GRBL, and a hobby servo for pen lift — the same basic architecture used by commercial machines like the AxiDraw, built from parts you can source yourself.
How This Design Works
The mechanism is a simple two-motor, belt-driven Cartesian XY stage (not CoreXY — for a plotter's light loads, independent X and Y belts driven by their own steppers are simpler to build and tune than a CoreXY system, and the precision difference doesn't matter at pen-plot speeds). A servo-actuated arm lifts and lowers the pen between strokes, controlled the same way GRBL controls a laser's PWM output — you're essentially running your GRBL board in laser mode and using the "laser" enable signal to trigger the pen-lift servo through a small interposing circuit or a GRBL build with dedicated servo support.
Parts List
- [NEMA 17 Stepper Motors (2x)](https://www.amazon.com/s?k=NEMA+17+stepper+motor&tag=42308b-20)
- [Arduino Uno R3](https://www.amazon.com/s?k=Arduino+Uno+R3&tag=42308b-20)
- [CNC Shield V3 with A4988 Drivers](https://www.amazon.com/s?k=CNC+shield+V3+A4988+stepper+driver&tag=42308b-20)
- [GT2 Timing Belt and Pulleys Kit](https://www.amazon.com/s?k=GT2+timing+belt+pulley+kit+6mm&tag=42308b-20)
- [Smooth Rod 8mm and Linear Bearings](https://www.amazon.com/s?k=8mm+smooth+rod+linear+bearing+LM8UU&tag=42308b-20)
- [SG90 or MG90S Micro Servo](https://www.amazon.com/s?k=MG90S+micro+servo+metal+gear&tag=42308b-20)
- [Aluminum Extrusion 2020 (for frame rails)](https://www.amazon.com/s?k=2020+aluminum+extrusion+500mm&tag=42308b-20)
- [12V 3A Power Supply](https://www.amazon.com/s?k=12V+3A+power+supply+barrel+jack&tag=42308b-20)
- [M3 and M5 Fastener Assortment](https://www.amazon.com/s?k=M3+M5+socket+head+screw+assortment+kit&tag=42308b-20)
- [3D Printer Filament for Printed Brackets (PLA or PETG)](https://www.amazon.com/s?k=PLA+filament+1.75mm+black&tag=42308b-20)
- [Fineliner or Gel Pens for Plotting](https://www.amazon.com/s?k=fineliner+pens+0.5mm+assorted&tag=42308b-20)
- [USB Cable Type A to B](https://www.amazon.com/s?k=USB+cable+type+A+to+B&tag=42308b-20)
Frame and Motion System
Build the frame from 2020 aluminum extrusion in a simple rectangle sized to your intended paper size plus margin — a letter/A4-capable plotter needs roughly a 350mm x 300mm working frame. Mount one stepper at a fixed corner driving the Y-axis carriage along two parallel smooth rods, and mount the second stepper on that Y-carriage itself, driving the X-axis pen head along a crossbar — this is the same "gantry rides on a moving carriage" layout used by most small CoreXY and Cartesian printers, just without a Z axis to worry about beyond the pen lift. 3D print the corner brackets, the Y-carriage plate, and the pen-head mount; a search of sites hosting free 3D models will turn up several existing AxiDraw-inspired bracket sets you can adapt or use directly rather than designing from scratch.
Wiring the Steppers and GRBL Shield
The CNC Shield V3 stacks directly on the Arduino Uno and accepts A4988 or DRV8825 stepper driver modules in its X, Y, and Z sockets. For this build, populate only the X and Y sockets — you won't need a Z-axis stepper. Set each driver's current limit potentiometer conservatively (start around 0.5–0.6A for typical NEMA 17s on light plotter loads; you can always turn it up slightly if you see skipped steps) by measuring reference voltage at the potentiometer wiper against the driver's current-sense formula, and always adjust with power connected but before the motors are under load, per the driver's datasheet.
Shield Pin HeaderConnects To X driver socketX-axis NEMA 17 Y driver socketY-axis NEMA 17 Spindle PWM / Z-enable pin (varies by shield rev)Servo signal, via a simple transistor-buffered interposer or a GRBL-servo fork 12V barrel inputExternal 12V supply (do not power steppers from USB)Flashing GRBL and Setting Plotter-Specific Parameters
Flash standard GRBL 1.1 to the Uno using the Arduino IDE exactly as you would for a small CNC router. The settings that matter most for a plotter differ from router defaults in a few key places:
- $100/$101 (X/Y steps per mm) — calculate from your belt pitch (2mm for GT2), pulley tooth count (commonly 20T), and microstepping setting; a 20-tooth GT2 pulley at 1/16 microstepping on a 200-step motor works out to roughly 80 steps/mm.
- $110/$111 (max rate) — plotters can run much faster than routers since there's no cutting load; 3000–6000 mm/min travel is common once tuned, versus a few hundred for a cutting router.
- $120/$121 (acceleration) — keep this moderate at first (500–800 mm/s²) since a light gantry with printed brackets can shake and lose steps at aggressive acceleration; tune upward gradually while checking for missed steps on repeated test squares.
- $32 (laser mode) — enabling laser mode lets GRBL treat the pen-lift output the same way it treats a laser's dynamic power signal, tracking motion so the pen only marks while the head is moving, which avoids ink blobs at direction changes.
The Pen-Lift Mechanism
Mount the micro servo to the X-carriage with a short 3D-printed arm connected to a simple pen holder that rides in a vertical printed sled. The servo needs an intermediate driver since GRBL's spindle-enable output is a simple on/off (or PWM) signal, not a servo pulse — the simplest approach is a small microcontroller-free RC servo tester board triggered by the GRBL PWM line, or flashing one of the widely available GRBL-servo forks that map the M3/M5 (spindle on/off) commands directly to a servo angle. Either approach gets you clean pen-up/pen-down commands driven from the same G-code your plotting software already generates.
Software: From SVG to G-Code
The most common and reliable path from artwork to plottable G-code is Inkscape with the free "Axidraw" or generic "gcodetools"/"svg2gcode" extension, which converts SVG paths directly into pen-up/pen-down G-code moves sized to your machine's coordinate system. Import or draw your artwork as vector paths (not filled shapes — a plotter draws outlines, so anything meant to be shaded needs to be converted to hatch-fill line work first), set your plotter's travel limits in the extension's settings, and export. Universal G-code Sender (UGS) or LightBurn (which also supports GRBL-based pen plotters, not just lasers) both work well for sending the resulting file and jogging the machine for pen calibration.
Calibration and First Plot
- Home the machine (or, if you skipped limit switches for simplicity, manually jog to a known origin corner and zero the work coordinate system there).
- Run a pen-up-only "air test" of your file first to confirm travel bounds are correct and the head doesn't crash into the frame.
- Load paper, set pen-down height by jogging the Z/servo position until the pen just touches the paper with light spring pressure — too much pressure causes skipping and paper tearing on fast direction changes.
- Run a small test pattern (a grid of squares) first to verify steps/mm calibration before committing to a full detailed plot.
Once tuned, this machine is remarkably capable for its simplicity — string art generators, hatch-fill portraits, handwriting simulation fonts, and even lightweight CNC-style engraving with a scoring tool swapped in for the pen all become approachable weekend projects once the base plotter is dialed in.
Related Guides
- Converting a Mini Metal Lathe to CNC: Ballscrews, Steppers, and GRBL/LinuxCNC Control
- How to Use a Drag Knife and Pen Plotter on Your CNC Router
- How to Program Addressable LED Strips: WS2812B Patterns, Effects, and Power Design
- How to Use the ESP32-CAM: Video Streaming, Motion Detection, and Time-Lapse
- I2C vs SPI vs UART: How to Choose and Use Serial Communication Protocols
- How to Use Sensors with Arduino and ESP32: Temperature, Distance, Load, Current, and Hall Effect
- How to Control Motors with Arduino and ESP32: Stepper, DC, and Servo Drivers
- How to Use LaserGRBL: Free Laser Control Software for GRBL Engravers