Outils pour utilisateurs

Outils du site


wiki:projets:cosm:cosm

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


wiki/projets/cosm/cosm.txt · Dernière modification: 2015/02/02 13:00 (modification externe)