Aire de jeu éphémère
L’espace public urbain semble aujourd’hui majoritairement fréquenté à des fins fonctionnelles et commerciales. La multiplication des villes «connectées» nous laisse présager que la situation ne va pas changer, au contraire. En effet, les milliers de capteurs qui composent ces villes vont permettre de planifier au mieux nos déplacements, consommations, etc.
De plus, dans un contexte où la retranscription à grande échelle par les médias de certains événements ou faits sportifs met en évidence des valeurs parfois en décalage avec l’éthique initiale du sport (cf. mémoire), j’ai eu l’envie de réaliser un projet prenant le contre-pied de ces faits, prônant des valeurs citoyennes à travers le sport.
Mon intention est de réaliser un changement de fonction éphémère, facile et rapide, d’une partie d’un espace public pour en faire un lieu sportif/ludique afin de permettre aux citoyens de partager des moments de détente et de plaisir et pour favoriser le rapprochement des individus par le jeu/sport.
La solution technique qui m’est apparue comme la plus pertinente afin de respecter cette volonté d’éphémérité nécessaire au respect des usages premiers de ces lieux et afin de ne pas dégrader ces lieux communs à tous est un système de projection lumineuse qui va venir se superposer à n’importe quel sol/mur/lieu. En associant la projection à une caméra nous allons à la fois pouvoir reconstruire les conditions d’une «smart city», adapter l’aire de jeu au mieux au contexte particulier et l’utiliser pour créer des principes de jeux (ex : tracking d’une balle, détecter des zones, …).
Premières expérimentations sur écran.
Prochaine étape : remplacer l'écran par un vidéo-projecteur.
Matériel
Code Arduino
int firstSensor = 0; // first analog sensor
int secondSensor = 0; // second analog sensor
int inByte = 0; // incoming serial byte
void setup()
{
// start serial port at 9600 bps:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
pinMode(0, INPUT); // digital sensor is on digital pin 0
establishContact(); // send a byte to establish contact until receiver responds
}
void loop()
{
// if we get a valid byte, read analog ins:
if (Serial.available() > 0) {
// get incoming byte:
inByte = Serial.read();
// read first analog input, divide by 4 to make the range 0-255:
firstSensor = analogRead(A0);
// delay 10ms to let the ADC recover:
delay(10);
// read second analog input, divide by 4 to make the range 0-255:
secondSensor = analogRead(1);
// send sensor values:
Serial.write(firstSensor);
Serial.write(secondSensor);
}
}
void establishContact() {
while (Serial.available() <= 0) {
Serial.print('A'); // send a capital A
delay(300);
}
}
Processing
import processing.video.*;
import processing.serial.*;
Capture cam;
PGraphics img;
// variable globales liées à la communication série
Serial myPort; // The serial port
int[] serialInArray = new int[2]; // Where we'll put what we receive
int serialCount = 0; // A count of how many bytes we receive
int val; // Starting position of the ball
int val2;
boolean firstContact = false; // Whether we've heard from the microcontroller
// variable globale choisie pour la couleur par défaut du traking
color selected = color(145,75,85); // couleur selectionnée
color colorSpot = color(255); // couleur du spot de traking
// variables booleenne permettant de savoir quel capteur est actionné
boolean isTouched_1=false;
boolean isTouched_2=false;
void setup()
{
size(640,480); //taille de l'image
background(255); // couleur de fond
smooth();
cam = new Capture(this,640,480,"Logitech Webcam C100",30); // définir les classes
cam.start(); // commencer la capture de l'image par la webcam
img = createGraphics(640,480,JAVA2D); // crée un "calque" pour dessiner sans altérer le reste de l'image
// String[] devices = Capture.list(); // liste des caméras intégrés / branchés à l'ordi
// println(devices); // affichage de cette liste
printArray(Serial.list()); // affichage des ports séries
String portName = Serial.list()[1]; // définit le port à