Hey Morbo, brilliant build and very useful set of pictures - thanks for sharing them! I'm curious about if there's a noticable delay when the bot receives a new command from the PC - on mine, it's quite a pause while it does a back-and-forth, but I'm not being very clever/efficient about it. I get the impression that der Kritzler software is somewhat more streamlined than mine.
Re: the issues you're having with a gradual bend appearing in the drawing - I don't know what to make of that. I get similar kinds of distortions on mine sometimes, but always in the opposite direction (I think) - so I get a distortion that leads to a convex bottom (ha). This is when the home point has been misplaced. I don't recall how Alex does the calibration/homing on der kritzler, a default belt length on startup I guess, so I would look there first to make sure you have your measurements as accurate as is practical. Certainly, when the gondola gets to the bottom of the page, the belts are not as extended as the machine thinks they are.
Does your easel slope backwards or is it vertical? Looking good.
Oh right, code, I've just made a branch of the polargraph_server code that I believe will suit you. It was actually for the ITead dual step motor shield that has A3967 drivers on it, but these are serial chips, so I'm pretty sure they'll work ok with the pololus. I've had a very quick test with some stepsticks here, and it makes whirring noises and things, but haven't tested it any further than that.
The actual pins you use are different though, so if you want to try it
change line 16 from
int const PEN_HEIGHT_SERVO_PIN = 14;
int const PEN_HEIGHT_SERVO_PIN = 8;
and lines 62-70 from
const byte motoraStepPin = 2;
const byte motoraDirPin = 3;
const byte motoraMicrostep1 = 4;
const byte motoraMicrostep2 = 5;
const byte motorbStepPin = 6;
const byte motorbDirPin = 7;
const byte motorbMicrostep1 = 8;
const byte motorbMicrostep2 = 9;
const byte motoraStepPin = 9;
const byte motoraDirPin = 10;
#const byte motoraMicrostep1 = 4;
#const byte motoraMicrostep2 = 5;
const byte motorbStepPin = 11;
const byte motorbDirPin = 12;
#const byte motorbMicrostep1 = 8;
#const byte motorbMicrostep2 = 9;
The motor*Microstep variables can actually be taken out entirely, because they don't get used in your circuit. (They don't in mine either, but they _can_, which is why the variables were still there - just to remind me not to use those pins.)
This uses the AccelStepper library, so you will need that, but it's easy enough to run through the main arduino environment rather than eclipse.
You might have to reverse your motor coil wiring to get the wheels turning in the right direction, but I don't _think_ there's anything else. (Other than defining your machine size etc through the controller.)
Oh, one other thing though, the microstepping nature of the pololus means that it takes thousands of steps to move from one place to the next rather than just hundreds, and this makes it pretty slow with accelstepper - lanthan certainly noted this as a problem in his build.
Great stuff, thanks