This commit is contained in:
Dhananjay Balan 2019-03-10 22:19:27 -04:00
parent 5a4058caf8
commit bd274a6ba7

View File

@ -6,61 +6,64 @@ comments: true
tags: plotter, art, python, hardware, recurse tags: plotter, art, python, hardware, recurse
--- ---
I finally decided to give in to the FOMO of I finally decided to give in to FOMO on
[#plottertwitter](https://twitter.com/hashtag/plottertwitter?lang=en) and bought [#plottertwitter](https://twitter.com/hashtag/plottertwitter?lang=en) and bought
an old plotter off ebay. Me being in batch at [Recurse an old plotter off ebay. Me being in batch at [Recurse
Center](https://recurse.com) helped a lot, from the decision to get one to Center](https://recurse.com) helped a lot, from the decision to get one to
[nerdsnipe](https://xkcd.com/356/) Alex into collaberating with me. All of this [nerdsnipe](https://xkcd.com/356/) [Alex](https://github.com/wildconceits) into
work below is done with him. collaberating with me. All of the work below is done with him.
## What is a plotter anyway? ## What is a plotter anyway?
Plotters are devices that can transfer vector graphics onto to a physical Plotters are graphics devices that can transfer vectors onto to a physical
medium. Core of a plotter is the arm that can move in 2 axes around the medium, medium. Core mechanism of a plotter consists of an arm that can move pen in 2
and ability to put the pen "Down" (draw) and "Up", to position before starting axes (w.r.t the medium) and ability to put the pen "Down" (draw) and "Up",
to draw. Versions of plotters exist where paper is replaced with other flat Versions of plotters exist where paper is replaced with other flat materials
materials like vinyl and pen with a knife to cut rather than to draw. like vinyl or pen with a knife to make it a cutting plotter.
I like to think plotters as the naive solution to the problem that computers I like to think plotters as the naive solution to the problem that computers
should be able to draw. Smaller, expensive memory chips (or [magnetic should be able to draw. Smaller, expensive memory chips (or [magnetic
cores](https://en.wikipedia.org/wiki/Magnetic-core_memory)) in earlier computers cores](https://en.wikipedia.org/wiki/Magnetic-core_memory)) in earlier computers
made working with raster images hard. made working with raster images hard, and plotters didn't need much operating
memory.
## HP7440A ## HP7440A
HP was on top of the plotter game when they were popular, so much HP was on top of the plotter game when plotters were popular, so much
that other manufacturers started to support that other manufacturers started to support
[`HP-GL`](https://en.wikipedia.org/wiki/HP-GL) (short for `HP Graphics [`HP-GL`](https://en.wikipedia.org/wiki/HP-GL) (short for `HP Graphics
Langauge`) as the way to talk to their plotters as well. Langauge`) as the way to talk to their plotters as well.
HP7440A _"ColorPro"_ was an affordable plotter produced by HP, it can hold 8 HP7440A _"ColorPro"_ was an affordable plotter manufactured by HP, it can hold
pens at the same time and switch between them automatically and draw on surfaces and switch between 8 pens simultaneously and draw on surfaces as large as A4.
as large as A4. [HP Museum has a longer post about this [HP Museum has a longer post about this
plotter](http://hpmuseum.net/display_item.php?hw=80) plotter](http://hpmuseum.net/display_item.php?hw=80)
Ours came pretty unscathed, with the original manuals! Ours came pretty unscathed, with original manuals!
First thing we did was to open it and clean it. I was quite surprised by how First thing we did was to open and clean it. I was quite surprised by how
easy it is to open, take that 2018 tech! easy it is to open, take that 2018 tech!
![7440 open](/images/7440a_open.jpg){ width=600px } ![7440A Top cover open](/images/7440a_open.jpg){ width=600px }
Internal mechanism is pretty simple, There is two servos. One for moving paper Internal mechanism is pretty simple, There are two servos. One for moving paper
back and forward, and one for moving the pen left and right. There is also a back and forward, and one for moving the pen left and right. There is also a
solenoid based lever to put the pen down and up. solenoid based lever to switch pen down and up.
## Talk To Me ## Talk To Me
![7440 interface](/images/7440a_interface.jpg){ width=600px } ![7440A Interfaces](/images/7440a_interface.jpg){ width=600px }
However, our plotter didn't come with any cables to either power it or to send However, our plotter didn't come with any cables to either power it or to send
commands. Power was the biggest mystery <power picture> commands.
After digging through the manuals, and the [hand drawn schematics from HP Power supply was the biggest mystery. After digging through the manuals, and the
Museum](http://hpmuseum.net/exhibit.php?hwdoc=80), we managed to identify power [hand drawn schematics from HP
supply to be a `10-0-10` AC to AC. Luckily someone was selling one in ebay, but Museum](http://hpmuseum.net/exhibit.php?hwdoc=80), we managed to identify it to
we couldve built one ourselves if not. be a `10-0-10` AC to AC. Luckily someone was selling one in ebay, but we could've
built one ourselves if not.
Communication turns out be standard serial, however our plotter has a `DB-22` Communication turned out be just standard serial, however our plotter has a
adaptor, so we had to use a `DB-22` to `DB-9` and `DB-9` to `usb` adaptor. `DB-22` adaptor, so we had to use a `DB-22` to `DB-9` adpator and then `DB-9` to
`usb` adaptor.
.. and finally our plotter moves! .. and finally our plotter moves!
@ -70,9 +73,8 @@ adaptor, so we had to use a `DB-22` to `DB-9` and `DB-9` to `usb` adaptor.
## Gooo faster. ## Gooo faster.
HP7440A has a limited amount of buffer space (about 60 bytes), so if we send a HP7440A has a limited amount of buffer space (about `60 bytes`), so if we send a
longer command list to the interface, it will just drop the overflow bits and longer command list to the interface, it will just drop bits after 60 and crash.
stop to respond.
Our first naive solution was to add `1s` sleep between sending subsequent Our first naive solution was to add `1s` sleep between sending subsequent
commands, however this made drawings really slow and there was ink bleeding on commands, however this made drawings really slow and there was ink bleeding on
@ -83,7 +85,7 @@ hpgl.js](https://djipco.github.io/hpgl/hpgl.js.html#line1535).
It is a clever hack, the idea is to send the HPGL command `OA` as a marker, `OA` It is a clever hack, the idea is to send the HPGL command `OA` as a marker, `OA`
sends the current pen position back from plotter, so we batch a bunch of sends the current pen position back from plotter, so we batch a bunch of
commands, suffix it with `OA`, and as soon as we see the position on the line, commands, append it with `OA;`, and as soon as we see the position on the line,
we know that the current set is consumed and we can send the next batch again. we know that the current set is consumed and we can send the next batch again.
The code for it looks like this The code for it looks like this
@ -146,7 +148,7 @@ A re-reading of the manual made us realize HP sold these functionality as an
[hardware adaptor board that plugs in the [hardware adaptor board that plugs in the
bottom](https://support.hp.com/us-en/document/bpp01354), which we don't have. bottom](https://support.hp.com/us-en/document/bpp01354), which we don't have.
But everything in computer graphics is a line anyway right? With some [root of But everything in computer graphics is a line anyway, right? With some [root of
unity](http://mathworld.wolfram.com/RootofUnity.html) math, we came up with a circle unity](http://mathworld.wolfram.com/RootofUnity.html) math, we came up with a circle
drawing routine. drawing routine.
@ -156,15 +158,16 @@ drawing routine.
## This is only the beginning ## This is only the beginning
Hardware wise, the only thing remaining to fix is our pens, which expired in Hardware wise, only thing remaining to fix is our pens, which expired in
1996! We are yet to come up with a strategy to refill/replace them. 1996! We are yet to come up with a strategy to refill/replace them.
![Plotter Pen](/images/7440a_pens.jpg){ width=600px } ![Plotter Pen](/images/7440a_pens.jpg){ width=600px }
I am also going to leave this plotter at RC, so that other recursers continue I am also going to leave this plotter at RC, so that other recursers can
hacking on it, and get another one for me and actually to some generative art. continue hacking on it, and get another one for me and actually do some
:-) generative art. :-)
## Notes ## Notes
1. Big thanks for Amy and Francis and Alex S for their help at various points. 1. Big thanks to Amy and Francis and Alex S for their help at various points.
2. All of our python code is here: [https://github.com/dbalan/plotter-scripts](https://github.com/dbalan/plotter-scripts) 2. All of our python code is here: [https://github.com/dbalan/plotter-scripts](https://github.com/dbalan/plotter-scripts)
3. Thanks Tom for proof reading this post!