FLEXOMATRIX

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 et ses possibilités

 

Box matrice

Réalisation d’une matrice en 12 leds. Déclinaisons des champs de possibles ;

Typographies, Animations, Motifs, etc.

 

BOX flexometre

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

schématisation rapide

 

CODE

Objectif: Faire interagir la matrice et le son selon la valeur captée puis mapée du flexomètre…

FLEXOMATRIX_CODE_BASE

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