Printer Jam

From XPUB & Lens-Based wiki
Revision as of 10:21, 5 June 2024 by Vitrinekast (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Printer Jam is a semi-improvised, audio-visual performance by Rosa Schuurmans and Riviera Taylor. By drawing together live coding and hardware hacking practices we aim to illustrate the “if this then that” of software and hardware. Printer Jam features a modular and extensible setup, tru the power of OSC(!) and the very accessible motor shield, you’d be able to hook up anything with a motor (toothbrushes, blenders, ventilators).

Printer Jam is also very much an exchange of practices, as Riviera was already exploring FLOSS based performance via, for instance, live coding, and Rosa has been seen carrying printers around WDKA for a while now.

on OSC (pronounced as Oh, Ice sea!)

Open sound control is an open protocol for sending data between networked devices in real-time. There are two slightly different specifications for Open Sound Control: V1.0 and V1.1. It was designed and developed by Matt Wright and Adrian Freed approximately 25 years ago. The real-time aspect of the protocol makes it appropriate for sonic performances involving technology, such as Printer Jam.

Example of a packet <address pattern> <type tag string> <arguments>

interfacingpageicon.gif

We use OSC as the main communication protocol between Tidal Cycles and the printers. Tidal Cycles acts as an OSC client. It sends packets containing messages to the OSC server running on the Arduino. The Arduino is programmed to be subscribed to these messages, and executes arduino functions when receiving the right messages. This way, all of the timing and pattern making, which can be a difficult task for an Arduino, is handled by Tidal Cycles. As if it were the conductor and the printers are members of the orchestra.

On the Arduino side, we make use of the Adafruit Motor Shield V2, which we found to be very plug-n-play, but any other motor driver could work as well. The library is documented here. Each DC motor can be set to a certain speed, and can be told to run FORWARDS, BACKWARDS, or to stop (RELEASE). These basic ingredients can become very complex when combined with interesting patterns in Super Collider.

The sound of each motor and each printer differs a lot, and can be very unpredictable. For instance, one specific motor also controlled some small plastic gears opening and closing the paper tray, a harsh sound when closing. As this only happened when the motor is at a very specific radius, it’s difficult to get this exactly the same every time you play the printer. But, I think this unpredictable element is what makes it an actual printer jam, and less beep-beep-boop-boop-computer-ping-ping.+1

Additionally, the acoustics of the printer itself changes the characteristics of the sound. Having the lid closed or open makes a huge difference, or completely dismantling the printer vs. having loads of loose hanging plastic bits and pieces, resonating with the sound of the motors. And of course, having the print head just banging like madness against the plastic container is a sound like no other.

How to hack a printer: the non-intrusive way

[should take some pictures for this] The objective is to find the 2 DC motors that control the printhead and paper feed, and connect these to the Motor shield. The easiest way to do this is by using alligator clips, and connecting the pins of the DC motor to the motor terminals on the motor shield. This way, you don’t need to disconnect any wires/PCB’s, and can just override the function of the motor. Dependant on the model and brand of the printer, this task can get increasingly difficult, as you might have to fight your way trough multiple layers of plastic or some very stubborn screws.

The Arduino code is accessible via the Git repo.

Audio Samples

First performance at Varia

Riviera and Rosa performed Printer Jam at Varia on May xth 2024 as part of Extratonal Special #2, Puzzling Printers Camp. At the event, a 20 minute performance was given to a live audience including other (media) practitioners working with printers. In preparation for the performance Rosa took apart a printer and connected the motors to an arduino. She also wrote most of the Arduino code that would enable the motors to respond to live OSC packets. During this time, Riviera figured out how to flash Arduinos using makefiles in order to write Arduino code in Emacs rather than the Arduino IDE. Rosa and Riviera then took time to map out the OSC address space. The map was drawn up on the basis of the hardware itself and the parameters / functions available in the associated Arduino libraries. The map had to be written twice: once in Arduino code and once in Tidal / Haskell code, and these parts had to mirror one another, implementing the same parameters with consistency.

During the performance Riviera used Tidal Cycles, a live coding environment, to send OSC messages to the Arduino and power the motors. The intention, from the outset, was to create percussive rhythms with the printers. We made the decision to amplify these sounds using a combination of Piezo Discs and dynamic microphones. To that end, during the performance, Rosa operated a mixing desk, shaping the amplified sounds, monitoring levels and adjusting effects. The printheads collided with the casing and the paper feed components rattled away. The audience members enjoyed it, many said to me afterwards that it was a great performance. So we took it to Karlsruhe, Germany!

GPN22

https://entropia.de/GPN22/en TBA!

A video of the performance can be found here https://media.ccc.de/v/gpn22-457-printer-jam-get-a-grip-on-everyday-life-with-osc


VIPAW 2024? https://veniceperformanceart.org/

Audio recording of the performance

TBA!

happyguyinlabcoat.gif