Éclipse

Envoyé par le 27 Jan 2017

Apolline Roccaserra

Camille Jannet

Quy Nguyen

Gonzalo Espinoza

Ce workshop a pour but de redonner une identité  visuelle à un lieu par la lumière.

Le centre vie de Telecom Bretagne est un lieu de rassemblement pour les étudiants, les professeurs et le personnel. Il existe différents espaces distincts : la cafeteria, l’espace travail, l’espace de reunion et deux grandes alcoves qui ne sont investis uniquement pour des expositions.

Les alcoves, délaissées en dehors des expositions constituent le point central de notre travail.

Notre projet Eclipse éclaire avec originalité l’ellipse  ajourée, spécificité architecturale, que l’on retrouve dans le centre de vie.

Elipse vise à animer le lieu, au rythme des musiques et des couleurs. L’objectif est d’occuper les espaces vides, en les rendant conviviaux. La lumière est sensible aux mouvements. Son intensité augmente quand t’on s’en rapproche. Une fois branchée à un système audio, Eclipse change de facette pour devenir lumière d’ambiance.

Matériel Electronique :

– 2 Capteur de luminosité (LDR)

– 2 Capteurs de proximité

– 5 Neo – LEDs

– 1 Résistance 1kΩ

– 2 Arduino avec des câbles et connecteurs USB

– Câbles

Fonctionnement :

L’idée de la performance du projet est basée sur la programmation de 2 arduinos et l’interaction des capteurs de proximité, des capteurs de luminosité, des LEDs et des NEO LEDs.

Le premier arduino a l’idée de connecter 3 circuit avec 10 LEDs de diffèrent couleur chacune, l’idée est que chaque circuit est éclairé selon le rythme d’une chanson. On programme l’arduino en 3 types différents de sons où chacun est associé à chaque différents circuit de LED, avec l’aide d’un ordinateur et une liste de chansons chaque circuit est allumée.

Le deuxième circuit a l’idée d’éclairer la ronde où se trouve la structure avec l’électronique, avec l’aide de deux capteurs de proximité est possible de faire varier la vitesse avec laquelle les couleurs changent contours de l’environnement, même avec l’aide de deux capteurs de luminosité on change si l’intensité des NEO LEDs s’il y a une lumière extérieure naturelle la intensité diminuera et par exemple à la nuit quand vous ne disposez pas d’une intensité de lumière externe la intensité sera plus.

 

maquete-et-electronique maquete-ete-electronique  projet-fini

centre-viecentre-vie1centre-vie2centre-vie3maquete-ordinateurluminosite

Code Lumière et capteur de proximité


#include <Adafruit_NeoPixel.h>
#ifdef _AVR_
#include <avr/power.h>
#endif

#define neoPin        7
#define trigPin_1     13
#define echoPin_1     12
#define trigPin_2     11
#define echoPin_2     10
#define lightPin      A0
#define NUMPIXELS     16

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, neoPin, NEO_GRB + NEO_KHZ800);
long R,G,B;
int delayVal = 50;
long distance1, distance2;
int sensorValue;
float brightness;

void setup() {
#if defined (_AVR_ATtiny85_)
if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
pinMode(trigPin_1, OUTPUT);
pinMode(echoPin_1, INPUT);
pinMode(trigPin_2, OUTPUT);
pinMode(echoPin_2, INPUT);
randomSeed(analogRead(0));
pixels.begin();
Serial.begin(9600);
}

