C'est le printemps ! Fleur.gif

Passerelle.Infini 2025 : Communication non verbale démocratique : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(pistes explorée, abandonnées ou fertiles)
(code)
Ligne 44 : Ligne 44 :
 
==code==
 
==code==
 
<syntaxhighlight lang="Arduino" line>  
 
<syntaxhighlight lang="Arduino" line>  
/* code du projet
+
/*
*/
+
* communication non verbale démocratique
void setup(){
+
*/
//initialisation
+
/* matériel
 +
arduino uno,
 +
potentiomètre
 +
marice de led 16X16
 +
*/
 +
#include <Adafruit_NeoPixel.h>
 +
 
 +
#define broche 9 // broche 9 de l'Arduino UNO sur laquelle est connecté le ruban
 +
 
 +
// Nombre de led du ruban ?
 +
#define nbpixels 256
 +
 
 +
// Lors de la configuration de la bibliothèque NeoPixel,
 +
// nous lui indiquons combien de pixels,
 +
// et quelle broche utiliser pour envoyer des signaux.
 +
Adafruit_NeoPixel pixels(nbpixels, broche, NEO_GRB + NEO_KHZ800);
 +
// pour configurer le ruban :
 +
// nomDuRuban (nombreDePixels, NumeroDeLaBroche, typeDeRuban)
 +
// Les différents types de ruban :
 +
//  NEO_KHZ800  800 KHz bitstream (la plupart des produits Neopixel ou références de LED w/WS2812)
 +
//  NEO_KHZ400  400 KHz (classic 'v1' (pas v2) FLORA pixels, drivers WS2811)
 +
//  NEO_GRB    Pixels cablés pour GRB bitstream (la plupart des produits Neopixel)
 +
//  NEO_RGB    Pixels cablés pour RGB bitstream (v1 FLORA pixels, pas les v2)
 +
//  NEO_RGBW    Pixels cablés pour RGBW bitstream (produits NeoPixel RGBW)
 +
 
 +
#define delai 30 // durée de la pause en millisecondes
 +
 
 +
int brochePotard = A0; // la broche du potentiomètre
 +
int valPot; // valeur meduyrée pour le potentiomètre
 +
int intensiLed; //
 +
 +
void setup() {
 +
  Serial.begin(9600); //démarrae la communication série
 +
  pinMode(brochePotard, INPUT);
 +
  pixels.begin();          // INITIALISE l'object ruban NeoPixel
 +
  pixels.show();            // éteint tout les pixels aussi vite que possible.
 +
  pixels.setBrightness(100); // met la luminosité à 1/5 (max = 255)
 
}
 
}
  
