An intro to Pen Plotters

First we moved to the center of the box, which is (1500,1500) and then we drew a circle with a radius of 500.

You probably noticed that the circle command is a little more advanced than PU and PD, in that it automatically handled lifting the pen up and down.

As I alluded to earlier, there are other commands like that for drawing primitive shapes, e.


ER for Edge Rectangles (which are rectangles without a fill):PU2000,2000;ER1000,1600;And if you want a rectangle with a fill, use RR:PU3000,3600;RR1000,1000;Now your piece of paper should look roughly like this:Not a bad start.

Hopefully you found this as fun to play around with as I did when I first started playing with plotters.

It does get pretty tedious to manually control it via the terminal though, so next step would naturally be to start automating the drawing part a bit.

Luckily there are awesome generative art tools out there, like OpenFrameworks and Processing.


Personally I like using Processing, because it’s a neat self contained package and because of it’s twin: Processing.



js means I can play around with a sketch on my iPad using Procoding while on the train, and when I’m ready to draw it I can dump the exact same code into the “real” Processing IDE on my laptop with access to the serial port, OpenCV, etc.

Connecting to ProcessingI’m assuming you know the basics of Processing.

org (or a similar environment) if you’re reading this.

If not, now would be a good time to pick it up.

It has never been easier to get started — there’s a huge community and tons of tutorials to support you.

Essentially the workflow is the same as before: You set up a simple serial connection and hand over the drawing part to Processing (or whatever your tool of choice is).

One important thing to be aware of is that these plotters have tiny little buffers, so you can’t feed them all the HPGL commands at once.

There are two ways of going about that: One is to drip feed them with data, which is slow, but also by far the easiest to implement, the other way is to implement a simple form of flow control by asking the plotter if there’s enough buffer space available before sending it another chunk of data.

I’ll cover how to do that later in another article.

Drip feeding is great for just playing around, especially in the beginning since it’s easy to implement.

Just add a delay between issuing your drawing commands, so the plotter has time to catch up.

Depending on what you draw you might have to experiment a little.

If you overflow the buffer your plotter will start behaving weird and it’ll probably try to indicate that an error happened.

9 out of 10 times I’ve had problems, it’s been due to the buffer overflowing.

A good delay value to start with would be something like 250–500 ms.

I’ve uploaded a Processing sketch as an example of something that works with the drip feeding method.

It’s a recreation of Georg Nees’s “Cubic Disarray” from the late 60’s, and it looks like this if you plot it on an HP 7550A on a sheet of 11×17" paper:You can find it here: https://github.

com/tobiastoft/SymbolicDisarrayI tried to make the code as easy as possible to modify from a visual point of view, one of the things I did was implement a very simple “symbol” feature, where you can define something else than a square to copy and rotate as the plotter progresses down the page.

I’ve included a few examples in the code.

The different symbols are found in the “Symbol” class which starts around line 105 (I’ll clean up that file soon, I promise).

I also included a quick example of how to use the HPGL “label” (LB) command to add text to a drawing.

You’ll find the example around line 49 in SymbolicDisarray.


Labels are fun to play around with and it’s fascinating to watch the plotter write each letter — plus the built-in font isn’t too bad either.

Here’s what the Lightning Bolt pattern looks like, notice the label at the bottom.

If you’re still with me this far, then first of all: Thanks!.I’m not sure I would have been able to concentrate that long myself.

Second, if you’re still interested in plotting then please go nuts with the example code — fork it like there’s no tomorrow and don’t forget to share what you make!Alright, back to 2019: The years after I wrote this brought a lot of really interesting plotter-related products to the market, as well as much better software solutions than what I’m proposing above.

I’d highly recommend checking out this Github repo which is probably the most comprehensive collection of plotter related resources I’ve seen, in case you’re interested in learning more.


. More details

Leave a Reply