====== 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; } } }