void loop() {
// Generate random values to set colors
R = random(255);
G = random(255);
B = random(255);

// Get distance by proximity sensor
distance1 = getDistance(trigPin_1,echoPin_1);
Serial.print(distance1);
Serial.println(" cm- distance 1");
distance2 = getDistance(trigPin_2,echoPin_2);
Serial.print(distance2);
Serial.println(" cm- distance 2");

// Get light intensity by light sensor
sensorValue = analogRead(lightPin);
brightness = map(sensorValue, 0, 1000, 0, 100);
Serial.print("Sensor Value: ");
Serial.println(sensorValue);
Serial.print("Brightness Value: ");
Serial.println(brightness);

// If proximity works, run NeoPixel
if (checkCondition(distance1) || checkCondition(distance2)) {
for(int i = 0; i < NUMPIXELS; i++){
//      pixels.setPixelColor(i, pixels.Color(R,G,B));
// If light intensity works
pixels.setPixelColor(i, pixels.Color(R*brightness/100,G*brightness/100,B*brightness/100));
pixels.show();
if(distance1 <= distance2) {
if(checkCondition(distance1)) delayVal = distance1;
else  delayVal = distance2;
} else {
if(checkCondition(distance2)) delayVal = distance2;
else  delayVal = distance1;
}
//      Serial.print("value of delay: ");
//      Serial.println(delayVal);
delay(delayVal+10);
//delay(distance2+10);
}
} else {
for(int i = 0; i < NUMPIXELS; i++){
pixels.setPixelColor(i, pixels.Color(0,0,0));
pixels.show();
}
}

}

int getDistance(int trig, int echo) {
long duration, distance;
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
duration = pulseIn(echo, HIGH);
distance = (duration/2) / 29.1;
return distance;
}

int checkCondition(int distance) {
if (distance >= 0 && distance <=50) return 1;
else return 0;
}

Code Lumière et musique


Uploading StarndardFirmata.ino which is example of Firmata library.
Firmata allows us to operate a firmware between arduino and host computer then they are able to communicate together. From now, we dont need to program in arduino but via processing in host computer.
// Code for processing which plays list of music files and decode sound then generate signals to leds
//////////////////////////////////
import processing.serial.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import cc.arduino.*;

Minim minim;
AudioPlayer song,player;
BeatDetect beat;
BeatListener bl;
Arduino arduino;

int ledPin =  5;
int ledPin2 =  6;
int ledPin3 =  7;

float kickSize, snareSize, hatSize;

// Variables for play multiple files
int indexForNames = 0;
String[] names = new String [0];
boolean songIsPaused = true;
static final String EXT = "";
boolean restartedsong = false;
//

void setup() {
size(512, 200, P3D);

minim = new Minim(this);
arduino = new Arduino(this, Arduino.list()[1], 57600);
getSongsFromFolder();

player = minim.loadFile(names[indexForNames]);

beat = new BeatDetect(player.bufferSize(), player.sampleRate());
beat.setSensitivity(10);
bl = new BeatListener(beat, player);

kickSize = snareSize = hatSize = 16;

textFont(createFont("Helvetica", 16));
textAlign(CENTER);

arduino.pinMode(ledPin, Arduino.OUTPUT);
arduino.pinMode(ledPin2, Arduino.OUTPUT);
arduino.pinMode(ledPin3, Arduino.OUTPUT);
}

void draw() {
background(0);
fill(255);
if (songIsPaused == true)
{
player.pause();
}


if(beat.isKick()) {
arduino.digitalWrite(ledPin, Arduino.HIGH);   // set the LED on
kickSize = 32;
delay(70);
}
if(beat.isSnare()) {
arduino.digitalWrite(ledPin2, Arduino.HIGH);   // set the LED on
snareSize = 32;
delay(50);
}
if(beat.isHat()) {
arduino.digitalWrite(ledPin3, Arduino.HIGH);   // set the LED on
hatSize = 32;
delay(70);
}

arduino.digitalWrite(ledPin, Arduino.LOW);    // set the LED off
arduino.digitalWrite(ledPin2, Arduino.LOW);    // set the LED off
arduino.digitalWrite(ledPin3, Arduino.LOW);    // set the LED off
textSize(kickSize);
text("KICK", width/4, height/2);
textSize(snareSize);
text("SNARE", width/2, height/2);
textSize(hatSize);
text("HAT", 3*width/4, height/2);
kickSize = constrain(kickSize * 0.95, 16, 32);
snareSize = constrain(snareSize * 0.95, 16, 32);
hatSize = constrain(hatSize * 0.95, 16, 32);

if (!player.isPlaying() && !songIsPaused) {
indexForNames++;
if (indexForNames>=names.length) {
indexForNames=0;
//println ("restarting list of songs -----------");
}
player = minim.loadFile(names[indexForNames]+EXT);
player.play();
//println ("");
//println ("");
//println ("Just loaded song "+names[indexForNames]+EXT + " ("+str(indexForNames+1)+" of "+names.length+").");
beat = new BeatDetect(player.bufferSize(), player.sampleRate());
beat.setSensitivity(10);
bl = new BeatListener(beat, player);
}
}

