COSM.

Porteur du projet : Marie Menuel

Date : 10/01/2015

Contexte : Projet Arduino DSAA 2

Vue d'ensemble du projet

Description

COSM., pour Color. Smell. est un diffuseur d'odeurs relié à un outil de création d'univers colorés. ( via deux potentiomètres ).

========

Deux potentiomètre sont branchés sur la carte Arduino. Le premier permet de faire varier la quantité de rouge sur l'écran, et le deuxième fait varier la quantité de vert. Le bleu est fixé arbitrairement, afin de pouvoir profiter d'un large spectre lumineux.

Un ventilateur d'ordinateur 5V ( le voltage maximum supporté par la carte Arduino ) a été rajouté.

( Pour plus d'informations sur les branchements, se référer au chapitre “Schéma” )

On vient positionner des languettes imprégnées de différentes odeurs sur les portants en métal et bois devant le ventilateur et l'odeur se diffuse.

question (ACC) : n'y-t-il pas une fracture entre le caractère explicite du dispositif électronique et la dimension très archaïque de la manipulation de feuilles imprégnées placées au vent? Pourquoi ne pas utiliser les diffuseurs actuels qui associent d'ailleurs pour certains des couleurs et des odeurs? Qu'apportez-vous dans cette installation?

Matériel

-1 carte Arduino

-1 Breadboard

-2 Potentiomètres rotatifs

-1 ventilateur 5V

-9 fils électriques

-Plaques de contreplaqué

-Fils de cuivre

-Pinces à dessin

-Languettes de papier imprégnées de parfums/ odeurs

Photos

Boitier

Gros plan sur le ventilateur

Gros plan sur les potentiomètres

Sortie prise

L'intérieur de la boite

Les "portants à odeurs" sont disposés devant le ventilateur

Schéma

Schéma avec Fritzing

Le moteur à été remplacé par un ventilateur 5V

Schéma réalisé avec fritzing.org

Codes

ARDUINO

int firstSensor = 0; // Premier capteur analogique
int secondSensor = 0; // second capteur analogique
int thirdSensor = 0; // capteur digital
int inByte = 0;
void setup()
{
// Faire démarrer le port série 9600 bps:
Serial.begin(9600);
while (!Serial) {
; // Le port série se connecte
}
pinMode(2, INPUT); // capteur digital
establishContact(); // Envoyer un octet pour établir un contact en attendant une réponse
}
void loop()
{
if (Serial.available() > 0) {
inByte = Serial.read();
firstSensor = analogRead(A0)/4;
delay(10);
secondSensor = analogRead(1)/4;
thirdSensor = map(digitalRead(2), 0, 1, 0, 255);
// ENVOYER LES VALEURS DES CAPTEURS
Serial.write(firstSensor);
Serial.write(secondSensor);
Serial.write(thirdSensor);
}
}
void establishContact() {
while (Serial.available() <= 0) {
Serial.print('A');
delay(300);
}
}

PROCESSING

// Fonction pour envoyer et reçevoir des données
import processing.serial.*;
int bgcolor;	// Fond
int fgcolor;	// Remplir couleur
Serial myPort; // Le port serie
int[] serialInArray = new int[3]; // On vont aller les ocets reçus
int serialCount = 0; // Combien d'octets on va reçevoir
int xpos, ypos;	// Les potentiomètres
boolean firstContact = false; // Etablir la connexion avec Arduino
void setup() {
size(1200, 700); // Taille du "cadre"
background (255); // Fond blanc
noStroke(); // PAS de bordures
// Mise en place des potentiometres
xpos = width/6;
ypos = height/6;
String portName = Serial.list()[5];
myPort = new Serial(this, portName, 9600);
}
void draw() {
// Ceci dessine un rectangle, rempli par des couleurs définis par les potentiomètres
fill (ypos,xpos,100); // Le rouge et le vert sont définis par les deux potentiomètres
rect ( 0,0,1200,700); // La taille du rectangle coloré
}
// Envoyer des données vers Arduino
void serialEvent(Serial myPort) {
// Lire les octets depuis le port série:
int inByte = myPort.read();
if (firstContact == false) {
if (inByte == 'A') {
myPort.clear();
firstContact = true;
myPort.write('A');
}
}
else {
serialInArray[serialCount] = inByte;
serialCount++;
// Si on a 2 octets:
if (serialCount > 2 ) {
xpos = serialInArray[0];
ypos = serialInArray[1];
// Lancement des valeurs:
println(xpos + "\t" + ypos + "\t" + fgcolor);
myPort.write('A');
// Relancer serialCount:
serialCount = 0;
}
}
}