comments: suggest a few edits that can probably be ignored

This commit is contained in:
Thomas Gardner 2019-03-15 17:00:47 -04:00 committed by Dhananjay Balan
parent 3e814e99da
commit c944882a01

View File

@ -8,19 +8,19 @@ tags: plotter, art, python, hardware, recurse
I finally decided to give in to FOMO on 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*. Being in batch at the [Recurse
Center](https://recurse.com) helped a lot, from the decision to get one to Center](https://recurse.com) helped a lot: the old hardware laying around inspired the purchase, and a successful
[nerdsnipe](https://xkcd.com/356/) [Alex](https://github.com/wildconceits) into [nerdsnipe](https://xkcd.com/356/) of [Alex](https://github.com/wildconceits) gave me a willing
collaborating with me. All of the work below is done with him. collaborator. All of the work below was done with him.
## What is a plotter anyway? ## What is a plotter anyway?
Plotters are graphics devices that can transfer vector images onto a physical Plotters are graphics devices that can transfer vector images onto a physical
medium. The core mechanism of a plotter is an arm that can move a pen in 2 medium. The core mechanism of a plotter is an arm that can move a pen in 2
axes (w.r.t the medium) and ability to pick up or place down the pen to draw. axes (w.r.t the medium) and the ability to pick up or place down the pen to draw.
Versions of plotters exist where paper is replaced with other flat materials Versions of plotters exist where paper is replaced with other flat materials
like vinyl or pen with a knife to make it a cutting plotter. 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 of 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, and plotters didn't need much operating made working with raster images hard, and plotters didn't need much operating
@ -29,7 +29,7 @@ memory.
## HP7440A ## HP7440A
HP7440A _"ColorPro"_ was an affordable plotter manufactured by HP, it can hold HP7440A _"ColorPro"_ was an affordable plotter manufactured by HP, it can hold
and switch between 8 pens simultaneously and draw on surfaces as large as A4. and switch between 8 pens simultaneously, and draw on surfaces 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)
@ -40,33 +40,32 @@ easy it is to open, take that 2018 tech!
![7440A Top cover open](/images/7440a_open.jpg){ width=600px } ![7440A Top cover open](/images/7440a_open.jpg){ width=600px }
The internal mechanism is pretty simple, There are two servos. One for moving The internal mechanism is pretty simple. There are two servos. One for moving
the paper back and forward, and the other for moving the pen left and right. the paper back and forward, and the other for moving the pen left and right.
There is also a solenoid based lever to switch pen down and up. There is also a solenoid-based lever to move pens to and from the paper.
## Talk To Me ## Talk To Me
![7440A Interfaces](/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 Our plotter didn't come with any cables to either power it or to send it
commands. commands.
Power supply was the biggest mystery. After digging through the manuals, and the Puzzling out the power supply was the biggest mystery. After digging through the manuals and
[hand drawn schematics from HP [hand drawn schematics from the HP
Museum](http://hpmuseum.net/exhibit.php?hwdoc=80), we managed to identify it to Museum](http://hpmuseum.net/exhibit.php?hwdoc=80), we managed to identify it as
be a `10-0-10` AC to AC. Luckily someone was selling one in ebay, but we could've a `10-0-10` AC to AC. Luckily someone was selling one on *ebay*.
built one ourselves if not.
Communication turned out be just standard serial, however our plotter has a Communication turned out to be done using standard serial over a
`DB-22` adaptor, so we had to use a `DB-22` to `DB-9` adpator and then `DB-9` to `DB-22` adapter. We solved this by chaining a `DB-22` to `DB-9` adapter to a `DB-9` to
`usb` adaptor. `usb` adapter.
The final step was writing in the only language the plotter can understand, The final step was writing in the only language the plotter can understand,
[`HP-GL`](https://en.wikipedia.org/wiki/HP-GL) or `HP Graphics Langauge`. Lucky [`HP-GL`](https://en.wikipedia.org/wiki/HP-GL) or `HP Graphics Language`. Lucky
for us, HP was on top of the plotter game when plotters were popular, so `HP-GL` for us, HP was on top of the plotter game when plotters were popular, so `HP-GL`
has become a de facto standard for talking to plotters. has become a de facto standard for talking to plotters.
.. and finally our plotter moves! ...and finally our plotter moves!
<video width="600" height="450" controls> <video width="600" height="450" controls>
<source src="/images/7440a_printing.mp4" type="video/mp4"> <source src="/images/7440a_printing.mp4" type="video/mp4">
@ -75,24 +74,24 @@ has become a de facto standard for talking to plotters.
## Goooooooo faster. ## Goooooooo 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 bits after 60 and crash. longer command list to the interface, it will drop all bits after 60 and crash.
Our first naive solution was to add `1s` sleep between sending subsequent Our first solution was to add `1s` sleep between sending subsequent
commands, however this made drawings really slow and added artifacts from commands, however this made drawings really slow, and led to artifacts from
ink bleeding while the plotter is waiting for the next command. ink bleeding while the plotter is waiting for the next command.
Another recurser Francis pointed us to a clever hack in the [wait function] Another Recurser, Francis, pointed us to a clever hack in the [wait function]
in [hpgl.js]. This function uses the HPGL command `OA;` to block execution from [hpgl.js]. This function uses the HPGL command `OA;` to block execution
until the plotter is finished with the current instruction. When the plotter until the plotter is finished with the current instruction. When the plotter
executes `OA;` it sends the current pen position, but it first needs to executes `OA;` it sends the current pen position, but it first needs to
wait until the pen has stopped moving. Thus we can batch a bunch of commands wait until the pen has stopped moving. Thus we can batch a bunch of commands
and append it with `OA;`. As soon as we see the position over the serial, and append `OA;`; once we read the position from the serial,
we know that the previous batch is consumed and we can send the next batch of commands. we know that the previous batch is consumed and we can send the next batch.
[wait function]: https://djipco.github.io/hpgl/hpgl.js.html#line1535 [wait function]: https://djipco.github.io/hpgl/hpgl.js.html#line1535
[hpgl.js]: https://github.com/djipco/hpgl [hpgl.js]: https://github.com/djipco/hpgl
The code for it looks like this: The code for this trick looks like:
```python ```python
import serial import serial
@ -149,11 +148,11 @@ After initial success we quickly realized our plotter does not respond to any
commands that involved HP-GL instructions to draw basic geometry, like `CI` for commands that involved HP-GL instructions to draw basic geometry, like `CI` for
circle. circle.
A re-reading of the manual made us realize HP sold these functionality as an A re-reading of the manual made us realize that HP sold this functionality as a
[hardware adaptor board that plugs in the [hardware adapter board that plugs into the
bottom](https://support.hp.com/us-en/document/bpp01354), which we don't have. bottom](https://support.hp.com/us-en/document/bpp01354). Our plotter did not arrive with this board.
But everything in computer graphics is a line anyway, right? With some [root of But everything in computer graphics is a line anyway, right? Using 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.
@ -163,16 +162,16 @@ drawing routine.
## This is only the beginning ## This is only the beginning
Hardware wise, only thing remaining to fix is our pens, which expired in Hardware wise, the only thing left 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 can I am also going to leave this plotter at RC (so that other Recursers can
continue hacking on it, and get another one for me and actually do some continue hacking on it), and buy another one for me to actually do some
generative art. :-) generative art. :-)
## Notes ## Notes
1. Big thanks to 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! 3. Thanks to all who proof read this post.