void stop() {
// always close Minim audio classes when you are finished with them
song.close();
// always stop Minim before exiting
minim.stop();
// this closes the sketch
super.stop();
}

void getSongsFromFolder() {

//
File dir = new File( dataPath("") );
//println ("dir "+dir+"\n");
//
File[] namesFiles2 = dir.listFiles();

if (namesFiles2==null) {
println("no file found - ###############++++++++");
exit();
}
else {
String [] namesFiles = new String [0];
if (namesFiles2!=null) {
// check all found files if they are ok
for (int i = 0; i < namesFiles2.length; i++) {
// if ok
if (fileIsOK(namesFiles2[i].getAbsolutePath() )) {
// build new array
names = append (names, namesFiles2[i].getAbsolutePath() );
print ( namesFiles2[i].getAbsolutePath() );
} // if
else
{
// println ("skipped "+namesFiles2[i]);
} // else
} // for
println("\n\n");
} // if
//
println("Found "+ names.length + " songs.");
// println(namesFiles);
//
if (names.length==0) {
println ("no song ################-------------------");
}
else
{
//
// println (names);
}  // else
}
//
}

boolean fileIsOK (String name) {
// AudioPlayer: playback of WAV, AIFF, AU, SND, and MP3 files.
if (name==null) {
return false; // not ok
}
name=trim(name);
if (name.equals("")) return false;
if (name.substring (  name.length()-4 ).equals (".MP3")  ) return true;
if (name.substring (  name.length()-4 ).equals (".mp3")  ) return true;
if (name.substring (  name.length()-4 ).equals (".WAV")  ) return true;
if (name.substring (  name.length()-4 ).equals (".wav")  ) return true;
if (name.substring (  name.length()-5 ).equals (".aiff") ) return true;
if (name.substring (  name.length()-3 ).equals (".au")   ) return true;
if (name.substring (  name.length()-4 ).equals (".SND")  ) return true;
if (name.substring (  name.length()-4 ).equals (".snd")  ) return true;
// when no extension matched:
return false; // not ok
}

void keyPressed()
{
if ( key == ' ' )
{
songIsPaused = !songIsPaused;
}

// jump to End
else if ( keyCode == RIGHT )
{
int position =  player.length();
player.cue( position );
println ("");
println ("");
println ("");
println ("Skipped to next song");
}

else if (keyCode == LEFT)
{
restartedsong = true;
int position =  0;
player.cue(position);
println ("");
println ("");
println ("");
println ("Jumped to the beggining of " + names[indexForNames]);
}

if (songIsPaused == true)
{

println ("");
println ("");
println ("PAUSED - Press the space bar to continue!");
}

else {
player.play();

}
}

class BeatListener implements AudioListener
{
private BeatDetect beat;
private AudioPlayer source;

BeatListener(BeatDetect beat, AudioPlayer source)
{
this.source = source;
this.source.addListener(this);
this.beat = beat;
}

void samples(float[] samps)
{
beat.detect(source.mix);
}

void samples(float[] sampsL, float[] sampsR)
{
beat.detect(source.mix);
}
}

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *