At a Christmas party last year I met audio-visual artist Antione Catala, who was working on a installation idea. The idea had its origin in the work of Chris Harrison and involved a visual display that was given its texture through pneumatic actuation. The finished installation involved a few isolated pieces of work. The pneumatic actuation, my contribution, figured into the piece that is shown above. See a video of the exhibit.
The pneumatic display design incorporated the following components: an air pump, a set of hoses, a couple of solenoid valves activated by a microcontroller and an air chamber that served as the surface for the projection. Chris Harrison’s experience with pneumatic displays was very instructive.
Antoine’s innovation on Chris’ idea was to make the inflation and deflation of the air chamber automated, and synced with projector images shown onto it. The all-acrylic chamber has a section cut-out in a given shape or pattern, and over this surface is glued a standard piece of latex. When air pressure is applied, it is the latex on top of the cut-out section that bulges out. Conversely, it is possible to glue acrylic shapes inside the air chamber. When an air vacuum is pulled, those shapes come into relief.
That’s the basic concept, and Antoine wanted a rapid cycling of concave and convex shapes on which to project images. We were fortunate to have obtained a single, impeller-type pump with both pressure and vacuum ports. Due to some issues with solenoid valves, I used two separate air valves, one for the pressure side, one for vacuum. They basically operate open/closed, and the output from both valves comes together in a T, then goes to the air chamber. I used 3/8″ plastic hose and used 1/4″ connectors to terminate at the pump, valves and T.
As the valves would always have pressure or vacuum on one side, the challenge was to operate them in opposing fashion at a given frequency. I used an Arduino UNO as the microcontroller (MCU). Because the MCU can only source 20mA or less, without burning up the input/output port, I knew I need to use hardware to raise that current enough to operate the solenoid coils.
I used a standard NPN, BJT transistor operating in saturation as a switch. I limited the current coming from the MCU output with a 500 ohm resistor. Using the same 12V power supply that would ultimately power the solenoids, the transistor was designed to see a HIGH from the MCU and to source a few hundred miliamps. That collector to emitter current was placed in series with a normally open (NO)/normally closed (NC) solid state relay from Radio Shack. I hooked one solenoid to the NO lead and one the NC lead. Thus I used these leads as 12V switches for the solenoids (which was what they were designed for).
The remaining hardware was just a couple of simple potentiometers designed to allow for manually adjustment of the pulse frequency and duty-cycle. These had their outputs connected to two of the MCU input/output ports, and was powered by the MCU 5V supply. Now to the software, and the code is:
Having had a little background with C++, the Arduino code environment came easily. In fact, the entire Arduino experience, was extremely straight-forward and easy. The development environment was easy, the coding and upload process was easy, and the board itself was self-explanatory. I basically needed to initialize a single output port to source current to the afore-mentioned transistor, and then send it HIGH for a period of time, then send it LOW for period of time. Because this would happen within the main Arduino loop, it would repeat infinitely.
I wanted the delay (or I should say ‘period’) to be manually adjustable, this was a variable that was read off of the input I/O delivered from one potentiometer. I used some mapping to adjust the valves along a range of .1s to 10s, or something like that. Then the other potentiometer controlled the percent on/off (or duty-cycle). This is basically pulse-width modulation that I had devised a simple algorithm for.
Also inside this loop was the serial, MIDI output. This function was designed to send out two different musical notes based on the status of the HIGH or LOW. Using Arduino’s serial output, we rigged it up to a MIDI cable and this signal was utilized by Antoine’s projector software.