====== COSM. ======
* Porteur du projet : Marie Menuel
* Date : 10/01/2015
* Contexte : Projet Arduino DSAA 2
{{ :wiki:projets:cosm:img_1875.jpg?direct | 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 =====
{{ :wiki:projets:cosm:img_1866.jpg?direct&300 |Boitier}}
{{ :wiki:projets:cosm:img_1867.jpg?direct&300 |Gros plan sur le ventilateur}}
{{ :wiki:projets:cosm:img_1868.jpg?direct&300 |Gros plan sur les potentiomètres}}
{{ :wiki:projets:cosm:img_1873.jpg?direct&300 |Sortie prise}}
{{ :wiki:projets:cosm:img_1869.jpg?direct&300 |L'intérieur de la boite}}
{{ :wiki:projets:cosm:img_1874.jpg?direct&300 |Les "portants à odeurs" sont disposés devant le ventilateur}}
===== Schéma =====
{{ :wiki:projets:cosm:capture_d_e_cran_2015-01-26_a_11.31.38.png?direct |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;
}
}
}