Skip to main content
Version: ACS CC

Polargraph

A vertical drawing machine that uses a polar coordinate system to create pen-on-paper art

info

Author: Alexandru-Vlad Bîrsan
GitHub Project Link: https://github.com/UPB-PMRust-Students/acs-project-2026-vldxndr

Description

Polargraph - Vertical Plotter

The Polargraph is a vertical DRP (Digital Reconstruction Plotter) that operates on a polar coordinate system. Unlike the traditional plotter or printer that works on a X Y axis the polargrah transforms polar coordinates into coordonates on the paper by using two motors fixed over the paper that hold wires that have variable lenghts so they can position the drawing tool where it needs to be.

Motivation

The idea came to me because I have previously studied architecture and have always wanted to have something that could draw using real writing utensils, because while a printer can draw exactly what you want using pin point accuracy it lacks the soul of a hand drawing. This project aims to have the accuracy of a printer while portraying a hand rendered drawing.

Architecture

Diagram Schematic

Log

Week 27 - 30 April

Wrote initial documentation and made the first diagram while ordering the parts. Decided to use preexisting software for transforming drawings into lists of instructions.

Week 12 - 18 May

Received all hardware components. Assembled the physical frame using a 60x80cm wooden board and mounted the two NEMA 17 stepper motors at 51.8cm apart. Wired the A4988 drivers directly to the STM32 Nucleo using dupont wires and a breadboard. Successfully tested basic stepper motor movement using Embassy async Rust firmware.

Week 19 - 25 May

Implemented full polargraph kinematics (inverse kinematics using polar-to-cartesian conversion). Added G-Code parser over UART (USART1 at 115200 baud) using BufferedUart. Implemented line interpolation with 1mm segments for smooth curves. Added SG90 servo pen lift control (M3/M5 commands). Successfully tested drawing a square using a Python script to stream G-Code from a .ngc file.

Hardware

The Polargraph is powered by an external 12V DC source to ensure constant torque for the stepper motors. For development purposes, the STM32 Nucleo is tethered via USB for real-time G-Code streaming and debugging. I also used a buck converter to give a steady current to the servo motor directly from the outlet converted to 3v3 because the connection on the stm 3v3 did not give suffiecient current. 3D printed a gondola that houses the servo motor(pen lifter) and the pen itself that is held up by the belts with 2 anchor points. Built a frame for the panel to stay upright and the electronic equipment to be held onto the back of it.

Schematics

Schematic

Bill of Materials

DeviceUsagePrice
STM32 Nucleo-U545Main Controller (Brain of the project)Owned
NEMA 17 Stepper Motor (1.7A)Axis movement (2 pieces required)130 RON
A4988 Stepper DriverMotor control (2 pieces required)20 RON
A4988 Expansion BoardDriver carrier with DIP microstepping and terminal block10 RON
SG90 Micro ServoPen lift mechanism15 RON
12V 5A Power SupplyExternal power for stepper motors55 RON
GT2 Pulleys & Belt KitMechanical transmission system40 RON
Breadboard MB-102Prototyping and circuit connections15 RON
Jumper Wires M-M / F-MConnecting components to Nucleo15 RON
DC Jack AdapterConnecting the 12V supply5 RON
Capacitor 100uFPower spike protection for drivers5 RON

Software

LibraryDescriptionUsage
embassy-stm32Async HAL for STM32GPIO for motor control, BufferedUart for G-Code streaming, PWM for servo
embassy-executorAsync executor for embeddedEntry point and task runner
embassy-timeAsync timersPrecise delays for step pulses
defmtLogging frameworkDebug logging via RTT
panic-probePanic handlerSends panic info through probe-rs
libmMath library for no_stdsqrtf and ceilf for inverse kinematics
embedded-io-asyncAsync IO traitsRead/Write on BufferedUart

Host Software & Toolchain

To transform digital images into physical drawings, the project uses a multi-step toolchain:

  1. G-Code Generation: Inkscape with G-Code extensions convert images (JPG/PNG) into paths using algorithms to give out the .ngc file that is required the polargraph to know where it should go.
  2. G-Code Streaming: A Python script streams the generated .ngc file over USB serial (USART1 at 115200 baud) to the STM32, waiting for ok\r\n acknowledgement after each command before sending the next.
  1. Inkscape - Vector graphics editor used for G-Code generation.
  2. Inkscape G-Code Extension - Extension for exporting paths as G-Code (.ngc) files.
  3. Polargraph Physics - Detailed explanation of the inverse kinematics involved.
  4. A4988 Datasheet - Technical specifications for the motor drivers.
  5. Example - Working example