void loop(){
+
 
//programme principal
+
void loop() {
 +
  valPot = analogRead(brochePotard);
 +
  //affichage des valeurs dans la console
 +
  Serial.print("valPot : ");
 +
  Serial.println(brochePotard);
 +
  //intensiLed = map(valPot, 0, 1023, 0, 255);
 +
  //if (0<=valPot<=330){
 +
//
 +
// }
 +
 
 +
  //Serial.print("intensiLed : ");
 +
  //Serial.println(intensiLed);
 +
 
 +
/*
 +
  for(int i=0; i<nbpixels; i++) { // Les pixels sont numérotés de 0 à ...
 +
    pixels.setPixelColor(i, pixels.Color(255, 0, 0)); // on allume la couleur rouge à fond de la ième led
 +
    pixels.setPixelColor(i-1, pixels.Color(200, 0, 0)); // celle d'après est moins allumée
 +
    pixels.setPixelColor(i-2, pixels.Color(150, 0, 0)); // ainsi de suite
 +
    pixels.setPixelColor(i-3, pixels.Color(100, 0, 0));
 +
    pixels.setPixelColor(i-4, pixels.Color(50, 0, 0)); 
 +
    pixels.setPixelColor(i-5, pixels.Color(0, 0, 0)); 
 +
    pixels.show();  // met à jour le ruban
 +
    delay(delai);    // Pause
 +
  }
 +
 
 +
  for(int i=nbpixels; i>-1; i--) { // Les pixels sont numérotés de 0 à ...
 +
    pixels.setPixelColor(i, pixels.Color(0, 0, 0));
 +
    pixels.setPixelColor(i-1, pixels.Color(50, 0, 0));
 +
    pixels.setPixelColor(i-2, pixels.Color(100, 0, 0));
 +
    pixels.setPixelColor(i-3, pixels.Color(150, 0, 0));
 +
    pixels.setPixelColor(i-4, pixels.Color(200, 0, 0)); 
 +
    pixels.setPixelColor(i-5, pixels.Color(255, 0, 0));
 +
    // pour comprendre, quand i vaut 30, la led 25 est au max, la 26 un peu moins, jusque la numéro 29 qui est éteinte
 +
    // ce segment se déplace jusque i=0.
 +
    pixels.show();  // met à jour le ruban
 +
    delay(delai);    // Pause
 +
    }
 +
    */
 +
carreBD();
 +
 
 +
  delay(100);
 +
}
 +
 
 +
void carreBD()
 +
{
 +
  for(int i=0; i<=7; i++) { // Les pixels sont numérotés de 0 à ...
 +
  pixels.setPixelColor(i, pixels.Color(50, 0, 0));
 +
  }
 +
  for(int i=0; i<=7; i++) { // Les pixels sont numérotés de 0 à ...
 +
  pixels.setPixelColor(i, pixels.Color(50, 0, 0));
 +
  }
 +
  for(int i=24; i<=39; i++) { // Les pixels sont numérotés de 0 à ...
 +
  pixels.setPixelColor(i, pixels.Color(50, 0, 0));
 +
  }
 +
    for(int i=56; i<=71; i++) { // Les pixels sont numérotés de 0 à ...
 +
  pixels.setPixelColor(i, pixels.Color(50, 0, 0));
 +
  }
 +
    for(int i=88; i<=103; i++) { // Les pixels sont numérotés de 0 à ...
 +
  pixels.setPixelColor(i, pixels.Color(50, 0, 0));
 +
  }
 +
    for(int i=120; i<=127; i++) { // Les pixels sont numérotés de 0 à ...
 +
  pixels.setPixelColor(i, pixels.Color(50, 0, 0));
 +
  }
 +
 
 +
  pixels.show();  // met à jour le ruban
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>

Version du 21 mars 2025 à 12:07

200px

résumé du projet

Notre projet est un système de communication non verbale destiné aux "groupes-classes". Celui-ci permet aux jeunes de s'exprimer spontanément et anonymement, et de se rendre compte du mood du groupe.

membres du projet

Leds aléatoires.jpg

Bibliographie et webographie sur le projet

Mettre ici des exemples trouvés sur web de projets qui ressemblent et des technologies qui s'en rapprochent ou qui servent d'inspiration.

pistes explorée, abandonnées ou fertiles

Au démarrage du projet nous avons envisagé plusieurs idées et exploré diverses pistes. Notre idée de départ était de fabriquer un objet qui suscite la communication par la découverte de l'objet. Nous voulions créer: _ un objet ludique _ qui nécessite d'être 2 pour fonctionner. _ qui implique une collaboration _ avec pour but l'inclusion. _ qui pourrait fonctionner en tandem. _ qui serait dans l'espace public. _ ce serait objet transportable. Nous avons pensé à conceptualiser: _Un dispositif où il faudrait être 2 pour ouvrir une porte ( portes de tram, porte donnant accès à un endroit de l'espace public- Capucins, MJC...) qui s'adapterait à n'importe quel système d'ouverture de porte. Ce dispositif fonctionnerait avec des aimants ou des capteurs thermiques. _ un dispositif ou système ( pourquoi pas de bascule?) pour descendre où monter les escaliers _ un dispositif pour bancs publics.

Nous avons ensuite repenser notre public cible et redéfini le lieu où notre objet serait utilisé et décidé que cet objet serait dans un foyer, une cantine, un EPAD ou une école. Finalement nous avons choisi les ados comme public cible et de penser notre objet pour un lycée (cantine, foyer de jeune, classe) Nous avons envisager d'imaginer un objet qui s'inscrit dans un rituel: _ un dispositif où il faut être deux pour activer la machine à café/ ou machine à smoothie. _ un dispositif pour fontaine à eau _ un système qui apporte les plateaux repas tout seul au self _ un canapé inclinable où il faut âtre deux et communiquer sans se voir pour l'activer... Après réflexion, nous nous sommes dit que toutes ces idées avait toutes une notions de "tortures" ou du moins de contraintes.

Nous nous sommes donc recentrés sur les caractéristiques des adolescents: _ Les adolescents ont la "flemme". _ C'est une période où on a facilement honte et où on a peur d'être jugé par le groupe. _ Les adolescents ont du mal à exprimer verbalement leurs émotions et il leur est difficile de prendre la parole devant les autres.

De ces réflexions ont émergé l'idée de créer un système qui permettrait aux jeunes d'exprimer anonymement et spontanément leurs émotions de manière non verbale. Dans la classe, on installe un boitier doté de boutons (ou d'un potentiomètre) sur chaque table qui est relié à un tableau de led lumineuses affichées au dessus du tableau.Chaque jeune est libre d'appuyer sur le bouton qui correspond à son mood du moment: content/ pas compris/ pas d'accord et ainsi de s'exprimer anonymement. On aurait ainsi le mood de la classe.

prototype qu'on souhaite réaliser

Notre prototype sera un système composé d'un tableau lumineux associé à des consoles de commandes. Celles-ci afficheront des leds de couleurs différentes avec des formes différentes. Le tableau est composé de 4 sections de 9 leds et 4 consoles avec chacune 4 boutons qui .

code

  1  
  2 /*
  3  * communication non verbale démocratique
  4  */
  5  /* matériel
  6  arduino uno,
  7  potentiomètre
  8  marice de led 16X16
  9  */
 10 #include <Adafruit_NeoPixel.h>
 11 
 12 #define broche 9 // broche 9 de l'Arduino UNO sur laquelle est connecté le ruban
 13 
 14 // Nombre de led du ruban ?
 15 #define nbpixels 256
 16 
 17 // Lors de la configuration de la bibliothèque NeoPixel, 
 18 // nous lui indiquons combien de pixels,
 19 // et quelle broche utiliser pour envoyer des signaux.
 20 Adafruit_NeoPixel pixels(nbpixels, broche, NEO_GRB + NEO_KHZ800);
 21 // pour configurer le ruban :
 22 // nomDuRuban (nombreDePixels, NumeroDeLaBroche, typeDeRuban)
 23 // Les différents types de ruban :
 24 //   NEO_KHZ800  800 KHz bitstream (la plupart des produits Neopixel ou références de LED w/WS2812)
 25 //   NEO_KHZ400  400 KHz (classic 'v1' (pas v2) FLORA pixels, drivers WS2811)
 26 //   NEO_GRB     Pixels cablés pour GRB bitstream (la plupart des produits Neopixel)
 27 //   NEO_RGB     Pixels cablés pour RGB bitstream (v1 FLORA pixels, pas les v2)
 28 //   NEO_RGBW    Pixels cablés pour RGBW bitstream (produits NeoPixel RGBW)
 29 
 30 #define delai 30 // durée de la pause en millisecondes
 31 
 32 int brochePotard = A0; // la broche du potentiomètre
 33 int valPot; // valeur meduyrée pour le potentiomètre
 34 int intensiLed; //
 35  
 36 void setup() {
 37   Serial.begin(9600); //démarrae la communication série
 38   pinMode(brochePotard, INPUT);
 39   pixels.begin();           // INITIALISE l'object ruban NeoPixel
 40   pixels.show();            // éteint tout les pixels aussi vite que possible.
 41   pixels.setBrightness(100); // met la luminosité à 1/5 (max = 255)
 42 }
 43 
 44 
 45 void loop() {
 46   valPot = analogRead(brochePotard);
 47   //affichage des valeurs dans la console
 48   Serial.print("valPot : ");
 49   Serial.println(brochePotard);
 50   //intensiLed = map(valPot, 0, 1023, 0, 255);
 51   //if (0<=valPot<=330){
 52 //
 53  // }
 54 
 55   //Serial.print("intensiLed : ");
 56   //Serial.println(intensiLed);
 57 
 58 /*
 59   for(int i=0; i<nbpixels; i++) { // Les pixels sont numérotés de 0 à ...
 60     pixels.setPixelColor(i, pixels.Color(255, 0, 0)); // on allume la couleur rouge à fond de la ième led 
 61     pixels.setPixelColor(i-1, pixels.Color(200, 0, 0)); // celle d'après est moins allumée
 62     pixels.setPixelColor(i-2, pixels.Color(150, 0, 0)); // ainsi de suite
 63     pixels.setPixelColor(i-3, pixels.Color(100, 0, 0));
 64     pixels.setPixelColor(i-4, pixels.Color(50, 0, 0));  
 65     pixels.setPixelColor(i-5, pixels.Color(0, 0, 0));  
 66     pixels.show();   // met à jour le ruban
 67     delay(delai);    // Pause
 68   }
 69 
 70   for(int i=nbpixels; i>-1; i--) { // Les pixels sont numérotés de 0 à ...
 71     pixels.setPixelColor(i, pixels.Color(0, 0, 0));
 72     pixels.setPixelColor(i-1, pixels.Color(50, 0, 0));
 73     pixels.setPixelColor(i-2, pixels.Color(100, 0, 0)); 
 74     pixels.setPixelColor(i-3, pixels.Color(150, 0, 0));
 75     pixels.setPixelColor(i-4, pixels.Color(200, 0, 0));  
 76     pixels.setPixelColor(i-5, pixels.Color(255, 0, 0)); 
 77     // pour comprendre, quand i vaut 30, la led 25 est au max, la 26 un peu moins, jusque la numéro 29 qui est éteinte
 78     // ce segment se déplace jusque i=0. 
 79     pixels.show();   // met à jour le ruban
 80     delay(delai);    // Pause
 81     }
 82     */
 83 carreBD();
 84 
 85   delay(100);
 86 }
 87 
 88 void carreBD()
 89 {
 90   for(int i=0; i<=7; i++) { // Les pixels sont numérotés de 0 à ...
 91   pixels.setPixelColor(i, pixels.Color(50, 0, 0)); 
 92   }
 93   for(int i=0; i<=7; i++) { // Les pixels sont numérotés de 0 à ...
 94   pixels.setPixelColor(i, pixels.Color(50, 0, 0)); 
 95   }
 96   for(int i=24; i<=39; i++) { // Les pixels sont numérotés de 0 à ...
 97   pixels.setPixelColor(i, pixels.Color(50, 0, 0)); 
 98   }
 99     for(int i=56; i<=71; i++) { // Les pixels sont numérotés de 0 à ...
100   pixels.setPixelColor(i, pixels.Color(50, 0, 0)); 
101   }
102     for(int i=88; i<=103; i++) { // Les pixels sont numérotés de 0 à ...
103   pixels.setPixelColor(i, pixels.Color(50, 0, 0)); 
104   }
105     for(int i=120; i<=127; i++) { // Les pixels sont numérotés de 0 à ...
106   pixels.setPixelColor(i, pixels.Color(50, 0, 0)); 
107   }
108 
109   pixels.show();   // met à jour le ruban
110 }

ne pas toucher en dessous de ce paragraphe