Table des matières

Athleta'Graphie

Aire de jeu éphémère

Description

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

Photographies

Vidéo

Premières expérimentations sur écran.

Prochaine étape : remplacer l'écran par un vidéo-projecteur.

Expérimentation 1

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 à