Picture of Polargraph Drawing Machine

This machine, a variation on the hanging-pen plotter is a conspicuous and wilfully naive attempt to break out of the pristine, pixel perfect, colour-corrected space that exists inside our computers. It's a drawing machine, that takes a pen (a human tool) and uses it to draw in a singularly robotic way, with some grand results.

It doesn't draw at all like we would (though it could), and we would struggle to draw exactly as it does (though we could).

It can draw on things bigger than itself - the question is really "how long is a piece of string?" when it comes to working out it's maximum area.

It's easier to look at what it does, than to explain it, so just have a look.

Remove these adsRemove these ads by Signing Up

Step 1: History

Picture of History

Well there have been lots of new drawing machines doing the rounds lately, there's a real thirst to see devices that leap out of the virtual into the
physical. For me, it's all too easy to produce digital things which are interesting - programming or mash-ups or virtual experiments are devalued because they are intangible, you can run a hundred, a thousand, a million variations in a day - it's the proverbial roomful of monkeys with typewriters. The output becomes disposable, it get's hard to see the value, the craft.

So 3D printers and other desktop manufacturing tools and technologies (laser cutters etc) have got more and more popular, it's hard to overestimate how much hunger there is for a tangible, physical, touchable, smellable product of all this clever-clever digital work.

So this isn't wholly original, check out this prior art for more inspiration:

Hektor - the daddy of all hanging drawing machines
Der Kritzler - the smartest one yet
AS220 Drawbot - the basis for mine
SADBot - Instructable for an automatic drawing machine on the same pattern by Dustyn Roberts

Or have a look at what I've been doing with mine
Polargraph website
Polargraph project code
Flickr stuff

1-40 of 287Next »
twopint4 hours ago

Ok Thanks, so that leads me to 2 more qs...

1. I would like to buy the beaded chain but the beaded chain u linked on ebay can only be shipped to UK peeps, i happen to live in sunny California so there's that... So do you know another link/ place to buy chain for us Americans?

2. what causes your blood pressure to rise with (what is wrong with) the motor shield v2, one could put a bigger stepper and effectively have a more "powerful" machine with it?

Euphy (author)  twopint3 hours ago
1) The cord comes from a blinds suppliers, a haberdashery might have it. But drop me an email ( with your address and I'll send a couple of metres for you.

2) Main problem I have with AFMSv2 (Adafruit Motorshield v2) is that the top speed is limited by the bus speed that the driver chips are addressed using. Not a massive problem especially if you don't mind stepping a bit slowly, but it becomes a problem with microstepping (have to step 16 times as fast to get the same rotational speed). It also sounded whiney, and seemed quite noisy. It works though, and gives you a bit more power to play with. Maybe I am just a big whingey baby!

twopint20 hours ago
Hey Euphy, so I have some quick qs. 1. when the pen gets to the bottom of the paper, the motors start slipping/ failing (i am using 2 400ml amp stepper motors and to save moola i was using a small metal beaded chain instead of a plastic one.

2. how big of a drawing could you make with the motor shield and how big of a stepper motor would u need?

3. would the current code work with the new motor shield?
Euphy (author)  twopint13 hours ago

1) With plastic beaded cord, a long length (when the pen is near the bottom) doesn't weigh much more than a short length. With metal chain, the gondola effectively gets heavier the further down the surface it moves. You can probably counteract it by adding some more weight to the counterweight, but then you might have problems moving it up at the top!

2) Size of drawing isn't really related to motor power. Motor power should be related to the weight of the gondola and counterweights, not much more. That's certainly true of a machine that is static. Because it moves around, then the forces that pull and push the motor spindles will change dynamically, and it is likely that very long cords can result in more extreme swings of those dynamic loads. That's one of the reasons the machine moves very slowly by default actually, to reduce the "shock" in the system.

3) The newest version of the polargraph_server_a1 firmware works with

- adafruit motorshield v1

- adafruit motorshield v2

- serial stepper drivers (step / direction pins)

- directly driving signal amplifiers

I don't recommend the adafruit v2 shield though. It just rubs me up the wrong way.

good luck!

Bruno.PXM14 hours ago

Hello .... first of all thank you for the excellent toturial.

I have only one problem, when you start to draw, after a few minutes the software turns off the COM ports.

Any reason for this?

Best Regards

Bruno Morais

Euphy (author)  Bruno.PXM13 hours ago

Doesn't for me. The comm port needs to stay open for the commands to transfer, so it can't ever close. There is certainly no code in controller or firmware for closing the port.

