Hunting a Snark? | Rudi Knoops

Icon

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

Flocking behaviour & influence maps

I’ve been exploring  different scenario’s how to in a controlled way use randomness  in the large interactive wall for the museum installation. Randomness and control? Indeed,  there is always some kind (and degree) of  control when you integrate randomness.
I’ve been experimenting with the ‘Assembler’ code  from yaief.wordpress.com/2008/12/09/fun-with-flash-assembler/. One possible idea was to use treelike structures as background for each of the 12 elements of the installation:


influencing Flocking behaviour using image maps from Rudi Knoops on Vimeo.

This video shows the output of the Flash experiment where an influence map is used to control the flocking behaviour of particles. More specifically:  the particles line up in the form of the influence map used: a treelike structure.

When using 2 such ‘elements’ within one Flash project, it became immediately clear that this was too CPU intensive. Pity.

Conclusion: interesting technology, but not usable for the project I’m working on now.

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: 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.

 

October 2017
M T W T F S S
« Sep    
 1
2345678
9101112131415
16171819202122
23242526272829
3031  
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.