One of the installations I’m currently building for the museum M in Leuven, is a large interactive wall, consisting of 4 projections next to eachother. The interaction is being triggered by detection of presence or movement.
The content is built around 12 objects from the archeology collection. Each object or artefact generates an associative stream of images, as if visualising a stream-of-consciousness.
The technology involved is quite complex. For the time being, it is a combination of motion or presence detection, Arduino (as a Physical Computing platform), Flash, …

The total width of the projection is ± 1280 x 4 pixels which mounts up to a whopping 5120 pixels horizontally.
Of course, as in every project, ‘things’ need to be sorted out:
Flash export is for example still limited to 2880 x 2880 pixels. I’d hoped for changes with CS4, but alas. Scaling the exported swf to the required resolution is a no go, as not all the visuals will be vectorbased.
The compromise is to use 2 Flash files next to eachother, and use “localConnection” to have the 2 files communicate.
If intermovie communication is necessary in the final product, implementing “localConnection” will be the way to go.
Then there is/was the choice of sensors.
After quite a bit of reading and experimenting, I decided upon using the Ping))) Ultrasonic Range Finder.
The code I’m using now is based upon David Cuartielles Arduino sketch that I expanded with code that I found in the arduino playground: http://www.arduino.cc/playground/Main/UltrasonicSensor and that converts the value of the ultrasound echo into centimeters! (Thank you Jason Ch!!)
As I’m using several sensors as physical input, I collect the separate readings of the sensors in one string, the different readings separated by a comma.
Here is the Arduino sketch (this sketch is for 2 ultrasonic sensors: multiply when using more sensors)
unsigned long echo_01 = 0; int ultraSoundSignal_01 = 7; // Ultrasound signal pin unsigned long ultrasoundValue_01 = 0;unsigned long echo_02 = 0; int ultraSoundSignal_02 = 8; // Ultrasound signal pin unsigned long ultrasoundValue_02 = 0;void setup() { Serial.begin(9600); pinMode(ultraSoundSignal_01,OUTPUT); pinMode(ultraSoundSignal_02,OUTPUT); }unsigned long ping_01(){ pinMode(ultraSoundSignal_01, OUTPUT); // Switch signalpin to output digitalWrite(ultraSoundSignal_01, LOW); // Send low pulse delayMicroseconds(2); // Wait for 2 microseconds digitalWrite(ultraSoundSignal_01, HIGH); // Send high pulse delayMicroseconds(5); // Wait for 5 microseconds digitalWrite(ultraSoundSignal_01, LOW); // Holdoff pinMode(ultraSoundSignal_01, INPUT); // Switch signalpin to input digitalWrite(ultraSoundSignal_01, HIGH); // Turn on pullup resistor echo_01 = pulseIn(ultraSoundSignal_01, HIGH); //Listen for echo ultrasoundValue_01 = (echo_01 / 58.138) ; //convert to Centimeters return ultrasoundValue_01; }unsigned long ping_02(){ pinMode(ultraSoundSignal_02, OUTPUT); // Switch signalpin to output digitalWrite(ultraSoundSignal_02, LOW); // Send low pulse delayMicroseconds(2); // Wait for 2 microseconds digitalWrite(ultraSoundSignal_02, HIGH); // Send high pulse delayMicroseconds(5); // Wait for 5 microseconds digitalWrite(ultraSoundSignal_02, LOW); // Holdoff pinMode(ultraSoundSignal_02, INPUT); // Switch signalpin to input digitalWrite(ultraSoundSignal_02, HIGH); // Turn on pullup resistor echo_02 = pulseIn(ultraSoundSignal_02, HIGH); //Listen for echo ultrasoundValue_02 = (echo_02 / 58.138) ; //convert to Centimeters return ultrasoundValue_02; }void loop() { int x_01 = 0; x_01 = ping_01();Serial.print(x_01); //insert a comma to separate the readings //in Flash you can generate an array from this string Serial.print(',');int x_02 = 0; x_02 = ping_02();Serial.print(x_02);Serial.println(0, BYTE); // necessary for being able to read the data in Flash!!!delay(100); //delay 1/4 seconds. // set slower to 1000 e.g. depending on the needs }
Another issue in the Arduino-Flash communication is that the Arduino board does not communicate directly with Flash. In contrast to programmes such as Processing or Max/MSP, you need a socket that transfers the serial data from the Arduino board to Flash.
A solution that works fine for me is the Java applet “Serial Server”, handling the serial communication in the background.
(Screenshot to be inserted)
Explaining the Flash part will be for another day.