cclark64 made it!3 days ago

Still haven't been able to get my servo to work, but it's up and running. Experimenting with paper types now. Is there a more precise way to position the image within the page or am I supposed to set the page dimensions to try and match the actual paper size I'm using? Saw something in the instructions that made me think machine, page, and paper size were all different.

2015-01-26 13.01.19.jpg2015-01-26 13.01.55.jpg2015-01-26 13.02.04.jpg
Euphy (author)  cclark643 days ago
Hi there! Looking good! Machine size is the overall size of the machine, but the page and paper size is the same, setting the page size and position is meant to help with that kind of layout / positioning issue.

The machine itself doesn't pay any attention to page or paper size, it's purely for the benefit of the operator, as a visual guide.

Last thing you might be interested in is the "frame". If you select and area, you can click "set frame to area" and you'll see some red crop marks appear near the corners of the area. If you save the, then when you reload the crop marks will have been saved. Then you can click "select frame" to re-select the exact same area as before. I used this in this sequence ( to make sure I drew an area that was exactly the same size and position in all three sheets.
cclark64 Euphy2 days ago

Thanks! Now I need to figure out why all my attempts are having serious scaling issues in the middle of the image.

2015-01-26 14.45.06.jpg

how long will it take to complete this project?

Euphy (author)  Neeharika raj15 days ago
Abilities vary so I can't really say, have a read through it and see what you think.
davidbarcomb2 months ago

What a great project. I will definitely try doing this

Hello! I'm extremely new to this and I'm really like the idea of creating a drawing machine. Would this be a hard project for a beginner? Also, what would all of this cost? Thank you

I've got exactly the same doubt. Also, could I print more in more than one material using a 3d printer? Thank you!

Euphy (author)  matheus.danella2 months ago

I don't really understand this question, sorry.

I spent

$30 for arduino uno

$12 motor shield

$14 for each stepper motor (2 needed)

$12 for the window blind cord

$5 maybe for the pla to 3d print many of the blackest, gears, and gondola

$10 for the servo extension wire

Already had the board, wires, and a servo

Plan on about a $100 total. I spent probably 20 hors building mine, and I'm experienced with arduino and electronics. Good beginner project, but expect to work hard at it.

george.kallarackal.37 made it!2 months ago

Hi Sandy,

Just wanted to say a massive thank you. Saw this guide a long time ago and have dreamt of building it since. Thanks for your prompt responses to my questions. I've just printed my first successful picture and the feeling is awesome! One for my baby (to be's) bedroom! Next up - fit a servo and then the 3d picture guide looks worth a try! Thanks again!


Euphy (author)  george.kallarackal.372 months ago
Thank you George - really kind of you to say you've enjoyed it, and got great results! Keep scribbling :)

mnelson20012 months ago

I've got vector graphics working! But when I try to render a picture in say the scribble setting I get "You probably won't get any detail in this. Max density for penSize: nan, rowSize: 20 is 1." What settings do I need to change?

Euphy (author)  mnelson20012 months ago
It's a bit funky how that works at the moment (with the 'nan'), but I think if you send the pen width again it might clear it up. The longer answer is that it's complaining that the pen is too fat for the grid size - try using a really small pen tip size.

Actually for the scribble pixel, the way it fills the pixel can be very inefficient, so I always tell it that the pen is much much smaller than it really is so I've got a better chance of getting any decent scribbles in it.
mnelson20012 months ago

I can make it move the pen up and down, but when I tell it to move to the right the pen moves to the left, and when I tell it to move to the left it moves to the right. What's wrong?

Euphy (author)  mnelson20012 months ago
Have a look at's-going-the-wrong-way!

Hope that's it!
mnelson2001 Euphy2 months ago

That fixed it, thank you! I had the motors switched and the wires backwards!

MattO3 made it!3 months ago

I used the Adafruit Motorshield 2, so thanks a lot for the recent update to that code. Every drawing I adjust a little mechanically to get everything to stay in place. Next step would be to build some mounts for the motors. I'm using toothed belt and matching spindles which works perfectly. I ended up losing patience with the microsteps and set it to interleave, which is fine enough control for the bumpy whiteboard wall I'm using. It makes a great palate to test on as I can wipe away any mistakes and start over quickly. One problem is have is if the belts come off or something fails, I can't back up a few commands and restart from there without everthing getting out of wack. so it's all or nothing. I'm moving to a loft with 25ft walls soon and want to hook up a giant version with a paint sprayer. Thanks soo much for making this open source!

