Réalisé par Thomas Guillemet et Charlotte Marabelle
Projet en cours… Réalisation d’une matrice réactive à la pression/flexion sur tissu
Principe intuitif:
– On démarre la matrice en touchant intuitivement le tissu.
– Des lumières et le son apparaissent de manière plus où moins aléatoire en fonction de l’interaction avec le tissu
– On joue avec des variations de sons et de lumières.
FLEXOMATRIX from Studio Objet Augmente on Vimeo.
Concept/Schématisation/Code
CONCEPT
Box matrice
Réalisation d’une matrice en 12 leds. Déclinaisons des champs de possibles ;
Typographies, Animations, Motifs, etc.
Box flexo
Réalisation d’une boite capteur de présence sur la surface en utilisant un flexomètre. + Interactions des deux boites
PRESSION>SON>LUMIÈRE
FLEXO>SPEAKER>MATRICE LEDS
MONTAGE
Pour ce projet nous avons utilisé :
1x Arduino Uno
12 x Leds de couleur ou blanche
1x Speaker
12 x Résistances de 220 Ohm
1 x Résistance de 10 kOhm
1 x Flexomètre
1 x Tissu
1 x Du fil (il est possible de récupérer du fil dans les cables ethernet)
2 x Boite en bois et une feuille de calque
SCHÉMATISATION
• Montage des leds en matrice, 12 leds sur les sorties PWM. avec leurs résistances
• Branchement du flexo sur l’analogue avec une résistance de 10k
• Le speaker sur le 5 volt et le tout relié à la masse
fichier_fritzing
SCHÉMA RAPIDE
CODE
Objectif: Faire interagir la matrice et le son selon la valeur captée puis mapée du flexomètre…
FLEXOMATRIX_evolution_3_CODE_ok
// Objectif faire varier le signale sonore et la matrice (à 12 leds) // en fonction de la valeur du flexometre
//Faire varier un signal sonore en fonction d'un flexomètre
//Faire varier la matrice en fonction d'un flexomètre (matrice=12leds)
#include <Tone.h> //libraries
Tone note; //utiliser la librairie TONE
//Déclare les variables int flexoValeur; int flexoValeurMap;
//Déclare les pins int flexo = A0; int speaker = 13;
//la matrice int led1 = 1; int led2 = 2; int led3 = 3; int led4 = 4; //definition des variables int led5 = 5; int led6 = 6; int led7 = 7; int led8 = 8; int led9 = 9; int led10 = 10; int led11 = 11; int led12 = 12;
//Espace entre les mots int espaceLettre=100; int finMot=1000;
void setup() {
note.begin(13); // captation de l'information par le flexo pinMode (flexo,INPUT);
//Déclare l'état des pins pinMode(speaker, OUTPUT);
pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); pinMode(led7, OUTPUT); pinMode(led8, OUTPUT); pinMode(led9, OUTPUT); pinMode(led10, OUTPUT); pinMode(led11, OUTPUT); pinMode(led12, OUTPUT);
//Déclare le mode de comunication Serial.begin(9600); }
void loop() { //Lit la valeur analogue du capteur flexoValeur = analogRead(flexo);
//Map la valeur du flexomètre pour l'appliquer au speaker flexoValeurMap = map(flexoValeur, 0, 1024, 0, 255);
//Affiche les valeurs dans le serial moniteur Serial.print("flexoValeur ="); Serial.print(flexoValeur); Serial.print("\t"); Serial.print("flexoValeurMap ="); Serial.println(flexoValeurMap);
//TOUT if (flexoValeurMap<133 || flexoValeurMap>104) { debut(); }
////lettre A if (flexoValeurMap<110 && flexoValeurMap>105) { debut(); pression1(); }
//lettre B if (flexoValeurMap<115 && flexoValeurMap>110) { debut(); pression2(); }
//lettre C if (flexoValeurMap<120 && flexoValeurMap>115) { debut(); pression3(); }
//lettre Smile if (flexoValeurMap<125 && flexoValeurMap>120) { debut(); pression4(); }
//lettre Smile normale if (flexoValeurMap<130 && flexoValeurMap>125) { debut(); pression5(); }
//lettre Smile BAD if (flexoValeurMap<132 && flexoValeurMap>130) { debut(); pression6(); }
}
void debut(){ note.stop(); digitalWrite(led1, LOW);// éteindre matrice "tout" digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); digitalWrite(led5, LOW); digitalWrite(led6, LOW); digitalWrite(led7, LOW); digitalWrite(led8, LOW); digitalWrite(led9, LOW); digitalWrite(led10, LOW); digitalWrite(led11, LOW); digitalWrite(led12, LOW); }
void pression1() { digitalWrite(led1, HIGH); // allume matrice "A" digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); digitalWrite(led5, HIGH); digitalWrite(led6, HIGH); digitalWrite(led7, HIGH); digitalWrite(led9, HIGH); digitalWrite(led10, HIGH); digitalWrite(led11, HIGH); digitalWrite(led12, HIGH); note.play(NOTE_C4); }
void pression2() { digitalWrite(led2, HIGH); // allume matrice "B" digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); digitalWrite(led6, HIGH); digitalWrite(led8, HIGH); digitalWrite(led9, HIGH); digitalWrite(led12, HIGH); note.play(NOTE_C5); }
void pression3() { digitalWrite(led1, HIGH); // allume matrice "C" digitalWrite(led2, HIGH); digitalWrite(led6, HIGH); digitalWrite(led9, HIGH); digitalWrite(led10, HIGH); digitalWrite(led11, HIGH); note.play(NOTE_A4); }
void pression4() { digitalWrite(led1, HIGH); // allume matrice "smile sourire" digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); digitalWrite(led6, HIGH); digitalWrite(led10, HIGH); digitalWrite(led12, HIGH); note.play(NOTE_F4); }
void pression5() { digitalWrite(led4, HIGH); // allume matrice "smile langue" digitalWrite(led5, HIGH); digitalWrite(led6, HIGH); digitalWrite(led10, HIGH); digitalWrite(led12, HIGH); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); note.play(NOTE_G4); }
void pression6() { digitalWrite(led1, HIGH); // allume matrice "smile BAD" digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); digitalWrite(led5, HIGH); digitalWrite(led6, HIGH); digitalWrite(led10, HIGH); digitalWrite(led12, HIGH); note.play(NOTE_F4); }
void pression() {
}
ps* les possibilités de variations pour la matrice sont infinies et la video n’est qu’un exemple arbitraire