Hunting a Snark? | Rudi Knoops


exploring uncharted terrain on the New Media map (after Lewis Carroll)

LilyPad Arduino: e-textile construction kit

Reading again about the Arduino Lilypad a few days ago, I started imagining what you could do with this miniature Physical Computing platform.

links to Leah

the LilyPad

Leah Buechley – developer  of the LilyPad – describes the LilyPad Arduino as “a set of sewable electronic components that let you build your own soft, interactive fashion.”
You could consider it a ‘subspecies’ within the Arduino range.
Leah Buechley has quite some tutorials/instructables on her website, and interesting examples like this one:

turn signal biking jacket

It might be an interesting link for the Social Textiles project, as the concept of the Lilypad centres on the combination of textiles  with a communication layer or a social layer (fed by sensor input). All depends of course on the conceptual framework wherein you intend to use this Physical Computing platform.

Another interesting idea would be to have a master student -  in  the context of his/her masters thesis in Communication & Multimedia Design – set up a project using the Arduino Lilypad, and develop a conceptual framework + prototype exploring possible uses of the Arduino Lilypad.

Might offer quite some possibilities indeed.

Into Physical Computing

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, …

one small step into the world of Physical Computing

one small step into the world of Physical Computing

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: 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()
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();
//insert a comma to separate the readings
//in Flash you can generate an array from this string
int x_02 = 0;
x_02 = ping_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.


June 2017
« Sep    
I currently have a PhD fellowship at KU Leuven, Associated Faculty of the Arts. This blog documents my PhD research, where I explore the workings of cylindrical anamorphosis in audiovisual media. My practice based arts research shows an evolution towards installation-based works.