Euphy (author)  MattO33 months ago
Great to hear you're getting something out of it! Thank you for your message!
steezygiraffe3 months ago

I am having constant problems with the drawing starting up just fine, doing anywhere from 25 to 75% of the drawing, then just stopping. The program stops and I can't do anything in the polar graph controller except quitting it. I then have to restart the drawing from the start, but this once again just quits during the drawing. Is there any way to fix this?

steezygiraffe3 months ago
(removed by author or community request)
Euphy (author)  steezygiraffe3 months ago

Hello, thanks for your message. 3 things:

1) Can you snip the code from your post please? From "These variables are common to all polargraph server builds" downwards anyway - that stuff doesn't change.

2) I spotted a problem with "move to point" the other day, and never got around to investigating it - I think it might be what you have seen. So the symptom was that I sent a command like C01,800,1200,END (Which is to move over to the left-hand side somewhere), and what it actually did was move to 800,800. So the second parameter got lost. Well, I just fixed that now. See if it solves your problem or not. (I have updated the code in the repo, as well as the code bundle at

3) You have all three optional features disabled:



//#define PENLIFT

//#define VECTOR_LINES


So that's where two of your error messages are coming from - C14 and C45 are both to do with the pen lift. With the new version of this, it is safe to have all three features enabled!

Let me know if that helps,


IvanB44 months ago

Hi Sandy,

Great guide! This got me really inspired, so I promptly bought all the parts and built one myself. I have an arduino Mega, a motor shield V2 and zero programming experience. So yeah, I'm in way over my head :) I can always learn right?

I don't think you have a code for Mega with shield V2? I've got it to work by combining your mega source code with the motor shield V2 bits from the Uno source code, through the power of copy&paste. It works, but I think I messed up somewhere, because the machine draws really small (and possibly 'compressed': less width than height, if that makes sense).

You can see the results of some test pen widths in the picture. I believe I have set up the controller correct. Any idea of what's wrong?

Thanks & regards

Euphy (author)  IvanB44 months ago
Hello, thank you! You've made a great start there. Unfortunately, can't really tell much from the pen width test - it looks exactly as a pen width test should look.

How did you decide it was drawing too small?

The parameters (or variables) that change between motors and drivers are


The values depend on the actual physical steps per revolution of your motor (probably 200 for your NEMA 17 motors), and your step type that you have configured in the firmware (configuration.ino, line 32 and 43).

If you have stepType = INTERLEAVE (which is the default for motorshield v1), then you should set your stepsPerRev to double your physical steps per rev (ie 400), and your stepMultiplier to 1.

If you have stepType = MICROSTEP (which is the default for motorshield v2, though it makes an awful whine), then you should set your stepsPerRev to be the same as your actual physical steps (ie 200), but set your stepMultiplier to 16.

So the stepType needs to be set in the firmware at compile time, but the other two are configured in the controller, and sent as part of a "upload machine spec".

Apologies if you've already done all that :)

Also bear in mind that unless you're using the extra features of the mega, or polarshield branch (SD card, LCD etc), you might as well use the polargraph_server_a1 branch of the firmware.

good luck!
IvanB4 Euphy4 months ago

Hey, thanks for the help!

