comments: suggest a few edits that can probably be ignored
This commit is contained in:
		 Thomas Gardner
					Thomas Gardner
				
			
				
					committed by
					
						 Dhananjay Balan
						Dhananjay Balan
					
				
			
			
				
	
			
			
			 Dhananjay Balan
						Dhananjay Balan
					
				
			
						parent
						
							3e814e99da
						
					
				
				
					commit
					c944882a01
				
			| @@ -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! | |||||||
|  |  | ||||||
| { width=600px } | { 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 | ||||||
|  |  | ||||||
| { width=600px } | { 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. | ||||||
|  |  | ||||||
| { width=600px } | { 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. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user