The polargraph is a fascinating vertical plotter, that uses two small motors and gravity to move a pen over a paper, controlled by software on a computer. Actually ‘polargraph’ is the name given to it by a guy who wrote an excellent set of open source software and is selling the hardware in kit here. But i had most of the parts lying around so i built my own version, using an Arduino UNO and 2 small 5V stepper motors (28YBJ-48) driven by an L293D each. Not terribly accurate, but fun nevertheless.

This picture shows the 2 stepper motor, with cogs and a GT2 belt. The orange perf board holds the 2 L293D motor driver ICs, 2 blue activity LEDs and a green power LED and large capacitor. The Arduino is connected to the laptop with the USB cable.

IMG_1582 - Edited

The standard setup uses larger stepper motors and a motor shield, discussed in much detail here. As i could not find much guidance for my simple version, i describe my configuration, which my be useful for people who want to build this low cost version.

My first setup had the L293D powered by the Arduino’s 5V. This worked for ‘max motor speed’ (a parameter in the controller) up to 350. Eventually i added a 7V power supply for the L293Ds, with a large capacitor, and i was able to increase the speed parameter up to 500, which gave decent speed.

Each L293D gets 4 digital outputs from the Arduino, and has 4 wires leading to the stepper motors. I added a blue LED on the IN1 pin of each L293D that blinks when the stepper is active.

IMG_1609 - Edited

Just a few connections (below pic is before adding the LEDs and cap)


My motor holders and gondola are laser cut, but it should also be possible to glue something together. I use bolts&nuts to add weight to the ends of the belt and on the gondola.

You can find the latest software release on github, i am using the 2017-05-10.


I uploaded the polargraph_server_a1 sketch to my Arduino (using IDE 1.8.2), changing only these settings:

  • #define UNL2003_DRIVER

And in configuration.ino: Arduino pins for L293D:

  • AccelStepper motorA(4, 6,7,8,9);
  • AccelStepper motorB(4, 2,3,4,5);

The other system parameters can be changed later via the controller software.


The controller software runs on processing but the github software package comes with a few pre-compiled binaries, so if you’re lucky one of these will run on your system, without installing Processing (version 2, not 3!). The pre-compiled program worked for me on an old Windows Vista laptop, but now i’m using a Linux box, and i actually have to run it from source in Processing. I also tried to get it running on a Raspberry Pi (old model B) and i got Processing 2 installed and the serial communication up, but one of the Java pop-up windows crashes so at the end it did not work for me, but other people have succeeded.

The parameters in the controller:

  • Mm per rev: 63 (depends on cog/belt)
  • Steps per rev: 2038 (for my type of stepper)
  • Steps multiplier: 1 (for my type of stepper)
  • Machine width: 400 (measure!)
  • Machine height: 500 (measure!)
  • Page width: 270
  • Page height: 370
  • Max motor speed: 350 (higher makes steppers stop halfway on 5V from the Arduino)
    • Upgraded to 500 when powering the L293D with 7V from the wall plug adapter
  • Motor acc: 700

IMG_1610 - Edited

The most important settings for these pixelated drawings are:

  • change grid size: 60-80
  • change sample area: 65-100

These parameters determine the pixel dimension, and the density range you can get (in combination with the pen point size i think). If they are too small, you just get curvy lines, no waves. Find out by trial&error…

IMG_1548 - Edited

Just for reference, the steps in the controller to start a drawing:

  • SETUP > Serial Port.. (READY!)
  • INPUT > Set Home
  • INPUT > Move Pen To Point
  • INPUT > load image
  • INPUT > move image
  • INPUT > resize image
  • INPUT > select area
  • INPUT > change grid size (60 seems fine for the fine pen)
  • INPUT > change sample area (65 seems fine for grid 60)
  • Save properties
  • Render.. > pick pixel type: square frequency wave is standard

IMG_1563 - Edited

IMG_1608 - Edited


I also figured out how to use Vector drawing, it does not seem to work with all fonts but Century Schoolbook gives a good result. I created the SVG file in Inkscape; the Polargraph controller does not recognise the ‘text’ feature in SVG so i had to convert it to a path in Inkscape, with the ‘Object to Path’ function. ‘Select frame’ to fix the area.


Low cost basic Polargraph

3 thoughts on “Low cost basic Polargraph

  • 04/02/2021 at 23:55

    can you pl sell it to me??

  • 09/04/2021 at 02:49

    Thanks man for detailed settings value.


Leave a Reply

Your email address will not be published. Required fields are marked *