Keep in mind that I am very new to this (I have no idea what I'm doing :) So apologies if I fail to explain, or ask something that's obvious. I probably should have also experimented some more before asking for help. But hey, I'm excited because I just made motors rotate and I feel like a god. Seriously, I'm having a lot of fun!

From reading the code for both Mega and Uno, I assumed I needed stepType Microstep. Can I still use Interleave with motorshield V2?

The problem right now is as you say: I have stepType Microstep with stepsPerRev set to 400 and stepMultiplier set to 1 (steps per revolution of my motors is indeed 200).

I have set up my machine size and loaded it up like it should. I then made a small drawing (about 1/4 A4 paper visualy in the controller) which came out as a black rectangle about 5 by 2 cm (see crappy pic). That's why I concluded it was drawing too small. Also, when I use Move pen to point, the horizontal distance travelled by the gondola is greater than the vertical distance, which results in the 'compressed' drawing. This all is probably a result of the faulty motor setup...

I shall fiddle some more in the next week untill I get it to work.

Thanks again for the help, and making this project possible for people with as little experience as me!

Euphy (author)  IvanB44 months ago

Good stuff, fingers crossed that it's just the motor config - good progress so far, and yep such a good feeling when it finally moves :)

You can use INTERLEAVE with the motorshield v2 (AFMS2), but other folks ( reported pretty jerky movement. I think that is an issue of the motors being over-powered, and if it were a stepstick or a Polarshield (or an adjustable stepper driver), then I would just turn the power down. As it stood, microstepping seemed to solve the problem, so that's why I put it in the firmware as the default.

I don't like microstepping though, it makes an awful noise and really limits the top speed of the motor, so if I found I could get away with INTERLEAVE, I'd much rather use that.

You're very welcome - really glad you're enjoying it and have jumped into the code so successfully!


IvanB4 Euphy4 months ago

Got it to work just by setting multiplier to 16 with microstep! Check crappy pics, that's more like it, right?

So far I have no jerky movement I must say. Also, it doesn't make a lot of noise, other than a bit of a high pitched beep from the steppers. Is this the noise you are referring to? Maybe my steppers ( make less noise?

Looking forward to tweaking it some more and getting into the code, processing and TSP. But first I'm going to install the servo for pen lift I bought (after I have finished some drawings of my girlfriend :)

If I can help by giving feedback in any way, just let me know...


Euphy (author)  IvanB44 months ago

Yeah that's looking really good! The squeal of the motors didn't agree with me, but maybe I'm just sensitive :)

Good luck!


steezygiraffe4 months ago

Hi everybody, I am having troubles with getting the stepper motors to start to work. The green light is brightly light on top and the motors are hooked up. The serial connection doesn't seem to be a problem seeing as how the polargraph READY! shows up in green on top of the controller. Wondering if anybody has any possible solutions.

The steppers don't even lock when I do the things that are meant to make them wriggle. I am using the Adafruit V2 and I tried to do the things suggested like changing the code in the configuration section to go from v1 to v2 but the code isn't able to be verified. Power is getting to the motor ports, I tested it with a multimeter but the steppers haven't shown any sign of life yet. Very discouraging. Any and all help is appreciated.

Euphy (author)  steezygiraffe4 months ago
Hello, first off, have you already made sure there are no electrical or physical problems? That means you've tried the example sketches, and had the Adafruit_Motorshield/Accel_Multistepper, Accel_ConstantSpeed or StepperTest, and have seen the motors moving that way.

Also, not sure what you mean by the code not being able to be verified - you mean you can't compile / upload it? Nothing will ever work until you can get the code uploaded, and that's not a physical problem.

The arduino IDE will give you a message saying what it thinks is wrong if it fails (sometimes it's even a useful one). Work on getting that done next.

Post the code you're using if that helps. The configuration.ino should look like
// motor configurations for the various electrical schemes

// =================================================================
// 1. Adafruit motorshield

// Using Adafruit Motorshield V2? Comment out this one line underneath.
//#include <AFMotor.h>

// Using Adafruit Motorshield V1? Comment out the three INCLUDE lines below.
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_PWMServoDriver.h"

and the top part in polargraph_server_a1.ino should look like

// Program features
// ================
#define PENLIFT

// Specify what kind of motor driver you are using
// ===============================================
// REMEMBER!!!  You need to comment out the matching library imports in the 'configuration.ino' tab too.

Hello, thank you for your help.

I did mean that the code could not be compiled before when I said verify. Since your suggestion, I have tried the stepper test and that too yielded no results. From what you said, this probably means that there is a physical problem, correct? The power light does come on when I plug it in, and the soldering I did did't seem to have any visual problems with connectivity. What action should I next take?
Thanks so much for the help, I can't wait to get this awesome project up and running.

Euphy (author)  steezygiraffe4 months ago

Hum if the stepper test is not doing anything then that is your priority to fix first. It could be something wrong with the shield - it could just be your wires are crossed. How did you decide what order to screw the motor wires in?

I would have a bit of a trial with changing the wire sequence, double-check your power supply and then hit up the adafruit website to see if there's any wisdom there.

(Maybe worth mentioning that I've updated the polargraph_server_a1 code in the last few days to be more reliable - maybe give it a go when you've got your motors working.)

Hi Euphy,

Love the look of this project. Have bought all the bits and pieces but couldn't get hold of a Motorshield v1 so have a v2 instead. But pretty confused in terms of what software i need to run it. I notice in the comments below you've mentioned writing up a version for the v2 but looking through the various links, i'm completely lost. Are you still planning on doing a write up?

Any help gratefully received!



1-40 of 287Next »